1. 对比Zabbix
相对于zabbix更加灵活,模块间比较解耦,方便使用,不需要安装
zabbix客户端通过脚本采集数据库数据、日志文件等。而Prometheus客户端分为不同语言的SDK和不同用途的exporter,比如监控机器状态、mysql性能等,可以直接使用exporter,通过http对服务端提供信息(server去pull信息);如果监控自己的业务状态,可以直接使用官方的sdk,不需要先把数据存入数据再供客户端采集。
zabbix客户端更多做的是推送数据,而Prometheus客户端本地会存储监控数据,服务端定时来拉取数据。
2.特性
- 强大的多维度数据模型:
- 时间序列数据通过 metric 名和键值对来区分。
- 所有的 metrics 都可以设置任意的多维标签。
- 数据模型更随意,不需要刻意设置为以点分隔的字符串。
- 可以对数据模型进行聚合,切割和切片操作。
- 支持双精度浮点类型,标签可以设为全 unicode。
- 灵活而强大的查询语句(PromQL):在同一个查询语句,可以对多个 metrics 进行乘法、加法、连接、取分数位等操作。
- 易于管理 :Prometheus server 是一个单独的二进制文件,可直接在本地工作,不依赖于分布式存储。
- 高效 :平均每个采样点仅占 3.5 bytes,且一个 Prometheus server 可以处理数百万的 metrics。
- 使用 pull 模式采集时间序列数据,这样不仅有利于本机测试而且可以避免有问题的服务器推送坏的 metrics。
- 可以采用 push gateway 的方式把时间序列数据推送至 Prometheus server 端。
- 可以通过服务发现或者静态配置去获取监控的 targets。
有多种可视化图形界面。 - 易于伸缩。
3. 组件及架构
Prometheus生态系统包含多个组件:
- Prometheus Server: 用于收集和存储时间序列数据。
- Client Library: 客户端库,为需要监控的服务生成相应的 metrics 并暴露给 Prometheus server。当 Prometheus server 来 pull 时,直接返回实时状态的 metrics。
- Push Gateway: 主要用于短期的 jobs。由于这类 jobs 存在时间较短,可能在 Prometheus 来 pull 之前就消失了。为此,这次 jobs 可以直接向 Prometheus server 端推送它们的 metrics。这种方式主要用于服务层面的 metrics,对于机器层面的 metrices,需要使用 node exporter。
- Exporters: 用于暴露已有的第三方服务的 metrics 给 Prometheus。
- Alertmanager: 从 Prometheus server 端接收到 alerts 后,会进行去除重复数据,分组,并路由到对收的接受方式,发出报警。常见的接收方式有:电子邮件,pagerduty,OpsGenie, webhook 等。
- 一些其他的工具。
工作原理:
1. Prometheus server 定期从配置好的 jobs 或者 exporters 中拉 metrics,或者接收来自 Pushgateway 发过来的 metrics,或者从其他的 Prometheus server 中拉 metrics。
2. Prometheus server 在本地存储收集到的 metrics,并运行已定义好的 alert.rules,记录新的时间序列或者向 Alertmanager 推送警报。
3. Alertmanager 根据配置文件,对接收到的警报进行处理,发出告警。
4. 在图形界面中,可视化采集数据。
4. 安装部署
下载软件包解压
wget https://github.com/prometheus/prometheus/releases/download/v2.16.0/prometheus-2.16.0.linux-amd64.tar.gz
tar xvf prometheus-2.16.0.linux-amd64.tar.gz
cd prometheus-2.16.0.linux-amd64
查看版本
./prometheus --version
运行server
./prometheus --config.file=prometheus.yml
5. 配置文件说明
global:全局配置
scrape_interval: 15s #每15s采集一次数据
evaluation_interval: 15s #每15s做一次告警检测
alerting:告警管理器(Alertmanager)的配置,目前还没有安装Alertmanager
rule_files:告警规则
scrape_configs:抓取监控信息的目标
一个job_name就是一个目标,其targets就是采集信息的IP和端口。
这里默认监控了Prometheus自己,可以通过修改这里来修改Prometheus的监控端口。
Prometheus的每个exporter都会是一个目标,它们可以上报不同的监控信息,比如机器状态,或者mysql性能等等,不同语言sdk也会是一个目标,它们会上报你自定义的业务监控信息
6. 添加机器状态监控
exporter----监控当前机器自身状态,包括硬盘、CPU、内存等。
下载软件包
wget https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz
解压
tar xvf node_exporter-0.18.0.linux-amd64.tar.gz
进入解压出的目录
cd node_exporter-0.18.0.linux-amd64
运行监控采集服务
./node_exporter
访问9100端口
curl http://localhost:9100/metrics
访问成功,添加配置文件target
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'server'
static_configs:
- targets: ['localhost:9100']
重新启动Prometheus
7. Alertmanager告警管理
下载软件包解压
wget https://github.com/prometheus/alertmanager/releases/download/v0.20.0/alertmanager-0.20.0.linux-amd64.tar.gz
tar xvf alertmanager-0.20.0.linux-amd64.tar.gz
访问http://IP:9093/#/alerts
配置文件说明
global:
resolve_timeout: 5m
route:
group_by: ['alertname']
group_wait: 10s
group_interval: 10s
repeat_interval: 1h
receiver: 'web.hook'
receivers:
- name: 'web.hook'
webhook_configs: #将告警转发到这个URL
- url: 'http://127.0.0.1:5001/'
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
告警的处理方式
email_config
hipchat_config
pagerduty_config
pushover_config
slack_config
opsgenie_config
victorops_config
webhook_config
wechat_config
配置邮件通知
global:
resolve_timeout: 5m
route:
group_by: ['alertname']
group_wait: 10s
group_interval: 10s
repeat_interval: 1h
receiver: 'mail'
receivers:
- name: 'web.hook'
webhook_configs:
- url: 'http://127.0.0.1:5001/'
- name: 'mail'
email_configs:
- to: 接收告警用的邮箱
from: 你的发件用的网易邮箱
smarthost: smtp.163.com:25
auth_username: 网易邮箱账号
auth_password: 网易邮箱密码
# auth_secret:
# auth_identity:
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
重新加载配置文件即可
说明: 多个告警处理方式,由route中receiver决定的
集群模式
alertmanager可以配置成集群模式,即多个alaertmanager一起运行,彼此之间通过gossip协议获知告警的处理状态,防止告警重复发出。
这种模式通常用在prometheus需要做高可用的场景中。
prometheus ha deploy的高可用部署通常至少会有两套prometheus独立工作,它们会执行各自的告警检查。
与之相伴的通常也要部署多个alaertmanager,这时候这些alertmanager之间就需要同步信息,防止告警重复发出。
由于使用的是gossip协议,alermanager的集群模式配置很简单,只需要启动时指定另一个或多个alertmanager的地址即可
--cluster.peer=192.168.88.10:9094
8. 安装Grafana
下载软件包
wget https://dl.grafana.com/oss/release/grafana-6.6.1-1.x86_64.rpm
yum localinstall grafana-6.6.1-1.x86_64.rpm
启动
systemctl start grafana
访问http://IP:3000
新建数据源--导入dashboard模板