prometheus

29
Prometheus

Upload: seiya-mizuno

Post on 15-Apr-2017

95 views

Category:

Engineering


2 download

TRANSCRIPT

Page 1: Prometheus

Prometheus

Page 2: Prometheus

What is Prometheus?時系列データを扱う監視システム

サービスの死活監視 パフォーマンスのモニタリング

競合監視システム Ganglia Graphite Zabbix

Page 3: Prometheus

What am I talking about?Prometheus のコンポーネント PromSQL + AlertManager 周りの話Prometheus の Scalability

Page 4: Prometheus

Componens

Page 5: Prometheus

Components (of Ganesha)

Time series database Dashboard

scrape

Alert Manager

scrape & evaluate metrics

alerting

PushGateway scrape

BurrowExporter

GraphiteExporter

CloudWatchExporterr

Service Discovery

scrape

Monitoring targets

register

NodeExporterscrape

planting rules

Page 6: Prometheus

planting rules

Components (of Ganesha)

Dashboardscrape

Alert Manager

scrape & evaluate metrics

alerting

PushGateway

BurrowExporter

GraphiteExporter

CloudWatchExporterr

Service Discovery

scrape

register

NodeExporterscrape

Time series database

Monitoring targets

scrape

Push 型ではなく Pull 型

各種 Exporter があるので 簡単な設定で様々な メトリクスが監視できる.

PushGateway で metrics の Push も受けられる

Page 7: Prometheus

planting rules

scrape

Monitoring targets

Components (of Ganesha)

Dashboardscrape

Alert Manager

scrape & evaluate metrics

alerting

PushGateway

BurrowExporter

GraphiteExporter

CloudWatchExporterr

Service Discoveryregister

NodeExporterscrape

scrape

Time series database

Consul 経由で Container Serviceの 監視も楽

Registrator で簡単に Consul 登録

Page 8: Prometheus

scrape

Monitoring targets

Components (of Ganesha)

Dashboardscrape

Alert Manager

scrape & evaluate metrics

alerting

PushGateway

BurrowExporter

GraphiteExporter

CloudWatchExporterr

register

NodeExporterscrape

scrape

Time series database

Service Discoveryplanting

rulesconsul-planter で

consul KV に ルールを格納

consul-template で Alert Manager に 埋め込み

発火すると Slack にアラートが飛ぶ

Page 9: Prometheus

scrape

Service Discoveryplanting

rules

scrape

Monitoring targets

Components (of Ganesha)

Dashboard

Alert Manager

scrape & evaluate metrics

alerting

PushGateway

BurrowExporter

GraphiteExporter

CloudWatchExporterr

register

NodeExporterscrape

Time series database

scrape

Grafana でカッコよくビジュアライズ !!

Page 10: Prometheus

Summary of This Section各種 Exporter でいろんなソースから簡単に

Metrics を取れるConsul や Kubernetes との連携でコンテナ監視も

楽Alert Manager で Slack 通知

consul-planter と consul-template でいい感じにconsul KV連携してアラートルール管理してます.

Grafana かっこいい

Page 11: Prometheus

PromSQL &Alert Manager

Page 12: Prometheus

Metrics in Prometheusラベルを使った多次元時系列データ

topic=kafka-topic-v1

topic=kafka-topic-v2

Input records

0m 1m 2m 3m 4m

ラベル

Page 13: Prometheus

Metrics in PrometheusMetrics の種類 ( 厳密には 4 種類あるらしいけ

ど ..) Counter

• 数の累積を取る. (Kafka の Offset とか )• リセットされない限単調増加

Guage• 毎時変動する値 ( メモリの使用量とか )

カスタムメトリクスを自前で Export するときは,この違いを意識しないとおかしなことになる.

Page 14: Prometheus

What is PromSQL多次元時系列 Metrics を操作するための

Prometheus の独自クエリ言語Alert Rule の設定や, Dashboard での可視化に

使う.

Page 15: Prometheus

Instant Vector & Range VectorInstant Vector

ある時刻の各ラベルのデータプロットの VectorRange Vector

ある時点からの特定の時間区間のデータプロットのVector

topic=kafka-topic-v1

topic=kafka-topic-v2

0m 1m 2m 3m 4m

Instant Vector

Range Vector

Page 16: Prometheus

Query Example (Instant Vector)全ラベル

