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

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

Dcea5102277e5883c29e0b15e51ae1bd?s=47 kameneko
March 06, 2021

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

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

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

Dcea5102277e5883c29e0b15e51ae1bd?s=128

kameneko

March 06, 2021
Tweet

Transcript

  1. © SAKURA internet Inc. 今日から始める Prometheus によるシステム監視 SAKURA internet Inc.

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

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

  4. このセッションのゴール 「Prometheus完全に理解した」 プ ロ メ テ ウ ス

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

  6. © SAKURA internet Inc. Prometheus とは?

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

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

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

  10. None
  11. 1. Prometheus Server 2. Service Discovery 3. Exporter 4. Alerting

    5. PromQL 6. Visualization
  12. 1. Prometheus Server • Prometheus本体 • 監視ターゲットからメトリクスを収集 • シングルバイナリで実行 •

    クエリの実行やアラート管理
  13. 2. Service Discovery • ターゲットを自動的に追従する仕組み • 対応したAPIからインスタンス情報を収集、自動追加/削除 • 各種クラウドプラットフォームやOSSに対応 •

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

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

  16. 5. PromQL • Prometheus Query Language • シンプルかつ時系列データにマッチ • ラベルによるフィルタリング

    • メトリクスの抽出からアラートまで利用
  17. 6. Visualization • Prometheusの持つWeb UI

  18. 6. Visualization • Grafana

  19. 1. Prometheus Server 2. Service Discovery 3. Exporter 4. Alerting

    5. PromQL 6. Visualization
  20. Prometheus hosted by CNCF Projects • Cloud Native Computing Foundationによってホスト

    • Cloud Nativeなオープンソースプロジェクトを推進 • The Linux Foundation配下の組織 • PrometheusはCNCFの2つ目のGraduated Project
  21. Prometheus hosted by CNCF Projects • Graduated = 卒業 →

    一人前のソフトウェア • ソフトウェアの成熟度, コミュニティ, 継続性, etc… • イノベーター理論と合致 • ソフトウェアの習熟度を示す
  22. Prometheus hosted by CNCF Projects • PrometheusはCloud NativeなMonitoring Software •

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

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

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

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

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

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

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

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

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

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

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

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

  35. © SAKURA internet Inc. Observability と Prometheus

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

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

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

  39. Metrics for Prometheus • 継続的な数値データ • 時系列データ • 統計的な集計 •

    トレンド予測
  40. © SAKURA internet Inc. Prometheus をはじめよう!

  41. Prometheusをはじめるには

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

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

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

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

  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本体 構成ファイル
  47. $ ./prometheus Prometheusをはじめるには バイナリを実行して完了

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

  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
  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
  51. Remote Storage • 外部のデータベースに保存する仕組み • 対応したデータベースを利用 • アダプタ経由/直接 • PostgreSQL,

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

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

  54. © SAKURA internet Inc. おわりに

  55. おわりに • Cloud Nativeなシステム監視ソフトウェア • とてもシンプル・簡単 • 強力なService Discovery •

    AlertmanagerやGrafanaとの連携 • Observabilityの実現に向けて
  56. None