オープンソースカンファレンス2021 Online/Springにて、セミナープログラムとしてお話しました。
https://event.ospn.jp/osc2021-online-spring/session/298458
© SAKURA internet Inc.今日から始めるPrometheusによるシステム監視SAKURA internet Inc. Takuma Nakagame2021/03/06 Open Source Conference 2021 Online/Spring
View Slide
かめねこ• エバンジェリストとインフラエンジニアしてる• システム監視とかしているぺんぎん• 水族館に行きたくて仕方がない• 来週自動車免許取得予定(ウッキウキ@kameneko@kameneko1004
このセッションのゴール
このセッションのゴール「Prometheus完全に理解した」プロメテウス
このセッションのゴール「Prometheus完全に理解した」1. Prometheusの特徴とアーキテクチャ2. Prometheusを利用するには?
© SAKURA internet Inc.Prometheus とは?
Prometheusとは?• SoundCloudのエンジニアによって開発された監視システム• 時系列データベースを採用したPull型データモデル• ServiceDiscoveryによるターゲット自動追従• PromQLによるシンプルかつ柔軟なクエリ• 多種多様なExporter
Dream Hack Monitoring using Prometheus10,000 Computers500 Switcheshttps://promcon.io/2016-berlin/talks/monitoring-dreamhack-the-worlds-largest-digital-festival/
© SAKURA internet Inc.アーキテクチャ
1. Prometheus Server2. Service Discovery3. Exporter4. Alerting5. PromQL6. Visualization
1. Prometheus Server• Prometheus本体• 監視ターゲットからメトリクスを収集• シングルバイナリで実行• クエリの実行やアラート管理
2. Service Discovery• ターゲットを自動的に追従する仕組み• 対応したAPIからインスタンス情報を収集、自動追加/削除• 各種クラウドプラットフォームやOSSに対応• Azure, AWS EC2, GCP GCE, OpenStack など…
3. Exporter• 監視対象からメトリクスを収集し、Prometheusへ公開• リバースプロキシとして動作• 多種多様なExporterが存在
4. Alerting• Alertmanager を利用• アラートの重複排除や柔軟なルーティングを実現• Prometheusとは別のコンポーネントとして分離
5. PromQL• Prometheus Query Language• シンプルかつ時系列データにマッチ• ラベルによるフィルタリング• メトリクスの抽出からアラートまで利用
6. Visualization• Prometheusの持つWeb UI
6. Visualization• Grafana
Prometheus hosted by CNCF Projects• Cloud Native Computing Foundationによってホスト• Cloud Nativeなオープンソースプロジェクトを推進• The Linux Foundation配下の組織• PrometheusはCNCFの2つ目のGraduated Project
Prometheus hosted by CNCF Projects• Graduated = 卒業 → 一人前のソフトウェア• ソフトウェアの成熟度, コミュニティ, 継続性, etc…• イノベーター理論と合致• ソフトウェアの習熟度を示す
Prometheus hosted by CNCF Projects• PrometheusはCloud NativeなMonitoring Software• キーワード• コンテナ, サービスメッシュ, マイクロサービス• Observabilityを実現クラウドネイティブ技術は、パブリッククラウド、プライベートクラウド、ハイブリッドクラウドなどの近代的でダイナミックな環境において、スケーラブルなアプリケーションを構築および実行するための能力を組織にもたらします。 このアプローチの代表例に、コンテナ、サービスメッシュ、マイクロサービス、イミュータブルインフラストラクチャ、および宣言型APIがあります。これらの手法により、回復性、管理力、および可観測性のある疎結合システムが実現します。 これらを堅牢な自動化と組み合わせることで、エンジニアはインパクトのある変更を最小限の労力で頻繁かつ予測どおりに行うことができます。Cloud Native Computing Foundationは、オープンソースでベンダー中立プロジェクトのエコシステムを育成・維持して、このパラダイムの採用を促進したいと考えてます。 私たちは最先端のパターンを民主化し、これらのイノベーションを誰もが利用できるようにします。
© SAKURA internet Inc.Observability
Observability可観測性は人によって意味が異なるhttps://distributed-systems-observability-ebook.humio.com/
可観測性Observabilityシステムの情報を取得し、見える状態にすること
可観測性Observabilityシステムの情報を取得し、見える状態にすること可観測
従来のシステムのオペレーションWeb3層モデルWeb App DBユーザシンプルな構成
従来のシステムのオペレーションWeb3層モデルWeb App DBユーザ問題が発生しても、個別に追うことが出来たシンプルな構成
分散システムのオペレーション小さなサービス分散システム
分散システムのオペレーション分散システム大量のコンポーネント人間の手で追っていくことが難しくなった
Twitterの分散システムhttps://blog.twitter.com/engineering/en_us/a/2013/observability-at-twitter.html
Observabilityによる横断的な監視
© SAKURA internet Inc.Observability と Prometheus
Telemetry• Observabilityを実現するツールに求められる要素• Observability ≠ Telemetry• Telemetryなツールの導入→ Observabilityの実現ではない
TelemetryMetricsLoggingTracingTelemetryサービスを定量的に数値として計測コンポーネントに対するイベントを記録リクエストに対するイベントを記録
Metrics for Prometheus• 継続的な数値データ• 時系列データ• 統計的な集計• トレンド予測
© SAKURA internet Inc.Prometheus をはじめよう!
Prometheusをはじめるには
Prometheusをはじめるにはバイナリを実行する
Prometheusをはじめるにはバイナリを実行する以上
Prometheusをはじめるにはhttps://github.com/prometheus/prometheus/releasesReleaseページへ
Prometheusをはじめるには任意のアーキテクチャのバイナリをダウンロード
$ 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$ lsconsole_libraries consoles LICENSE NOTICE prometheus prometheus.yml promtoolPrometheusをはじめるにはダウンロードしたファイルを解凍Prometheus本体構成ファイル
$ ./prometheusPrometheusをはじめるにはバイナリを実行して完了
© SAKURA internet Inc.その他の要素
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
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
Remote Storage• 外部のデータベースに保存する仕組み• 対応したデータベースを利用• アダプタ経由/直接• PostgreSQL, Graphite, InfluxDB, M3DB, Cortex, Thanos など
PromQL• メトリクスを抽出、集計する言語• ラベルによるフィルタリング• 多種多様な関数
PromQLhttp_requests_totalhttp_requests_total{job="apiserver", handler="/api/comments"}http_requests_total{job=~".*server"}rate(http_requests_total[5m])メトリクス名のみラベルでフィルタリング正規表現でフィルタリング関数の利用
© SAKURA internet Inc.おわりに
おわりに• Cloud Nativeなシステム監視ソフトウェア• とてもシンプル・簡単• 強力なService Discovery• AlertmanagerやGrafanaとの連携• Observabilityの実現に向けて