当今的互联网应用系统越来越复杂,其中涉及的组件和服务越来越多,需要进行高效、可靠的监控,以保证系统的稳定性和性能。Prometheus 是一款功能强大的开源监控系统,可以实时监控多个维度的指标数据,并支持强大的查询语言和告警机制,是目前广泛使用的云原生应用监控系统之一。
本文档合集《Prometheus 实战:从 0 构建高可用监控平台》将从零开始,手把手教您如何构建一套高可用的 Prometheus 监控平台,涵盖了以下内容:
Prometheus 集群搭建:实现高可用和可扩展的监控系统
动态监控指标:自动发现和注册要监控的目标
告警机制配置:灵活配置告警规则、分组、过滤、抑制,实时通知异常情况
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
复制代码
注意点:
node2 和 node3 是同一业务线的高可用的 Prometheus 集群,故两个节点配置一样。同其他业务线区别使用 external_labels(这个配置项也是 thanos 做数据去重的重要依据), 如:
global:
external_labels:
region: "bf"
复制代码
安装之前的规划,Alertmanager 是主备模式,这个地方填的是 keepalived 配置的 vip (haproxy),见下一篇文章。
这里配置了一个 consul_sd_configs,方便动态添加收集节点 , token 对应上篇文章 cosul 安装的时候生成的 token。
添加服务的功能脚本见: https://mp.weixin.qq.com/s/rXMsnY-j_xQj9JiKhllOqQ
复制代码
由于 prometheus 和 alertmanager 一般不会变,这里使用了 static_configs 收集相关服务的指标数据。
remote_write 对应 上篇文章 -- Receive 配置。
评论