简介
node-exporter:服务信息exporter,暴露一个http接口,输出服务器信息
prometheus:为时间序列数据库,常用于存储与时间相关的指标数据,并且提供告警功能,可以用于监控系统
grafana:提供仪表板,方便观测数据
三者结合:
node-exporter将数据提供给prometheus做持久化,prometheus将数据提供给grafana做数据看板,数据指标分析。
ps:注意,本案例使用的服务器IP为10.14.8.157,若下列见到相关的ip,可以替换为你们自己的服务器信息。
安装镜像包(最新)
docker pull prom/node-exporter
docker pull prom/prometheus
docker pull grafana/grafana
启动node-exporter
创建node-exporter容器并启动
docker run -d -p 9100:9100 \
--name node-exporter \
-v "/proc:/host/proc:ro" \
-v "/sys:/host/sys:ro" \
-v "/:/rootfs:ro" \
--net="host" \
prom/node-exporter
在浏览器访问,检查服务是否可用
http://10.14.8.157:9100/metrics
若出现以下界面,则表示node-exploer已启动完毕,该程序将暴露服务的信息和健康状态
启动prometheus
启动prometheus时需要制定配置文件,先准备好配置文件
mkdir /opt/prometheus
cd /opt/prometheus/
vim prometheus.yml
prometheus.yml内容如下
global:
scrape_interval: 60s
evaluation_interval: 60s
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ['localhost:9090']
labels:
instance: prometheus
- job_name: node-exporter
static_configs:
- targets: ['localhost:9100']
labels:
instance: localhost
其中,localhost为该服务器的ip地址,大家自行替换
启动prometheus
docker run -d \
--name prometheus \
-p 9090:9090 \
-v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
--network="host" \
prom/prometheus
在浏览器访问一下地址
http://10.14.8.157:9090/targers
若出现以下界面,表示prometheus启动成功
启动grafana
创建存储数据目录
mkdir /opt/grafana-storage
# 因为grafana会自己写数据进来,所以设置一下权限
chmod 777 -R /opt/grafana-storage
启动服务
docker run -d \
-p 3000:3000 \
--name=grafana \
-v /opt/grafana-storage:/var/lib/grafana \
grafana/grafana
在浏览器访问以下地址
http://10.14.8.157:3000/
若出现以下界面则表示启动成功
初始化用户密码: admin/admin
首次登录后,会要求变更密码,大家可以体验一下。
altermanager告警
实现了数据看板、观测后。自然地,当服务指标发生异常现象时,我们应当立即知晓并紧急修复问题,这个时候就需要借助告警系统了。
prometheus天生支持altermanager告警,因此我们来学习下告警是如何配置,如何使用的。
拉取altermanager资源
docker pull prom/alertmanager
配置文件
创建配置目录以及文件
mkdir -p /opt/alertmanager
cd /opt/alertmanager
#创建配置文件
vi alertmanager.yml
alertmanager内容如下:
global:
resolve_timeout: 5m
smtp_from: 'winnie@qq.com'
smtp_smarthost: 'smtp.qq.com:465'
smtp_auth_username: 'winnie@qq.com'
smtp_auth_password: 'xxxxxx'
smtp_require_tls: false
smtp_hello: 'qq.com'
route:
group_by: ['alertname']
group_wait: 5s
group_interval: 5s
repeat_interval: 5m
receiver: 'email'
receivers:
- name: 'email'
email_configs:
- to: 'winnie@qq.com'
send_resolved: true
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
启动服务
docker run -d \
--name alertmanager \
-p 9093:9093 \
-v /opt/alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml \
--network "host" \
prom/alertmanager
浏览器访问,检查服务是否已启动
http://10.14.8.157:9093/
若出现下图表示alertmanager成功启动
配置告警规则rules
创建告警规则路径
mkdir -p /opt/alertmanager/rules
cd /opt/alertmanager/rules
#创建规则
vi node-up.rules
node-up.yml内容如下:
groups:
- name: node-up
rules:
- alert: node-up
expr: up{job="node-exporter"} == 0
for: 15s
labels:
severity: 1
team: node
annotations:
summary: "{{ $labels.instance }} 已停止运行超过 15s!"
expr:up{job=“node-exporter”} == 0表示 服务下线
for:15s 表示持续15s
annotations.summary 表示提示语
上述配置表示job(node-exporter)下线持续15s,则启动告警
配置prometheus配置文件,指定告警路由和规则
prometheus.yml
...
# Altermanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
- 10.14.8.157:9093
rule_files:
- "/usr/local/alertmanager/rules/*.yml"
注意:rule_files为容器内路径,所以启动promethus时,还需要将rules文件挂载到prometheus容器中
修改prometheus启动参数
docker run -d \
--name prometheus \
-p 9090:9090 \
-v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
-v /opt/alertmanager/rules/:/usr/local/alertmanager/rules/ \
--network="host" \
prom/prometheus
访问prometheus-rules webui界面
http://10.14.8.157:9090/rules
若出现以下界面则表示prometheus配置alertmanager成功
测试邮件告警
关闭node-exporter节点进行测试
docker stop node-exporter
在prometheus 的WEBUI界面可以看到产品告警信息
过一会会受到邮件告警,告警频率是根据route.repeat_interval配置决定的,当前是1分钟一次