19.5.4 可观测性平台选型与集成
可观测性平台选型与集成需要从业务规模、技术栈、团队能力与成本约束出发,兼顾“指标、日志、链路”三类数据的一致性与可扩展性。平台选型应覆盖数据采集、传输、存储、查询、可视化与告警闭环,确保性能与可靠性满足生产要求。
原理草图(平台组合与数据流):
选型评估要点:
- 采集能力:支持主机、容器、K8s、数据库与中间件的多维度采集,具备自动发现与标签管理
- 存储能力:冷热分层、压缩与保留策略,支持大规模高基数指标
- 查询性能:高并发查询、聚合能力与时序优化
- 告警能力:多级告警、去重、抑制与路由
- 可视化与自助分析:统一仪表盘与自定义分析能力
- 集成扩展:API、Webhook、插件生态与自定义采集
- 成本与运维复杂度:软硬件成本、部署维护难度与团队适配性
平台组合推荐:
- 指标:Prometheus + Thanos/Mimir(长周期与多集群)
- 日志:Loki 或 ELK/OpenSearch(按检索复杂度选择)
- 链路:Jaeger 或 Tempo(与指标日志关联)
- 告警与值班:Alertmanager + On-call/通知平台
- 可视化:Grafana 统一仪表盘
集成实施流程:
1. 采集标准化:统一命名、标签与采集周期,定义全局标签体系(环境、集群、服务、版本、机房)
2. 数据接入:分层接入主机、容器、应用与中间件,确保关键组件(MySQL、Redis、Kafka、Nginx、K8s)指标覆盖
3. 存储规划:根据业务重要性与检索频率设置保留周期与冷热分层
4. 告警联动:将监控阈值、日志关键词与链路异常纳入统一告警路由
5. 可视化落地:建立基础运行态、业务态与SLA三类核心仪表盘
6. 权限与审计:接入统一认证与权限控制,保障可追溯性
安装与集成示例(Docker Compose,一体化快速验证):
mkdir -p /opt/obs && cd /opt/obs
cat > /opt/obs/docker-compose.yml <<'EOF'
version: "3.8"
services:
prometheus:
image: prom/prometheus:v2.49.1
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports: ["9090:9090"]
grafana:
image: grafana/grafana:10.2.3
ports: ["3000:3000"]
loki:
image: grafana/loki:2.9.2
command: -config.file=/etc/loki/local-config.yaml
ports: ["3100:3100"]
promtail:
image: grafana/promtail:2.9.2
volumes:
- /var/log:/var/log
- ./promtail.yml:/etc/promtail/config.yml
command: -config.file=/etc/promtail/config.yml
EOF
cat > /opt/obs/prometheus.yml <<'EOF'
global:
scrape_interval: 15s
scrape_configs:
- job_name: "node"
static_configs:
- targets: ["localhost:9100"]
- job_name: "nginx"
static_configs:
- targets: ["nginx-exporter:9113"]
EOF
cat > /opt/obs/promtail.yml <<'EOF'
server:
http_listen_port: 9080
positions:
filename: /tmp/positions.yaml
clients:
- url: http://loki:3100/loki/api/v1/push
scrape_configs:
- job_name: varlogs
static_configs:
- targets: [localhost]
labels:
job: varlogs
__path__: /var/log/*.log
EOF
docker compose up -d
接入示例(Nginx 指标与日志):
# 1) 启用 Nginx stub_status
cat > /etc/nginx/conf.d/status.conf <<'EOF'
server {
listen 8080;
location /stub_status {
stub_status;
allow 127.0.0.1;
deny all;
}
}
EOF
nginx -t && systemctl reload nginx
# 2) 启动 nginx-exporter
docker run -d --name nginx-exporter \
-p 9113:9113 \
nginx/nginx-prometheus-exporter:1.1.0 \
-nginx.scrape-uri=http://127.0.0.1:8080/stub_status
告警示例(Prometheus + Alertmanager):
# /opt/obs/rules.yml
groups:
- name: host
rules:
- alert: NodeCPUHigh
expr: 100 - (avg by(instance)(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 85
for: 2m
labels:
severity: warning
annotations:
summary: "CPU高使用率"
description: "实例 {{ $labels.instance }} CPU > 85%"
Grafana 数据源配置验证(预期:返回 200):
curl -s -o /dev/null -w "%{http_code}\n" http://localhost:9090/-/ready
curl -s -o /dev/null -w "%{http_code}\n" http://localhost:3100/ready
命令解释要点:
- scrape_interval: 15s:指标采集周期,越短越实时但成本更高
- __path__:Promtail 采集日志路径
- expr:PromQL 规则表达式,触发告警
- for: 2m:持续 2 分钟才触发,避免抖动
排错清单(含命令):
1. 采集不到指标
curl -s http://localhost:9100/metrics | head
curl -s http://localhost:9113/metrics | head
- Prometheus 目标为 DOWN
curl -s http://localhost:9090/api/v1/targets | jq '.data.activeTargets[].health'
- Loki 无日志
docker logs promtail | tail -n 50
curl -s "http://localhost:3100/loki/api/v1/labels"
- Grafana 无数据
# 确认数据源 URL、网络连通、权限
docker logs grafana | tail -n 50
集成注意事项与最佳实践:
- 统一服务标识与TraceID贯通指标、日志、链路
- 建立数据质量校验规则,防止缺失与噪声数据
- 保留运维与业务视角的双重仪表盘
- 实施告警收敛策略,减少误报和重复告警
- 对核心服务实施SLO/SLA监控与持续优化
练习:
1. 为 MySQL 增加 exporter 并在 Grafana 绘制 QPS 与慢查询仪表盘
2. 新增一条 Loki 查询(如 job=varlogs)并配置关键字告警
3. 将 Prometheus 采集周期调整为 30s,观察存储与查询的变化
4. 为 Nginx 增加 5xx 告警规则并验证告警路由是否正确
可观测性平台的核心目标是形成“可发现、可定位、可归因、可恢复”的闭环,最终提高故障响应速度与系统稳定性。