Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

このセッションのゴール

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

© SAKURA internet Inc. Prometheus とは?

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

6. Visualization • Prometheusの持つWeb UI

Slide 18

Slide 18 text

6. Visualization • Grafana

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

© SAKURA internet Inc. Observability

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

Observabilityによる 横断的な監視

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

© SAKURA internet Inc. Observability と Prometheus

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

Prometheusをはじめるには

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

$ 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本体 構成ファイル

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

© SAKURA internet Inc. その他の要素

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

© SAKURA internet Inc. おわりに

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

No content