-
Fluent bit를 Log를 수집해서 Opensearch나, ElasticSearch 로 보낸다.
그리고 Prometheus또한 syslog를 보여주는 모니터링 툴이다.
여기서 드는 생각이, 그럼 Fluent bit를 통해서 syslog를 prometheus로 보내줄 수 있나?
였다.
먼저 대답하자면 "그렇다"였다.
자세한걸 보기전에 prometheus 먼저 알아야한다.
Fluent bit의 구성도를 보았었을때, 각각의 Node에 Fluent bit가 존재하고, 해당 fluent bit가 log를 opensearch로 보낸다 하였다.
prometheus또한 비슷하게 동작하는데, 각각의 VM(혹은 Worker Node)에 "Node Exporter"라는 놈이 존재한다.
이 놈이 주기적으로 VM에 proc와 sys의 log를 긁어 보관하고, prometheus가 주기적으로 해당 log를 긁어(scrape)가져간다.
그럼 prometheus는 해당 로그를 tsdb라는 자신만의 db에 저장하고 있다가, 사용자가 요청하면 해당 log를 보여주는 식이다.
그리고 그 보여주는 방식에서 가장 유명한게 "그라파나(Grafana)를 통한 시각화"이다.
사용자는 Grafana가 Log를 보여준다 생각하지만 실제 Log를 Prometheus에 존재하고, 사용자가 Grafana에 어떠한 log를 검색하면 Grafana가 Prometheus에 Log를 다시 긁어가서 사용자에게 보여주는 방식으로 동작하는 셈이다.
즉, Grafana 를 통해 Log를 본다. 의 핵심은 Prometheus에 Log를 전송한다. 라고 바꿔 부를 수 있는 것이다.
그리고 만약 Elastuc Search나 Opensearch같은 Log모니터링을 하고있고, Grafana처럼 시스템 모니터링까지 하고 있다면 VM에 여러가지가 설치될 수 있다.
최악의 상황에서는 Fluent bit(or fluentd), Node Exporter, Log Stach...... 등등 잡스러운게 많아질 수 있다.
이런 상황을 방지하고자 Fluent bit 하나만으로 log와 syslog를 모두 보낼 것이다.
방법은 fluent bit 의 configmap 에 아래의 내용을 추가하면 된다.
input-nodeexporter.conf: | [INPUT] name fluentbit_metrics tag internal_metrics scrape_interval 2 output-nodeexporter.conf: | [OUTPUT] name prometheus_exporter match internal_metrics host 0.0.0.0 port 9090
그리고나서 Grafana가 동작중인 VM에서 config.yml을 수정해준다.
대상은 Fluent bit를 가지고 있는 Worker Node이다.
global: scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute. evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute. # scrape_timeout is set to the global default (10s). # Alertmanager configuration alerting: alertmanagers: - static_configs: - targets: # - alertmanager:9093 # Load rules once and periodically evaluate them according to the global 'evaluation_interval'. rule_files: # - "first_rules.yml" # - "second_rules.yml" # A scrape configuration containing exactly one endpoint to scrape: # Here it's Prometheus itself. scrape_configs: - job_name: "prometheus" static_configs: - targets: ["localhost:9090"] - job_name: "fluent-bit-nodes" static_configs: - targets: ["node ip:fluent bit port", "ex)172.16.211.13:9090"]
이런식으로 설정을 한다면 prometheus는 주기적으로 Fluent bit가 자신의 Node Exporter를 통해 노출한 SysLog를 긁어 가져갈 것이다.
prometheus 를 설치한 VM에 접속해보면 아래와 같은 화면이 보일 것이다.
이제 status에서 Targets를 클릭하면?
이렇게 자기자신과 2대의 Worker Node를 확인할 수 있다.
여기서 좋은 점은, 별도의 Node Exporter없이, 오로지 Fluent bit만으로 처리를 했다는 것이며, 이것은 아키텍처에 복잡성을 줄여줄 것이다.
'클라우드 > fluent bit' 카테고리의 다른 글
댓글