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
750
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
2.1k
SREが取り組むカラーミーショップへのk8s導入
ch1aki
2
990
Other Decks in Technology
See All in Technology
エンジニアリングマネージャーの成長の道筋とキャリア / Developers Summit 2025 KANSAI
daiksy
2
620
IoT x エッジAI - リアルタイ ムAI活用のPoCを今すぐ始め る方法 -
niizawat
0
100
プラットフォーム転換期におけるGitHub Copilot活用〜Coding agentがそれを加速するか〜 / Leveraging GitHub Copilot During Platform Transition Periods
aeonpeople
1
220
なぜテストマネージャの視点が 必要なのか? 〜 一歩先へ進むために 〜
moritamasami
0
240
Create Ruby native extension gem with Go
sue445
0
110
下手な強制、ダメ!絶対! 「ガードレール」を「檻」にさせない"ガバナンス"の取り方とは?
tsukaman
2
450
Firestore → Spanner 移行 を成功させた段階的移行プロセス
athug
1
500
Apache Spark もくもく会
taka_aki
0
120
テストを軸にした生き残り術
kworkdev
PRO
0
210
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
10
75k
Android Audio: Beyond Winning On It
atsushieno
0
2.4k
スマートファクトリーの第一歩 〜AWSマネージドサービスで 実現する予知保全と生成AI活用まで
ganota
2
300
Featured
See All Featured
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.6k
jQuery: Nuts, Bolts and Bling
dougneiner
64
7.9k
BBQ
matthewcrist
89
9.8k
Raft: Consensus for Rubyists
vanstee
140
7.1k
Done Done
chrislema
185
16k
Bash Introduction
62gerente
615
210k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.4k
GraphQLとの向き合い方2022年版
quramy
49
14k
Writing Fast Ruby
sferik
628
62k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
188
55k
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