Prometheus是一款开源监控告警系统,自2012年开源以来,许多公司和组织都使用Prometheus,并且他拥有众多开发者和活跃的社区。
Prometheus拥有许多特性
由时序数据kv标识组成的多维度数据模型
PromQL 灵活的查询语句
不依赖分布式存储;单个服务器节点是自治的
HTTP拉取方式收集时序数据
同时支持时序数据推送 pushGateway
通过服务发现或静态配置发现监控目标
支持多种图形和仪表板模式
Prometheus架构图
核心组件
prometheus安装
prometheus版本迭代比较快,建议采用2.21以上版本,prometheus有着良好的向下兼容性;新版本的功能页比较丰富,同时支撑快速升级
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| # 下载prometheus,此处以Linux为例,也可使用Windows,建议个人开发测试使用Windows,线上请安装Linux并且做好权限隔离 wget https://github.com/prometheus/prometheus/releases/download/v2.38.0/prometheus-2.38.0.linux-amd64.tar.gz
# 解压文件 tar -xf prometheus-2.38.0.linux-amd64.tar.gz cd prometheus
nohup ./prometheus --config.file="prometheus.yml" \ # 指定prometheus配置文件,使用默认即可,如果配置systemd,建议使用全路径 --web.listen-address="0.0.0.0:9090" \ # 绑定服务IP和端口号 --web.enable-lifecycle \ # 开启http生命周期管理命令,开启后支持热加载配置文件 --storage.tsdb.path="data/" \ # 收集后的数据存储位置 >> /dev/null 2>&1 &
# 完整命令 nohup ./prometheus --config.file="prometheus.yml" --web.listen-address="0.0.0.0:9090" --web.enable-lifecycle --storage.tsdb.path="data/" >> /dev/null 2>&1 &
|
alertmanger安装
alertmanager 是prometheus体系中的告警消息发送服务;alertmanager支持多种消息推送,自行测试请直接使用email,官方建议使用webhook或者微信钉钉等hook方式接收消息,本次以webhook为例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| # 下载 alertmanager ,建议使用与prometheus相同发布周期的版本,或者直接下载最新版本的alertmanager wget https://github.com/prometheus/alertmanager/releases/download/v0.24.0/alertmanager-0.24.0.linux-amd64.tar.gz
#解压 tar -xf alertmanager-0.24.0.linux-amd64.tar.gz cd alertmanager # 启动alertmanager nohup ./alertmanager --config.file="alertmanager.yml" \ # 指定alertmanager的配置文件 --storage.path="data/" \ #alertmanager数据存储目录 --web.listen-address=":9093" \ # 绑定IP和端口号 >> /dev/null 2>&1 & # alertmanager支持集群模式,如果使用webhook等方式不建议使用机器,单个服务足够支撑 # 完整命令 nohup ./alertmanager --config.file="alertmanager.yml" --storage.path="data/" --web.listen-address=":9093" >> /dev/null 2>&1 &
|
alertmanager 配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| smtp_from: <tmpl_string> smtp_smarthost: <string> smtp_hello: <string> | default = "localhost" ] smtp_auth_username: <string> ] smtp_auth_password: <secret> ] smtp_require_tls: <bool> | default = true ]
route: group_by: ['alertname'] group_wait: 30s group_interval: 1m repeat_interval: 1m receiver: 'web.hook' routes: - receiver: 'email' continue: false match: [label:labelvalue] match_re: [ <labelname>: <regex>, ... ] receivers: - name: 'web.hook' webhook_configs: - url: 'http://127.0.0.1:8000/api/alert/webhook' inhibit_rules: - source_match: severity: 'critical' target_match: severity: 'warning' equal: ['alertname', 'dev', 'instance']
|