2.6K Views
November 16, 18
スライド概要
「Spring Fest 2018」で発表した資料です。
http://springfest2018.springframework.jp/
2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp
Micrometer/Prometheusによる 大規模システムモニタリング 〜ヤフーインターネット広告システムでの導入事例〜 Spring Fest 2018 2018年10月31日 ヤフー株式会社 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 池田 誠
自己紹介 池田 誠 ヤフー株式会社 所属:インターネット広告の開発部 仕事: インターネット広告システムの共通機能開発 新技術の検証・導入サポート 言語:C, C++, Java, Kotlin, Python, Go(勉強中) 趣味:ゲーム, スキー Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 2
はじめに ヤフーのインターネット広告システムでは、Micrometerと Prometheusを採用したモニタリングシステムを構築し、 3000+のSpring Bootアプリケーションインスタンスの パフォーマンスモニタリングをしています。 本日は、MicrometerとPrometheusの簡単な紹介、大規模 システムでの導入事例として、導入時に遭遇したトラブル や直面している課題をお話しさせていただきます。 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 3
システムモニタリングの重要性 システムモニタリングを行わないと どんなトラブル起こりますか? Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 4
システムモニタリングの重要性 • パフォーマンス問題に気付かない • エラーの増加に気付かない • 障害を解析するための情報集めに苦労する など サービスを安定して稼働/運用することができない Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 5
システムモニタリングの重要性 分散システムでは 多数あるアプリケーション内から 異常アプリケーションを早く特定するため モニタリングがさらに重要 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 6
アジェンダ • • • • • • • ヤフーのインターネット広告システム紹介 導入背景 Micrometer/Prometheus説明 Micrometer/Prometheus採用理由 モニタリングシステム構成 苦労したエピソード・トラブル まとめ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 7
アジェンダ • • • • • • • ヤフーのインターネット広告システム紹介 導入背景 Micrometer/Prometheus説明 Micrometer/Prometheus採用理由 モニタリングシステム構成 苦労したエピソード・トラブル まとめ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 8
ヤフーのインターネット広告システム紹介 システム概要 広告管理システム 広告配信システム 広告主 オーディエンス 広告 出稿 FE 広告 配信 • 複数アプリケーションが協調動作 • 全体で数千インスタンスが稼働 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 9
ヤフーのインターネット広告システム紹介 システム概要 広告管理システム 広告配信システム 広告主 オーディエンス 広告 出稿 FE 広告 配信 モニタリングシステムは広告管理システムに導入 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 10
ヤフーのインターネット広告システム紹介 アプリケーションの動作プラットフォーム • IaaS (OpenStack) • 現在の主力プラットフォーム • PaaS, CaaSに移行中 • PaaS (Pivotal Cloud Foundry) • CaaS (Kubernetes) Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 11
ヤフーのインターネット広告システム紹介 アプリケーションの種類 フロントエンドサーバー APIサーバー (REST or SOAP) バッチサーバー メッセージブローカー ストリーム処理 publisher Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. ストリーム処理 subscriber 各アプリケーションが協調動作 12
アジェンダ • • • • • • • ヤフーのインターネット広告システム紹介 導入背景 Micrometer/Prometheus説明 Micrometer/Prometheus採用理由 モニタリングシステム構成 苦労したエピソード・トラブル まとめ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 13
導入背景 • 既存の独自モニタリングシステム刷新 • SREを推進するための土台作り/道具整備 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. ※既存の独自モニタリングシステムは広告管理システム独自のシステム 14
導入背景 独自モニタリングシステム刷新 • 独自モニタリングシステムの課題 • 属人化 • モニタリング項目追加に開発が必要 • カバー範囲が拡大し範疇外の機能を搭載 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 15
導入背景 独自モニタリングシステム刷新 利用者/対象者 ビジネスサイドの 企画や業務運用者 対象領域 刷新前の利用ツール ビジネス インテリジェンス 業務運用 (ビジネスサイドの担当者 へアラートなど) システム運用 独自の モニタリングシステム (ジョブ実行・ログ確認) 開発者 システム性能可視化 システム死活監視 (アラート) Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. ヤフー全社共通の 死活監視サービス 16
導入背景 独自モニタリングシステム刷新 利用者/対象者 ビジネスサイドの 企画や業務運用者 対象領域 刷新前の利用ツール ビジネス インテリジェンス 業務運用 (ビジネスサイドの担当者 へアラートなど) システム運用 システム性能可視化 システム死活監視 (アラート) Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 移行 専用ツール利用 移行 各アプリケーションごと実施 移行 ジョブコントローラー/ ワークフローエンジン利用 (NiFiやAirflowなど) 移行 新モニタリングシステム 継続 ヤフー全社共通の 死活監視サービス 独自の モニタリングシステム (ジョブ実行・ログ確認) 開発者 刷新後の利用ツール ヤフー全社共通の 死活監視サービス 17
導入背景 Site Reliability Engineering (SRE) • アプリケーション信頼性とユーザー体験を向上させる活動 • モニタリングと改善のサイクル • レイテンシ、エラー率、トラフィック、リソース(CPU、メモリー、N/Wトラフィック…) 改善 エンジニア Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. モニタリング アプリケーション 18
導入背景 Site Reliability Engineering (SRE) • SREを推進するためのモニタリング • 性能低下の検知 • エラー増加傾向の検知 • アプリケーションアップデート前後の性能比較 • 需要予測、キャパシティプランニング Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 19
アジェンダ • • • • • • • ヤフーのインターネット広告システム紹介 導入背景 Micrometer/Prometheus説明 Micrometer/Prometheus採用理由 モニタリングシステム構成 苦労したエピソード・トラブル まとめ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 20
Prometheus • 時系列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 #… Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 監視対象 ※時系列DBは時系列データの格納・検索に特化したDB 21
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 #… Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 22
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 #… Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 23
Prometheus 検索/可視化 • 収集したメトリクスはPromQL(独自クエリー)で検索/可視化 ※CPU使用率を可視化した例 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 24
Prometheus UI • UIとしてGrafanaと連携 • ダッシュボードを作成・保存可能 エンジニア Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. Grafana Prometheus 25
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 26
Prometheus 注意点 • Prometheus単独では冗長化できない • 内蔵の時系列DBが冗長化できない • 公式ドキュメントでの冗長化手段 • 同じ設定のPrometheusをもう1台設置 • 時系列DBを他製品に切り替える ※冗長化に関する公式ドキュメント Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. <https://prometheus.io/docs/introduction/faq/#can-prometheus-be-made-highly-available> 27
Micrometer • メトリクス収集ライブラリ • Dependency追加&多少の設定追加で動作 • 様々なモニタリングシステムと連携可能(※) • Prometheus, Netflix Atlas, CloudWatch, Datadog, Graphite, Ganglia, JMX, Influx/Telegraf, New Relic, StatsD, SignalFx, and Wavefront Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. ※micrometer公式サイトより引用 <https://micrometer.io/> 28
Micrometer 利用方法(SpringBoot1.5系) これだけでメトリクス収集が開始 Maven or Gradleの設定でdependency追加 ※Prometheusと連携する場合の例 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. application.yml or propertiesに設定追加 29
Micrometer 利用方法(SpringBoot2系) これだけでメトリクス収集が開始 Maven or Gradleの設定でdependency追加 ※Prometheusと連携する場合の例 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. application.yml or propertiesに設定追加 30
Micrometer 収集メトリクス • デフォルトで収集されるメトリクス(一部) • 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> Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 31
Micrometer カスタムメトリクス • 独自メトリクスを簡単に作成可能 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(); } Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 32
アジェンダ • • • • • • • ヤフーのインターネット広告システム紹介 導入背景 Micrometer/Prometheus説明 Micrometer/Prometheus採用理由 モニタリングシステム構成 苦労したエピソード・トラブル まとめ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 33
モニタリングシステムへの要件 • 複数のプラットフォームで導入できること • IaaS, PaaS, CaaS • 監視対象アプリケーションへの導入が容易であること • 可能であればコード修正なしで導入 • 例えばDependency or アノテーションを追加するだけ • 閾値超えアラートを利用できること • グラフで可視化できること(当たり前) • 任意の監視項目・グラフを自由に追加できること Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 34
Micrometer 採用の決め手 • アプリケーション内部でしか収集できないメトリクスを収集 • コード修正なしで基本的なメトリクスを自動で収集 • 簡単にカスタマイズできて任意のメトリクスを追加可能 • 様々なモニタリングシステムと連携 • Prometheus, Atlas, CloudWatch, Influx, New Relic … • Spring Boot公式サポートなので安心 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 35
Micrometer 要件に対する可否 ○ 複数のプラットフォームで導入できること • Javaなのでプラットフォームに左右されない ○ 監視対象アプリケーションへの導入が容易であること • コード修正不要 ー 閾値超えアラートを利用できること • Micrometerはメトリクス収集が役割なので検討範囲外 ー グラフで可視化できること(当たり前) • Micrometerはメトリクス収集が役割なので検討範囲外 ○ 任意の監視項目・グラフを自由に追加できること • カスタムメトリクスで任意項目を追加 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 36
Prometheus 採用の決め手 • 時系列DBなのでグラフ描画用途に最適 • Pull方式なのでエージェントレス • 大規模システム利用可能 • 1万ノード監視の実績 • SRE本で紹介 • コミュニティーが活発 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 37
Prometheus 要件に対する可否 △ 複数のプラットフォームで導入できること • pull方式のためPaaS監視で課題あり(※) ○ 監視対象アプリケーションへの導入が容易であること • Micrometerとの連携の場合、コード修正不要 ○ 閾値超えアラートを利用できること • アラート機能あり ○ グラフで可視化できること(当たり前) • Grafanaとの連携でダッシュボードを利用 ○ 任意の監視項目・グラフを自由に追加できること • Grafanaとの連携で任意グラフを追加 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. ※PaaSにデプロイされたインスタンス監視は一手間加えており詳細を後述 38
アジェンダ • • • • • • • ヤフーのインターネット広告システム紹介 導入背景 Micrometer/Prometheus説明 Micrometer/Prometheus採用理由 モニタリングシステム構成 苦労したエピソード・トラブル まとめ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 39
モニタリングシステム詳細 構成 Alertmanager アラート (Eメール、チャットツール) 各アプリケーションのインスタンス アラート データ取得 参照 Grafana pull Prometheus エンジニア Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. ※1 PaaSにデプロイされたインスタンス監視は一手間加えており詳細を後述 ※2 CaaSは対応作業中 40
モニタリングシステム詳細 構成 Alertmanager アラート (Eメール、チャットツール) 各アプリケーションのインスタンス アラート データ取得 参照 Grafana pull Prometheus エンジニア Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. ※1 PaaSにデプロイされたインスタンス監視は一手間加えており詳細を後述 ※2 CaaSは対応作業中 41
モニタリングシステム詳細 構成 Alertmanager アラート (Eメール、チャットツール) 各アプリケーションのインスタンス アラート データ取得 参照 Grafana pull Prometheus エンジニア Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. ※1 PaaSにデプロイされたインスタンス監視は一手間加えており詳細を後述 ※2 CaaSは対応作業中 42
モニタリングシステム詳細 構成 Alertmanager アラート (Eメール、チャットツール) 各アプリケーションのインスタンス アラート データ取得 参照 Grafana pull Prometheus エンジニア Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. ※1 PaaSにデプロイされたインスタンス監視は一手間加えており詳細を後述 ※2 CaaSは対応作業中 43
モニタリングシステム詳細 数千インスタンス監視の運用課題 • 数千インスタンスをPrometheusに設定する運用コストが高 • インスタンスの増減のたびに設定変更する運用が大変 # Prometheusの設定ファイル - targets: - app10.localdomain:8080 - app11.localdomain:8080 - app12.localdomain:8080 - app13.localdomain:8080 - app14.localdomain:8080 #… # 以下省略 # 数千台を並べる Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 44
モニタリングシステム詳細 サービスディスカバリ(実装中) • サービスディスカバリ (Netflix-Eureka) を導入 • Prometheusの監視対象を変更する運用コストの削減 Eureka連携ツール ホスト登録 (インスタンス起動時) 設定ファイル登録 (ホスト一覧) Spring Bootの eureka-clientstarterを利用 Eurekaサーバー pull Prometheus アプリケーションのインスタンス Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 45
モニタリングシステム詳細 特徴 • Grafanaに共通ダッシュボードを用意 • 監視対象の追加後すぐに基本的なグラフは参照可能 • 利用者は権限の制約なしで自由に利用可能 • 利用者は任意のメトリクス/グラフを自由に追加可能 • 利用者は全アプリのグラフを参照可能 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 46
実際の動作画面紹介 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 47
モニタリングシステム構成 稼働状況 • 監視インスタンス数 • 3400インスタンス 監視対象を約500台追加したこと でFDのMaxOpenFilesを超過して しまい数時間、データ収集失敗 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 48
モニタリングシステム構成 稼働状況 • ディスク使用量 • 1週間で約15GB増加 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 49
モニタリングシステム構成 稼働状況 • 1回(※)で収集されるメトリクス(サンプル)数 • 120万+ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. ※1分に1回収集 50
モニタリングシステム構成 稼働状況 • Prometheusサーバースペック • VM (IaaS) • CPU: 2.10GHz 8core • Memory: 16GB • Storage: 500GB (OpenStack Cinder Volume) • 必要に応じて増量 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 51
アジェンダ • • • • • • • ヤフーのインターネット広告システム紹介 導入背景 Micrometer/Prometheus説明 Micrometer/Prometheus採用理由 モニタリングシステム構成 苦労したエピソード・トラブル まとめ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 52
事例1: PaaS上インスタンス監視 課題 • インスタンス狙い撃ちでメトリクス収集できない • PaaSにデプロイしたアプリへの接続はアプリごと割り当てたFQDNで接続 • リクエストはルーターによって毎回バランス • 個別のインスタンスにはFQDNが割り当て不可能 PaaS リクエストごとに異なる インスタンスにバランス メトリクス収集 FQDN (app1.localdomain) PaaSのルーター Prometheus アプリケーションのインスタンス Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 53
事例1: PaaS上インスタンス監視 Pushgateway方式 • Pushgatewayを使いPaaS内部からpush push Micrometerは設定の 追加だけで定期的にPush PaaS メトリクス収集 Prometheus Pushgateway PaaSのルーター アプリケーションのインスタンス push PushgatewayはPrometheusのサブプロダクトで一時的にメトリクスを保存するサーバー Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 54
事例1: PaaS上インスタンス監視 Pushgateway導入後の構成 Alertmanager IaaS アラート (Eメール、チャットツール) アラート 各アプリケーションのインスタンス データ取得 参照 Grafana エンジニア Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. PaaS pull Prometheus push Pushgateway 55
事例1: PaaS上インスタンス監視 補足 Pushgatewayの多用は オススメされていないので、 引き続き、 別の方式を検討中 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 56
事例2: メトリクスが増えすぎGC連発 発生トラブル • Micrometer導入後リリースして数時間するとGC連発 • APIのレイテンシが超悪化 • サービス継続不可 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 57
事例2: メトリクスが増えすぎGC連発 発生条件 • JAX-RSを使っている • Micrometerがv1.0.4以下である • Spring Bootがv2.0.2以下である • Pathパラメーターを利用しているAPIを作成している // APIの例 @GET @Path("/info/{userId} ") String userInfo(@PathParam("userId") String userId) { // ... } Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. ※トラブル当時、Micrometer v1.0.3を利用 58
事例2: メトリクスが増えすぎGC連発 原因 • Pathパラメーターを利用すると メトリクス(ラベル)が爆増しメモリ圧迫(※) http_server_requests_seconds_count{exception="None",method="GET",status="200",uri="/info/1",} 1.0 http_server_requests_seconds_sum{exception="None",method="GET",status="200",uri="/info/1",} 0.004786132 http_server_requests_seconds_max{exception="None",method="GET",status="200",uri="/info/1",} 0.004786132 http_server_requests_seconds_count{exception="None",method="GET",status="200",uri="/info/2",} 1.0 http_server_requests_seconds_sum{exception="None",method="GET",status="200",uri="/info/2",} 0.002610582 http_server_requests_seconds_max{exception="None",method="GET",status="200",uri="/info/2",} 0.002610582 # ・・・ http_server_requests_seconds_count{exception="None",method="GET",status="200",uri="/info/99999",} 1.0 http_server_requests_seconds_sum{exception="None",method="GET",status="200",uri="/info/99999",} 0.003471098 http_server_requests_seconds_max{exception="None",method="GET",status="200",uri="/info/99999",} 0.003471098 # 爆増 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. ※Micrometerは収集したメトリクスをオンメモリで保存 59
事例2: メトリクスが増えすぎGC連発
解決方法
• Micrometerと連携(に介入)する
Apache CXFのインターセプターを自作
• Pathのパターンごとにメトリクス収集
http_server_requests_seconds_count{exception="None",method="GET",status="200",uri="/info/{userId}",} 1.0
http_server_requests_seconds_sum{exception="None",method="GET",status="200",uri="/info/{userId}",} 0.004786132
http_server_requests_seconds_max{exception="None",method="GET",status="200",uri="/info/{userId}",} 0.004786132
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
※JAX-RS実装はApache CXFを利用
60
事例2: メトリクスが増えすぎGC連発 補足事項 • Spring Web MVCを使っている場合は 手を加えなくてもPathパターンごとにメトリクスを収集 # @RequestMapping("/info/{userId}") http_server_requests_seconds_count{…., uri="/info/{userId}",} • どの程度までメトリクス数(ラベル)を増やせるか検証 • 3〜5万メトリクス(ラベル)が限界の目安 • メモリ枯渇以前にpullした時のレスポンスが数秒になる Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 61
事例2: メトリクスが増えすぎGC連発
補足事項
•
Micrometer1.0.5からはJAX-RSの場合、
uriが全て”UNKNOWN”にされるのでメモリ枯渇はおきない
•
これも課題になったが自作インターセプターの利用で解決
http_server_requests_seconds_count{…, uri="UNKNOWN",} 1.0
http_server_requests_seconds_sum{…, uri="UNKNOWN",} 0.004786132
http_server_requests_seconds_max{…, uri="UNKNOWN",} 0.004786132
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
62
事例2: メトリクスが増えすぎGC連発 補足事項 カスタムメトリクス作成時 メトリクス数が爆増しないように ラベル付けにも注意 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 63
事例3: 現在対応中の性能問題 問題/発生条件 Prometheusで性能問題発生 • 問題 • 複雑なクエリーのレスポンスが悪化 (数分) • 複雑なクエリーを並列実行するとOOMキラー発動 • ボトルネックは、CPU (1coreが100%張りつき)、メモリ • 発生条件 • 1時系列あたりデータ数が数万になるメトリクス対して集計 • 集計コストが高いクエリーを実行 • 集計期間が長い (数週間分) Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. ※サーバースペック:2.10GHz 8core、16GB メモリー 64
事例3: 現在対応中の性能問題 高コストクエリー • 1時系列あたりの集計対象メトリクス(データサンプル)数=約40000 • アプリは約1000インスタンスで構成 • アプリ全体の5分ごとの平均レスポンスタイム(累計レスポンスタイム÷実行回数)を集計 • ステータスコード、URI、methodごとに集計する ステータスコード、URI、methodごとの、5分間の累計レスポンスタイム sum(increase(http_server_requests_seconds_sum{job="app1"}[5m])) by (status,uri,method) / sum(increase( http_server_requests_seconds_count{job="app1"}[5m])) by (status,uri,method) ステータスコード、URI、methodごとの、5分間の累計実行回数 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 65
事例3: 現在対応中の性能問題
解決方法(検証中)
•
Prometheusの1次集計機能(RecordingRule)を利用
groups:
- name: example
interval: 60s # 1次集計間隔
rules:
# 5分間あたりのアプリ全体の累計レスポンスタイムをstatus、uri、methodごとに一次集計する
- record: job:http_server_requests_seconds_sum:app1:increase5m:sum
expr: sum(increase(http_server_requests_seconds_sum{job="app1"}[5m])) by (status,uri,method)
# 5分間あたりのアプリ全体の累計実行回数をstatus、uri、methodごとに一次集計する
- record: job:http_server_requests_seconds_count:app1:increase5m:sum
expr: sum(increase(http_server_requests_seconds_count{job="app1"}[5m])) by (status,uri,method)
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
66
事例3: 現在対応中の性能問題 改善効果(検証結果) • 改善効果 約45秒 約0.4秒 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 67
アジェンダ • • • • • • • ヤフーのインターネット広告システム紹介 導入背景 Micrometer/Prometheus説明 Micrometer/Prometheus採用理由 モニタリングシステム構成 苦労したエピソード・トラブル まとめ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 68
良かった点 • 監視対象側の導入は簡単・低コスト • 手順はDependencyの追加程度なのであっという間に利用アプリが増えた • カスタマイズ性抜群 = 属人化が解消 • アプリ開発者がカスタムメトリクスを使い必要なメトリクスを追加してくれた • アプリ開発者が見たいグラフを自由に追加してくれた Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 69
苦労した点 • PromQL習得に学習コストがかかる • ナレッジ/ドキュメント不足で調査に苦労した • 例えばPushgatewayにpushする設定方法はソース解析 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 70
本日持ち帰っていただきたいこと Micrometer/Prometheusは • 監視対象側の導入は簡単・低コスト • カスタマイズ性が抜群 • 大規模システムにおいても難なく利用可能(※) Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. ※大量メトリクスに対して複雑な集計をする場合は、1次集計する工夫が必要 71
ご静聴ありがとうございました Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 72