LoginSignup
0
0

More than 1 year has passed since last update.

Elastic StackをDocker上で実行してログモニタリングサービスを作成するまで③ - filebeat編

Last updated at Posted at 2021-06-28

背景

前回の記事の続きです!
この記事は3/4回目です。

できること

この投稿は全4回に渡ってシリーズ化する予定です!
ほかの記事もよろしければぜひご覧ください。

  1. Elasticsearch編: ElasticsearchをDocker上で起動して、実際に動かしてみる
  2. Kibana編: KibanaをDocker上で起動して、データを可視化してみる
  3. Filebeat編: Filebeatを利用して、ログファイルをKibanaで表示してみる
  4. Spring Boot編: 簡単なSpring Webアプリケーションをローカルで実行、ログを作成してそれをKibanaで可視化する

デモ編: とりあえず完成品を動かしてみる

Filebeatとは

Filebeatは、ログデータを転送して一元管理するための軽量なシッパーです。サーバーにエージェントとしてインストールされたFilebeatは、指定されたログファイルまたはロケーションを監視し、ログイベントを収集して、インデックス作成のためにElasticsearchまたはLogstashに転送します。(訳)

今回の目的ではざっくり、ファイルの変化を検出して、新しく追加されたデータをElasticsearchに送るツールと捉えてもらって大丈夫です。

手順

それでは早速filebeatをDocker上で起動していきます。

前提

1. ファイルの準備
以下の様なフォルダ構成にします。(今回追加するファイル・フォルダのみに焦点をあてて説明します)
ちょっと今までよりも色々なファイルを準備する分、大変かもしれませんが頑張りましょう!

  • /{projectディレクトリ}/
    • elasticsearch/
      • elasticsearch.yml
    • filebeat/
      • config/
        • filebeat.docker.yml
      • logs/
        • logging-demo.log
      • Dockerfile
    • docker-compose.yml

2. dockerの準備
今回はイメージを直接利用するのではなく、少しカスタマイズしたいのでDockerfileを記述していきます。

FROM docker.elastic.co/beats/filebeat:7.13.0

COPY config/filebeat.docker.yml /usr/share/filebeat/filebeat.yml
USER root
RUN chown root:filebeat /usr/share/filebeat/filebeat.yml
USER filebeat

ここでは主に、ローカルの設定ファイルをコンテナ内の必要な場所にコピーする処理を追記しています。

次に、docker-compose.ymlファイルを以下の様に追記します

docker-compose.yml
version: '3.2'
services:
  ...

  filebeat:
    build:
      context: filebeat/
    hostname: filebeat101
    container_name: con-filebeat
    networks:
      - elastic
    volumes:
      - type: bind
        source: ./filebeat/logs
        target: /usr/share/filebeat/logs
    depends_on:
      - elasticsearch

...

networks:
  elastic:
    driver: bridge

ほとんど前回までに出てきたものと同じ様な設定だと思います。
imageの代わりにbuild.contextでDockerfileのあるパスを指定してあげることで、Dockerfileからイメージをビルドしてコンテナを作成する様になります。

3. filebeatの設定ファイルの準備
filebeat.docker.ymlを以下の様に編集します

filebeat.docker.yml
filebeat.inputs:
  - type: log
    paths:
      - /usr/share/filebeat/logs/logging-demo.log

setup.template.name: "filebeat"
setup.template.pattern: "filebeat-*"

output.elasticsearch:
  hosts: 
    - "elasticsearch:9200"
  index: "filebeat-%{[agent.version]}-%{+yyyy.MM.dd}"

この設定は最初のセクションでfilebeatが読み込むべきログファイルを指定します。

次のセクションで、index templateを設定していきます。各ログデータは特定のindexと呼ばれる識別子を持っており、index templateとはこのログファイルから抽出したデータを検索する際の共通の識別子です(今回はデフォルトをそのまま使っているので省いてしまっても構いません)。詳しくは公式の説明をご確認ください。

最後のセクションでは、データの出力先を指定しています。ここではコンテナの具体的なIPアドレスがわからないため、Dockerfileのサービス名(elasticsearch)をホストとして利用しています。
indexの設定では、各ログデータにつけるindex(識別子)のパターンを指定しています。今回はこれもデフォルトと同じで、filebeatのバージョンとタイムスタンプからindexを生成するようにしています。
その他の設定も気になる方はこちらからご覧ください。

3. ログファイルの準備
最後にfilebeatが読み込むためのログファイルを準備します。
なんでもいいのですが、この記事の最終目的であるSpring Bootアプリケーションのログモニタリングを意識して、Spring Bootのログフォーマットに近いログを適当に用意したのでコピペして使ってみてください。

logging-demo.log
2021-06-26 10:57:51.112  INFO 45469 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/7.0.52
2021-06-26 10:57:51.253  INFO 45469 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2021-06-26 10:57:51.253  INFO 45469 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1358 ms
2021-06-26 10:57:51.698  INFO 45469 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean        : Mapping servlet: 'dispatcherServlet' to [/]
2021-06-26 10:57:51.702  INFO 45469 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'hiddenHttpMethodFilter' to: [/*

4. 実行されているか確認する
以下のコマンドを実行してしばらく待機ます(起動まで2~5分程かかります)。

docker-compose up -d

その後、filebeatがログを読み込んでElasticsearchにデータを送信できているか確認するために、filebeatによって作成されたインデックスパターンのログが存在するか検証するリクエストを送ってみましょう。
以下のコマンドをターミナルから入力して実行してみてください。

curl -XGET "http://localhost:9200/filebeat-*/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "match_all": { }
  },
  "sort": [
    {
      "@timestamp": "desc"
    }
  ]
}'

以下の様なレスポンスが返ってきたら成功です。

{
  "took" : 4,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 4,
      "relation" : "eq"
    },
  ...

4. Kibanaでログデータを表示する
これをKibanaで表示するにはもう少し作業が必要になります。
初回のみKibanaに手動でindex patternを登録する必要があるので、Kibana (http://localhost:5601) にアクセスして、ホーム左上のアイコンからStack Management > Index Patterns へと進んでCreate Index Patternを選択してください。
kibana index pattern registration.pngkibana index pattern registration2.png

次に、"sel"の欄にfilebeat-*と選択して次へ進んでください。
kibana index pattern registration3.png

その後、time fieldの欄のドロップダウンから@timestampを選択し、index patternを作成してください。
kibana index pattern registration4.png

これで無事準備が整ったので、メニューからAnalytics > Discoverへと進みましょう。
kibana index pattern registration5.png

左にあるドロップダウンから作成されたindex patternが選択されていることを確認します。
その後、検索範囲をfilebeatを実行した日の0:00 ~ 翌日の0:00に設定して再検索してみましょう。
kibana index pattern registration6.png

search result.png

上の画像のようにグラフや検索結果が出てきたら見事成功です。お疲れ様でした!!
最後にコンテナを消去して綺麗にしておきましょう。

docker-compose down -v --rmi local

次回はいよいよ最後、Spring Bootアプリケーションのログをこれらのツールを利用してモニタリングしていきます。
Elastic StackをDocker上で実行してログモニタリングサービスを作成するまで④ - Spring Boot編

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0