LoginSignup
34
35

More than 3 years have passed since last update.

Dockerのログ収集方法の調査

Last updated at Posted at 2019-08-31

すべてのログは標準出力・標準エラー出力に出力

・Dockerのlogging driver
 ・ログの集約がしづらい
 ・Fluentdに転送設定
  コンテナ起動時に既にFluentdが死んでいる場合、コンテナが起動できない
 など。詳細は以下のサイトを参照
  Dockerコンテナ上のログ集約に関するまとめ
  Dockerのlogging driver: それぞれの特徴と使いどころ(json-file, syslog, journald, fluentd)

対象のログ

リアルタイムに出力されるログが対象

 ・Fluentd / fluentd-ui
 ・FluentBit
 ・Filebeat
 ・Logstash

既にあるログが対象

 ・Embulk

Fluentdのバッチ版Embulk(エンバルク)のまとめ
Docker-composeを使ってEmbulk,Elasticsearch,Kibana環境を構築する
Apacheのアクセスログを、EmbulkでElasticsearchに叩き込む

ログを集めてGrafana Lokiに保存してGrafanaで見る

ログ収集するエージェントとしては、以下の事例あり
 promtail
 Fluentd
 FluentBit

公式サイト
GitHub

fluent-plugin-grafana-loki を再度試した
fluent-plugin-grafana-loki
Dockerコンテナ環境でFluentdを使ってGrafana Lokiにログを送信してみた
Grafana Lokiがメジャーリリースされたのでログ収集からダッシュボード化まで試してみた
Lokiで収集したログをGrafanaで見るハンズオン
次世代のログ基盤 Grafana Lokiを始めよう!
DockerコンテナのロギングにGrafana+Lokiを試してみた
Grafana LokiをMinikubeで試す
Prometheus likeなログ収集、Grafana Loki
Lokiとpromtailことはじめ
Fluent BitからGrafana Lokiに転送するには
Helmを使ってGrafana Lokiを試してみる
Grafana Logging using Loki
Grafana Lokiを使ったKubelet Logging入門

Grafanaのアラート通知機能

Alerting Engine and Rules Guide
Metrics from the alert engine
Alert Notifications
DingDing
Discord
Email
Google Hangouts Chat
Hipchat
Kafka
Line
Microsoft Teams
OpsGenie
Pagerduty
Prometheus Alertmanager
Pushover
Sensu
Slack
Squadcast
Telegram
Threema
VictorOps
Webhook
Creating alert that can send SNMP Trap as a notification

That is not supported right now

Email
Grafanaでアラート時通知を設定する
Grafana Eメール通知設定
Grafanaのメール設定で詰まった話
Grafana でメール通知

Slack
BLE経由で取得したデータの 可視化(Grafana) & アラート通知(Slack) を実施
Grafana で Elasticserch に蓄積したサーバーメトリクスの可視化+アラートのSlack通知環境を構築してみた (ニフクラ)
Prometheus+Grafanaでパフォーマンス監視をしています

Discord
Grafana5.2.0+でElasticsearch内のデータに対するAlertingを実行し、Discordに通知する

Teams
Prometheusのすすめ - Grafana で AlertをTeamsに通知するのは簡単です

webhook
Prometheus2とGrafana6によるシステム監視 GrafanaのAlertを使う

ログを集めてElasticsearchに保存してKibanaで見る

Elasticsearchで日本語全文検索

デフォルトの状態だと対応していない日本語の形態素解析ライブラリを入れる必要あり

Elasticsearchのための新しい形態素解析器 「Sudachi」
Elasticsearch に kuromoji を入れて日本語全文検索をする
Elasticsearch 7.2.0 + Kuromoji + Kibana + docker-compose インストールメモ
docker上で Filebeat nginx Module を使って nginxのlogをKibanaで表示させた

その他に、「ICU(International Components for Unicodeの略)」(Unicodeの国際化サポートをしてくれるライブラリ)をインストールするか検討する

Elasticsearchを日本語で使う設定のまとめ

個人的には、方法3がおすすめ

