Slide 1

Slide 1 text

Fluentdで始めるPrometheus @kazegusuri /Masahiro Sano Prometheus Tokyo Meetup #1

Slide 2

Slide 2 text

自己紹介  佐野 正浩(@kazegusuri)  Principal Engineer@Mercari, Inc.  Platform Team  Go と PHP で開発してます

Slide 3

Slide 3 text

さわってきたもの  Fluentd (2012~, v0.10)  Docker (2013~, v0.6)  Kubernetes (2015~, v0.10)  Prometheus (2015~, v0.13)  gRPC (2016~)

Slide 4

Slide 4 text

さわってきたもの  Fluentd (2012~, v0.10)  Docker (2013~, v0.6)  Kubernetes (2015~, v0.10)  Prometheus (2015~, v0.13)  gRPC (2016~)

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

fluent-plugin-prometheus  大きくわけて3つの機能  FluentdにPrometheus用のエンドポイント提供  prometheus Input Plugin  メッセージからメトリクスを取得  prometheus Output/Filter Plugin  Fluentd自体の内部メトリクス  prometheus_monitor Input Plugin https://github.com/kazegusuri/fluent-plugin-prometheus

Slide 7

Slide 7 text

prometheus Input Plugin  FluentdにPrometheus用のエンドポイント提供  PrometheusからのPull  他のプラグインで取得したメトリクスを返す @type prometheus port 24231 GET /metrics scrape_configs: - job_name: fluentd static_configs: - targets: - 'localhost:24231‘ metrics_path: /metrics

Slide 8

Slide 8 text

prometheus Output/Filter plugin  メトリクスをログから収集  Output/Filter pluginとして実装  メトリクスはInput Pluginで回収  アプリケーションの外でメトリクス収集  使えるメトリクスの種類  counter, gauge, summary, histogram  類似のツール  https://github.com/google/mtail

Slide 9

Slide 9 text

メトリクス収集の例 @type prometheus name nginx_size_counter_bytes type counter desc nginx bytes sent key size host ${hostname} foo bar {"size": 200} {"size": 100} # TYPE nginx_size_counter_bytes counter # HELP nginx_size_counter_bytes nginx bytes sent nginx_size_counter_bytes{host=“hoge",foo="bar"} 100 # TYPE nginx_size_counter_bytes counter # HELP nginx_size_counter_bytes nginx bytes sent nginx_size_counter_bytes{host=“hoge",foo="bar"} 300

Slide 10

Slide 10 text

prometheus_monitor Input plugin  Fluentdの内部状態をメトリクスに  monitor_agent プラグイン相当の機能  取得可能なメトリクス  buffer_queue_length  buffer_total_queued_size  retry_count http://docs.fluentd.org/v0.12/articles/monitoring @type forward @id test_forward disable_retry_limit host 127.0.0.1 fluentd_status_buffer_queue_length{ plugin_id="test_forward", plugin_category="output", type="forward“ } 17 fluentd_status_buffer_total_bytes{ plugin_id="test_forward", plugin_category="output", type="forward“ } 228 fluentd_status_retry_count{ plugin_id="test_forward", plugin_category="output", type="forward“ } 19

Slide 11

Slide 11 text

 prometheus_monitorを使えば監視できそうな気はする  だがFluentdで監視したいのはそれだけなのか…  retryに失敗しすぎてretry_waitが長過ぎ問題…  実は全部emitに失敗していた…  そもそもoutputに来てなかった…  tailしていたと思ったらパスが変わっていた…

Slide 12

Slide 12 text

 prometheus_monitorを使えば監視できそうな気はする  だがFluentdで監視したいのはそれだけなのか…  retryに失敗しすぎてretry_waitが長過ぎ問題…  実は全部emitに失敗していた…  そもそもoutputに来てなかった…  tailしていたと思ったらパスが変わっていた… _人人人人人人人_ > 作ってみた <  ̄Y^Y^Y^Y^Y^Y ̄

Slide 13

Slide 13 text

prometheus_output_monitor  アウトプットプラグインの詳細なメトリクスを収集  収集可能なメトリクス  buffer_queue_length  buffer_total_bytes  retry_count  num_errors ★  emit_count  retry_wait ★ (現在のretry_wait (秒))  emit_records (v0.14 only)  write_count (v0.14 only)  rollback_count (v0.14 only)

Slide 14

Slide 14 text

prometheus_output_monitor  retry_wait で現在のretry_wait がわかる  max_retry_wait の設定漏れがわかる  num_errors の差を見ればエラー出過ぎがわかる  emit_count の差を見ればそもそも来てないのがわかる

Slide 15

Slide 15 text

prometheus_tail_monitor  in_tail プラグインのメトリクスを収集  pos_fileの情報  position (どこまで読んだか)  inode (読んでいるファイル)  pos_fileを指定してなくても動作  labelにファイルのpathが自動で付与

Slide 16

Slide 16 text

prometheus_tail_monitor  positionの差を見ることで  in_tail されてないことがわかるよ  position自体でログサイズもわかるよ  inodeでログローテートされてないことがわかるよ

Slide 17

Slide 17 text

max_retry_wait 指定無し

Slide 18

Slide 18 text

max_retry_wait指定有り

Slide 19

Slide 19 text

max_retry 指定 v0.12 v0.14

Slide 20

Slide 20 text

tailのposition

Slide 21

Slide 21 text

まとめ  fluent-plugin-prometheus  FluentdとPrometheusをつなぐプラグイン  Fluentdの監視に必要なメトリクスを収集  他にもネタ(メトリクス)があれば実装します! おわり