ラベルの値で絞り込み

特定のラベルについて合計

burrow_consumed_offset

burrow_consumed_offset { topic=“kafka-topic-v1” }

sum(burrow_consumed_offset) by (topic)

Page 17: Prometheus

Query Example (RangeVector)5 分前から今まで

7 分前から 2 分前まで

5 分前から今までの平均

burrow_consumed_offset{ topic=”kafka-topic-v1” }[5m]

burrow_consumed_offset{ topic=”kafka-topic-v1" }[5m] offset 2m

avg_over_time( burrow_consumed_offset{ topic=”kafka-topic-v1” }[5m])

Page 18: Prometheus

Reference四則演算や論理演算,その他の関数を駆使して

クエリを書く https://prometheus.io/docs/querying/functions/

Page 19: Prometheus

Alert RulePromSQL で発火条件を記述

Instant Vector は基本的に集合演算 (true/false ではない )

クエリで抽出されたラベルセット全てについてアラートが発火する.

Page 20: Prometheus

Alert Rule

topic=kafka-topic-v1

topic=kafka-topic-v1

0m 1m 2m 3m 4m

Instant Vector

Input_records

IF input_records < 4 FOR 1m ANNOTATIONS { summary = ”few input records” }

3

8

[ topic=“kafka-topic-v1” 3 ]

Result

Bool 値になるわけではない

Page 21: Prometheus

Alert Rule Example

IF ( sum(burrow_head_offset{topic=~"^kafka-*"}) BY (topic) - sum(burrow_head_offset{topic=~”^kafka-.*} offset 6m) BY (topic)) != 0unless ( sum(burrow_consumed_offset{consumer="collector"}) BY (topic) - sum(burrow_consumed_offset{consumer="collector"} offset 6m) BY (topic)) > 0FOR 5mANNOTATIONS { topic="{{$labels.topic}}",}

① topic ラベルが kafka- から始まる各トピックで burrow_head_offset の 合計値の 6 分前の値との差が 0 でないもの

② consumer ラベルが collecto で burrow_consumed_offset の合計値の 6 分前との差が 0 より大きいもの

① のラベルセットにあって②のラベルセットにないものこの条件が 5 分以上継続している場合発火

ANNOTATION にはラベルの値をつかえる

Page 22: Prometheus

Summary of This SectionPromSQL で instant vector や range vector を

こねくり回して Visualize したり Alert を設定する.

ラベルによって多次元構造になっていることで Query での表現自由度が高くなっていて良い.

Page 23: Prometheus

Scalability

Page 24: Prometheus

Performance特にチューニングしなくても 100,000 個の

Time series を扱えるらしい

Page 25: Prometheus

Federation性能が足りない場合は Federation が必要

とはいえ, Multi DC や,かなり大きい DC で大量のノードを監視したいみたいな状況じゃないと早々必要にはならないっぽい.

あとはクエリの評価を高速化したい場合ぐらい

Page 26: Prometheus

FederationPrometheus が他の Promethues を Scrape する

構成 設定に応じて /federate に渡す metrics が Export され

る.- job_name: 'federate' scrape_interval: 15s

honor_labels: true metrics_path: '/federate'

params: 'match[]': - '{job="prometheus"}' - '{__name__=~"job:.*"}'

static_configs: - targets: - 'source-prometheus-1:9090’ - 'source-prometheus-2:9090’

source-prometheus-1:9090/federate

source-prometheus-2:9090/federate

scrape

scrape

Page 27: Prometheus

Hieralchical federation階層構造を組んで徐々に metrics の集約度を

上げていく構成 多分 DWH と考え方は似ている

scrape scrape

store lower level data

store higher level data = aggregated data

Page 28: Prometheus

Summary of this section実はバックエンドも長年の研究成果の結晶

1 台でも 100,000 個もの Time series を捌ける

それでも足りない場合 ( すごい大規模な DC を監視する場合など ) は Federation 構成を組みましょう.

Page 29: Prometheus

ConclusionExporter と簡単な設定を追加するだけでいろんな

Metrics が取れる. Service Discovery 周りのサポートが優秀 Exporter は一部デキの悪いものも…

ラベル付きの多次元データモデルと PromSQL で 複雑な状況も柔軟に監視,アラートができる.

処理性能もかなりのもので Federation 構成もとれて  安定している. 大規模 DC にも対応できる.