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 logging
k8s 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
๋ฉ๋ด์ ์ ์ํ๋ฉด ์ ์์ ์ผ๋ก ๋ก๊ทธ๊ฐ ์์ด๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.