1. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
2018年10月31日
ヤフー株式会社 池田 誠
Micrometer/Prometheusによる
大規模システムモニタリング
〜ヤフーインターネット広告システムでの導入事例〜
Spring Fest 2018
2. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
自己紹介
2
池田 誠
ヤフー株式会社
所属:インターネット広告の開発部
仕事:
インターネット広告システムの共通機能開発
新技術の検証・導入サポート
言語:C, C++, Java, Kotlin, Python, Go(勉強中)
趣味:ゲーム, スキー
3. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
はじめに
3
ヤフーのインターネット広告システムでは、Micrometerと
Prometheusを採用したモニタリングシステムを構築し、
3000+のSpring Bootアプリケーションインスタンスの
パフォーマンスモニタリングをしています。
本日は、MicrometerとPrometheusの簡単な紹介、大規模
システムでの導入事例として、導入時に遭遇したトラブル
や直面している課題をお話しさせていただきます。
4. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
システムモニタリングの重要性
4
システムモニタリングを行わないと
どんなトラブル起こりますか?
5. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
システムモニタリングの重要性
5
• パフォーマンス問題に気付かない
• エラーの増加に気付かない
• 障害を解析するための情報集めに苦労する
など
サービスを安定して稼働/運用することができない
6. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
システムモニタリングの重要性
6
分散システムでは
多数あるアプリケーション内から
異常アプリケーションを早く特定するため
モニタリングがさらに重要
7. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
アジェンダ
7
• ヤフーのインターネット広告システム紹介
• 導入背景
• Micrometer/Prometheus説明
• Micrometer/Prometheus採用理由
• モニタリングシステム構成
• 苦労したエピソード・トラブル
• まとめ
8. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
アジェンダ
8
• ヤフーのインターネット広告システム紹介
• 導入背景
• Micrometer/Prometheus説明
• Micrometer/Prometheus採用理由
• モニタリングシステム構成
• 苦労したエピソード・トラブル
• まとめ
9. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
ヤフーのインターネット広告システム紹介
システム概要
9
FE
広告主
広告
配信
オーディエンス
• 複数アプリケーションが協調動作
• 全体で数千インスタンスが稼働
広告
出稿
広告管理システム 広告配信システム
10. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
ヤフーのインターネット広告システム紹介
システム概要
10
モニタリングシステムは広告管理システムに導入
FE
広告管理システム 広告配信システム
広告主
広告
配信
オーディエンス
広告
出稿
11. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
ヤフーのインターネット広告システム紹介
アプリケーションの動作プラットフォーム
11
• IaaS (OpenStack)
• 現在の主力プラットフォーム
• PaaS, CaaSに移行中
• PaaS (Pivotal Cloud Foundry)
• CaaS (Kubernetes)
12. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
ヤフーのインターネット広告システム紹介
アプリケーションの種類
12
フロントエンドサーバー APIサーバー
(REST or SOAP)
ストリーム処理
publisher
ストリーム処理
subscriber
メッセージブローカー
バッチサーバー
各アプリケーションが協調動作
13. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
アジェンダ
13
• ヤフーのインターネット広告システム紹介
• 導入背景
• Micrometer/Prometheus説明
• Micrometer/Prometheus採用理由
• モニタリングシステム構成
• 苦労したエピソード・トラブル
• まとめ
14. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
導入背景
14
• 既存の独自モニタリングシステム刷新
• SREを推進するための土台作り/道具整備
※既存の独自モニタリングシステムは広告管理システム独自のシステム
15. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
導入背景
独自モニタリングシステム刷新
15
• 独自モニタリングシステムの課題
• 属人化
• モニタリング項目追加に開発が必要
• カバー範囲が拡大し範疇外の機能を搭載
18. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
導入背景
Site Reliability Engineering (SRE)
18
• アプリケーション信頼性とユーザー体験を向上させる活動
• モニタリングと改善のサイクル
• レイテンシ、エラー率、トラフィック、リソース(CPU、メモリー、N/Wトラフィック…)
エンジニア アプリケーションモニタリング
改善
19. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
導入背景
Site Reliability Engineering (SRE)
19
• SREを推進するためのモニタリング
• 性能低下の検知
• エラー増加傾向の検知
• アプリケーションアップデート前後の性能比較
• 需要予測、キャパシティプランニング
20. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
アジェンダ
20
• ヤフーのインターネット広告システム紹介
• 導入背景
• Micrometer/Prometheus説明
• Micrometer/Prometheus採用理由
• モニタリングシステム構成
• 苦労したエピソード・トラブル
• まとめ
21. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
Prometheus
21
• 時系列DB + モニタリングシステム
• pull方式でメトリクス収集
• 監視対象はメトリクスが記載されたテキストを返却
定期的にPull (HTTP)
Prometheus 監視対象
# HELP node_cpu Seconds the cpus spent in each mode.
# TYPE node_cpu counter
node_cpu{cpu="cpu0",mode="iowait"} 2.94
node_cpu{cpu="cpu0",mode="system"} 937.24
node_cpu{cpu="cpu0",mode="user"} 2583.65
# …
※時系列DBは時系列データの格納・検索に特化したDB
22. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
Prometheus
データモデル
# HELP node_cpu Seconds the cpus spent in each mode.
# TYPE node_cpu counter
node_cpu{cpu="cpu0",mode="guest"} 0
node_cpu{cpu="cpu0",mode="iowait"} 2.94
node_cpu{cpu="cpu0",mode="system"} 937.24
node_cpu{cpu="cpu0",mode="user"} 2583.65
# …
22
23. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
Prometheus
データモデル
23
# HELP node_cpu Seconds the cpus spent in each mode.
# TYPE node_cpu counter
node_cpu{cpu="cpu0",mode="guest"} 0
node_cpu{cpu="cpu0",mode="iowait"} 2.94
node_cpu{cpu="cpu0",mode="system"} 937.24
node_cpu{cpu="cpu0",mode="user"} 2583.65
# …
メトリクス名 データサンプルラベル名、ラベル値
24. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
Prometheus
検索/可視化
24
• 収集したメトリクスはPromQL(独自クエリー)で検索/可視化
※CPU使用率を可視化した例
25. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
Prometheus
UI
25
• UIとしてGrafanaと連携
• ダッシュボードを作成・保存可能
Grafana Prometheusエンジニア
27. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
Prometheus
注意点
27
• Prometheus単独では冗長化できない
• 内蔵の時系列DBが冗長化できない
• 公式ドキュメントでの冗長化手段
• 同じ設定のPrometheusをもう1台設置
• 時系列DBを他製品に切り替える
※冗長化に関する公式ドキュメント
<https://prometheus.io/docs/introduction/faq/#can-prometheus-be-made-highly-available>
28. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
Micrometer
28
• メトリクス収集ライブラリ
• Dependency追加&多少の設定追加で動作
• 様々なモニタリングシステムと連携可能(※)
• Prometheus, Netflix Atlas, CloudWatch, Datadog,
Graphite, Ganglia, JMX, Influx/Telegraf, New Relic,
StatsD, SignalFx, and Wavefront
※micrometer公式サイトより引用 <https://micrometer.io/>
29. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
Micrometer
利用方法(SpringBoot1.5系)
29
Maven or Gradleの設定でdependency追加 application.yml or propertiesに設定追加
※Prometheusと連携する場合の例
これだけでメトリクス収集が開始
30. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
Micrometer
利用方法(SpringBoot2系)
30
※Prometheusと連携する場合の例
これだけでメトリクス収集が開始
Maven or Gradleの設定でdependency追加 application.yml or propertiesに設定追加
31. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
Micrometer
収集メトリクス
31
• デフォルトで収集されるメトリクス(一部)
• Web Controller(実行回数/レスポンスタイム)
• RestTemplate(実行回数/レスポンスタイム)
• Spring Cloud Streamのpub/subカウント
• JVM(各種メモリ使用状況、スレッド数、GC)
• OSリソース(CPU)
※1 上記はソースコード修正なしで収集
※2 その他の収集可能なメトリクスは以下を参照
<https://spring.io/blog/2018/03/16/micrometer-spring-boot-2-s-new-application-metrics-collector>
32. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
Micrometer
カスタムメトリクス
32
• 独自メトリクスを簡単に作成可能
private final MeterRegistry registry;
public SampleServiceImpl(MeterRegistry registry) {
this.registry = registry;
}
// カスタムメトリクス( jobTypeごとに集計)
public void execute(Job job) {
// sample_job_total{job_type="JOB1",} 3.0
// sample_job_total{job_type="JOB2",} 5.0
Counter.builder("sample_job").tags("job_type", job.getJobType().toString())
.register(registry).increment();
}
33. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
アジェンダ
33
• ヤフーのインターネット広告システム紹介
• 導入背景
• Micrometer/Prometheus説明
• Micrometer/Prometheus採用理由
• モニタリングシステム構成
• 苦労したエピソード・トラブル
• まとめ
34. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
モニタリングシステムへの要件
34
• 複数のプラットフォームで導入できること
• IaaS, PaaS, CaaS
• 監視対象アプリケーションへの導入が容易であること
• 可能であればコード修正なしで導入
• 例えばDependency or アノテーションを追加するだけ
• 閾値超えアラートを利用できること
• グラフで可視化できること(当たり前)
• 任意の監視項目・グラフを自由に追加できること
35. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
Micrometer
採用の決め手
35
• アプリケーション内部でしか収集できないメトリクスを収集
• コード修正なしで基本的なメトリクスを自動で収集
• 簡単にカスタマイズできて任意のメトリクスを追加可能
• 様々なモニタリングシステムと連携
• Prometheus, Atlas, CloudWatch, Influx, New Relic …
• Spring Boot公式サポートなので安心