Overview
๋ค์ด๊ฐ๋ฉฐ
Kubernetes๋ ์์ฑ๋ Pod๋ค์ ๋ํ์ฌ Statelessํ๊ฒ ๊ด๋ฆฌ๋์ด์ผํ๋ ๊ฒ์ด ๊ธฐ๋ณธ ๊ด๋ฆฌ ์์น์ด๋ค.
๊ทธ๋ ๊ธฐ์ STDOUT/STDERR๋ฑ SYSOUT์ ํํ๋ก ์์ด๋ ๋ก๊ทธ๋ค์ ๋
ธ๋๋ด์ ์ ์ฅํ๋ ๋ฐฉ์์ด ์๋ ์ค์ ์ง์ค์ ๋ก๊น
์์คํ
์ ๊ตฌ์ถํด์ผ ํ๋ค.
Pod๋ก๋ถํฐ ์์ ๋ ๋ก๊ทธ๋ฅผ Fluent-bit๋ฅผ ํตํด AWS Kinesis๋ก ์ ์กํ๊ณ , ์์ ๋ ๋ก๊ทธ ๋ฐ์ดํฐ๋ฅผ AWS OpenSearch์ ElasticSearch๊ฐ ๋ฐ๊ฒ ๋๊ณ Kibana๋ฅผ ํตํด ์๊ฐํํ๊ฒ ๋๋ค.
What Is EFK Stack?
ELF Stack
ELK Stack์ ElasticSearch + Logstash + Kibana์ ๋ก๊ทธ ๋ถ์ ํ๋ก์ธ์ค๋ฅผ ์ง์นญํ๋ค.
ํ์ง๋ง ์ด ์ค Logstash๋ณด๋ค fluent-bit์ด ์ฟ ๋ฒ๋คํฐ์ค ํ๊ฒฝ์์ ์ต์ ํ ๋์ด์๋ ์์คํ
๊ตฌ์ถ ์ ๋ง์ด ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ Fluent-bit๋ฅผ ์ ํํ์๋ค.
EFK Stack
Fluent-bit: ๋ก๊ทธ๋ฅผ ์์งํด์Elasticsearch๋ก ์ ๋ฌElasticsearch:Fluentd๋ก๋ถํฐ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ ๋ฐ ๋ถ์ํ์ฌ ์ ์ฅKibana:Elasticsearch์ ๋น ๋ฅธ ๊ฒ์๋ฅ๋ ฅ์ ํตํด ๋ฐ์ดํฐ ์๊ฐํ
์ฌ๋ด EFK Stack
k8s๋ด ํ๋๋ค์ ๋ก๊ทธ๋ฅผ ์์งํ๋ fluent-bit๊ฐ ๋
ธ๋๋ณ๋ก DaemonSet์ ์กด์ฌํ๊ณ fluent-bit์์ AWS Kinesis Datafirehose๋ฅผ ํตํด AWS OpenSearch์ ElasticSearch๋ก ์ ์กํ๋ฉฐ Kibana๋ฅผ ํตํด ์๊ฐํ ํ๊ฒ ๊ตฌ์ฑํ์๋ค.
Set a EFK Stack
Install Fluent-bit
## create k8s namespace
kubectl create ns logging๋จผ์ loggging ์ ์ฉ namespace๋ฅผ ์์ฑํ๋ค.
## helm repo add
helm repo add fluent https://fluent.github.io/helm-charts๊ทธ ํ helm์ ํตํด fluent chart๋ฅผ ๋ค์ด๋ก๋ํ๋ค.
## helm install
helm upgrade --install fluent-bit fluent/fluent-bit -n loggingk8s cluster์ ํด๋น helm repo๋ฅผ logging namespace์ ์ค์นํฉ๋๋ค.
Result
Set AWS Kinesis Data Firehose
AWS Kinesis Data Firehose๋ฅผ ์์ฑํ๊ธฐ ์ AWS Opensearch Domain๊ณผ ๋ฐฑ์ ์ฉ AWS S3 Buckect์ ์์ฑํด์ผ ํ๋ค.
์ผ์ชฝ ์๋จ์ ์ ์ก์คํธ๋ฆผ ์์ฑ์ ํด๋ฆญํ๋ค.
์์ค ๋ฐ ๋์์ ์ ํํ๋ค.
- ์์ค :
Direct PUT - ๋์ :
Amazon OpenSearch Service
๋ฏธ๋ฆฌ ์์ฑํด๋ AWS OpenSearch Domain์ ์ค์ ํ๊ณ ํนํ, index ์ด๋ฆ์ ์ค์ ํ๋ค.
ํด๋น index ์ด๋ฆ๊ณผ ๊ฐ์ fluent-bit๋ก ๋ถํฐ ์์ง๋ pod๋ค์ ๋ก๊ทธ๊ฐ ์์ง๋๋ค.
๋ฏธ๋ฆฌ ์์ฑํด๋ ๋ฐฑ์
์ฉ AWS S3 Bucket์ ์ค์ ํ๋ค.
ํด๋น AWS S3 Bucket์๋ ์ค์ ํด๋์ ๋ฒํผ์ ํ์ผ ํํ๋ก log๋ค์ด ์์ง๋๋ค.
Set Fluent-bit Configmap
apiVersion: v1
data:
fluent-bit.conf: |
[SERVICE]
Parsers_File parsers.conf
HTTP_Server On
HTTP_Listen 0.0.0.0
HTTP_Port 2020
[INPUT]
Name tail
Path /var/log/containers/front-end-app-*.log
DB /var/log/flb_kube.db
Mem_Buf_Limit 10MB
Refresh_Interval 10
Tag front-end
Parser docker
[FILTER]
Name record_modifier
Match front-end
Whitelist_key log
[OUTPUT]
Name kinesis_firehose
Match front-end
region ap-northeast-2
delivery_stream kinesis-app
...
kind: ConfigMap
metadata:
creationTimestamp: "2022-05-30T05:43:33Z"
labels:
k8s-app: fluent-bit
name: fluent-bit
namespace: logging์์ ๋ด์ฉ์ค [INPUT] , [FILTER], [OUTPUT] ์ ๋ด์ฉ์ ์์ ํ๋ค.
INPUT: ๋ก๊ทธ๋ฅผ ์์งํapp log path๋ฅผ ์์ฑํ๋ค.FILTER: ํด๋นINPUT์Type์ ์์ฑํ๋ค.OUTPUT: ์์ง๋ ๋ก๊ทธ๋ค์ ์ด๋ ๊ณณ์ผ๋ก ์ ์กํ ์ง ์ค์ ํฉ๋๋ค. (์ฌ๊ธฐ์๋AWS Kinesis delivery_stram์ ์์ฑํ๋ค.)
Result
์ด์ AWS Kinesis๋ก ์ ์ํ์ฌ ํด๋น DataFirehose์์ ๋ชจ๋ํฐ๋ง ํญ์์ ํ์ธํด๋ณด๋ฉด ์์ ์ฌ์ง ์ฒ๋ผ ์ฑ๊ณต ๊ทธ๋ํ๊ฐ ์ฐํ๋๊ฑธ ๋ณผ ์ ์๋ค.
Finish
์์ ๊ณผ์ ์ ๋ชจ๋ ๋ง์ณค์ผ๋ฉด AWS OpenSearch Domain์ผ๋ก ์ ์ํ์ฌ kibana๋ฅผ ๋ณด์.
Index patterns์ค์ ์ ๋จผ์ ํ๊ณkibana์Discover๋ฉ๋ด์ ์ ์ํ๋ฉด ์ ์์ ์ผ๋ก ๋ก๊ทธ๊ฐ ์์ด๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.