Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Prometheus Shardingのためにミニマルに始めるThanos
Search
ch1aki
March 16, 2023
Technology
0
740
Prometheus Shardingのためにミニマルに始めるThanos
Kubernetes Meetup Tokyo #56 (
https://k8sjp.connpass.com/event/275280/
) LT
ch1aki
March 16, 2023
Tweet
Share
More Decks by ch1aki
See All by ch1aki
マルチアカウント環境への発見的統制の導入
ch1aki
2
1.7k
オンプレk8sとEKSの並行運用の実際
ch1aki
0
2.2k
k8s Operatorで運用負担減&ハイブリッドクラウドのコスト最適化をした話
ch1aki
0
2k
SREが取り組むカラーミーショップへのk8s導入
ch1aki
2
990
Other Decks in Technology
See All in Technology
Browser
recruitengineers
PRO
8
2.2k
クラウドセキュリティを支える技術と運用の最前線 / Cutting-edge Technologies and Operations Supporting Cloud Security
yuj1osm
2
260
kubellが考える戦略と実行を繋ぐ活用ファーストのデータ分析基盤
kubell_hr
0
130
退屈なことはDevinにやらせよう〜〜Devin APIを使ったVisual Regression Testの自動追加〜
kawamataryo
4
1.2k
DDD集約とサービスコンテキスト境界との関係性
pandayumi
2
240
Kubernetes における cgroup driver のしくみ: runwasi の bugfix より
z63d
2
120
個人CLAUDE.md紹介と設定から学んだこと/introduce-my-claude-md
shibayu36
0
170
絶対に失敗できないキャンペーンページの高速かつ安全な開発、WINTICKET × microCMS の開発事例
microcms
0
370
Webブラウザ向け動画配信プレイヤーの 大規模リプレイスから得た知見と学び
yud0uhu
0
180
7月のガバクラ利用料が高かったので調べてみた
techniczna
3
820
TypeScript入門
recruitengineers
PRO
35
11k
実践アプリケーション設計 ②トランザクションスクリプトへの対応
recruitengineers
PRO
4
1.2k
Featured
See All Featured
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
31
2.2k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
36
2.5k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.1k
Being A Developer After 40
akosma
90
590k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
185
54k
Agile that works and the tools we love
rasmusluckow
330
21k
Scaling GitHub
holman
463
140k
Become a Pro
speakerdeck
PRO
29
5.5k
Building Better People: How to give real-time feedback that sticks.
wjessup
368
19k
Making Projects Easy
brettharned
117
6.4k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Practical Orchestrator
shlominoach
190
11k
Transcript
1 Prometheus Shardingのために ミニマルに始めるThanos akichan 2023.03.16 Kubernetes Meetup Tokyo #56
2 Prometheus Shardingのためにミニマルに始めるThanos 自己紹介 akichan やってること • k8sクラスタ運用(オンプレ&EKS) • 運用課題解決のためのk8sカスタム
コントローラーの開発 • 開発環境やデプロイ周りをよくする活動 @ch11aki @ch1aki GMOペパボ株式会社 技術部プラットフォームグループ SRE
3 • プライベートクラウド上の k8sクラスタでローカル時系列データベース のPrometheusを運用 ◦ 内製のクラスタ管理ツール( NKE)によってk8sクラスタを管理 ◦ NKEではPrometheusと基本的なスクレイピング設定・アラートルールが提供される
• クラスタ規模の成長(1000 Pod以上、100 node以上)に合わせ、Prometheusの負荷も増加 ◦ メモリ使用率が特に増加 → 頻繁にOOMで停止 ◦ Prometheusサーバー専用nodeの垂直スケールも限界 が見えてきた • Progressive DeliveryでPrometheusを参照しているため、Prometheusが落ちるとリリースに も影響がでて困る GMOペパボのとあるサービス Prometheus Shardingのためにミニマルに始めるThanos
4 • 取得するメトリクスの種類や頻度を減らす ◦ 現状とっているのは厳選されたメトリクスで大きくは減らせなかった ◦ 取得間隔を減らすのもあまり効果は無かった(圧縮が効いているので種類を減らすより効果が薄い らしい?) • 水平スケール
◦ 垂直シャーディング ▪ 用途ごと(ex. ネットワーク/アプリケーション)にPrometheusサーバーを分割する方法 ▪ 複数台の用途の異なるPrometheusを意識した管理が手間 ◦ 水平シャーディング(採用) ▪ 複数のスクレイプ用Prometheusを設ける ▪ Prometheus Opetatorでは設定一つでシャーディング可能! • shard podが増える • Scrapeルールもいい感じに分けてくれる Prometheusのメモリ使用率を下げるためにできること Prometheus Shardingのためにミニマルに始めるThanos apiVersion: monitoring.coreos.com/v1 kind: Prometheus metadata: name: prometheus spec: shards: 2 # ←これだけ! ...
5 ローカルストレージの場合、それぞれの shardにメトリクスが分散して保存 • クエリが実行されるshardによって異 なる結果が返ってくる(見るたびにグ ラフが変わる) • 個々のshardに保存されるメトリクス だけではアラートルールが正しく評価
されない可能性(複数種のメトリクスの 合計の評価など) シャーディング時の注意事項 Prometheus Shardingのためにミニマルに始めるThanos Thanos等を使ってグローバルにクエリすること が推奨されている https://github.com/prometheus-operator/prometheus-operator/blob/main/D ocumentation/user-guides/shards-and-replicas.md Prometheus Server shard-1 TSDB App -1 App -2 App -3 Grafana svc shard-1のTSDBに含まれる メトリクス shard-2のTSDBに含まれる メトリクス クエリが実行される Prometheus Serverによっ て異なる結果 Query Scrape Alert Manager Prometheus Server shard-2 TSDB 個々のshardが保持する メトリクスは全体の一部。 ルールが正しく評価され ない可能性 Push Alert
6 Prometheus Shardingのためにミニマルに始めるThanos • Prometheusをスケーリングするた めの複数のコンポーネントから成る ◦ Query: 複数のPrometheus サーバーにクエリ投げて結果を
集約 ◦ Ruler: Queryにクエリ投げて、ア ラートルールを評価 ◦ Sidecar: StoreAPIを喋り PrometheusのデータをQuerier に提供するプロキシ ◦ etc… • 一部機能だけを利用可能(外部オブ ジェクトストレージ等は必須ではない) Thanos(https://thanos.io/) 引用: https://thanos.io/tip/thanos/quick-tutorial.md/
7 Prometheus Shardingのためにミニマルに始めるThanos 直面しているローカルストレージ&Sharding時の課 題の解決にはQuery&Rulerがあれば十分と判断 • 社内では保存期間がローカルストレージで十分 なケースが多い • オブジェクトストレージ利用の追加コストが不要
だと導入しやすい sharding時の課題のミニマルな解決 Prometheus Server shard-1 TSDB App -1 App -2 App -3 Grafana headless svc Query Scrape Alert Manager Prometheus Server shard-2 TSDB Push Alert Thanos Query Thanos Sidecar Thanos Sidecar Query Query Query Query Prometheus servers を見つける Thanos Ruler アラート 評価クエリ
8 • Thanos Sidecar/Rulerは Prometheus Operatorで導入可 ◦ Sidecarは数行追加だけ ◦ RulerはPrometheusRuleリソースを
流用できる • QueryはThanos Operator使うほどで 無かったので素朴にDeploymentで追加 • Grafana等はPrometheusの代わりに Thanos Queryを参照するよう変更 Thanos Sidecar/Query/Rulerの導入 Prometheus Shardingのためにミニマルに始めるThanos apiVersion: monitoring.coreos.com/v1 kind: Prometheus metadata: name: prometheus spec: ... thanos: image: quay.io/thanos/thanos:v0.28.1 apiVersion: monitoring.coreos.com/v1 kind: ThanosRuler metadata: name: thanos-ruler spec: image: quay.io/thanos/thanos:v0.28.1 ruleSelector: matchLabels: role: alert-rules queryEndpoints: - dnssrv+_http._tcp.thanos-querier alertmanagersUrl: - http://alertmanager-example:9093
9 Prometheus Shardingのためにミニマルに始めるThanos • 負荷が分散され、OOMで落ちることが なくなった🎉 • クエリも整合性のある結果を返せてい て、使い勝手も大きくは変わらなかった Sharding&Thanos導入の結果
10 Prometheus Shardingのためにミニマルに始めるThanos • Promehteusの負荷をshardingで分散してOOMで落ちる問題を解消できた • Prometheus OperatorでShardingもThanos(Sidecar/Ruler)導入もすぐできた • リモートストレージを利用しない必要最小限の構成でもThanosを活用できた
まとめ Prometheusのドキュメントにある通り、ローカルストレージはそもそも耐久性のある長期ストレージを意図し て設計されたものではない。 ちゃんと保存するならリモートストレージを検討したほうがいい。 注意⚠
Thank You!! 11