prometheus
TRANSCRIPT
Prometheus
What is Prometheus?時系列データを扱う監視システム
サービスの死活監視 パフォーマンスのモニタリング
競合監視システム Ganglia Graphite Zabbix
What am I talking about?Prometheus のコンポーネント PromSQL + AlertManager 周りの話Prometheus の Scalability
Componens
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
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 も受けられる
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 登録
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 にアラートが飛ぶ
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 でカッコよくビジュアライズ !!
Summary of This Section各種 Exporter でいろんなソースから簡単に
Metrics を取れるConsul や Kubernetes との連携でコンテナ監視も
楽Alert Manager で Slack 通知
consul-planter と consul-template でいい感じにconsul KV連携してアラートルール管理してます.
Grafana かっこいい
PromSQL &Alert Manager
Metrics in Prometheusラベルを使った多次元時系列データ
topic=kafka-topic-v1
topic=kafka-topic-v2
Input records
0m 1m 2m 3m 4m
ラベル
Metrics in PrometheusMetrics の種類 ( 厳密には 4 種類あるらしいけ
ど ..) Counter
• 数の累積を取る. (Kafka の Offset とか )• リセットされない限単調増加
Guage• 毎時変動する値 ( メモリの使用量とか )
カスタムメトリクスを自前で Export するときは,この違いを意識しないとおかしなことになる.
What is PromSQL多次元時系列 Metrics を操作するための
Prometheus の独自クエリ言語Alert Rule の設定や, Dashboard での可視化に
使う.
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
Query Example (Instant Vector)全ラベル
ラベルの値で絞り込み
特定のラベルについて合計
burrow_consumed_offset
burrow_consumed_offset { topic=“kafka-topic-v1” }
sum(burrow_consumed_offset) by (topic)
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])
Reference四則演算や論理演算,その他の関数を駆使して
クエリを書く https://prometheus.io/docs/querying/functions/
Alert RulePromSQL で発火条件を記述
Instant Vector は基本的に集合演算 (true/false ではない )
クエリで抽出されたラベルセット全てについてアラートが発火する.
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 値になるわけではない
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 にはラベルの値をつかえる
Summary of This SectionPromSQL で instant vector や range vector を
こねくり回して Visualize したり Alert を設定する.
ラベルによって多次元構造になっていることで Query での表現自由度が高くなっていて良い.
Scalability
Performance特にチューニングしなくても 100,000 個の
Time series を扱えるらしい
Federation性能が足りない場合は Federation が必要
とはいえ, Multi DC や,かなり大きい DC で大量のノードを監視したいみたいな状況じゃないと早々必要にはならないっぽい.
あとはクエリの評価を高速化したい場合ぐらい
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
Hieralchical federation階層構造を組んで徐々に metrics の集約度を
上げていく構成 多分 DWH と考え方は似ている
scrape scrape
store lower level data
store higher level data = aggregated data
Summary of this section実はバックエンドも長年の研究成果の結晶
1 台でも 100,000 個もの Time series を捌ける
それでも足りない場合 ( すごい大規模な DC を監視する場合など ) は Federation 構成を組みましょう.
ConclusionExporter と簡単な設定を追加するだけでいろんな
Metrics が取れる. Service Discovery 周りのサポートが優秀 Exporter は一部デキの悪いものも…
ラベル付きの多次元データモデルと PromSQL で 複雑な状況も柔軟に監視,アラートができる.
処理性能もかなりのもので Federation 構成もとれて 安定している. 大規模 DC にも対応できる.