LoginSignup
0
1

More than 1 year has passed since last update.

fluent-bit を Docker コンテナで起動して 他の Docker コンテナのログを ElasticSearch に送る

Last updated at Posted at 2021-12-01

経緯

  • Docker で動かしている バックエンドアプリのログを ElasticSearch + Kibana で閲覧したくなった (ElasticSearch + Kibana の構築手順はここでは述べない)
  • ElasticSearch のログ収集といえば fluentd だが、fluentd より軽量らしい fluent-bit を採用してみた

対応

  • 公式ドキュメントを見て作成
  • バックエンドアプリコンテナがあるサーバに fluent-bit の Docker コンテナを稼働させるようにする
  • fluent-bit が待ち受け状態になったことを確認したら、ログを送信するバックエンドアプリの方にも fluent-bit にログを送る設定を仕込む

構成

fluent-bit.png

fluent-bit の設定

  • parser で json を指定すると、json で出力したアプリログを ElasticSearch に JSON オブジェクトとして登録してくれる
    • 逆に指定しないと String として登録されてしまう
  • ローカル環境で試験的に試したものなので、本番環境に採用するときは適宜変えてください
/
├ docker-compose.yml
├ fluent-bit.conf
└ parsers.conf

docker-compose.yml

version: '3.7'
services:
  fluentd:
    image: fluent/fluent-bit:1.8.8-debug # docker exec で コンテナの中に入りたければデバッグバージョンが必要
    container_name: fluent-bit
    ports:
      - "24224:24224" # ポート固定を指定
    volumes: # テストのためボリュームマウント
      - type: bind
        source: "./fluent-bit.conf"
        target: "/fluent-bit/etc/fluent-bit.conf"
      - type: bind
        source: "./parser.conf"
        target: "/fluent-bit/etc/parser.conf"
# バックエンドアプリとネットワークを合わせる
    networks:
      - "my-network"

networks:
  my-network:
    external:
      name: my-network

fluent-bit.conf

[SERVICE]
    Flush 1
    Grace 30
    Log_Level debug
    Parsers_File /fluent-bit/etc/parsers.conf

[INPUT]
    Name forward
    Listen 0.0.0.0
    Port 24224

[FILTER]
    Name parser
    Match *
    Key_Name log
    Parser docker

[OUTPUT]
    Name es
    Host my.elasticsearch.server
    HTTP_User elastic
    HTTP_Passwd mypassword
    Port  443
    Type doc
    tls On
    Generate_ID On
    Logstash_Format On
    Logstash_Prefix my-backend
    Logstash_DateFormat %Y-%m-%d
    Include_Tag_Key On

parsers.conf

[PARSER]
  Name docker
  Format json
  Time_Key timestamp
  Time_Format %Y-%m-%dT%H:%M:%S.%L%Z

バックエンドアプリの設定

  • ロギングドライバーを fluent-bit に設定する
  • 注意点
    • fluent-bit の待ち受け TCP ポートを固定にしているので、ECS や K8S に転用すると、ローリングアップデートが出来ない問題があり
    • ホスト名指定にしてやれば上手くいくと思われる

docker コマンドで起動する場合

  • log-driver オプション 及び log-opt オプションを付けて起動
docker container run \
  --log-driver=fluentd \
  --log-opt fluentd-address=localhost:24224 \
  --log-opt tag=docker.{{.Name}} \
   my-image

docker-compose で起動する場合

  • logging 項目に記載する
version: "3.7"
services:
  my-api:
    container_name: my-api
    logging:
      driver: "fluentd"
      options:
        fluentd-address: "localhost:24224"
        tag: "docker.{{.Name}}"
    restart: always
    networks:
      - "my-network"

networks:
  my-network:
    external:
      name: my-network

Kibana で Index を登録し確認できれば OK

0
1
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
1