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 Slide

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

    View Slide

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

    View Slide

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






    View Slide

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

    View Slide

  6. © SAKURA internet Inc.
    Prometheus とは?

    View Slide

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

    View 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 Slide

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

    View Slide

  10. View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  18. 6. Visualization
    • Grafana

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  24. © SAKURA internet Inc.
    Observability

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  35. © SAKURA internet Inc.
    Observability と Prometheus

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  41. Prometheusをはじめるには

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  46. $ 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 Slide

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

    View Slide

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

    View Slide

  49. 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 Slide

  50. 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 Slide

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

    View Slide

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

    View Slide

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

    View Slide

  54. © SAKURA internet Inc.
    おわりに

    View Slide

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

    View Slide

  56. View Slide