SpringFest2018の「Micrometer/Prometheus による大規模システムモニタリング 〜ヤフーインターネッ ト広告システムで・・・」聴講メモ

プレゼンター

池田 誠 ヤフー株式会社

インターネット広告の開発部に所属。インターネット広告の各サービスが利用する共通ライブラリの開発や、共通課題を解決する業務に従事。最近の気になるSpringプロダクトは、Netflix-Eureka。

概略

マイクロサービスアーキテクチャで構築されたシステムでは、サービスを安定稼働させるためにシステムモニタリングが重要な要素となります。Spring Boot 2では、このシステムモニタリングのためのメトリクス収集を手助けしてくれるMicrometerというライブラリが標準で組み込まれました。 ヤフーのインターネット広告システムでは、MicrometerとPrometheusを採用し数千のSpring Bootアプリケーションインスタンスをモニタリングしています。本セッションでは、MicrometerとPrometheusの簡単な紹介、大規模システムでの導入事例、導入時に遭遇したトラブルや直面している課題をお話しさせていただきます。#sf_26

聴講メモ

  • システムモニタリングを行わないと、パフォーマンス問題に気づかない

システム概要

  • 広告管理システム→広告配信システム
    • 今日紹介するモニタリングは、広告管理システムにて利用中

導入背景

  • 独自のモニタリングシステムの刷新
    • 属人化
    • モニタリング項目追加に開発が必要
    • カバー範囲に余計な領域がある
  • SRE ( Site Reliability Enginieering )
    • アプリケーションの性能とユーザの体験の両方を向上させるため

MicrometerとPrometheusの説明

  • Prometheus
    • 時系列DB+モニタリング
    • pull方式でメトリクス収集
    • 監視対象はメトリクスが記載されたテキストを返却
    • 収集したメトリクスは、PromQLという独自クエリーで検索可能
    • Grafanaを利用
    • 注意点
      • 単独では冗長化できない
        • 内蔵の時系列DBが冗長化できない
        • 公式では、同じ設定のPrometheusを設置する方法が紹介されている
  • Micrometer
    • メトリクス収集ライブラリ
    • Dependency追加&多少の設定追加で動作
    • 様々なモニタリングシステムと連携可能
    • カスタムメトリクス

MicrometerとPrometheusの採用理由

  • Micrometer
    • 複数のプラットフォームで導入可能
      • IaaS, PaaS, CaaS
    • 監視対象アプリケーションへの導入が容易
    • Spring Boot公式サポート
    • 基本的なことができる
  • Prometheus
    • pull方式なので、エージェントレス
    • 大規模システムで利用可能
    • GoogleのSRE本で紹介

モニタリングシステム

  • 数千インスタンスをPrometheusに設定するのが大変 ( 課題 )
    • サービスディスカバリ ( Netflix-Eureka ) を導入
      • Prometheusの鑑賞対象を変更する運用コストの作成
  • Grafanaで共通ダッシュボードを作成
  • ステータスコード200の割合とかもわかる
  • 監視対象が多すぎて、FD超過して監視失敗することも
  • PaaSでは、インスタンス狙い撃ちでメトリクスを収集できない
    • アプリごと割り当てたFQDN単位でしか取れない
    • pushgatewayを使い、PaaS内部からPUSH
      • これもサービスディスカバリを利用してなんとかならないかを検討中
  • メトリクスが増えすぎGC連発
    • パスパラメータを利用し、ラベルのバリエーションが多いが設定でメリスクスを収集してしまうとGCが増えた
  • 性能問題いろいろ

まとめ

良かった点

  • 監視対象側の導入は簡単・低コスト
  • カスタマイズ性抜群・属人化
  • 大規模システムでも利用可能
    • 大量メトリクスで複雑な集計をする場合は、1次集計を工夫する必要あり

悪かった点

  • PromQLの習得コストが高い
  • ナレッジやドキュメント不足で調査に苦労