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

今日から始めるPrometheusによるシステム監視 / Starting system monitoring with Prometheus today

kameneko
March 06, 2021

今日から始めるPrometheusによるシステム監視 / Starting system monitoring with Prometheus today

オープンソースカンファレンス2021 Online/Springにて、セミナープログラムとしてお話しました。

https://event.ospn.jp/osc2021-online-spring/session/298458

kameneko

March 06, 2021
Tweet

More Decks by kameneko

Other Decks in Technology

Transcript

  1. © SAKURA internet Inc.
    今日から始める
    Prometheus
    によるシステム監視
    SAKURA internet Inc. Takuma Nakagame
    2021/03/06 Open Source Conference 2021 Online/Spring

    View full-size slide

  2. かめねこ
    • エバンジェリストとインフラエンジニアしてる
    • システム監視とかしているぺんぎん
    • 水族館に行きたくて仕方がない
    • 来週自動車免許取得予定(ウッキウキ
    @kameneko
    @kameneko1004

    View full-size slide

  3. このセッションのゴール

    View full-size slide

  4. このセッションのゴール
    「Prometheus完全に理解した」






    View full-size slide

  5. このセッションのゴール
    「Prometheus完全に理解した」
    1. Prometheusの特徴とアーキテクチャ
    2. Prometheusを利用するには?

    View full-size slide

  6. © SAKURA internet Inc.
    Prometheus とは?

    View full-size slide

  7. Prometheusとは?
    • SoundCloudのエンジニアによって開発された監視システム
    • 時系列データベースを採用したPull型データモデル
    • ServiceDiscoveryによるターゲット自動追従
    • PromQLによるシンプルかつ柔軟なクエリ
    • 多種多様なExporter

    View full-size slide

  8. Dream Hack Monitoring using Prometheus
    10,000 Computers
    500 Switches
    https://promcon.io/2016-berlin/talks/monitoring-dreamhack-the-worlds-largest-digital-festival/

    View full-size slide

  9. © SAKURA internet Inc.
    アーキテクチャ

    View full-size slide

  10. 1. Prometheus Server
    2. Service Discovery
    3. Exporter
    4. Alerting
    5. PromQL
    6. Visualization

    View full-size slide

  11. 1. Prometheus Server
    • Prometheus本体
    • 監視ターゲットからメトリクスを収集
    • シングルバイナリで実行
    • クエリの実行やアラート管理

    View full-size slide

  12. 2. Service Discovery
    • ターゲットを自動的に追従する仕組み
    • 対応したAPIからインスタンス情報を収集、自動追加/削除
    • 各種クラウドプラットフォームやOSSに対応
    • Azure, AWS EC2, GCP GCE, OpenStack など…

    View full-size slide

  13. 3. Exporter
    • 監視対象からメトリクスを収集し、Prometheusへ公開
    • リバースプロキシとして動作
    • 多種多様なExporterが存在

    View full-size slide

  14. 4. Alerting
    • Alertmanager を利用
    • アラートの重複排除や柔軟なルーティングを実現
    • Prometheusとは別のコンポーネントとして分離

    View full-size slide

  15. 5. PromQL
    • Prometheus Query Language
    • シンプルかつ時系列データにマッチ
    • ラベルによるフィルタリング
    • メトリクスの抽出からアラートまで利用

    View full-size slide

  16. 6. Visualization
    • Prometheusの持つWeb UI

    View full-size slide

  17. 6. Visualization
    • Grafana

    View full-size slide

  18. 1. Prometheus Server
    2. Service Discovery
    3. Exporter
    4. Alerting
    5. PromQL
    6. Visualization

    View full-size slide

  19. Prometheus hosted by CNCF Projects
    • Cloud Native Computing Foundationによってホスト
    • Cloud Nativeなオープンソースプロジェクトを推進
    • The Linux Foundation配下の組織
    • PrometheusはCNCFの2つ目のGraduated Project

    View full-size slide

  20. Prometheus hosted by CNCF Projects
    • Graduated = 卒業 → 一人前のソフトウェア
    • ソフトウェアの成熟度, コミュニティ, 継続性, etc…
    • イノベーター理論と合致
    • ソフトウェアの習熟度を示す

    View full-size slide

  21. Prometheus hosted by CNCF Projects
    • PrometheusはCloud NativeなMonitoring Software
    • キーワード
    • コンテナ, サービスメッシュ, マイクロサービス
    • Observabilityを実現
    クラウドネイティブ技術は、パブリッククラウド、プライベートクラウド、ハイブリッドクラウドなどの近代
    的でダイナミックな環境において、スケーラブルなアプリケーションを構築および実行するための能力を組織
    にもたらします。 このアプローチの代表例に、コンテナ、サービスメッシュ、マイクロサービス、イミュータ
    ブルインフラストラクチャ、および宣言型APIがあります。
    これらの手法により、回復性、管理力、および可観測性のある疎結合システムが実現します。 これらを堅牢な
    自動化と組み合わせることで、エンジニアはインパクトのある変更を最小限の労力で頻繁かつ予測どおりに行
    うことができます。
    Cloud Native Computing Foundationは、オープンソースでベンダー中立プロジェクトのエコシステムを育
    成・維持して、このパラダイムの採用を促進したいと考えてます。 私たちは最先端のパターンを民主化し、こ
    れらのイノベーションを誰もが利用できるようにします。

    View full-size slide

  22. Prometheus hosted by CNCF Projects
    • PrometheusはCloud NativeなMonitoring Software
    • キーワード
    • コンテナ, サービスメッシュ, マイクロサービス
    • Observabilityを実現
    クラウドネイティブ技術は、パブリッククラウド、プライベートクラウド、ハイブリッドクラウドなどの近代
    的でダイナミックな環境において、スケーラブルなアプリケーションを構築および実行するための能力を組織
    にもたらします。 このアプローチの代表例に、コンテナ、サービスメッシュ、マイクロサービス、イミュータ
    ブルインフラストラクチャ、および宣言型APIがあります。
    これらの手法により、回復性、管理力、および可観測性のある疎結合システムが実現します。 これらを堅牢な
    自動化と組み合わせることで、エンジニアはインパクトのある変更を最小限の労力で頻繁かつ予測どおりに行
    うことができます。
    Cloud Native Computing Foundationは、オープンソースでベンダー中立プロジェクトのエコシステムを育
    成・維持して、このパラダイムの採用を促進したいと考えてます。 私たちは最先端のパターンを民主化し、こ
    れらのイノベーションを誰もが利用できるようにします。

    View full-size slide

  23. © SAKURA internet Inc.
    Observability

    View full-size slide

  24. Observability
    可観測性は人によって意味が異なる
    https://distributed-systems-observability-ebook.humio.com/

    View full-size slide

  25. 可観測性
    Observability
    システムの情報を取得し、見える状態にすること

    View full-size slide

  26. 可観測性
    Observability
    システムの情報を取得し、見える状態にすること
    可観測

    View full-size slide

  27. 従来のシステムのオペレーション
    Web3層モデル
    Web App DB
    ユーザ
    シンプルな構成

    View full-size slide

  28. 従来のシステムのオペレーション
    Web3層モデル
    Web App DB
    ユーザ
    問題が発生しても、
    個別に追うことが出来た
    シンプルな構成

    View full-size slide

  29. 分散システムのオペレーション
    小さなサービス
    分散システム

    View full-size slide

  30. 分散システムのオペレーション
    分散システム
    大量のコンポーネント
    人間の手で追っていくことが
    難しくなった

    View full-size slide

  31. Twitterの
    分散システム
    https://blog.twitter.com/engineering/en_us/a/2013/observability-at-twitter.html

    View full-size slide

  32. Observabilityによる
    横断的な監視

    View full-size slide

  33. 可観測性
    Observability
    システムの情報を取得し、見える状態にすること
    可観測

    View full-size slide

  34. © SAKURA internet Inc.
    Observability と Prometheus

    View full-size slide

  35. Telemetry
    • Observabilityを実現するツールに求められる要素
    • Observability ≠ Telemetry
    • Telemetryなツールの導入
    → Observabilityの実現ではない

    View full-size slide

  36. Telemetry
    Metrics
    Logging
    Tracing
    Telemetry
    サービスを定量的に数値として計測
    コンポーネントに対するイベントを記録
    リクエストに対するイベントを記録

    View full-size slide

  37. Telemetry
    Metrics
    Logging
    Tracing
    Telemetry
    サービスを定量的に数値として計測
    コンポーネントに対するイベントを記録
    リクエストに対するイベントを記録

    View full-size slide

  38. Metrics for Prometheus
    • 継続的な数値データ
    • 時系列データ
    • 統計的な集計
    • トレンド予測

    View full-size slide

  39. © SAKURA internet Inc.
    Prometheus をはじめよう!

    View full-size slide

  40. Prometheusをはじめるには

    View full-size slide

  41. Prometheusをはじめるには
    バイナリを実行する

    View full-size slide

  42. Prometheusをはじめるには
    バイナリを実行する
    以上

    View full-size slide

  43. Prometheusをはじめるには
    https://github.com/prometheus/prometheus/releases
    Releaseページへ

    View full-size slide

  44. Prometheusをはじめるには
    任意のアーキテクチャのバイナリをダウンロード

    View full-size slide

  45. $ wget https://github.com/prometheus/prometheus/releases/
    download/v2.25.0/prometheus-2.25.0.linux-amd64.tar.gz
    $ tar -xvf prometheus-2.25.0.linux-amd64.tar.gz
    $ cd prometheus-2.25.0.linux-amd64
    $ ls
    console_libraries consoles LICENSE NOTICE prometheus prometheus.yml promtool
    Prometheusをはじめるには
    ダウンロードしたファイルを解凍
    Prometheus本体
    構成ファイル

    View full-size slide

  46. $ ./prometheus
    Prometheusをはじめるには
    バイナリを実行して完了

    View full-size slide

  47. © SAKURA internet Inc.
    その他の要素

    View full-size slide

  48. Storage
    • 通常はローカルディスクにデータを持つ
    • 2時間毎のブロック
    • Chunks, Index, Meta
    • 直近2時間未満はオンメモリ + WAL
    • 単体での冗長化/永続化の仕組みはなし
    ./data
    ├── 01BKGV7JBM69T2G1BGBGM6KB12
    │ └── meta.json
    ├── 01BKGTZQ1SYQJTR4PB43C8PD98
    │ ├── chunks
    │ │ └── 000001
    │ ├── tombstones
    │ ├── index
    │ └── meta.json
    ├── 01BKGTZQ1HHWHV8FBJXW1Y3W0K
    │ └── meta.json
    ├── 01BKGV7JC0RY8A6MACW02A2PJD
    │ ├── chunks
    │ │ └── 000001
    │ ├── tombstones
    │ ├── index
    │ └── meta.json
    ├── chunks_head
    │ └── 000001
    └── wal
    ├── 000000002
    └── checkpoint.00000001
    └── 00000000

    View full-size slide

  49. Storage Options
    • --storage.tsdb.path
    データの保存先PATHを指定(デフォルトは./path)
    • --storage.tsdb.retention.time
    ローカルストレージのデータ保持期間を指定
    • --storage.tsdb.wal-compression
    圧縮を有効にする
    ./data
    ├── 01BKGV7JBM69T2G1BGBGM6KB12
    │ └── meta.json
    ├── 01BKGTZQ1SYQJTR4PB43C8PD98
    │ ├── chunks
    │ │ └── 000001
    │ ├── tombstones
    │ ├── index
    │ └── meta.json
    ├── 01BKGTZQ1HHWHV8FBJXW1Y3W0K
    │ └── meta.json
    ├── 01BKGV7JC0RY8A6MACW02A2PJD
    │ ├── chunks
    │ │ └── 000001
    │ ├── tombstones
    │ ├── index
    │ └── meta.json
    ├── chunks_head
    │ └── 000001
    └── wal
    ├── 000000002
    └── checkpoint.00000001
    └── 00000000

    View full-size slide

  50. Remote Storage
    • 外部のデータベースに保存する仕組み
    • 対応したデータベースを利用
    • アダプタ経由/直接
    • PostgreSQL, Graphite, InfluxDB, M3DB, Cortex, Thanos など

    View full-size slide

  51. PromQL
    • メトリクスを抽出、集計する言語
    • ラベルによるフィルタリング
    • 多種多様な関数

    View full-size slide

  52. PromQL
    http_requests_total
    http_requests_total{job="apiserver", handler="/api/comments"}
    http_requests_total{job=~".*server"}
    rate(http_requests_total[5m])
    メトリクス名のみ
    ラベルでフィルタリング
    正規表現でフィルタリング
    関数の利用

    View full-size slide

  53. © SAKURA internet Inc.
    おわりに

    View full-size slide

  54. おわりに
    • Cloud Nativeなシステム監視ソフトウェア
    • とてもシンプル・簡単
    • 強力なService Discovery
    • AlertmanagerやGrafanaとの連携
    • Observabilityの実現に向けて

    View full-size slide