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_Grafana_でのk8s監視.pdf
Search
yosshi_
July 27, 2018
Programming
1.8k
6
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
_Prometheus_Grafana_でのk8s監視.pdf
yosshi_
July 27, 2018
More Decks by yosshi_
See All by yosshi_
From 5 to 1,300+ Clusters: Declarative Scaling for Private Kubernetes
yosshi_
1
73
Scaling In Kubernetes Safely on On-Prem KaaS Across 1,300+ Clusters and 40,000+ Nodes
yosshi_
1
120
Getting Started with Kubernetes Observability
yosshi_
8
2.8k
PromQL_Compatibility_Testing_Recap
yosshi_
1
1.2k
プロダクト誕生の背景から学ぶ PrometheusとGrafana Loki
yosshi_
11
3.9k
これから学ぶKubernetesのReconciliation Loop
yosshi_
16
5.3k
伝統的なエンプラ企業で取り組むインフラの設計書のモダナイゼーション.pdf
yosshi_
13
6.4k
KubeCon2019_NA_Recap__NATS_.pdf
yosshi_
0
220
“Running Apache Samza on Kubernetes” Recap : KubeCon2019@NA
yosshi_
3
1.3k
Other Decks in Programming
See All in Programming
進化を続けるGo toolsの現在地 / The Current State of Ever-Evolving Go Tools
hond0413
0
280
Hello, Hiroshima Geospatial Data! — Exploring DoboX with Python
ra0kley
0
150
源内ハンズオン概要編
hideg
0
230
新人はどこまで自力でやり、どこからAIに頼るべきか/エンジニア育成に向き合う_先輩たちの悩みと知見共有会
toppan_digital_dev
1
400
iOS開発×AI駆動開発 〜最近使って便利だったスキルの話〜
nogu66
0
120
GKE アップグレード前に知っておきたい Blue/Green と PDB の関係
stkk
0
120
in-process GraphQL のすすめ #ginzajs
izumin5210
4
1.5k
AIエージェント時代のコードレビューを設計する
nogu66
5
1.1k
書籍「プロフェッショナルAI駆動開発」紹介スライド
juntaromatsumoto
0
870
Go 1.27からのGODEBUG / Go 1.27 リリースパーティ #go127party
mazrean
0
270
数年滞っていたダークモード対応をおよそ2週間で完了させる
chigichan24
0
200
Hono + Inertia + React で LP を構築した話
oukayuka
2
190
Featured
See All Featured
Building Adaptive Systems
keathley
44
3.2k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
490
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Designing Powerful Visuals for Engaging Learning
tmiket
1
520
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
830
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
370
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
260
Mobile First: as difficult as doing things right
swwweet
225
10k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.1k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.5k
ラッコキーワード サービス紹介資料
rakko
1
4.7M
Transcript
「Prometheus+Grafana」でのk8s監視 ⼀晩で押さえるKubernetes監視の世界- cndjp第7回勉強会
⾃⼰紹介 n吉村 翔太(yoshimura shota) nNTTコミュニケーションズ所属 nインフラエンジニア/データエンジニアリング nDocker/k8sは4ヶ⽉くらい 他はkafka、hadoop、spark、presto etc n趣味はボードゲーム
チームのインフラに対する要件 • データ分析 チームタスク • チームメンバの分析⽤の基盤 ⽤途 • OSS、コンテナ積極採⽤ ポリシー
• オンプレミス 環境
今⽇話すモデル 監視 可視化 通知 管理 Prometheus Grafana Mattermost (Slackクローン) GitLab
nOSSでオンプレでも構築可であることを前提に構築
k8s監視に期待すること Must Better n故障が検知できる n故障解析に必要な情報が確保できる n故障検知からサービス復旧までを⾃動化できる
ここでいう監視とは 監視項⽬ 監視⽅法 アプリケーションの監視 リクエスト数、レスポンスタイム etc 対象のソフト毎の固有の情報 サービス監視 httpのリクエストの結果 ログ監視
該当ファイルへの”error”等の⽂字列の有無 プロセス監視 プロセスの有無、プロセスの数 リソース監視 CPU/メモリ使⽤率、ディスクI/O、 ディスク容量、ネットワークトラフィック 死活監視 Pingの応答結果 ハードウェア監視 電源、ファン、温度 etc nコンテナの場合:ログの収集の検討も必要
k8s監視の課題 Pod Pod Pod Service Podへのアクセス nPod⽣成時にIPが振られる n該当Podへのアクセスが保証されない k8s Cluster
困ったこと n今までの監視の仕組みが使えない nk8sに対応した監視ソフトが欲しい
Prometheusとは nk8sと同じCNCFのProject nk8sとの連携機能あり 参考< https://www.cncf.io/projects/ >
今回使った機能 参考< https://github.com/prometheus/prometheus >
Prometheusの構築の要件と実装⽅法 k8s Cluster node node master 監視サーバ federation API Server
node n監視サーバはk8s Clusterの外に配置したい nk8sへの外部からのアクセス制御を回避したい
k8sで監視できること(1/2) 上記のexampleを参考に構築すると以下のmetricsが取得可 nkubernetes-apiservers n/metrics nk8s-APIサーバーのステータス nkubernetes-nodes n/api/v1/nodes/${host}/proxy/metrics nノードのメトリクス nkubernetes-cadvisor(v1.12削除予定) n/api/v1/nodes/${host}/proxy/metrics/cadvisor
nノードのメトリクス 参考< https://github.com/prometheus/prometheus/blob/master/documentation/examples/prometheus-kubernetes.yml >
k8sで監視できること(2/2) nkubernetes-service-endpoints n/api/v1/namespaces/${namespace}/services/${service-name}:${service- port}/proxy/metrics nService以下のメトリクスの収集 n「prometheus.io/scrape: “true”」 が付与されているものを⾃動的にスクレイプ nkubernetes-pods napi/v1/namespaces/${namespace}/pods/${pod-name}:${pod-port}/proxy/metrics
nPodのメトリクスの収集 n「prometheus.io/scrape: “true”」 が付与されているものを⾃動的にスクレイプ n「prometheus.io/path: /metrics」 や「 prometheus.io/port: “9100”」 を定義可
<参考>実際に取れるメトリクス APIServiceOpenAPIAggregationControllerQueue1_adds counter APIServiceOpenAPIAggregationControllerQueue1_depth gauge APIServiceOpenAPIAggregationControllerQueue1_queue_latency summary APIServiceOpenAPIAggregationControllerQueue1_retries counter APIServiceOpenAPIAggregationControllerQueue1_work_duration
summary APIServiceRegistrationController_adds counter APIServiceRegistrationController_depth gauge APIServiceRegistrationController_queue_latency summary APIServiceRegistrationController_retries counter APIServiceRegistrationController_work_duration summary AvailableConditionController_adds counter AvailableConditionController_depth gauge AvailableConditionController_queue_latency summary AvailableConditionController_retries counter AvailableConditionController_work_duration summary DiscoveryController_adds counter : : nkubernetes-apiserversだけで99項⽬・・・・多い・・
Node-exporter nやっぱりnode-exporterは欲しい nDeamonSetで配置 nkubernetes-podsがannotationsみて 拾ってくれる!!
Blackbox-exporter nk8sのクラスタ外から監視したい nユーザが使⽤する通信経路と同じとこから監視したい 監視サーバ Blackbox-exporter k8s Cluster HTTP
各アプリケーション毎のExporter nサイドカーで配置 nアプリとexporterの接続性が課題 nアプリの数に合わせてexporterが配置 nkubernetes-podsがannotationsみて 拾ってくれる!! Pod k8s Cluster Logstash
exporter Logstash
k8sの基本機能も活⽤ nLiveness n死活監視、プロセス監視相当 n故障検知から復旧までの運⽤を削減 nReadiness nサービス監視相当(LBのヘルスチェックに近い) n故障検知から復旧までの運⽤を削減 nCluster Autoscaler nリソース監視相当
nサーバを追加してクラスタ組み込みを⾃動で n当然クラウドのみ・・
結局こうなる 監視項⽬ 監視⽅法 備考 アプリケーションの監視 kubernetes-pods(k8s) - Apache exporter -
Logstash_exporter etc Sidecarで監視 サービス監視 Readiness(ReplicaSet) Blackbox-exporter ログ監視 未検討(課題) ログ収集基盤とセットで 考えたい プロセス監視 Liveness(ReplicaSet) kubernetes-pods(k8s) kubernetes-nodes(k8s) kubernetes-service-endpoints(k8s) 期待するpod数の有無で判定 リソース監視 kubernetes-apiservers(k8s) kubernetes-nodes(k8s) kubernetes-cadvisor(k8s) kubernetes-service-endpoints(k8s) kubernetes-pods(k8s) - Node-exporter(DaemonSet) 死活監視 kubernetes-pods(k8s) - Node-exporter(DaemonSet) 期待するnode数の有無で判定
ログ収集 nコンテナのログをどうにかしたい n公式ドキュメントを参考に案を検討 参考< https://kubernetes.io/docs/concepts/cluster-administration/logging/ >
ログ収集 案1 nログの出⼒先をPV-PVCで外部ストレージをマウント nCronJobでローテート Persistent Volume Claim Persistent Volume ストレージ
Pod
ログ収集 案2 nSidecarでLogShipper nk8s外にログ収集基盤を配置してそっちに投げる nログ監視もそっちで⾏う Pod k8s Cluster LogShipper アプリ
ログ収集基盤 k8s Cluster外
ログ収集 案2の懸念 n監視も考えるとコンテナ4つ? nログ収集基盤の信頼性 n⽬的はデータ分析 nk8s基盤構築 nログ収集基盤構築 n運⽤コスト⾼い・・ Pod アプリ
LogShipper LogShipper exporter アプリexporter
ログ収集 案3 n標準出⼒に投げて、LogShipper(DaemonSet)が投げる nログ監視もそっちで⾏う n監視含めても1Podに2コンテナで済みそう Pod k8s Cluster アプリ ログ収集基盤
k8s Cluster外 Pod LogShipper log
可視化&通知 nPrometheusと相性のいいGrafanaを採⽤ nGrafanaで検知してMattermostに通知 nQ:PrometeusのAlertmanagerは使わないの? A:通知のルールと故障を確認するviewが1:1の構成の⽅が 運⽤がシンプルと判断 n公式にk8s⽤のサンプルがあるので使うと幸せ 参考< https://grafana.com/dashboards/315>
イメージ k8sクラスタ
イメージ Logstash
全体のアーキテクチャ k8s Cluster node node master federation API Server node
Blackbox-exporter HTTP Node-exporter Node-exporter Node-exporter Node-exporter cAdvisor cAdvisor cAdvisor cAdvisor Sidecarの exporter 監視サーバ 通知 Mattermost Prometheus Grafana
管理 nGit、CIが1個で完結して嬉しいのでGitLabを使⽤ n管理⽬的 n故障情報の蓄積と改善 n情報の共有と可視化によるワンオペの防⽌
やりたいこと 1. Mattermostで気づく 2. GitLabでissueきる 3. kubectlで以下のコマンドを実⾏して確認 1. kubectl get
pod 2. kubectl describe pod xxxxxx 3. kubectl logs xxxxxx 4. 解析状況を適宜追記 n“kubectl”使える⼈を絞るなら別の⽅法でログ観れるようにしないと・・ 結局、ログ収集基盤が・・・