すべてのログは標準出力・標準エラー出力に出力
・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
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の国際化サポートをしてくれるライブラリ)をインストールするか検討する
個人的には、方法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以降の動向]
(https://www.clear-code.com/blog/2018/3/7.html)
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のデータを基にアラート通知する方法の調査
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/