Prometheusをざっくり解説

114 Views

July 24, 21

スライド概要

profile-image

インフラ系エンジニアやってるJK。

関連スライド

各ページのテキスト
1.

Prometheusをざっくり解説 @yassy

2.

2 自己紹介 SIerで働くインフラ系エンジニア Kubernetes/OpenShift Skull The Mind etc...

3.

3 01 Prometheusとは? 02 Prometheusを構成する要素 03 各コンポーネントをざっくり説明

4.

4 Prometheus is 何? ⚫ 音楽共有サービスのSoundCloud社が開発した 新しい監視システム ⚫ 各監視対象に監視エージェントを導入する必要が ある ⚫ Prometheusが監視エージェントからメトリクスを 取得する、いわばPull型のモデル ⚫ 監視データをメトリクスという形で管理している

5.

5 メトリクスのサンプル ⚫ curlで取得したメトリクス(抜粋) [root@prometheus ~]# curl http://prometheus:9090/metrics # HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles. # TYPE go_gc_duration_seconds summary go_gc_duration_seconds{quantile="0"} 1.6331e-05 go_gc_duration_seconds{quantile="0.25"} 4.7408e-05 go_gc_duration_seconds{quantile="0.5"} 5.4744e-05 go_gc_duration_seconds{quantile="0.75"} 6.4862e-05 go_gc_duration_seconds{quantile="1"} 0.00176476 go_gc_duration_seconds_sum 0.003404667 go_gc_duration_seconds_count 31 # HELP go_goroutines Number of goroutines that currently exist. # TYPE go_goroutines gauge go_goroutines 38 # HELP go_info Information about the Go environment. # TYPE go_info gauge go_info{version="go1.16.5"} 1

6.

6 ⚫ 昨今のクラウド/コンテナ環境においては、動的なサーバのスケールが当たり前になっている ⚫ 上記のように監視対象が動的に変化するシステムにおいては、 既存の監視ツール(例:Zabbixなど)は不向き ⚫ Prometheusでは、サービスディスカバリと呼ばれる機能で対象の情報を自動的に取得可能 監視対象 監視対象 Zabbix 動的な監視対象の追加が 難しい

8.

8 Prometheus serverについて ⚫ Prometheusの本体。監視対象にメトリクス取得要求(GET)を投げて情報を収集する ⚫ バイナリを実行するだけで起動するため、インストール作業は不要。べんり GETリクエスト 監視対象 (exporter) Prometheus server メトリクス取得

9.

9 exporterについて ⚫ Prometheusが監視対象のメトリクスにアクセスするためのインタフェース ⚫ Prometheusの代わりに、各監視対象の情報を取得/加工する役割がある ⚫ 収集した情報はHTTPを通じて取得できる 監視対象ホスト 監視対象(ノード、アプリケーション) ごとに専用のexporterを導入する 必要がある exporter GETリクエスト Prometheus server exporter メトリクス取得

10.

10 サービスディスカバリ ⚫ 監視対象がスケールした際、自動的に監視対象を追加する仕組み ⚫ 対応したAPIを使用することで、監視対象の増減を取得できるため、自動的に対象を増減させることができる 頻繁にスケールしがちなコンテナやクラウドと相性が良い 監視対象 (exporter) 監視対象 (exporter) Prometheus server 追加されたサーバに対しても 自動で監視追加 APIでサーバ一覧を取得しているため、 サーバの増減状況を確認できる

11.

11 Alertmanagerについて ⚫ Prometheusで検知したアラートを発報するための管理システム ⚫ 通知先としては以下に対応している − メール − Slack − RestAPI etc... ⚫ PromQL(Prometheusで使用されるクエリ言語)でアラートの条件を指定する ⚫ Alertmanagerは発火(fire)したアラートを任意のツールに通知する ⚫ アラート大量発生を防ぐため、アラートの重複排除や、グルーピングも可能

12.

12 Alertmanagerでアラートをメール送信してみる ⚫ 監視対象がダウンした場合にアラートを発火させるサンプル(rules.yml) groups: - name: alertexample rules: - alert: InstanceDown expr: up == 0 # up==0で監視対象が停止していることを示す for: 1m # 間欠障害を考慮し、1分障害が発生していた場合にアラートを発火 GETリクエスト 監視対象 (exporter) Prometheus server メトリクス取得 Alertmanager メール送信

13.

13 Alertmanagerでアラートをメール送信してみる ⚫ アラートをメール送信するサンプル(alertmanager.yml) global: resolve_timeout: 5m smtp_from: ‘prometheus.test@example.com’ smtp_smarthost: ‘192.168.33.1:25’ route: receiver: ‘mailtest’ receivers: - name: 'mailtest' email_configs: - to: ‘root@localhost.localdomain’ require_tls: false # 送信元メールアドレス # SMTPサーバ # アラートの通知先振り分け # 宛先メールアドレス

14.

14 Prometheus画面 アラート情報

15.

15 Alertmanagerメール通知テスト アラートの内容と対象 メッセージは変更可能

16.

16 Grafanaについて ⚫ Prometheusで取得した情報を可視化するツールとして よく使用される ⚫ Prometheusのみでなく、ElasticSearchやZabbixにも対応

17.

17 Grafanaダッシュボード

18.

18 注意点とか ⚫ Prometheusは100%のデータ保持を担保しない 100%を求めるのであれば、他の監視ツールを推奨 ⚫ Prometheus自体の冗長構成はサポートされていない 同じ設定を別のPrometheusに入れることで、同じデータが取得できる そのため、同一設定のPrometheusを用意した上で、LBもしくは、名前解決で切り替える等の構成となる 監視対象 (exporter) Prometheus server = Prometheus server LB