天天看点

Prometheus实战-从0构建高可用监控平台(二)

当今的互联网应用系统越来越复杂,其中涉及的组件和服务越来越多,需要进行高效、可靠的监控,以保证系统的稳定性和性能。Prometheus是一款功能强大的开源监控系统,可以实时监控多个维度的指标数据,并支持强大的查询语言和告警机制,是目前广泛使用的云原生应用监控系统之一。

本文档合集《Prometheus实战:从0构建高可用监控平台》将从零开始,手把手教您如何构建一套高可用的Prometheus监控平台,涵盖了以下内容:

1. Prometheus集群搭建:实现高可用和可扩展的监控系统

2. 动态监控指标:自动发现和注册要监控的目标

3. 告警机制配置:灵活配置告警规则、分组、过滤、抑制,实时通知异常情况

4. Grafana可视化展示:直观了解系统运行状态和趋势

本文档合集的目标读者是具有一定Linux系统和网络知识的系统管理员和DevOps工程师。通过本文档合集的学习,您将掌握Prometheus的核心概念和实践技巧,能够快速搭建一套高效、可靠的监控平台,帮助您更好地管理和维护复杂的互联网应用系统。

本文内容是基于Thanos安装一个高可用和可扩展的Prometheus集群。

基础信息见上一篇文章,这篇主要介绍Prometheus集群搭建和配置注意事项

Prometheus全家桶

如之前规划,node2 和 node3 都安装 Prometheus , Alertmanager, PrometheusAlert.

Prometheus集群安装

node2 node3 都执行以下安装内容
cd /usr/local/src/
wget https://github.com/prometheus/prometheus/releases/download/v2.37.0/prometheus-2.37.0.linux-amd64.tar.gz
tar xf prometheus-2.37.0.linux-amd64.tar.gz -C /usr/local
ln -sv /usr/local/prometheus-2.37.0.linux-amd64 /usr/local/prometheus

groupadd -r prometheus
useradd -r -g prometheus -s /sbin/nologin -c "prometheus Daemons" prometheus

mkdir /data/prometheus
chown -R prometheus. /data/prometheus
chown prometheus:prometheus /usr/local/prometheus/ -R


cat > /etc/systemd/system/prometheus.service <<EOF
[Unit]
Description=prometheus
After=network.target
[Service]
Type=simple
User=prometheus
ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml --web.enable-admin-api --web.enable-lifecycle --storage.tsdb.path=/data/prometheus --storage.tsdb.retention=15d
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
LimitNOFILE=655350
LimitNPROC=655350
LimitCORE=infinity
[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl start prometheus
systemctl enable prometheus           

允许用户通过HTTP请求来查询、配置和管理Prometheus实例。

// 启动时候添加参数--web.enable-admin-api
/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml --web.enable-admin-api --storage.tsdb.path=/data/prometheus

curl -X POST -g 'http://localhost:9090/api/v1/admin/tsdb/delete_series?match[]={job="JMX"}'           

Config

上面设置好就可以配置采集节点和告警规则。具体见后面文章

mkdir /usr/local/prometheus/{rules,targets}           
Prometheus配置文件
global:
  external_labels:
    region: "fb"
alerting:
  alertmanagers:
    - static_configs:
      - targets:
        - 10.2.0.27:19093
rule_files:
  - "rules/*.yml"
scrape_configs:
  - job_name: 'consul-exporter'
    metrics_path: /metrics
    scheme: http
    consul_sd_configs:
      - server: localhost:8500
        token: 'xxxxxxxx'
        services: ['consul_exporter']
    relabel_configs:
      - regex: __meta_consul_service_metadata_(.+)
        action: labelmap
  
  - job_name: "prometheus"
    static_configs:
      - targets:
        - '10.2.0.10:9090'
        - '10.2.0.41:9090'
  - job_name: "alertmanager"
    static_configs:
      - targets:
        - '10.2.0.10:9093'
        - '10.2.0.41:9093'
remote_write:
  - url: http://10.2.0.6:10908/api/v1/receive
    headers:
      THANOS-TENANT: fb
  - url: http://10.2.0.10:10908/api/v1/receive
    headers:
      THANOS-TENANT: fb
  - url: http://10.2.0.41:10908/api/v1/receive
    headers:
      THANOS-TENANT: fb           

注意点:

  1. node2 和 node3 是同一业务线的高可用的Prometheus集群,故两个节点配置一样。同其他业务线区别使用external_labels(这个配置项也是thanos做数据去重的重要依据), 如:
global:
  external_labels:
    region: "bf"           
  1. 安装之前的规划,Alertmanager 是主备模式,这个地方填的是 keepalived 配置的 vip (haproxy),见下一篇文章。
  2. 这里配置了一个consul_sd_configs,方便动态添加收集节点 , token对应上篇文章cosul安装的时候生成的token。
添加服务的功能脚本见: https://mp.weixin.qq.com/s/rXMsnY-j_xQj9JiKhllOqQ           
  1. 由于prometheus 和 alertmanager 一般不会变,这里使用了static_configs收集相关服务的指标数据。
  2. remote_write 对应 上篇文章 -- Receive配置。

继续阅读