AI Infra 训练营
总览
  • 总览
  • 完整安装
  • 核心 K8s
  • Cilium 网络
  • Longhorn 存储
  • 监控日志
  • CI / GitOps
  • 安全准入
  • Day 0 · 新手接管 Runbook
  • Day 1 · 集群起步 + CNI
  • Day 2 · 控制面 + etcd
  • Day 3 · CRD + Operator + Webhook
  • Day 4 · 存储深度
  • Day 5 · 卷扩容 + 安全
  • Day 6 · 调度 + 可观测
  • Day 7 · Harbor + ArgoCD + Mesh
  • Day 8 · AI Infra
  • Day 9 · Triton + GPU
  • Day 10 · MIG + HPA + 量化
  • Day 11 · AI Agent 端到端
  • Day 12 · 灾备
  • Day 13 · Operator + 联邦 + Mesh + RAG
  • Day 14 · CKA / CKS + 总结
  • LLM 训练手册
  • RAG + Agent 手册
  • 推理优化手册
  • 上下文工程手册
  • Agent 开发手册
  • 面试深度复盘
  • 训练 v2 深度手册
  • 心智模型
  • 看懂命令输出
  • 容器网络底层
  • K8s 网络深入
  • DNS 全套
  • 故障排查方法论
  • 心智模型
  • 容器挂载完整指南
  • K8s Volumes 大全
  • PV/PVC/CSI 深入
  • NFS 深入
  • 分布式存储概览
  • 故障排查 runbook
命令手册
HiHuo 主站
GitHub
总览
  • 总览
  • 完整安装
  • 核心 K8s
  • Cilium 网络
  • Longhorn 存储
  • 监控日志
  • CI / GitOps
  • 安全准入
  • Day 0 · 新手接管 Runbook
  • Day 1 · 集群起步 + CNI
  • Day 2 · 控制面 + etcd
  • Day 3 · CRD + Operator + Webhook
  • Day 4 · 存储深度
  • Day 5 · 卷扩容 + 安全
  • Day 6 · 调度 + 可观测
  • Day 7 · Harbor + ArgoCD + Mesh
  • Day 8 · AI Infra
  • Day 9 · Triton + GPU
  • Day 10 · MIG + HPA + 量化
  • Day 11 · AI Agent 端到端
  • Day 12 · 灾备
  • Day 13 · Operator + 联邦 + Mesh + RAG
  • Day 14 · CKA / CKS + 总结
  • LLM 训练手册
  • RAG + Agent 手册
  • 推理优化手册
  • 上下文工程手册
  • Agent 开发手册
  • 面试深度复盘
  • 训练 v2 深度手册
  • 心智模型
  • 看懂命令输出
  • 容器网络底层
  • K8s 网络深入
  • DNS 全套
  • 故障排查方法论
  • 心智模型
  • 容器挂载完整指南
  • K8s Volumes 大全
  • PV/PVC/CSI 深入
  • NFS 深入
  • 分布式存储概览
  • 故障排查 runbook
命令手册
HiHuo 主站
GitHub
  • 实操 Runbook

    • Runbook 总览:从零部署、查看、调试
    • 完整安装总 Runbook:5 台 Ubuntu 到可用平台
    • 核心 K8s Runbook:apiserver / etcd / kubelet / containerd / HAProxy
    • Cilium 网络 Runbook:安装、查看、调试
    • Longhorn 存储 Runbook:安装、查看、调试
    • 监控日志 Runbook:Prometheus / Grafana / Loki / Alertmanager
    • CI / GitOps Runbook:Harbor / Gitea / Jenkins / Kaniko / ArgoCD
    • 安全准入 Runbook:RBAC / PSA / Kyverno / ResourceQuota

监控日志 Runbook:Prometheus / Grafana / Loki / Alertmanager

这篇讲监控和日志怎么装、怎么看、怎么排障。


1. 组件作用

组件作用
Prometheus拉取和存储指标,比如 CPU、内存、Pod 状态
Grafana展示指标和日志,看 dashboard
Alertmanager接收 Prometheus 告警,做分组、静默、通知
kube-state-metrics把 K8s 对象状态转成指标
node-exporter采集节点 CPU、内存、磁盘、网络
Loki存日志
Promtail每个节点采集 Pod 日志发给 Loki

为什么用 kube-prometheus-stack:它一次性安装 Prometheus Operator、Prometheus、Grafana、Alertmanager、ServiceMonitor CRD 和默认 dashboard,学习和生产都常见。


2. 安装 kube-prometheus-stack

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update

helm install kps prometheus-community/kube-prometheus-stack \
  --namespace monitoring --create-namespace \
  --version 85.3.3 \
  --set prometheus.prometheusSpec.storageSpec.volumeClaimTemplate.spec.storageClassName=longhorn \
  --set prometheus.prometheusSpec.storageSpec.volumeClaimTemplate.spec.resources.requests.storage=10Gi \
  --set prometheus.service.type=NodePort \
  --set grafana.service.type=NodePort \
  --set grafana.service.nodePort=32380 \
  --set grafana.persistence.enabled=true \
  --set grafana.persistence.storageClassName=longhorn \
  --set grafana.persistence.size=2Gi \
  --set grafana.deploymentStrategy.type=Recreate \
  --set grafana.adminPassword=bootcamp \
  --set 'prometheus.prometheusSpec.tolerations[0].operator=Exists' \
  --set 'grafana.tolerations[0].operator=Exists'

