2019年10月3日木曜日

efk 環境を docker for Mac でサクっと構築する

概要

この記事この記事を組み合わせてサクっと efk (ElasticSearch + fluentd + Kibana) 環境を構築する方法を紹介します
docker コンテナとして動作させるので VM などは不要です

今回はわかりやすくすべて docker コマンドで起動します
慣れてきたら docker-compose にしても OK だと思います

環境

  • macOS 10.14.6
  • docker for Mac 19.03.2
  • ElasticSearch 7.4.0
  • Kibana 7.4.0

Elasticsearch 起動

  • docker run -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.4.0

Kibana 起動

  • docker run -d -e ELASTICSEARCH_HOSTS=http://192.168.99.1:9200 -p 5601:5601 docker.elastic.co/kibana/kibana:7.4.0

192.168.99.1 の IP アドレスの部分は docker for Mac が動作しているホストマシンの IP アドレスを指定してください
7.4.0 の場合 ELASTICSEARCH_URL ではなく ELASTICSEARCH_HOSTS になっているので注意してください

fluentd 起動

  • vim Dockerfile
FROM fluent/fluentd

RUN apk add --update --virtual .build-deps \
        sudo build-base ruby-dev \
 && sudo gem install \
        fluent-plugin-elasticsearch \
 && sudo gem sources --clear-all \
 && apk del .build-deps \
 && rm -rf /var/cache/apk/* \
           /home/fluent/.gem/ruby/2.4.0/cache/*.gem
  • docker build -t my_fluentd .
  • vim fluent.conf
<source>
  @type forward
  port 24224
  bind 0.0.0.0
</source>

<match docker.**>
  @type copy
  <store>
    @type stdout
  </store>
  <store>
    @type elasticsearch
    host 192.168.99.1
    port 9200
    index_name fluentd
    type_name fluentd
  </store>
</match>
  • docker run -d -p 24224:24224 -p 24224:24224/udp -v $(pwd):/fluentd/etc -e FLUENTD_CONF=fluent.conf my_fluentd

192.168.99.1 の IP アドレスの部分は docker for Mac が動作しているホストマシンの IP アドレスを指定してください

nginx 起動

ログを格納するための確認用のコンテナです
自身のアプリがあればそれでも OK です

  • docker run -d --log-driver=fluentd --log-opt fluentd-address=192.168.99.1:24224 --log-opt tag="docker.{{.Name}}" --name web -p 80:80 nginx

192.168.99.1 の IP アドレスの部分は docker for Mac が動作しているホストマシンの IP アドレスを指定してください

動作確認

動作しているコンテナは以下の通りです

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES fc73ffd85690 nginx "nginx -g 'daemon of…" 11 seconds ago Up 9 seconds 0.0.0.0:80->80/tcp web b13985e947df docker.elastic.co/kibana/kibana:7.4.0 "/usr/local/bin/dumb…" 2 minutes ago Up 2 minutes 0.0.0.0:5601->5601/tcp romantic_chebyshev 07213efdf16d my_fluentd "/bin/entrypoint.sh …" 6 minutes ago Up 6 minutes 5140/tcp, 0.0.0.0:24224->24224/tcp, 0.0.0.0:24224->24224/udp nervous_hofstadter ea9a1c8cee93 docker.elastic.co/elasticsearch/elasticsearch:7.4.0 "/usr/local/bin/dock…" 13 minutes ago Up 13 minutes 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp distracted_mcclintock

とりあえず動作確認用の nginx にアクセスしてみます

  • curl localhost/hoge

Kibana でログが来ているか確認します

http://192.168.99.1:5601/ にブラウザでアクセスしてください
まずは Kibana 上でインデックスを作成します

左メニューから「Management」を選択します

Kibana の「Index Patterns」を選択します

「Create index pattern」を選択します

今回の場合 fluentd というインデックスでログが飛んできます
fluentd と入力しインデックスが見つかったら「Next step」を選択します

「Create index pattern」を選択します
timestamp などが必要な場合はここでフィールドを選択して作成します

こんな感じで作成できれば OK です

あとは左メニューから「Discovery」を選択し先程アクセスしたログが出ていれば OK です

最後に

docker を使ってサクっと efk 環境を構築する方法を紹介しました
Kibana の挙動などを確認したいときに便利かなと思います

今回は nginx のログを格納していますがアプリがあればそれでも OK です
また format も使っていないので生ログの文字列をそのまま格納しているので適宜 format を使って必要なフィールドごとに格納すると良いかなと思います

0 件のコメント:

コメントを投稿