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
360
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
1
1.4k
オンプレk8sとEKSの並行運用の実際
ch1aki
0
1.5k
k8s Operatorで運用負担減&ハイブリッドクラウドのコスト最適化をした話
ch1aki
0
1.5k
SREが取り組むカラーミーショップへのk8s導入
ch1aki
2
870
Other Decks in Technology
See All in Technology
Rustで「プリズモイダル法」を利用して「土量計算」をガチでやる
nokonoko1203
1
370
Microsoft for Startups Founders Hub_20240429 update
daikikanemitsu
1
2.6k
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
5
38k
シンプルなHITL機械学習と様々なタスクにおけるHITL機械学習
naohachi89
0
300
uvを使ってストレスフリーな Python開発をしよう!
r74tech
0
270
kcp: Kubernetes APIs Are All You Need #techfeed_live / TechFeed Experts Night 28th
ytaka23
1
180
高専で制御を、大学でセンシングを学び、次は脳みそ
satoshirobatofujimoto
0
130
iThome2024 Wailing Wall of Enterprise Security
notsurprised
0
240
20240509 CloudWatch でいろいろなものを監視してみよう
masaruogura
1
110
本番環境で Cloudflareを 使ってみた話
miu_crescent
2
110
株式会社EventHub・エンジニア採用資料
eventhub
0
2.1k
試作とデモンストレーション / Prototyping and Demonstrations
ks91
PRO
0
140
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
352
28k
Ruby is Unlike a Banana
tanoku
96
10k
Thoughts on Productivity
jonyablonski
60
3.9k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
123
39k
The Cost Of JavaScript in 2023
addyosmani
21
3.9k
Teambox: Starting and Learning
jrom
128
8.4k
Building Your Own Lightsaber
phodgson
100
5.7k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
501
140k
Large-scale JavaScript Application Architecture
addyosmani
504
110k
Facilitating Awesome Meetings
lara
43
5.6k
Docker and Python
trallard
35
2.7k
Designing Experiences People Love
moore
136
23k
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