为什么 grafana.deploymentStrategy.type=Recreate:Grafana 单副本挂 Longhorn RWO PVC,默认 RollingUpdate 会让新旧 Pod 抢同一个卷,出现 Multi-Attach。


3. 安装 Loki + Promtail

helm repo add grafana https://grafana.github.io/helm-charts
helm repo update

helm install loki grafana/loki-stack \
  --namespace monitoring \
  --set grafana.enabled=false \
  --set grafana.sidecar.datasources.enabled=false \
  --set prometheus.enabled=false \
  --set loki.enabled=true \
  --set loki.isDefault=false \
  --set loki.persistence.enabled=true \
  --set loki.persistence.storageClassName=longhorn \
  --set loki.persistence.size=5Gi \
  --set promtail.enabled=true \
  --set 'loki.tolerations[0].operator=Exists' \
  --set 'promtail.tolerations[0].operator=Exists'

自己创建 Grafana datasource:

cat <<'EOF' | kubectl apply -f -
apiVersion: v1
kind: ConfigMap
metadata:
  name: loki-datasource
  namespace: monitoring
  labels:
    grafana_datasource: "1"
data:
  loki-datasource.yaml: |
    apiVersion: 1
    datasources:
    - name: Loki
      type: loki
      access: proxy
      url: http://loki:3100
      isDefault: false
EOF

为什么关闭 loki-stack 自动 datasource:kube-prometheus-stack 已经把 Prometheus 设为默认 datasource。如果 Loki chart 也生成 isDefault: true,Grafana 会 CrashLoop。


4. 查看状态

helm list -n monitoring

kubectl get pods -n monitoring -o wide
kubectl get pvc -n monitoring
kubectl get svc -n monitoring

kubectl get prometheus,alertmanager,servicemonitor,prometheusrule -A

入口:

Grafana:    http://154.201.73.31:32380
Prometheus: http://154.201.73.31:30090

Grafana 默认账号:

kubectl get secret -n monitoring kps-grafana \
  -o jsonpath='{.data.admin-user}' | base64 -d; echo

kubectl get secret -n monitoring kps-grafana \
  -o jsonpath='{.data.admin-password}' | base64 -d; echo

5. Prometheus 验收

PROM=$(kubectl get svc -n monitoring kps-kube-prometheus-stack-prometheus -o jsonpath='{.spec.clusterIP}')

curl -sS "http://$PROM:9090/-/ready"
curl -sS "http://$PROM:9090/api/v1/query?query=up" | jq '.status'
curl -sS "http://$PROM:9090/api/v1/query?query=count(up==1)" | jq '.data.result'

看 targets:

kubectl port-forward -n monitoring svc/kps-kube-prometheus-stack-prometheus 9090:9090

浏览器打开:

http://127.0.0.1:9090/targets

6. Grafana 常见故障

6.1 datasource 默认值冲突

日志:

kubectl logs -n monitoring -l app.kubernetes.io/name=grafana -c grafana --tail=100

如果看到:

Only one datasource per organization can be marked as default

检查:

kubectl get configmap -n monitoring -l grafana_datasource=1 -o yaml \
  | grep -n "name:\|isDefault"

处理原则:

  • Prometheus 保持 isDefault: true。
  • Loki 必须是 isDefault: false。
  • 不要让 loki-stack 自动生成第二个默认 datasource。

6.2 Grafana Multi-Attach

kubectl describe pod -n monitoring -l app.kubernetes.io/name=grafana
kubectl get volumeattachments.storage.k8s.io | grep grafana || true
kubectl get pvc -n monitoring kps-grafana

固定值:

helm upgrade kps prometheus-community/kube-prometheus-stack \
  --version 85.3.3 \
  -n monitoring \
  --reuse-values \
  --set grafana.deploymentStrategy.type=Recreate

7. Loki 验收和排障

LOKI=$(kubectl get svc -n monitoring loki -o jsonpath='{.spec.clusterIP}')

curl -sS "http://$LOKI:3100/ready"
curl -sS "http://$LOKI:3100/loki/api/v1/labels" | jq
curl -sS "http://$LOKI:3100/loki/api/v1/label/namespace/values" | jq

查 Promtail:

kubectl get pods -n monitoring -l app=promtail -o wide
kubectl logs -n monitoring -l app=promtail --tail=100

常见问题:

现象查什么原因
Grafana 查不到日志Loki labels APIPromtail 没采到或 datasource 错
promtail readiness failpromtail logs连不上 Loki 或节点日志路径异常
Loki PendingPVC / Longhorn卷挂载失败

8. Alertmanager 查看

kubectl get alertmanager -n monitoring
kubectl get pod -n monitoring | grep alertmanager
kubectl port-forward -n monitoring svc/kps-kube-prometheus-stack-alertmanager 9093:9093

浏览器:

http://127.0.0.1:9093

查看当前告警:

AM=$(kubectl get svc -n monitoring kps-kube-prometheus-stack-alertmanager -o jsonpath='{.spec.clusterIP}')
curl -sS "http://$AM:9093/api/v2/alerts" | jq 'length'

9. 一键健康检查

kubectl get pods -n monitoring -o wide
kubectl get pvc -n monitoring
kubectl get svc -n monitoring | grep NodePort
kubectl get configmap -n monitoring -l grafana_datasource=1 -o name
kubectl logs -n monitoring -l app.kubernetes.io/name=grafana -c grafana --tail=30
在 GitHub 上编辑此页
Prev
Longhorn 存储 Runbook:安装、查看、调试
Next
CI / GitOps Runbook:Harbor / Gitea / Jenkins / Kaniko / ArgoCD