Docker Compose : Elasticsearch, Fluentd and Kibana
Docker Compose を使って環境構築を行う。
今回使うのは、Elasticsearch, Fluentd, Kibana である。
rsyslog に流れるログを Fluentd で収集し、Elasticsearch に格納し、Kibana で参照する。
導入環境
- CentOS 7.7
- Docker 19.03.6
- Docker Compose 1.25.4
事前準備
# mkdir docker-efk
Fluentd のディレクトリを作成する。
# cd docker-efk/ # mkdir fluentd
Fluentd
Dockerfile
Dockerfile を作成する。
# touch fluentd/Dockerfile
Dockerfile に下記を追加する。
FROM fluentd:v1.9-1 USER root RUN apk add --update --no-cache tzdata && \ cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && \ echo "Asia/Tokyo" > /etc/timezone && \ apk del tzdata RUN ["gem", "install", "fluent-plugin-elasticsearch", "--no-rdoc", "--no-ri", "--version", "4.0.3"]
fluent.conf
fluent.conf を作成する。
# mkdir fluentd/conf # touch fluentd/conf/fluent.conf
fluent.conf に下記を追記する。
<source> @type syslog port 5140 bind 0.0.0.0 tag system format none protocol_type udp </source> <match **> @type copy <store> @type file path /fluentd/log/messages append true time_slice_format %Y%m%d flush_interval 1s compress gzip </store> <store> @type elasticsearch host elasticsearch port 9200 logstash_format true logstash_prefix fluentd logstash_dateformat %Y%m%d include_tag_key true tag_key @log_name type_name fluentd flush_interval 1s </store> </match>
ログ出力ディレクトリを作成する。
# mkdir fluentd/logs
docker-compose
docker-compose.yml を作成する。
# touch docker-compose.yml
docker-compose.yml
docker-compose.yml に下記を追記する。
version: '3' services: elasticsearch: image: elasticsearch:7.5.0 container_name: elasticsearch environment: - discovery.type=single-node - "ES_JAVA_OPTS=-Xms512m -Xmx512m" - "TZ=Japan" expose: - 9200 - 9300 ports: - "9200:9200" - "9300:9300" kibana: image: kibana:7.5.0 container_name: kibana environment: - "TZ=Japan" links: - "elasticsearch" ports: - "5601:5601" fluentd: build: ./fluentd container_name: fluentd volumes: - ./fluentd/conf:/fluentd/etc - ./fluentd/logs:/fluentd/log links: - "elasticsearch" ports: - "5140:5140" - "5140:5140/udp"
解説
シングルノードで稼働するように設定している。
environment: - discovery.type=single-node
JVM option (heap size) を変更している。
environment: - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
environment: - "TZ=Japan"
動作確認
コンテナを起動する。
# docker-compose up -d
Elasticsearch が起動したことを確認するため、Webブラウザでhttp://localhost:9200
へアクセスする。
Kibana が起動したことを確認するため、Webブラウザでhttp://localhost:5601
へアクセスする。
Fluentd が起動したことを確認するため、コンソールでdocker-compose logs fluentd
を実行する。
~~~ [info]: #0 GET http://elasticsearch:9200/ [status:200, request:0.027s, query:n/a] ~~~
Kibana による動作確認
- [Discover] をクリックする。
- [fluentd-*] を入力する。
- [@timestamp] を選択する。
- [Create index pattern] をクリックする。
終わりに
EFK の連携がこれでできたはず…できていなかったらごめんなさい。
これで syslog からメッセージが流れてくると Kibana 上で確認することができる。