首次提交:初始化项目
This commit is contained in:
241
009-基础设施/006-monitoring-grafana/readme.md
Normal file
241
009-基础设施/006-monitoring-grafana/readme.md
Normal file
@@ -0,0 +1,241 @@
|
||||
# Prometheus + Grafana 监控系统
|
||||
|
||||
## 组件说明
|
||||
|
||||
### Prometheus
|
||||
- **功能**: 时间序列数据库,收集和存储指标数据
|
||||
- **存储**: 20Gi Longhorn 卷
|
||||
- **数据保留**: 15 天
|
||||
- **访问**: http://prometheus.local
|
||||
|
||||
### Grafana
|
||||
- **功能**: 可视化仪表板
|
||||
- **存储**: 5Gi Longhorn 卷
|
||||
- **默认用户**: admin
|
||||
- **默认密码**: prom-operator
|
||||
- **访问**: http://grafana.local
|
||||
|
||||
### Alertmanager
|
||||
- **功能**: 告警管理和通知
|
||||
- **存储**: 5Gi Longhorn 卷
|
||||
- **访问**: http://alertmanager.local
|
||||
|
||||
### Node Exporter
|
||||
- **功能**: 收集节点级别的系统指标(CPU、内存、磁盘等)
|
||||
|
||||
### Kube State Metrics
|
||||
- **功能**: 收集 Kubernetes 资源状态指标
|
||||
|
||||
## 部署方式
|
||||
|
||||
```bash
|
||||
bash deploy.sh
|
||||
```
|
||||
|
||||
## 部署后配置
|
||||
|
||||
### 1. 应用 Ingress
|
||||
```bash
|
||||
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:
|
||||
|
||||
```yaml
|
||||
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:
|
||||
|
||||
```bash
|
||||
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
|
||||
```
|
||||
|
||||
## 告警配置
|
||||
|
||||
### 查看告警规则
|
||||
```bash
|
||||
kubectl get prometheusrules -n monitoring
|
||||
```
|
||||
|
||||
### 自定义告警规则
|
||||
|
||||
创建 PrometheusRule:
|
||||
|
||||
```yaml
|
||||
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 配置:
|
||||
|
||||
```bash
|
||||
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
|
||||
|
||||
### 查看日志
|
||||
```bash
|
||||
# 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` 参数,然后:
|
||||
```bash
|
||||
helm upgrade kube-prometheus-stack prometheus-community/kube-prometheus-stack \
|
||||
--namespace monitoring -f values.yaml
|
||||
```
|
||||
|
||||
### 调整采集间隔
|
||||
默认采集间隔为 30 秒,可以在 ServiceMonitor 中调整。
|
||||
|
||||
## 故障排查
|
||||
|
||||
### Prometheus 无法采集数据
|
||||
```bash
|
||||
# 检查 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 正确
|
||||
|
||||
## 卸载
|
||||
|
||||
```bash
|
||||
helm uninstall kube-prometheus-stack -n monitoring
|
||||
kubectl delete namespace monitoring
|
||||
```
|
||||
|
||||
## 参考资源
|
||||
|
||||
- Prometheus 文档: https://prometheus.io/docs/
|
||||
- Grafana 文档: https://grafana.com/docs/
|
||||
- kube-prometheus-stack: https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack
|
||||
Reference in New Issue
Block a user