Help us understand the problem. What is going on with this article?

Docker環境でのログ確認がめんどくさいのでkibanaでみれるようにしてみた

docker環境で開発を行っていると、いろんなログをコンテナに入って閲覧したりするのがめんどくさいし、見ずらいので、どこか一箇所で見れるようにしたいと思い、docker作ってみました。

一式をGitHubに公開してますので、是非。
https://github.com/yuya-sega/log-viewer/

構成

apache 2.4
postgres 12
fluentd 1.6.2-1.0
elasticsearch 7.3.2
kibana 7.3.2

まずは起動してみる

$ git clone https://github.com/yuya-sega/log-viewer.git
$ cd log-viewer/
$ docker-compose build && docker-compose up

~~ 略 ~~
kibana_1         | {"type":"log","@timestamp":"2019-09-20T06:04:14Z","tags":["listening","info"],"pid":6,"message":"Server running at http://0:5601"}
kibana_1         | {"type":"log","@timestamp":"2019-09-20T06:04:14Z","tags":["info","http","server","Kibana"],"pid":6,"message":"http server running"}
kibana_1         | {"type":"log","@timestamp":"2019-09-20T06:04:14Z","tags":["status","plugin:spaces@7.3.2","info"],"pid":6,"state":"green","message":"Status changed from red to green - Ready","prevState":"red","prevMsg":"No Living connections"}

ここまで表示されれば起動OKです。
これで、以下のコンテナが起動しました。

$ docker-compose ps
           Name                         Command               State                 Ports               
--------------------------------------------------------------------------------------------------------
log-viewer_apache_1          docker-php-entrypoint apac ...   Up      0.0.0.0:8010->80/tcp              
log-viewer_elasticsearch_1   /usr/local/bin/docker-entr ...   Up      0.0.0.0:9200->9200/tcp, 9300/tcp  
log-viewer_fluentd_1         tini -- /bin/entrypoint.sh ...   Up      0.0.0.0:24224->24224/tcp, 5140/tcp
log-viewer_kibana_1          /usr/local/bin/dumb-init - ...   Up      0.0.0.0:5601->5601/tcp            
log-viewer_postgres_1        docker-entrypoint.sh postg ...   Up      0.0.0.0:5432->5432/tcp  

ログを出力させて、kibanaでみてみる

検証用にhtmlや、データベーステーブルなどを用意していないので、若干無理やり感ありますが
apacheとpostgresのログを出力して、kibanaで見てみたいと思います。

まずは下準備を。

apacheのログだす

http://localhost:8010/
上記のURLにアクセスしてみてください。
前述の通り、htmlを用意してないので、403(Forbidden)画面がでてしまいますが、これでapacheのアクセスログがでます。

postgresのログだす

$ docker-compose exec postgres psql -U postgres -d test
psql (12beta4 (Debian 12~beta4-1.pgdg100+1))
Type "help" for help.

test=# 

log-viewerのディレクトリで、上記のコマンドを実行しデータベースに接続を行います。
これでpostgresのログがでます。

kibanaひらく

http://127.0.0.1:5601
上記のURLにアクセスすると、kibanaのHome画面が表示されます
スクリーンショット 2019-09-20 15.21.03.png

次にIndex Patternの設定を。

docker起動後、apacheとpostgresのログを出力すると、elasticsearchによってログ収集が開始されます。
収集されたログを閲覧するために以下のような設定を行います。

Index Pattern設定する画面いく

サードメニューに「Management」アイコンがあるので、それを選択。
スクリーンショット 2019-09-20 15.33.30.png ←これ
Kibana > Index Patterns を選択します。
表示されている「About Index Patterns」を「×」で消すと「Create Index Pattern」ボタンが出現します。

スクリーンショット 2019-09-20 15.35.48.png

apacheログのIndex Pattern設定する

「Index Pattern」に「apache.access-*」と入力して、「Next Step」ボタンを押下する
※「Nest Step」ボタンが押下できない場合は、elasticsearchのログ収集タイミングの問題なので、少し待つ
「Time Filter field name」のプルダウンボックスから「timestamp」を選択し、「Create Index Pattern」ボタンを押下する

postgresログのIndex Pattern設定する

apacheログのIndex Pattern設定と操作は一緒ですが
「apache.access-* 」と入力したところを「postgres.query-* 」に読み替えて設定してください

最後に、設定が終わったので、ログ見てみます。

サードメニューに「Discover」アイコンがあるのでそれを選択。
スクリーンショット 2019-09-20 15.58.20.png ←これ

すると、ログが確認できました!

スクリーンショット 2019-09-20 16.01.32.png

少し解説

postgresのログについて。

docker公式のpostgresイメージは、そのままだとログが出力されませんので、下記のパラメータを与えてやることにより、/var/lib/postgresql/data/log にログファイルを出力するように設定しました。

docker-compose.yml#postgres:

command: 'postgres -c port="5432" -c log_statement=all -c log_destination=stderr -c log_connections=on -c log_disconnections=on -c logging_collector=on -c log_filename=postgresql.log'

elasticsearchのcluster.routing.allocation.disk.watermark

僕のdockerを起動しているホストマシンは、250GB中220GBが使用中でありディスク使用率85%オーバーでコンテナが起動しない事象が発生しました。。
elasticsearchではどうやらデフォルトでディスク使用率85%以下のマシンでの起動を想定しているようでしたので、その上限値を変更するようにしてます。
同じような境遇にあう人もいらっしゃるかと思い、設定をのこしてます。

docker-compose.yml#elasticsearch

- cluster.routing.allocation.disk.watermark.low=95%
- cluster.routing.allocation.disk.watermark.high=95%

https://www.elastic.co/guide/en/elasticsearch/reference/current/disk-allocator.html

elasticsearchとkibanaの関係

elasticsearchとkibanaはバージョンが一緒でないとエラーが発生します。
今回は、docker hubのdocker公式イメージでタグ付けされた最新のバージョンを使用しております。(2019/09/20現在)
https://hub.docker.com/_/elasticsearch
https://hub.docker.com/_/kibana

参考

以下の記事を参考にさせていただきました。
https://qiita.com/zgmf_mbfp03/items/0697cc827efa89e5d93e

さいごに

初記事緊張しました。
今度は、fluentdのconfファイルをもっと調べて汎用的な指定方法ができるようにしてみたいと思います!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした