对运维体系构成而言,监控系统属于核心组件,该系统的选型以及配置情况,将会对故障得以发现的速度以及业务具有的稳定性产生直接影响。

开源监控系统,因有着灵活的数据模型,还有强大的查询语言,所以已成为现代云原生环境的事实标准,而掌握其核心技巧,能让你的监控效率提升数倍。

高可用集群部署

生产环境必须避免单点故障导致的监控盲区。

# 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等信息来提取环境标识,推动监控指标带着更为丰富的业务上下文信息。

精准告警配置

告警规则的质量直接影响故障响应效率。

高可用Prometheus集群配置_工具技巧Prometheus使用技巧_Prometheus监控技巧

设定恰当的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 压缩举措,削减磁盘写入时所产生的负担,保障单机具备处理每秒达百万级别的数据点采样工作的能力。

你在生产环境中遇到过最棘手的监控问题是什么?

倘若你有着排除障碍的经历,欢迎于评论区域进行分享,同时为了能够在任何时候都可以查看到这些实用的技巧,还请对本文予以点赞并收藏。