对运维体系构成而言,监控系统属于核心组件,该系统的选型以及配置情况,将会对故障得以发现的速度以及业务具有的稳定性产生直接影响。
开源监控系统,因有着灵活的数据模型,还有强大的查询语言,所以已成为现代云原生环境的事实标准,而掌握其核心技巧,能让你的监控效率提升数倍。
高可用集群部署
生产环境必须避免单点故障导致的监控盲区。
# 1. 创建持久化数据目录
mkdir -p /data/prometheus/{node1,node2}
# 2. 启动主节点
docker run -d --name prometheus-primary
-p 9090:9090
-v /data/prometheus/node1:/prometheus
prom/prometheus:latest
--config.file=/etc/prometheus/prometheus.yml
--storage.tsdb.path=/prometheus
--web.enable-lifecycle
--alertmanager.url=http://alertmanager:9093
# 3. 启动从节点(热备)
docker run -d --name prometheus-secondary
-p 9091:9090
-v /data/prometheus/node2:/prometheus
prom/prometheus:latest
--config.file=/etc/prometheus/prometheus.yml
--storage.tsdb.path=/prometheus
--web.enable-lifecycle
--alertmanager.url=http://alertmanager:9093
可以借助部署起码两个实例,尔后配置 Nginx 充当前端负载均衡器,进而达成自动故障转移,如果某个节点发生宕机的情况,那么流量能够自动切换至健康节点来实现。
从数据持久化这一角度来讲,提议采用本地SSD存储方式,并且要对保留时间进行恰到好处的设定。
使用这样的,即--storage.tsdb.retention.time=15d这个参数,它能够满足近期故障排查方面的需求,同时不会因为数据出现堆积的情况而导致磁盘空间被耗尽,是这样的一种情况。
查询语句优化
# 1. 计算95%响应时间阈值
histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le, service))
# 2. 检测异常流量(与过去7天平均值比较偏差超过2倍)
sum(rate(node_network_transmit_bytes_total[5m])) by (instance)
/ sum(rate(node_network_transmit_bytes_total[5m] offset 7d)) by (instance) > 2
# 3. 计算服务可用性(成功率)
sum(rate(http_requests_total{status=~"2.."}[5m])) / sum(rate(http_requests_total[5m]))
查询语言是挖掘监控数据价值的关键工具。
把控rate()函数去处理计数器类型指标,则能够确切反映QPS以及错误率的变化情况,运用histogram_quantile()来分析延迟分布得以精准评估服务响应性能。
于调试复杂查询之际,充分借助Web界面的Graph功能来开展可视化验证。
借助Table视图去查看原始数据点,再结合控制台的即时查询,如此一来能够迅速定位语法错误或者逻辑偏差。
# prometheus.yml
scrape_configs:
- job_name: 'kubernetes-apiservers'
kubernetes_sd_configs:
- role: endpoints
scheme: https
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
relabel_configs:
- source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
action: keep
regex: default;kubernetes;https
自动发现机制
传统静态配置文件在容器环境中难以维护。
系统借助集成服务发现,能够自动识别Kubernetes里新建的Pod,进而将其纳入监控范围,且不需要人工去介入修改配置。
标签重写功能可以进一步提升数据维度价值。
groups:
- name: node_alerts
rules:
- alert: HighCPUUsage
expr: avg(rate(node_cpu_seconds_total{mode!="idle"}[5m])) by (instance) > 0.8
for: 10m
labels:
severity: warning
annotations:
summary: "High CPU usage on {{ $labels.instance }}"
description: "CPU usage is above 80% for 10 minutes (current value: {{ $value }})"
runbook_url: "https://internal.wiki/runbooks/high-cpu-usage"
以正则表达式借由元标签里头的namespace、pod等信息来提取环境标识,推动监控指标带着更为丰富的业务上下文信息。
精准告警配置
告警规则的质量直接影响故障响应效率。

设定恰当的for子句,像是5分钟那样的,能够滤除瞬时抖动,防止因网络延迟或者GC暂停而出现误报,使得告警变得更加可靠。
# prometheus.rules.yml
groups:
- name: recording_rules
rules:
- record: instance:node_cpu_usage:rate5m
expr: avg(rate(node_cpu_seconds_total{mode!="idle"}[5m])) by (instance)
- record: job:http_requests_total:rate5m
expr: sum(rate(http_requests_total[5m])) by (job)
分组机制将相似告警合并为单一通知。
系统借助了告警组以及间隔的定义,因此能够将同一服务的多个异常事件进行打包发送,进而避免了告警风暴对值班人员造成信息轰炸。
预计算规则
复杂查询在仪表盘频繁刷新时会消耗大量资源。
# 1. 安装Thanos Sidecar
docker run -d --name thanos-sidecar
-v /data/prometheus:/prometheus
-p 10902:10902
thanosio/thanos:latest
sidecar
--prometheus.url=http://prometheus:9090
--tsdb.path=/prometheus
--objstore.config-file=/etc/thanos/objectstorage.yml
# 2. 配置对象存储(MinIO示例)
cat > objectstorage.yml << EOF
type: S3
config:
bucket: prometheus-data
endpoint: minio:9000
access_key: minio_access_key
secret_key: minio_secret_key
insecure: true
EOF
按照定义的规则,系统于后台进行周期性的预计算,其中计算的是高频查询,并且会把计算所得的结果存储起来,使之成为新的时间序列,最终能实现可视化加载速度的大幅提升。
规则语法验证是防止配置错误的防线。
开展check rules指令,能够预先察知表达式差错,借由/rules端点监督规则施行状况,保证预计算任务顺利运转。
长期存储方案
本地存储受限于磁盘容量无法保存年度的历史数据。
# 1. 安装Prometheus Alertmanager
docker run -d --name alertmanager -p 9093:9093 prom/alertmanager:latest
# 2. 部署Pushgateway接收瞬时任务指标
docker run -d --name pushgateway -p 9091:9091 prom/pushgateway:latest
# 3. 安装node-exporter监控主机指标
docker run -d --name node-exporter -p 9100:9100
-v "/:/host:ro,rslave"
prom/node-exporter:latest
--path.rootfs=/host
选取远程存储适配器,以此来进行数据的写入操作,所写入的对象为对象存储或者时序数据库,这样做的话,一方面能够达成冷热数据的分离效果,另一方面还能够满足长期趋势分析这一需求。
数据生命周期管理需要平衡存储成本与查询性能。
建议将热数据留存两周,以满足日常排查所需,对于超过三个月时长的历史数据,要借助降采样的方式,降低其精度,进而压缩存储空间的占用。
生态扩展集成
原生功能通过导出器生态得到无限延伸。
node_exporter用以提供主机相关指标比如CPU呀、内存呀等等 ,blackbox_exporter实现如HTTP啦、TCP啦等网络探测 ,这些组件一同构建起完整的用于监控方面的视图。
大规模部署时需考虑性能优化。
启动采用哈希方式的分片操作,把相关的指标依据标签分配至不一样的实例,协同 WAL 压缩举措,削减磁盘写入时所产生的负担,保障单机具备处理每秒达百万级别的数据点采样工作的能力。
你在生产环境中遇到过最棘手的监控问题是什么?
倘若你有着排除障碍的经历,欢迎于评论区域进行分享,同时为了能够在任何时候都可以查看到这些实用的技巧,还请对本文予以点赞并收藏。

Comments NOTHING