引言
一、运行环境
二、prometheus介绍
三、grafana介绍
四、安装prometheus
五、安装grafana
六、告警测试
引言
本篇文章主要是介绍通过prometheus来实现服务器监控,并通过grafana对数据进行展示。调用prometheus的alertmanager来对报警进行处理,并将报警信息传到特定的url。
一、运行环境
- 操作系统:centos7
- prometheus:prometheus-2.19.2.linux-amd64
- grafana:grafana-7.0.6.1.x86_64
- alertmanager:0.21.0
- node_exporter:node_exporter-1.0.1.kinux-amd64
- mysqld_exporter:mysqld_exporter-0.10.0.linux-amd64
二、prometheus介绍
prmetheus是一个最早在SoundCloud上创建的一个开源监控和报警工具系统,其主要特征主要如下:
- 使用指标名和键值对表示的时间序列数据的一个多维度数据模型
- PromQL,一种利用这种维度的灵活查询语言
- 不依赖分布式存储,单个服务节点时自治的
- 时间序列收集通过在http上拉取model
- 通过中介网关可以存入时间序列数据
- 目标发现通过服务发现或者静态配置的方式
- 支持多图形和指示板模式
Prometheus生态由多个组件组成,其中许多都都是可选的: - 主要的Prometheus server,刮取和存储使劲按序列数据
- 用于检测应用代码的client libraries
- 用于支持短周期job的push gateway
- 特定用途的exporter用于像HAProxy、StatsD、Graphite等的服务
- 处理报警的alertmanager
-
多样的支持工具
绝大多数Prometheus组件由Go语言编写,使得它们容易构建和部署为静态库。
这里要详细介绍一下exporter,exporter是一个采集监控数据并通过prometheus监控规范对外提供数据的组件,由于大多数监控无法直接提供监控接口(本身不支持HTTP接口、安全性、稳定性、代码耦合等),exporter就出现了。Prometheus只能采集指定格式的监控信息, 你可以通过不同的exporter来获取你所需要的不同的数据,例如监控mysql可以使用mysqld_exporter,监控服务器性能可以使用node_exporter。
Alertmanager处理客户端应用程序(如Prometheus服务器)发送的警报。它负责重复数据删除、分组和路由它们到正确的接收者集成,如电子邮件、PagerDuty或OpsGenie。它还负责警报的沉默和抑制。
三、grafana介绍
grafana 是一款采用 go 语言编写的开源应用,主要用于大规模指标数据的可视化展现,是网络架构和应用分析中最流行的时序数据展示工具,目前已经支持绝大部分常用的时序数据库。官网地址:官网地址。
四、安装Prometheus
- 下载prometheus,下载链接
- 之后解压和运行
tar xvfz prometheus-*.tar.gz
cd prometheus-*
- 配置prometheus.yml
global:
scrape_interval: 15s # By default, scrape targets every 15 seconds.
# Attach these labels to any time series or alerts when communicating with
# external systems (federation, remote storage, Alertmanager).
external_labels:
monitor: 'codelab-monitor'
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']
- 启动
# Start Prometheus.
# By default, Prometheus stores its database in ./data (flag --storage.tsdb.path).
#启动Prometheus
#默认下,Prometheus存储它的数据库在data文件夹下,使用--storage.tsdb.path可以指定data文件存储位置
./prometheus --config.file=prometheus.yml
-
验证
启动成功登录localhost:9090,就能看到如下页面了。
- 下载node_exporter(用于监控服务器信息)
下载链接,下载之后解压,之后可以参照node_exporter配置来对node_exporter进行配置。启动成功之后访问ip:9100/metrics可以看到如下内容:
- job_name: 'node'
metrics_path: '/metrics'
static_configs:
- targets: ['10.9.1.85:9100']
之后重启Prometheus可以在target中看到如下内容
- 安装mysqld_exporter
下载链接,配置mysqld_exporter可以参照mysqld_exporter配置。配置成功重启Prometheus可以看到如下内容
- 安装alertmanager
下载链接,之后将alertmanager解压到Prometheus的如下位置
global:
resolve_timeout: 5m
route:
group_by: ['alertname']
group_wait: 10s
group_interval: 10s
repeat_interval: 10m
receiver: 'web.hook'
receivers:
- name: 'web.hook'
webhook_configs:
- url: 'http://10.9.1.23:8888/open/test' #prometheus发送alert给
# alertmanager之后会将警告信息
发送到此url
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
在prometheus.yml所在目录下新建simulator_alert_rules.yml,
groups:
- name: simulator-alert-rule
rules:
- alert: HttpSimulatorDown
expr: sum(up{job="node"}) == 0 #当job为node的job全部down之后一分钟发出alert
for: 1m
labels:
severity: critical
启动alertmanager
./alertmanager --config.file=alertmanager.yml
配置prometheus.yml文件
alerting:
alertmanagers:
- static_configs:
- targets: ['10.9.1.85:9093']
重启Prometheus,出现如下内容则说明配置成功
五、安装grafana
六、告警测试
之前设置了一个当job名为node的实例全部下线时会发起告警,最初的告警状态为不活跃
关闭node_exporter之后进入待定状态
一分钟之后,进入firing状态
我们的回调接口也收到了数据
同样你也可以更改simulator_alert_rules.yml配置文件来设置其它的告警规则,这里就不过多的赘述。