Files
2026-02-05 00:11:05 +08:00
..
2026-02-05 00:11:05 +08:00
2026-02-05 00:11:05 +08:00
2026-02-05 00:11:05 +08:00
2026-02-05 00:11:05 +08:00

Prometheus + Grafana 监控系统

组件说明

Prometheus

  • 功能: 时间序列数据库,收集和存储指标数据
  • 存储: 20Gi Longhorn 卷
  • 数据保留: 15 天
  • 访问: http://prometheus.local

Grafana

  • 功能: 可视化仪表板
  • 存储: 5Gi Longhorn 卷
  • 默认用户: admin
  • 默认密码: prom-operator
  • 访问: http://grafana.local

Alertmanager

Node Exporter

  • 功能: 收集节点级别的系统指标CPU、内存、磁盘等

Kube State Metrics

  • 功能: 收集 Kubernetes 资源状态指标

部署方式

bash deploy.sh

部署后配置

1. 应用 Ingress

kubectl apply -f ingress.yaml

2. 配置 /etc/hosts

<节点IP> grafana.local
<节点IP> prometheus.local
<节点IP> alertmanager.local

3. 访问 Grafana

  1. 打开浏览器访问: http://grafana.local
  2. 使用默认凭证登录:
    • 用户名: admin
    • 密码: prom-operator
  3. 首次登录后建议修改密码

预置仪表板

Grafana 已预装多个仪表板:

  1. Kubernetes / Compute Resources / Cluster

    • 集群整体资源使用情况
  2. Kubernetes / Compute Resources / Namespace (Pods)

    • 按命名空间查看 Pod 资源使用
  3. Kubernetes / Compute Resources / Node (Pods)

    • 按节点查看 Pod 资源使用
  4. Kubernetes / Networking / Cluster

    • 集群网络流量统计
  5. Node Exporter / Nodes

    • 节点详细指标CPU、内存、磁盘、网络

监控目标

系统会自动监控:

  • Kubernetes API Server
  • Kubelet
  • Node Exporter (节点指标)
  • Kube State Metrics (K8s 资源状态)
  • CoreDNS
  • Prometheus 自身
  • Grafana

添加自定义监控

监控 Redis

创建 ServiceMonitor

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: redis-monitor
  namespace: monitoring
spec:
  selector:
    matchLabels:
      app: redis
  namespaceSelector:
    matchNames:
    - redis
  endpoints:
  - port: redis
    interval: 30s

监控 PostgreSQL

需要部署 postgres-exporter

helm install postgres-exporter prometheus-community/prometheus-postgres-exporter \
  --namespace postgresql \
  --set config.datasource.host=postgresql-service.postgresql.svc.cluster.local \
  --set config.datasource.user=postgres \
  --set config.datasource.password=postgres123

告警配置

查看告警规则

kubectl get prometheusrules -n monitoring

自定义告警规则

创建 PrometheusRule

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  name: custom-alerts
  namespace: monitoring
spec:
  groups:
  - name: custom
    interval: 30s
    rules:
    - alert: HighMemoryUsage
      expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes > 0.9
      for: 5m
      labels:
        severity: warning
      annotations:
        summary: "节点内存使用率超过 90%"
        description: "节点 {{ $labels.instance }} 内存使用率为 {{ $value | humanizePercentage }}"

配置告警通知

编辑 Alertmanager 配置:

kubectl edit secret alertmanager-kube-prometheus-stack-alertmanager -n monitoring

添加邮件、Slack、钉钉等通知渠道。

数据持久化

所有数据都存储在 Longhorn 卷上:

  • Prometheus 数据: 20Gi
  • Grafana 配置: 5Gi
  • Alertmanager 数据: 5Gi

可以通过 Longhorn UI 创建快照和备份到 S3。

常用操作

查看 Prometheus 目标

访问: http://prometheus.local/targets

查看告警

访问: http://alertmanager.local

导入自定义仪表板

  1. 访问 Grafana
  2. 点击 "+" -> "Import"
  3. 输入仪表板 ID 或上传 JSON

推荐仪表板:

  • Node Exporter Full: 1860
  • Kubernetes Cluster Monitoring: 7249
  • Longhorn: 13032

查看日志

# Prometheus 日志
kubectl logs -n monitoring -l app.kubernetes.io/name=prometheus -f

# Grafana 日志
kubectl logs -n monitoring -l app.kubernetes.io/name=grafana -f

性能优化

调整数据保留时间

编辑 values.yaml 中的 retention 参数,然后:

helm upgrade kube-prometheus-stack prometheus-community/kube-prometheus-stack \
  --namespace monitoring -f values.yaml

调整采集间隔

默认采集间隔为 30 秒,可以在 ServiceMonitor 中调整。

故障排查

Prometheus 无法采集数据

# 检查 ServiceMonitor
kubectl get servicemonitor -A

# 检查 Prometheus 配置
kubectl get prometheus -n monitoring -o yaml

Grafana 无法连接 Prometheus

检查 Grafana 数据源配置:

  1. 登录 Grafana
  2. Configuration -> Data Sources
  3. 确认 Prometheus URL 正确

卸载

helm uninstall kube-prometheus-stack -n monitoring
kubectl delete namespace monitoring

参考资源