์ค๋๋ ์๋ ํด๋ฌ์คํฐ์ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์์คํ ๊ตฌ์ฑ ์์ ๋ชจ๋์ ๋ํ ๋ก๊ทธ๋ฅผ ์ ์ฅํ๋ ELK ์คํ์ด ์๋ Kubernetes ๊ธฐ๋ฐ ํ๋ก์ ํธ๋ฅผ ์์ํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค. ์ค์ ๋ก๋ Logstash ๋์ Fluentd์ ํจ๊ป EFK ์คํ์ ์ฌ์ฉํฉ๋๋ค.
Fluentd๋ ์ ์ ๋ ๋ง์ ์ธ๊ธฐ๋ฅผ ์ป๊ณ ์๋ ํ๋์ ์ธ ๋ฒ์ฉ ๋ก๊ทธ ์์ง๊ธฐ์ด๋ฉฐ Cloud Native Computing Foundation์ ํฉ๋ฅํ์ต๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก Fluentd์ ๊ฐ๋ฐ ๋ฒกํฐ๊ฐ Kubernetes์ ํจ๊ป ์ฌ์ฉํ๋ ๋ฐ ์ค์ ์ ๋๋ ์ด์ ์ ๋๋ค.
Logstash ๋์ Fluentd๋ฅผ ์ฌ์ฉํ๋ค๋ ์ฌ์ค์ด ์ํํธ์จ์ด ํจํค์ง์ ์ผ๋ฐ์ ์ธ ๋ณธ์ง์ ๋ฐ๊พธ์ง๋ ์์ต๋๋ค. ๊ทธ๋ฌ๋ Fluentd๋ ๋ค์ฌ๋ค๋ฅํจ์ผ๋ก ์ธํ ๊ณ ์ ํ ๋์์ค๊ฐ ํน์ง์ ๋๋ค.
์๋ฅผ ๋ค์ด, ๋ก๊น ๊ฐ๋๊ฐ ๋์ ๋ฐ์ ํ๋ก์ ํธ์์ EFK๋ฅผ ์ฌ์ฉํ๊ธฐ ์์ํ์ ๋ Kibana์์ ์ผ๋ถ ๋ฉ์์ง๊ฐ ์ฌ๋ฌ ๋ฒ ๋ฐ๋ณต์ ์ผ๋ก ํ์๋๋ค๋ ์ฌ์ค์ ์ง๋ฉดํ์ต๋๋ค. ์ด๋ฒ ํฌ์คํ ์์๋ ์ด๋ฐ ํ์์ด ๋ฐ์ํ๋ ์ด์ ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ํด ์๋ ค๋๋ฆฌ๊ฒ ์ต๋๋ค.
๋ฌธ์ ๋ณต์ ๋ฌธ์
์ฐ๋ฆฌ ํ๋ก์ ํธ์์ Fluentd๋ DaemonSet(Kubernetes ํด๋ฌ์คํฐ์ ๊ฐ ๋ ธ๋์ ์๋ ํ๋์ ์ธ์คํด์ค์์ ์๋์ผ๋ก ์์๋จ)์ผ๋ก ๋ฐฐํฌ๋๊ณ /var/log/containers์์ stdout ์ปจํ ์ด๋ ๋ก๊ทธ๋ฅผ ๋ชจ๋ํฐ๋งํฉ๋๋ค. ์์ง ๋ฐ ์ฒ๋ฆฌ ํ JSON ๋ฌธ์ ํ์์ ๋ก๊ทธ๋ ํ๋ก์ ํธ ๊ท๋ชจ์ ์ฑ๋ฅ ๋ฐ ๋ด๊ฒฐํจ์ฑ์ ๋ํ ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ํด๋ฌ์คํฐ ๋๋ ๋ ๋ฆฝ ์คํํ ํ์์ผ๋ก ์์ฑ๋์ด ElasticSearch๋ก ์ ์ก๋ฉ๋๋ค. Kibana๋ ๊ทธ๋ํฝ ์ธํฐํ์ด์ค๋ก ์ฌ์ฉ๋ฉ๋๋ค.
์ถ๋ ฅ ๋ฒํผ๋ง ํ๋ฌ๊ทธ์ธ๊ณผ ํจ๊ป Fluentd๋ฅผ ์ฌ์ฉํ ๋ ElasticSearch์ ์ผ๋ถ ๋ฌธ์์ ๋ด์ฉ์ด ์ ํํ ๋์ผํ๊ณ ์๋ณ์๋ง ๋ค๋ฅธ ์ํฉ์ด ๋ฐ์ํ์ต๋๋ค. Nginx ๋ก๊ทธ๋ฅผ ์๋ก ์ฌ์ฉํ์ฌ ์ด๊ฒ์ด ๋ฉ์์ง ๋ฐ๋ณต์ธ์ง ํ์ธํ ์ ์์ต๋๋ค. ๋ก๊ทธ ํ์ผ์๋ ๋ค์ ๋ฉ์์ง๊ฐ ๋จ์ผ ๋ณต์ฌ๋ณธ์ผ๋ก ์กด์ฌํฉ๋๋ค.
127.0.0.1 192.168.0.1 - [28/Feb/2013:12:00:00 +0900] "GET / HTTP/1.1" 200 777 "-" "Opera/12.0" -
๊ทธ๋ฌ๋ ElasticSearch์๋ ์ด ๋ฉ์์ง๊ฐ ํฌํจ๋ ์ฌ๋ฌ ๋ฌธ์๊ฐ ์์ต๋๋ค.
{
"_index": "test-custom-prod-example-2020.01.02",
"_type": "_doc",
"_id": "HgGl_nIBR8C-2_33RlQV",
"_version": 1,
"_score": 0,
"_source": {
"service": "test-custom-prod-example",
"container_name": "nginx",
"namespace": "test-prod",
"@timestamp": "2020-01-14T05:29:47.599052886 00:00",
"log": "127.0.0.1 192.168.0.1 - [28/Feb/2013:12:00:00 0900] "GET / HTTP/1.1" 200 777 "-" "Opera/12.0" -",
"tag": "custom-log"
}
}
{
"_index": "test-custom-prod-example-2020.01.02",
"_type": "_doc",
"_id": "IgGm_nIBR8C-2_33e2ST",
"_version": 1,
"_score": 0,
"_source": {
"service": "test-custom-prod-example",
"container_name": "nginx",
"namespace": "test-prod",
"@timestamp": "2020-01-14T05:29:47.599052886 00:00",
"log": "127.0.0.1 192.168.0.1 - [28/Feb/2013:12:00:00 0900] "GET / HTTP/1.1" 200 777 "-" "Opera/12.0" -",
"tag": "custom-log"
}
}
๋ํ ๋ ๋ฒ ์ด์ ๋ฐ๋ณต๋ ์๋ ์์ต๋๋ค.
Fluentd ๋ก๊ทธ์์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋์ ๋ค์ ๋ด์ฉ์ด ํฌํจ๋ ๋ง์ ๊ฒฝ๊ณ ๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
2020-01-16 01:46:46 +0000 [warn]: [test-prod] failed to flush the buffer. retry_time=4 next_retry_seconds=2020-01-16 01:46:53 +0000 chunk="59c37fc3fb320608692c352802b973ce" error_class=Fluent::Plugin::ElasticsearchOutput::RecoverableRequestFailure error="could not push logs to Elasticsearch cluster ({:host=>"elasticsearch", :port=>9200, :scheme=>"http", :user=>"elastic", :password=>"obfuscated"}): read timeout reached"
์ด๋ฌํ ๊ฒฝ๊ณ ๋ ElasticSearch๊ฐ request_timeout ๋งค๊ฐ๋ณ์์ ์ง์ ๋ ์๊ฐ ๋ด์ ์์ฒญ์ ๋ํ ์๋ต์ ๋ฐํํ ์ ์์ ๋ ๋ฐ์ํ๋ฉฐ, ์ด๋ก ์ธํด ์ ๋ฌ๋ ๋ฒํผ ์กฐ๊ฐ์ ์ง์ธ ์ ์์ต๋๋ค. ๊ทธ ํ Fluentd๋ ๋ฒํผ ์กฐ๊ฐ์ ElasticSearch๋ก ๋ค์ ๋ณด๋ด๋ ค๊ณ ์๋ํ๊ณ ์์์ ํ์๋งํผ ์๋ํ ํ์ ์์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋ฉ๋๋ค.
2020-01-16 01:47:05 +0000 [warn]: [test-prod] retry succeeded. chunk_id="59c37fc3fb320608692c352802b973ce"
2020-01-16 01:47:05 +0000 [warn]: [test-prod] retry succeeded. chunk_id="59c37fad241ab300518b936e27200747"
2020-01-16 01:47:05 +0000 [warn]: [test-dev] retry succeeded. chunk_id="59c37fc11f7ab707ca5de72a88321cc2"
2020-01-16 01:47:05 +0000 [warn]: [test-dev] retry succeeded. chunk_id="59c37fb5adb70c06e649d8c108318c9b"
2020-01-16 01:47:15 +0000 [warn]: [kube-system] retry succeeded. chunk_id="59c37f63a9046e6dff7e9987729be66f"
๊ทธ๋ฌ๋ ElasticSearch๋ ์ ์ก๋ ๊ฐ ๋ฒํผ ์กฐ๊ฐ์ ๊ณ ์ ํ ๊ฒ์ผ๋ก ์ฒ๋ฆฌํ๊ณ ์ธ๋ฑ์ฑ ์ค์ ๊ณ ์ ํ _id ํ๋ ๊ฐ์ ํ ๋นํฉ๋๋ค. ์ด๊ฒ์ด ๋ฉ์์ง ์ฌ๋ณธ์ด ๋ํ๋๋ ๋ฐฉ์์ ๋๋ค.
Kibana์์๋ ๋ค์๊ณผ ๊ฐ์ด ๋ณด์ ๋๋ค.
์๋ฃจ์
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ช ๊ฐ์ง ์ต์ ์ด ์์ต๋๋ค. ๊ทธ ์ค ํ๋๋ ๊ฐ ๋ฌธ์์ ๋ํ ๊ณ ์ ํ ํด์๋ฅผ ์์ฑํ๊ธฐ ์ํด fluent-plugin-elasticsearch ํ๋ฌ๊ทธ์ธ์ ๋ด์ฅ๋ ๋ฉ์ปค๋์ฆ์ ๋๋ค. ์ด ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ๋ฉด ElasticSearch๋ ์ ๋ฌ ๋จ๊ณ์์ ๋ฐ๋ณต์ ์ธ์ํ๊ณ ๋ฌธ์ ์ค๋ณต์ ๋ฐฉ์งํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด ๋ฌธ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์กฐ์ฌ์ ์ด๋ ค์์ ๊ฒช๊ณ ์๊ฐ ์ ํ์ด ๋ถ์กฑํ์ฌ ์ค๋ฅ๋ฅผ ์ ๊ฑฐํ์ง ๋ชปํ๋ฏ๋ก ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉ์ ํฌ๊ธฐํ์ต๋๋ค.
๋จ๊ธฐ์ ์ธ ๋คํธ์ํฌ ๋ฌธ์ ๋๋ ๋ก๊น ๊ฐ๋ ์ฆ๊ฐ ์ ๋ก๊ทธ ์์ค์ ๋ฐฉ์งํ๊ธฐ ์ํด Fluentd ์ถ๋ ฅ์ ๋ฒํผ๋ง ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํฉ๋๋ค. ์ด๋ค ์ด์ ๋ก ElasticSearch๊ฐ ๋ฌธ์๋ฅผ ์ธ๋ฑ์ค์ ์ฆ์ ์ธ ์ ์๋ ๊ฒฝ์ฐ ํด๋น ๋ฌธ์๋ ๋๊ธฐ์ด์ ์ถ๊ฐ๋์ด ๋์คํฌ์ ์ ์ฅ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ์์์ ์ค๋ช ํ ์ค๋ฅ๋ฅผ ์ ๋ฐํ๋ ๋ฌธ์ ์ ์์ธ์ ์ ๊ฑฐํ๋ ค๋ฉด Fluentd ์ถ๋ ฅ ๋ฒํผ์ ํฌ๊ธฐ๊ฐ ์ถฉ๋ถํ๊ณ ๋ฒํผ๋ง ๋งค๊ฐ ๋ณ์์ ๋ํ ์ฌ๋ฐ๋ฅธ ๊ฐ์ ์ค์ ํด์ผ ํฉ๋๋ค. ๋์์ ํ ๋น๋ ์๊ฐ ๋ด์ ํด๋ฆฌ์ด๋๋๋ก ๊ด๋ฆฌํฉ๋๋ค.
์๋์ ์ค๋ช ๋ ๋งค๊ฐ๋ณ์์ ๊ฐ์ ์๋น์ค๋ณ๋ก ๋ก๊ทธ์ ๋ฉ์์ง๋ฅผ ์ฐ๋ ๊ฐ๋, ๋์คํฌ ์์คํ ์ฑ๋ฅ, ๋คํธ์ํฌ ๋ฑ ์ฌ๋ฌ ์์์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ฏ๋ก ์ถ๋ ฅ ํ๋ฌ๊ทธ์ธ์์ ๋ฒํผ๋ง์ ์ฌ์ฉํ๋ ๊ฐ ํน์ ์ฌ๋ก๋ง๋ค ๊ฐ๋ณ์ ์ด๋ผ๋ ์ ์ ์ฃผ๋ชฉํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ์ฑ๋ ๋ก๋ ๋ฐ ๋์ญํญ. ๋ฐ๋ผ์ ๋ฌด์์ ๊ธด ๊ฒ์์ ํผํ๊ณ ๊ฐ๋ณ ์ฌ๋ก์ ์ ํฉํ๋ฉด์๋ ์ค๋ณต๋์ง ์๋ ๋ฒํผ ์ค์ ์ ์ป์ผ๋ ค๋ฉด Fluentd๊ฐ ์์ ์ค์ ๋ก๊ทธ์ ๊ธฐ๋กํ๋ ๋๋ฒ๊น ์ ๋ณด๋ฅผ ์ฌ์ฉํ์ฌ ๋น๊ต์ ๋น ๋ฅด๊ฒ ์ฌ๋ฐ๋ฅธ ๊ฐ์ ์ป์ ์ ์์ต๋๋ค.
๋ฌธ์ ๊ฐ ๊ธฐ๋ก๋ ๋น์ ๊ตฌ์ฑ์ ๋ค์๊ณผ ๊ฐ์์ต๋๋ค.
<buffer>
@type file
path /var/log/fluentd-buffers/kubernetes.test.buffer
flush_mode interval
retry_type exponential_backoff
flush_thread_count 2
flush_interval 5s
retry_forever
retry_max_interval 30
chunk_limit_size 8M
queue_limit_length 8
overflow_action block
</buffer>
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋ ๋ค์ ๋งค๊ฐ๋ณ์์ ๊ฐ์ ์๋์ผ๋ก ์ ํํ์ต๋๋ค.
Chunk_limit_size โ ๋ฒํผ์ ๋ฉ์์ง๊ฐ ๋ถํ ๋๋ ์ฒญํฌ์ ํฌ๊ธฐ์
๋๋ค.
- flash_interval โ ๋ฒํผ๊ฐ ์ง์์ง ํ์ ์๊ฐ ๊ฐ๊ฒฉ์ ๋๋ค.
- queue_limit_length โ ๋๊ธฐ์ด์ ์ต๋ ์ฒญํฌ ์์ ๋๋ค.
- request_timeout์ Fluentd์ ElasticSearch ๊ฐ์ ์ฐ๊ฒฐ์ด ์ค์ ๋๋ ์๊ฐ์ ๋๋ค.
์ด ๋ฒํผ ํฌ๊ธฐ๋ ๋งค๊ฐ๋ณ์ queue_limit_length์ Chunk_limit_size๋ฅผ ๊ณฑํ์ฌ ๊ณ์ฐํ ์ ์์ต๋๋ค. ์ด๋ "๊ฐ๊ฐ ์ฃผ์ด์ง ํฌ๊ธฐ๋ฅผ ๊ฐ๋ ๋๊ธฐ์ด์ ์ต๋ ์ฒญํฌ ์"๋ก ํด์๋ ์ ์์ต๋๋ค. ๋ฒํผ ํฌ๊ธฐ๊ฐ ์ถฉ๋ถํ์ง ์์ผ๋ฉด ๋ก๊ทธ์ ๋ค์ ๊ฒฝ๊ณ ๊ฐ ํ์๋ฉ๋๋ค.
2020-01-21 10:22:57 +0000 [warn]: [test-prod] failed to write data into buffer by buffer overflow action=:block
์ด๋ ํ ๋น๋ ์๊ฐ ๋ด์ ๋ฒํผ๋ฅผ ์ง์ธ ์๊ฐ์ด ์์ผ๋ฉฐ, ์ ์ฒด ๋ฒํผ์ ๋ค์ด๊ฐ๋ ๋ฐ์ดํฐ๊ฐ ์ฐจ๋จ๋์ด ๋ก๊ทธ์ ์ผ๋ถ๊ฐ ์์ค๋๋ค๋ ์๋ฏธ์ ๋๋ค.
ํ์ ์๋ ๊ฐ ์ฒญํฌ์ ํฌ๊ธฐ๋ฅผ ๋๋ฆฌ๊ฑฐ๋ ํ์ ์์ ์ ์๋ ์ฒญํฌ ์๋ฅผ ๋๋ฆฌ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ๋ฒํผ๋ฅผ ๋๋ฆด ์ ์์ต๋๋ค.
์ฒญํฌ ํฌ๊ธฐ(chunk_limit_size)๋ฅผ 32MB ์ด์์ผ๋ก ์ค์ ํ๋ฉด ๋ค์ด์ค๋ ํจํท์ด ๋๋ฌด ํฌ๊ธฐ ๋๋ฌธ์ ElasticSeacrh๋ ์ด๋ฅผ ํ์ฉํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ฒํผ๋ฅผ ๋ ๋๋ ค์ผ ํ๋ค๋ฉด ์ต๋ ํ ๊ธธ์ด์ธ queue_limit_length๋ฅผ ๋๋ฆฌ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ฒํผ ์ค๋ฒํ๋ก๊ฐ ๋ฉ์ถ๊ณ ์๊ฐ ์ด๊ณผ ๋ถ์กฑ ๋ฉ์์ง๋ง ๋จ์ผ๋ฉด request_timeout ๋งค๊ฐ๋ณ์๋ฅผ ๋๋ฆฌ๊ธฐ ์์ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ์ 20์ด ์ด์์ผ๋ก ์ค์ ํ๋ฉด Fluentd ๋ก๊ทธ์ ๋ค์ ๊ฒฝ๊ณ ๊ฐ ํ์๋๊ธฐ ์์ํฉ๋๋ค.
2020-01-21 09:55:33 +0000 [warn]: [test-dev] buffer flush took longer time than slow_flush_log_threshold: elapsed_time=20.85753920301795 slow_flush_log_threshold=20.0 plugin_id="postgresql-dev"
์ด ๋ฉ์์ง๋ ์์คํ ์๋์ ์ด๋ ํ ์ํฅ๋ ๋ฏธ์น์ง ์์ผ๋ฉฐ ๋ฒํผ ํ๋ฌ์ ์๊ฐ์ด Slow_flush_log_threshold ๋งค๊ฐ๋ณ์์ ์ค์ ๋ ๊ฒ๋ณด๋ค ์ค๋ ๊ฑธ๋ ธ์์ ์๋ฏธํฉ๋๋ค. ์ด๋ ๋๋ฒ๊น ์ ๋ณด์ด๋ฉฐ request_timeout ๋งค๊ฐ๋ณ์์ ๊ฐ์ ์ ํํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
์ผ๋ฐํ๋ ์ ํ ์๊ณ ๋ฆฌ์ฆ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- request_timeout์ ํ์ํ ๊ฒ(์๋ฐฑ ์ด)๋ณด๋ค ํฐ ๊ฐ์ผ๋ก ์ค์ ํ์ญ์์ค. ์ค์ ํ๋ ๋์ ์ด ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ํ๊ธฐ ์ํ ์ฃผ์ ๊ธฐ์ค์ ์๊ฐ ์ด๊ณผ ๋ถ์กฑ์ ๋ํ ๊ฒฝ๊ณ ๊ฐ ์ฌ๋ผ์ง๋ ๊ฒ์ ๋๋ค.
- Slow_flush_log_threshold ์๊ณ๊ฐ ์ด๊ณผ์ ๋ํ ๋ฉ์์ง๋ฅผ ๊ธฐ๋ค๋ฆฝ๋๋ค. elapsed_time ํ๋์ ๊ฒฝ๊ณ ํ ์คํธ๋ ๋ฒํผ๊ฐ ์ง์์ง ์ค์๊ฐ ์๊ฐ์ ํ์ํฉ๋๋ค.
- request_timeout์ ๊ด์ฐฐ ๊ธฐ๊ฐ ๋์ ์ป์ ์ต๋ elapsed_time ๊ฐ๋ณด๋ค ํฐ ๊ฐ์ผ๋ก ์ค์ ํ์ญ์์ค. request_timeout ๊ฐ์ elapsed_time + 50%๋ก ๊ณ์ฐ๋ฉ๋๋ค.
- ๋ก๊ทธ์์ ๊ธด ๋ฒํผ ํ๋ฌ์์ ๋ํ ๊ฒฝ๊ณ ๋ฅผ ์ ๊ฑฐํ๋ ค๋ฉด Slow_flush_log_threshold ๊ฐ์ ์ฌ๋ฆฌ๋ฉด ๋ฉ๋๋ค. ์ด ๊ฐ์ elapsed_time + 25%๋ก ๊ณ์ฐ๋ฉ๋๋ค.
์์์ ์ธ๊ธํ ๊ฒ์ฒ๋ผ ์ด๋ฌํ ๋งค๊ฐ๋ณ์์ ์ต์ข ๊ฐ์ ๊ฐ ๊ฒฝ์ฐ์ ๋ํด ๊ฐ๋ณ์ ์ผ๋ก ์ป์ด์ง๋๋ค. ์์ ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ๋ฅด๋ฉด ๋ฐ๋ณต๋๋ ๋ฉ์์ง๋ก ์ด์ด์ง๋ ์ค๋ฅ๋ฅผ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
์๋ ํ๋ ์์์ ์ค๋ช ํ ๋งค๊ฐ๋ณ์ ๊ฐ์ ์ ํํ๋ ๊ณผ์ ์์ ๋ฉ์์ง ์ค๋ณต์ผ๋ก ์ด์ด์ง๋ ์ผ์ผ ์ค๋ฅ ์๊ฐ ์ด๋ป๊ฒ ๋ณํ๋์ง ๋ณด์ฌ์ค๋๋ค.
๋
ธ๋-1
๋
ธ๋-2
๋
ธ๋-3
๋
ธ๋-4
์ ํ
์ ํ
์ ํ
์ ํ
๋ฒํผ๋ฅผ ํ๋ฌ์ํ์ง ๋ชปํ์ต๋๋ค.
1749/2
694/2
47/0
1121/2
์ฌ์๋ ์ฑ๊ณต
410/2
205/1
24/0
241/2
ํ๋ก์ ํธ๊ฐ ์ฑ์ฅํ๊ณ ๊ทธ์ ๋ฐ๋ผ ๋ก๊ทธ ์๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ ๊ฒฐ๊ณผ ์ค์ ์ ๊ด๋ จ์ฑ์ด ์ฌ๋ผ์ง ์ ์๋ค๋ ์ ๋ ์ฃผ๋ชฉํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ์๊ฐ ์ด๊ณผ๊ฐ ์ถฉ๋ถํ์ง ์๋ค๋ ์ฃผ์ ์งํ๋ Fluentd ๋ก๊ทธ์ ๊ธด ๋ฒํผ ํ๋ฌ์์ ๋ํ ๋ฉ์์ง๊ฐ ๋ฐํ๋๋ ๊ฒ์ ๋๋ค. ์ฆ, Slow_flush_log_threshold ์๊ณ๊ฐ์ ์ด๊ณผํ๋ ๊ฒ์ ๋๋ค. ์ด ์์ ๋ถํฐ๋ request_timeout ๋งค๊ฐ๋ณ์๋ฅผ ์ด๊ณผํ๊ธฐ ์ ๊น์ง ์ฝ๊ฐ์ ์ฌ์ ๊ฐ ์์ผ๋ฏ๋ก ์ด๋ฌํ ๋ฉ์์ง์ ์ ์์ ์๋ตํ๊ณ ์์์ ์ค๋ช ํ ์ต์ ์ ์ค์ ์ ์ ํํ๋ ๊ณผ์ ์ ๋ฐ๋ณตํด์ผ ํฉ๋๋ค.
๊ฒฐ๋ก
Fluentd ์ถ๋ ฅ ๋ฒํผ๋ฅผ ๋ฏธ์ธ ์กฐ์ ํ๋ ๊ฒ์ EFK ์คํ ๊ตฌ์ฑ์ ์ฃผ์ ๋จ๊ณ ์ค ํ๋์ด๋ฉฐ, ์๋ ์์ ์ฑ๊ณผ ์ธ๋ฑ์ค์์ ๋ฌธ์์ ์ฌ๋ฐ๋ฅธ ๋ฐฐ์น๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ์ค๋ช ๋ ๊ตฌ์ฑ ์๊ณ ๋ฆฌ์ฆ์ ๊ธฐ๋ฐ์ผ๋ก ๋ชจ๋ ๋ก๊ทธ๊ฐ ๋ฐ๋ณต์ด๋ ์์ค ์์ด ์ฌ๋ฐ๋ฅธ ์์๋ก ElasticSearch ์ธ๋ฑ์ค์ ๊ธฐ๋ก๋๋ค๋ ๊ฒ์ ํ์ ํ ์ ์์ต๋๋ค.
๋ธ๋ก๊ทธ์์ ๋ค๋ฅธ ๊ธฐ์ฌ๋ ์ฝ์ด๋ณด์ธ์.
Go์ Zabbix 5.0์ด ์น๊ตฌ๊ฐ ๋์์ต๋๋ค ๋ค์ดํ์ ์์ด Kubernetes ํด๋ฌ์คํฐ ์ ๊ทธ๋ ์ด๋ Kubernetes: ์์คํ ๋ฆฌ์์ค ๊ด๋ฆฌ๋ฅผ ์ค์ ํ๋ ๊ฒ์ด ์ ๊ทธ๋ ๊ฒ ์ค์ํ๊ฐ์? Docker ์ด๋ฏธ์ง๋ฅผ ์ถ์ํ๋ ์ธ ๊ฐ์ง ๊ฐ๋จํ ํธ๋ฆญ ๋ค์์ ์ด๊ธฐ์ข ์น ํ๋ก์ ํธ ๋ฐฑ์
์ถ์ฒ : habr.com