1. 首页 > Linux教程 > 正文

Linux教程FG475-Kubernetes监控告警体系

内容简介:本文风哥教程参考Linux官方文档、Red Hat Enterprise Linux官方文档、Ansible Automation Platform官方文档、Docker官方文档、Kubernetes官方文档和Podman官方文档等内容,详细介绍了相关技术的配置和使用方法。

本文档介

风哥提示:

绍Kubernetes监控告警体系实战案例。

Part01-Prometheus监控部署

1.1 安装Prometheus Stack

# 添加Helm仓库
[root@k8s-master ~]# helm repo add prometheus-community https:/学习交流加群风更多学习教程公众号风哥教程itpux_com哥微信: itpux-com/prometheus-community.github.io/helm-charts
“prometheus-community” has been added to your repositories

[root@k8s-master ~]# helm repo update
Hang tight while we grab the latest from your chart repositories…
…Successfully got an update from the “prometheus-community” chart repository
Update Complete.

# 创建命名空间
[root@k8s-master ~]# kubectl create namespace monitoring
namespace/monitoring created

# 安装kube-prometheus-stack
[root@k8s-master ~]# cat > prometheus-values.yaml << 'EOF' prometheus: prometheusSpec: retention: 15d storageSpec: volumeClaimTemplate: spec: accessModes: ["ReadWriteOnce"] resources: requests: storage: 50Gi resources: requests: cpu: 500m memory: 1Gi limits: cpu: 2000m memory: 4Gi alertmanager: alertmanagerSpec: storage: volumeClaimTemplate: spec: accessModes: ["ReadWriteOnce"] resources: requests: storage: 10Gi grafana: adminPassword: admin123 persistence: enabled: true size: 10Gi nodeExporter: enabled: true kubeStateMetrics: enabled: true EOF [root@k8s-master ~]# helm install prometheus prometheus-community/kube-prometheus-stack -n monitoring -f prometheus-values.yaml NAME: prometheus LAST DEPLOYED: Sat Apr 4 23:00:00 2026 NAMESPACE: monitoring STATUS: deployed REVISION: 1 NOTES: kube-prometheus-stack has been installed. # 查看部署状态 [root@k8s-master ~]# kubectl get pods -n monitoring NAME READY STATUS RESTARTS AGE alertmanager-prometheus-kube-prometheus-alertmanager-0 2/2 Running 0 5m prometheus-grafana-abc12-xyz789 3/3 Running 0 5m prometheus-kube-prometheus-operator-abc12-xyz789 1/1 Running 0 5m prometheus-kube-state-metrics-abc12-xyz789 1/1 Running 0 5m prometheus-prometheus-kube-prometheus-prometheus-0 2/2 Running 0 5m prometheus-prometheus-node-exporter-abc12 1/1 Running 0 5m

Part02-自定义监控指标

2.1 配置ServiceMonitor

# 部署应用并暴露指标
[root@k8s-master ~]# cat > fgedu-app-metrics.yaml << 'EOF' apiVersion: apps/v1 kind: Deployment metadata: name: fgedu-app namespace: fgedu-prod spec: replicas: 3 selector: matchLabels: app: fgedu-app template: metadata: labels: app: fgedu-app spec: containers: - name: app image: nginx:1.25 ports: - containerPort: 80 name: http - containerPort: 9113 name: metrics resources: requests: cpu: 100m memory: 128Mi limits: cpu: 500m memory: 512Mi --- apiVersion: v1 kind: Service metadata: name: fgedu-app-metrics namespace: fgedu-prod labels: app: fgedu-app spec: ports: - port: 9113 targetPort: 9113 name: metrics selector: app: fgedu-app EOF [root@k8s-master ~]# kubectl apply -f fgedu-app-metrics.yaml deployment.apps/fgedu-app created service/fgedu-app-metrics created # 创建ServiceMonitor [root@k8s-master ~]# cat > fgedu-servicemonitor.yaml << 'EOF' apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: fgedu-app-monitor namespace: monitoring labels: release: prometheus spec: selector: matchLabels: app: fgedu-app namespaceSelector: matchNames: - fgedu-prod endpoints: - port: metrics interval: 30s path: /metrics EOF [root@k8s-master ~]# kubectl apply -f fgedu-servicemonitor.yaml servicemonitor.monitoring.coreos.com/fgedu-app-monitor created # 验证指标采集 [root@k8s-master ~]# kubectl port-forward -n monitoring svc/prometheus-operated 9090:9090 & [1] 12345 [root@k8s-master ~]# curl -s 'http://localhost:9090/api/v1/query?query=up{job="fgedu-app"}' | jq { "status": "success", "data": { "resultType": "vector", "result": [ { "metric": { "__name__": "up", "job": "fgedu-app", "instance": "10.244.1.10:9113" }, "value": [1712206800, "1"] } ] } }

Part03-告警规则配置

3.1 自定义告警规则