方法1、Fluentd(または FluentBit) + Elasticsearch + Kibana

 FluentdをDockerコンテナで動かす場合で、
 Fluentdのプラグインを使いたい場合、
 プラグインをインストールしてDockerイメージを作る必要あり。
 ElastcsearchのプラグインをインストールしてDockerイメージを
 作る例は、fluent/fluentdを参照。
 
 dockerでfluentdを動かすときはudpも意識しましょう
 あんまり知られてない機能について
 td-agent(fluentd) の monitor_agent で取得出来る情報を Graphite + Grafana で見る試み
 Fluent-plugin-elasticsearch v2.8.0対応でわかったElasticsearch 6.0以降の動向
 fluentdのnginxアクセスログ取得をdockerで試す
 Docker初心者が、Nginxのログを fluentd + elasticsearch + kibana で可視化してみた

 fluentd-uiでdockerコンテナのpache2のログを収集コンテナに転送する方法
 fluentd-uiを起動してみた

 fluent/fluent-bit
 IoTや組み込み向けのデータコレクタ、FluentBitについて
 Fluent Bitを試してみる。
 貧者の GKE / FluentBit でログ収集
 FluentBitのGolang製のプラグインのDockerfileを作った話
 Amazon Linux で Fluent Bit を動かしてみた
 Docker Logging with Fluent Bit and Elasticsearch

方法2、Filebeat + (Logstash) + Elasticsearch + Kibana

 Logstashを採用するかFilebeatだけで対応可能かは動作確認して問題ないか確認して決める必要がある

 Filebeat - Modules
 docker上で Filebeat nginx Module を使って nginxのlogをKibanaで表示させた
 dockerでElasticsearch+logstash+kibanaを立ち上げる
 Filebeat にモジュール機能が追加され、ログ可視化が簡単になりました
 MySQLのlogを可視化する
 docker上で Filebeat nginx Module を使って nginxのlogをKibanaで表示させた
Filebeatの性能チューニングポイントまとめ

方法3、方法1と方法2の両方

検討例)
・FilebeatのFilebeat - Modulesで、Nginx、Redis、MySQLなどの情報を収集
→MySQLはエラーログとスロークエリーログのみ対応
→バグで収集できないパターンもあるのでGitHubのissueを確認すること
 例) Filebeat7.4のバグでMySQLのエラーログが収集されない。7.5で修正される。
   導入時期によって1つ前のバージョンにするか新しいバージョンが出てから
   再度検証か検討する
   Mysql filebeat module [mysql.error] no result found
   Mysql filebeat module [mysql.error] ingest pipeline issue #14076
→収集できているのにKibanaのDashboardで表示されない場合もある
 例) nginxのアクセスログ
   OS名かOSバージョンのどちらかしかない状態でグラフに表示されない
   (Filebeat 7.4.2。ブラウザはFirefoxで確認)
   →user_agent.os.nameのみが取得できている
    user_agent.os.versionが取得できてない
   ダッシュボードの設定では両方の値が取得できているもののグラフを表示
   取得できていれば表示される。バージョン取得のバグの可能性あり

 例) nginx(コンテナのタイムゾーンはAsia/Tokyo。アクセスログ/エラーログ)
  アクセスログの日付はKibanaで日本の日時で表示されるが、
  エラーログの日付はKibanaで+9時間の日時で表示された
  (Filebeat 7.4.2で確認)
  → Filebeatの設定に以下を追加することで解決。
   なお、コンテナのタイムゾーンを変更していない場合は問題は発生しません。

processors:
 - drop_fields.fields: ['event.timezone']
 - add_fields:
    target: event
    fields:
     timezone:  'Asia/Tokyo'

・Fluentdで、FilebeatのModuleがないログの収集
→ Fluentdを使わずにLogstashまたはFilebeat+Logstashを採用するパターンもある。

Elasticsearchのタイムゾーン問題

アラート通知

Elasticsearchのデータを基にアラート通知する方法の調査

OSS のログ管理システム Graylog

ログの収集
ログの検索
ダッシュボードの作成
ログを基にしたアラート通知

Graylog ではじめるログ管理
Dockerを使ってログ監視ツールである「graylog」構築する手順
Send Syslog Data to Graylog
fluentd-graylog
Bunyan JSON Logs with Fluentd and Graylog
Managing Logs with Graylog & Fluentd-2
Graylog で log を管理する

Dockerログのログローテート設定

Docker の出すログファイルでディスクが 100%になることを防ぐため、
max-size、max-fileは必ず設定する必要があります。
Configure the default logging driver

Dockerコンテナのログファイルをログローテート

Dockerコンテナ起動時にDockerコンテナのログディレクトリを
Dockerホストのディレクトリとマウントした場合

dockerコンテナ内のnginxにログを開き直させる方法(logrotate)
dockerコンテナ上のuwsgiとnginxのログローテート
DockerfileでNginxの起動とログのローテーションまで

参考URL

ログ収集ツールの比較
Elastic Stackにちょうど良いKafka パート1
apache-kafka – LogstashとKafkaの違い
ログ収集基盤のFluentdとFlume NG、どちらが使いやすい?

Beatsのdocker-composeの例や設定ファイル(yaml)は公式のGitHubを参照
elastic/beats
beats/deploy/docker/
beats/deploy/kubernetes/

34
35
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
34
35