クラスター、ワークロード、スパンを一画面で

Helmチャートを1つインストールするだけ。kubelet、ホスト、クラスターステートのメトリクスがOTLPで流れ込みます。計装済みpodのスパンはpod、node、namespaceのタグ付きで届き、podビューとnodeビューは、それらが説明するトレースのすぐ横にあります。

動き

遅いスパンの下にあるPod。

クラスターにHelmチャートを導入するだけ。kubelet、ホスト、クラスターステートのメトリクスが流れ始めます。計装済みPodのスパンはPod、ノード、namespaceを携えて届くため、遅いリクエストから、それを処理したまさにそのレプリカにたどり着けます。

pod heatmap · 192 pods · cluster cpu 44% LIVE
PODS 192
RUNNING 184
DEGRADED 6
FAILING 2
HOT >78% 11
default default 72
observability obs 32
kube-system kube-sys 40
ingress-nginx ingress 24
data data 24
CPU
0% 100% degraded failing

クラスターコンソール

ワークロード、Pod、ノード、1つのフィルターサイドバー

プラットフォームチームが日々使うのと同じビュー。namespace内のdeploymentから特定nodeまで絞り込み、クラスター全体をライブで監視。

cluster: prod-us-east-1 LIVE
infra › kubernetes › workloads
過去12時間 再読み込み ライブ 10s
Nodes 12
Workloads 8
クラスターCPU 42%
クラスターメモリ 54%

ワークロード

Deployment、StatefulSet、DaemonSetごとに集約されたPodメトリクス。

Deployment StatefulSet DaemonSet
Namespace Workload Kind Ready CPU Memory Node
default api-gateway Deployment 3/3
47%
62%
ip-10-0-1-12
default order-service Deployment 4/4
71%
51%
ip-10-0-1-44
default checkout-worker StatefulSet 2/2
23%
38%
ip-10-0-2-08
observability otel-collector DaemonSet 6/6
39%
48%
per-node
default payment-svc Deployment 2/3 ⟳
86%
67%
ip-10-0-1-44
default inventory-svc Deployment 3/3
34%
49%
ip-10-0-2-08
kube-system coredns Deployment 2/2
12%
21%
ip-10-0-1-12
ingress-nginx nginx-ingress DaemonSet 3/3
28%
33%
per-node

Pod、ノード、ワークロード

Pod、ノード、ワークロード

どこでも同じフィルター。ワークロードからそのPod、そのPodを実行するノードへとクリックスルー。サービスには専用の4つ目のビューがあります。

/infra/kubernetes/pods 200 pods

Pods

Podごとのリクエスト・リミット比CPU・メモリ。

Pod CPU req CPU lim Mem lim
otel-gateway-5988fb47f… ns observability 147% 37% 30%
prd-artifacts-api-6688… ns default 0% 52% 10%
prd-warpstream-5bb84bb… ns warpstream 42% 42% 35%
prd-enrichment-api-769… ns default 0% 34% 21%
/infra/kubernetes/nodes 3 nodes

Nodes

ノードごとのkubeletスタッツ、稼働時間、ライフサイクル。

Node Status CPU Last seen
i-0ef7f77feb3e0a3eb 稼働中 3.00 14s ago
i-0293a9e7e2bac82a4 稼働中 2.65 30s ago
i-0a8c19f2d4e7b15c1 稼働中 1.84 22s ago
 
/infra/kubernetes/workloads 21 workloads

Workloads

Deployment、StatefulSet、DaemonSetごとに集約。

Workload Pods Avg CPU NS
api-gateway 3 47% default
order-service 4 71% default
payment-svc 2 86% default
inventory-svc 3 34% default

Span → Pod

遅いSpanから正確なPodへ

オプトインしたPodは、admission時にすべてのSpanにk8s.pod.name、k8s.node.name、k8s.namespace.nameがスタンプされます。遅いトレースは既にどこで実行されたかを知っています。

Trace: 7af1c204 1.18s

Waterfall

api-gateway
POST /checkout
1.18s
order-service
createOrder
425ms
payment-svc
processPayment
612ms
inventory-svc
reserveItems
98ms
Podアトリビューション 稼働中

pod

payment-svc-78f4d6c89b-x7k2p

k8s.pod.name
payment-svc-78f4d6c89b-x7k2p
k8s.node.name
ip-10-0-1-44.ec2.internal
k8s.namespace.name
default

1つのHelmチャート

クラスターに投入するだけ

チャートを端から端まで読める。3つのコマンドで、クラスターがkubelet、ホスト、クラスターステートのメトリクスをOTLP経由で報告し始めます。

helm install maple-k8s-infra 3 steps
1 インジェストキーのシークレットを作成
kubectl create namespace maple
kubectl -n maple create secret generic maple-ingest-key \
  --from-literal=ingest-key=$MAPLE_INGEST_KEY
2 チャートをインストール
helm upgrade --install maple-k8s-infra \
  oci://ghcr.io/mapletechlabs/charts/maple-k8s-infra \
  --namespace maple \
  --set maple.ingestKey.existingSecret.name=maple-ingest-key \
  --set maple.ingestKey.existingSecret.key=ingest-key \
  --set global.clusterName=production
3 ロールアウトを確認
kubectl -n maple rollout status daemonset/maple-k8s-infra-agent

できること

クラスタとアプリケーションを1本のパイプラインで

helm install
端から端まで読めるHelmチャート
maple-k8s-infraは端から端まで読める小さなHelmチャートです。pod単位のkubelet統計、node単位のホストメトリクス、クラスター全体のクラスターステートメトリクス、各nodeにアプリ向けのOTLPレシーバーを配置。
k8s.pod.name
podとスパンの結合
遅いトレースから、それを実行したpodとnodeへ、podビューとnodeビューと同じフィルターでドリルダウン。
k8s_cluster
クラスターステートメトリクス
Deployment、StatefulSet、DaemonSet、レプリカ数、podフェーズ。チャートのクラスターコレクターがOpenTelemetryのk8s_clusterレシーバー経由で収集します。別途kube-state-metricsをデプロイする必要はありません。
/infra/kubernetes
ワークロード、pod、node、サービス
ダッシュボードに4つのインフラビュー:ワークロード、pod、node、サービス。Deployment、単一のpod、単一のnodeを、他の場所と同じフィルターで調査できます。
OTel Operator
OpenTelemetry Operator
アノテーション付きnamespaceのpodには、admission時にOTEL_EXPORTER_OTLP_ENDPOINTとpod/node識別情報が注入されます。すでにOTel SDKを読み込んでいるアプリは、コード変更なしでそれらを取り込みます。
one endpoint
マルチクラスター取り込み
組織ごとに1つの取り込みエンドポイント。本番、ステージング、開発者のkindクラスターから送信し、cluster-nameリソース属性で分割可能。

次は

このデータを共有する画面

OTLPをMapleに向ける。

エンドポイントとキーが1つずつ。トレース、ログ、メトリクス、セッションが、最初のリクエストから同じトレースIDに集まります。