# 创建告警规则
[root@k8s-master ~]# cat > fgedu-alert-rules.yaml << 'EOF' apiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: name: fgedu-alert-rules namespace: monitoring labels: release: prometheus spec: groups: - name: fgedu-app-alerts rules: - alert: FgeduAppDown expr: up{job="fgedu-app"} == 0 for: 1m labels: severity: critical annotations: summary: "FGEDU应用不可用" description: "应用 {{ $labels.instance }} 已经超过1分钟不可用" - alert: FgeduAppHighCPU expr: rate(container_cpu_usage_seconds_total{pod=~"fgedu-app.*"}[5m]) > 0.8
for: 5m
labels:
severity: warning
annotations:
summary: “FGEDU应用CPU使用率过高”
description: “Pod {{ $labels.pod }} CPU使用率超过80%”

– alert: FgeduAppHighMemory
expr: container_memory_usage_bytes{pod=~”fgedu-app.*”} / container_spec_memory_limit_bytes{pod=~”fgedu-app.*”} > 0.85
for: 5m
labels:
severity: warning
annotations:
summary: “FGEDU应用内存使用率过高”
description: “Pod {{ $labels.pod }} 内存使用率超过85%”

– alert: FgeduAppRestarting
expr: increase(kube_pod_conta学习交流加群风哥QQ113257174iner_status_restarts_total{pod=~”fgedu-app.*”}[1h]) > 3
for: 5m
labels:
severity: warning
annotations:
summary: “FGEDU应用频繁重启”
description: “Pod {{ $labels.pod }} 在过去1小时内重启超过3次”

– name: kubernetes-cluster-alerts
rules:
– alert: NodeHighCPU
expr: 100 – (avg by(instance) (irate(node_cpu_seconds_total{mode=”idle”}[5m])) * 100) > 80
for: 5m
labels:
severity: warning
annotations:
summary: “节点CPU使用率过高”
description: “节点 {{ $labels.instance }} CPU使用率超过80%”

– alert: NodeHighMemory
expr: (1 – (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 85
for: 5m
labels:
severity: warning
annotations:
summary: “节点内存使用率过高”
description: “节点 {{ $labels.instance }} 内存使用率超过85%”

– alert: NodeDiskPressure
expr: (1 – (node_filesystem_avail_bytes{fstype!=”tmpfs”} / node_filesystem_size_bytes{fstype!=”tmpfs”})) * 100 > 85
for: 5m
labels:
severity: critical
annotations:
summary: “节点磁盘空间不足”
description: “节点 {{ $labels.instance }} 磁盘使用率超过85%”
EOF

[root@k8s-master ~]# kubectl apply -f fgedu-alert-rules.yaml
prometheusrule.monitoring.coreos.com/fgedu-alert-rules created

# 查看告警规则
[root@k8s-master ~]# kubectl get prometheusrule -n monitoring
NAME AGE
fgedu-alert-rules 1m
prometheus-rules 10m

Part04-Grafana Dashboard

4.1 自定义Dashboard

# 访问Grafana
[root@k8s-master ~]# kubectl port-forward -n monitoring svc/prometheus-grafana 3000:80 &
[2] 12346

# 创建自定义Dashboard
[root@k8s-master ~]# cat > fgedu-dashboard.json << 'EOF' { "dashboard": { "title": "FGEDU Application Dashboard", "uid": "fgedu-app", "panels": [ { "title": "Request Rate", "type": "graph", "gridPos": {"h": 8, "w": 12, "x": 0, "y": 0}, "targets": [ { "expr": "sum(rate(http_requests_total{app=\"fgedu-app\"}[5m]))", "legendFormat": "requests/s" } ] }, { "title": "Error Rate", "type": "graph", "gridPos": {"h": 8, "w": 12, "x": 12, "y": 0}, "targets": [ { "expr": "sum(rate(http_requests_total{app=\"fgedu-app\",status=~\"5..\"}[5m]))", "legendFormat": "errors/s" } ] }, { "title": "Response Time", "type": "graph", "gridPos": {"h": 8, "w": 12, "x": 0, "y"from PG视频:www.itpux.com: 8}, "targets": [ { "expr": "histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket{app=\"fgedu-app\"}[5m])) by (le))", "legendFormat": "p99" }, { "expr": "histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket{app=\"fgedu-app\"}[5m])) by (le))", "legendFormat": "p95" } ] }, { "title": "Pod CPU Usage", "type": "graph", "gridPos": {"h": 8, "w": 12, "x": 12, "y": 8}, "targets": [ { "expr": "sum(rate(container_cpu_usage_seconds_total{pod=~\"fgedu-app.*\"}[5m])) by (pod)", "legendFormat": "{{pod}}" } ] } ] }, "overwrite": true } EOF # 导入Dashboard [root@k8s-master ~]# curl -X POST -H "Content-Type: application/json" -d @fgedu-dashboard.json http://admin:admin123@localhost:3000/api/dashboards/db {"id":1,"slug":"fgedu-app","status":"success","uid":"fgedu-app","url":"/d/fgedu-app/fgedu-application-dashboard","version":1}

风哥针对监控告警建议:

  • 使用Prometheus Operator简化部署
  • 配置ServiceMonitor自动发现
  • 定义合理的告警规则和阈值
  • 配置多渠道告警通知
  • 定期审查和优化监控指标

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息