Upgrade to Pro — share decks privately, control downloads, hide ads and more …

OneGrafanaですべてをモニタリング!マルチクラウド統合監視基盤への挑戦

CyberAgent
December 15, 2021

 OneGrafanaですべてをモニタリング!マルチクラウド統合監視基盤への挑戦

ABEMA はサービスの成長に伴いマルチクラウド構成へと変化していきました。

サービスにかかせないモニタリング・アラーティング環境もそれに伴い統合監視基盤としてマルチクラウド対応しました。

本セッションではそのアーキテクチャの変遷とプラットフォームとして開発者に提供しているソリューションについてお話しします。

https://developer.abema.io/2021/sessions/VfBgyMSHAT/?utm_medium=social&utm_source=slideshare

CyberAgent

December 15, 2021
Tweet

More Decks by CyberAgent

Other Decks in Technology

Transcript

  1. AbemaTV, Inc. All Rights Reserved
 Cloud Platform Team 2 About

    Mission • 基幹システムの開発・保守 • 次世代アーキテクチャの立案・浸透 • クラウドソリューションの活用戦略 @kohei347 @_tetsuya28
  2. AbemaTV, Inc. All Rights Reserved
 アジェンダ 3 1. ABEMA 監視基盤の歴史

    a. メトリクス量の変化 b. Prometheus から Thanos への移行 c. Thanos → VictoriaMetrics への移行 2. マルチクラウドおけるメトリクス管理 a. Remote Write を用いたメトリクス集約 b. Metrics Label の導入 3. マルチクラウド統合監視基盤 a. Grafana b. Grafana dashboard c. Grafana unified_alert d. 監視基盤におけるコード管理 4. まとめ
  3. AbemaTV, Inc. All Rights Reserved
 5 ダウンロード 7300万 (2018年比 約100%増)

    WAU 1303万 (2018年比 約100%増) ※ 出典 CyberAgent, inc. 2021 年通期決算発表資料 ABEMAの変化
  4. AbemaTV, Inc. All Rights Reserved
 Total Data point 1.8+ Trillion

    Active Time Series 2.3 Million Data Point Ingest Rate 88.5+ K/s Retention 1+ Year Data Size 1.4+TB 2021 年の ABEMA の メトリクス 6
  5. AbemaTV, Inc. All Rights Reserved
 • Prometheus は各コンポーネントごとに用意 • Prometheus-operator

    を利用して構築を簡略化 • Grafana からは各 Prometheus を 参照 • 独自の exporter からメトリクスを収集 Prometheus 2018 年の ABEMA の監視基盤構成 8 region: asia-east1 Grafana Micro Services Exporters Prometheus mongodb Prometheus k8s Prometheus redis Prometheus http Prometheus misc Prometheus node-gce Prometheus grpc Prometheus node-k8s
  6. AbemaTV, Inc. All Rights Reserved
 • 長期間のメトリクス利用の増加 ◦ Prometheus には1ヶ月のデータしか保存をしていなかった

    • 保持期間を伸ばすことによる OOM の発生 ◦ Grafana から参照ができなくなる事案が頻発しました 2018 年の ABEMA の監視基盤構成 9 課題 対応 • Thanos , M3 , Coretex などの long-term に適したシステム導入の検討
  7. AbemaTV, Inc. All Rights Reserved
 2019 年の ABEMA の監視基盤構成 10

    Thanos • Prometheus を利用した Thanos の導入 ◦ Prometheus の Sidecar として Thanos を導入 • Thanos は大きく5つのコンポーネントで構成 ◦ Sidecar , Store Gateway , Query Compactor , Ruler • Grafana からは Query を参照するよう一元化 region: asia-east1 Grafana Thanos Query Micro Services Prometheus Thanos SIdecar Thanos Store Gateway Thanos Compact Cloud Storage
  8. AbemaTV, Inc. All Rights Reserved
 2019 年の ABEMA の監視基盤構成 11

    Thanos • Prometheus を利用した Thanos の導入 ◦ Prometheus の Sidecar として Thanos を導入 • Thanos は大きく5つのコンポーネントで構成 ◦ Sidecar , Store Gateway , Query Compactor , Ruler • Grafana からは Query を参照するよう一元化 メトリクスのデータを GCS に長期保存 region: asia-east1 Grafana Thanos Query Micro Services Thanos Store Gateway Cloud Storage Prometheus Thanos SIdecar Thanos Compact
  9. AbemaTV, Inc. All Rights Reserved
 2019 年の ABEMA の監視基盤構成 13

    課題 対応 • Thanos Store Gateway への高負荷 ◦ Grafana からの過去メトリクスの参照時に OOM が頻発しました ◦ 長期間のメトリクスを参照時にメモリに乗り切らずエラーが発生してしまった • Thanos から VictoriaMetrics への移行
  10. AbemaTV, Inc. All Rights Reserved
 • Prometheus を利用した VictoriaMetrics の導入

    • VictoriaMetrics は Select , Insert , Storage の3層 • VictoriaMetrics の Cluster 構成 • vmselect を Grafana の datasource として追加 • vminsert に Prometheus から Remote Write • vmstorage には PersistentVolume 2020 年の ABEMA の監視基盤構成 14 VictoriaMetrics region: asia-east1 VictoriaMetrics storage VictoriaMetrics insert VictoriaMetrics select Micro Services Grafana Prometheus
  11. AbemaTV, Inc. All Rights Reserved
 2020 年の ABEMA の監視基盤構成 15

    VictoriaMetrics region: asia-east1 VictoriaMetrics storage VictoriaMetrics insert VictoriaMetrics select Micro Services Grafana Prometheus • Prometheus を利用した VictoriaMetrics の導入 • VictoriaMetrics は Select , Insert , Storage の3層 • VictoriaMetrics の Cluster 構成 • vmselect を Grafana の datasource として追加 • vminsert に Prometheus から Remote Write • vmstorage には PersistentVolume
  12. AbemaTV, Inc. All Rights Reserved
 2020 年の ABEMA の監視基盤構成 16

    VictoriaMetrics region: asia-east1 VictoriaMetrics storage VictoriaMetrics insert VictoriaMetrics select Micro Services Grafana Prometheus • Prometheus を利用した VictoriaMetrics の導入 • VictoriaMetrics は Select , Insert , Storage の3層 • VictoriaMetrics の Cluster 構成 • vmselect を Grafana の datasource として追加 • vminsert に Prometheus から Remote Write • vmstorage には PersistentVolume
  13. AbemaTV, Inc. All Rights Reserved
 2020 年の ABEMA の監視基盤構成 17

    VictoriaMetrics region: asia-east1 VictoriaMetrics storage VictoriaMetrics insert VictoriaMetrics select Micro Services Grafana Prometheus • Prometheus を利用した VictoriaMetrics の導入 • VictoriaMetrics は Select , Insert , Storage の3層 • VictoriaMetrics の Cluster 構成 • vmselect を Grafana の datasource として追加 • vminsert に Prometheus から Remote Write • vmstorage には PersistentVolume
  14. AbemaTV, Inc. All Rights Reserved
 2020 年の ABEMA の監視基盤構成 18

    VictoriaMetrics region: asia-east1 VictoriaMetrics storage VictoriaMetrics insert VictoriaMetrics select Micro Services Grafana Prometheus • Prometheus を利用した VictoriaMetrics の導入 • VictoriaMetrics は Select , Insert , Storage の3層 • VictoriaMetrics の Cluster 構成 • vmselect を Grafana の datasource として追加 • vminsert に Prometheus から Remote Write • vmstorage には PersistentVolume 長期保存 & 負荷分散など容易に行える
  15. AbemaTV, Inc. All Rights Reserved
 Remote Write を用いたメトリクス集約 20 課題

    • マルチクラウド構成により、各プラットフォームごとにメトリクスの保存が隔離されている • 1 つの Grafana ですべてのメトリクスを参照できるようにしたい 対応 • Prometheus の Remote Write 機能を用いて VictoriaMetrics に集約 • 1 つの Grafana ですべてのメトリクスの可視化を実現
  16. AbemaTV, Inc. All Rights Reserved
 2021 年現在の ABEMA の監視基盤構成 21

    region: asia-east1 region: asia-northeast1 region: ap-northeast1 Grafana VictoriaMetrics storage VictoriaMetrics insert VictoriaMetrics select Micro Services Micro Services Micro Services Grafana Grafana Remote Write Remote Write Prometheus Prometheus Prometheus
  17. AbemaTV, Inc. All Rights Reserved
 • Managed NAT (Cloud NAT)

    ◦ Private NodePool 配置 + 送信元 IP 固定 2021 年現在の ABEMA の監視基盤構成 22 GCP region: asia-northeast1 Micro Services Grafana Remote Write Cloud NAT Prometheus
  18. AbemaTV, Inc. All Rights Reserved
 2021 年現在の ABEMA の監視基盤構成 23

    AWS • NAT Gateway ◦ Private Subnet に配置 + 送信元 IP 固定 region: ap-northeast1 Micro Services Grafana Remote Write Prometheus NAT Gateway
  19. AbemaTV, Inc. All Rights Reserved
 • VictoriaMetrics + Cloud Armor

    (アクセス制限) 2021 年現在の ABEMA の監視基盤構成 24 Prometheus Remote Write Reciver region: asia-east1 Grafana VictoriaMetrics storage VictoriaMetrics insert VictoriaMetrics select Micro Services Prometheus Cloud Armor
  20. AbemaTV, Inc. All Rights Reserved
 Metrics Label の導入について 29 •

    • 元々新規のマイクロサービスを構築するたびにメトリクスを収集させるには Prometheus 側の設定を操作する必要があった ◦ 設定ミスによるトラブルをなるべく最小化したい • Prometheus の設定をいじらなくても、サービス側の設定だけで完結するように自動的にメトリク スが収集できるように変更を行った 課題 対応
  21. AbemaTV, Inc. All Rights Reserved
 • PrometheusOperator で CustomResouce 作成

    • ServiceMonitor を利用して、Kubernetes 上の ServiceResource を参照 Metrics Label の導入について 30 ServiceMonitor
  22. AbemaTV, Inc. All Rights Reserved
 • Service Resource に取得したいメトリクスの 指定された

    label を付与 • HTTP 関連のメトリクスが取得したい場合 ABEMA 独自の label を付与する Metrics Label の導入について 31 apiVersion: v1 kind: Service metadata: name: abema namespace: abema labels: enableHttpMetrics: 'true' 開発者
  23. AbemaTV, Inc. All Rights Reserved
 • ServiceMonitor を利用して Prometheus が

    scraping するルールを記述 • Prometheus と紐付ける label を設定 • ServiceResource と一致する label を対象 • メトリクスの endpoints などを記述 Metrics Label の導入について 32 apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: http-port-metrics labels: prometheus: http spec: selector: matchLabels: enableHttpMetrics: 'true' namespaceSelector: any: true endpoints: - port: http-metrics path: /http-metrics interval: 20s 管理者
  24. AbemaTV, Inc. All Rights Reserved
 • Prometheus 側で紐付ける ServiceMonitor を設定

    ◦ ServiceMonitor で設定した label を用いる • Scraping の対象の変更が容易 ◦ Prometheus が複数存在している場合に、 label 変更し、 scraping の対象が変更できる Metrics Label の導入について 33 apiVersion:monitoring.coreos.com/v1 kind: Prometheus metadata: labels: prometheus: http namespace: monitoring spec: serviceMonitorSelector: matchLabels: prometheus: http 管理者
  25. AbemaTV, Inc. All Rights Reserved
 Grafana 35 Grafana 構成 •

    Google IAP を用いたユーザ認証 • DB を外出しすることによる Grafana の冗長化
  26. AbemaTV, Inc. All Rights Reserved
 Grafana dashboard 44 Grafana ダッシュボード変数

    external_labels: platform: gcp platform_id: gcp-abema-xxx Prometheus external_labels
  27. AbemaTV, Inc. All Rights Reserved
 Grafana dashboard 45 Grafana ダッシュボード変数

    platform ラベル platform_id ラベル label_values(go_gorutines, platform) label_values( go_goroutines{platform="$platform"}, platform_id)
  28. AbemaTV, Inc. All Rights Reserved
 • 対象のメトリクスを保持している Prometheus に対してアラートルールを設定する必要 Grafana

    unified_alert 47 Prometheus Alertmanager の課題点 サービス開発者がインフラ構成を把握する必要がある
  29. AbemaTV, Inc. All Rights Reserved
 Grafana unified_alert 48 unified_alert •

    Grafana 8 系から導入されたアラートシステム • Victoria Metrics へクエリが可能 • アラートがダッシュボードに紐付かない • 通知メッセージやポリシーが柔軟に設定可能
  30. AbemaTV, Inc. All Rights Reserved
 Grafana unified_alert 49 external-dns のCPU使用率が80%を超えたときに

    warning を発火する例 Predefined Alert • 頻繁に使われるアラートを事前定義 ◦ 開発者はいくつかの項目だけ設定 • GitOps で管理 ◦ GitHub に push するだけで設定完了
  31. AbemaTV, Inc. All Rights Reserved
 • クラスタを組むインスタンスの DNS を設定ファイルに記述する必要 ◦

    Kubernetes StatefulSet を用いることで解決 Grafana unified_alert unified_alert の課題点 Deployment における Pod DNS 名 例: grafana-<ランダム文字列>-<ランダム文字列> ランダムな文字列が Pod に割り当てられる StatefulSet における Pod DNS 名 例: grafana-0, grafana-1 Suffix が順番に割り当てられる
  32. AbemaTV, Inc. All Rights Reserved
 • クラスタを組むインスタンスの DNS を設定ファイルに記述する必要 ◦

    Kubernetes StatefulSet を用いることで解決 Grafana unified_alert unified_alert の課題点 Deployment における Pod DNS 名 例: grafana-<ランダム文字列>-<ランダム文字列> ランダムな文字列が Pod に割り当てられる StatefulSet における Pod DNS 名 例: grafana-0, grafana-1 Suffix が順番に割り当てられる
  33. AbemaTV, Inc. All Rights Reserved
 監視基盤におけるコード管理 53 Single Source of

    Truth として GitHub を利用 Dashboard sidecar の導入 unified_alert を 管理する仕組みの導入 コード管理のモチベーション • GCP / GKE の障害や手動での操作でデータが消えてしまった場合の復元 • 一度適用した設定を別環境でも展開
  34. AbemaTV, Inc. All Rights Reserved
 監視基盤におけるコード管理 55 ConfigMap Grafana pod

    Dashboard sidecar の導入 • GitHub の変更をトリガーに PipeCD で ConfigMap を生成 • 生成された ConfigMap の内容を動的に反映
  35. AbemaTV, Inc. All Rights Reserved
 • GitHub の変更をトリガーに PipeCD で

    ConfigMap を生成 • 生成された ConfigMap の内容を unified_alert へ登録 監視基盤におけるコード管理 56 ConfigMap Grafana Alert Manager Grafana unified_alert を管理する仕組みの導入
  36. AbemaTV, Inc. All Rights Reserved
 • Single Source of Truth

    として GitHub を利用 • Dashboard sidecar の導入 • unified_alert を管理するサービスの導入 監視基盤におけるコード管理 57 コード管理方法 • 開発者は GitHub への PR を投げるだけで設定を変更することが可能に • 複数環境への設定展開も容易に • 汎用性の高いアラートを数行で追加することが可能に •
  37. AbemaTV, Inc. All Rights Reserved
 まとめ 59 統合監視基盤に対する取り組み 今後の展望 •

    マルチクラウド・マルチリージョンに対応するための監視基盤の刷新 • 利用者が簡単に安心して使える基盤の構築 • Grafana unified_alert への完全移行 • Loki & Grafana Tempo によるロギング・トレーシングを含めた統合監視基盤