一.prometheus介绍
Prometheus是一个开源的系统监控和报警的工具包,最初由SoundCloud发布。
特点:

  • 多维数据模型(有metric名称和键值对确定的时间序列)
  • 灵活的查询语言
  • 不依赖分布式存储
  • 通过pull方式采集时间序列,通过http协议传输
  • 支持通过中介网关的push时间序列的方式
  • 监控数据通过服务或者静态配置来发现
  • 支持图表和dashboard等多种方式

组件: 

  • Prometheus :主程序,Prometheus服务端,由于存储及收集数据,提供相关api对外查询用,主要是负责存储、抓取、聚合、查询方面。
  • Alertmanager:程序,主要是负责实现报警功能。
  • Pushgateway :程序,主要是实现接收由Client push过来的指标数据,在指定的时间间隔,由主程序来抓取。
  • *_exporter :类似传统意义上的被监控端的agent,有区别的是,它不会主动推送监控数据到server端,而是等待server端定时来收集数据,即所谓的主动监控。

架构:
Prometheus Grafana Altermanager钉钉报警 - 图1

二.prometheus部署

Prometheus官网下载:https://prometheus.io/download/

1. 下载&部署


# 下载

  1. [root@prometheus src]# cd /usr/local/src/
  2. [root@prometheus src]# wget https://github.com/prometheus/prometheus/releases/download/v2.3.2/prometheus-2.3.2.linux-amd64.tar.gz

部署到/usr/local/目录
# promethus不用编译安装,解压目录中有配置文件与启动文件

  1. [root@prometheus src]#tar zxf prometheus-2.3.2.linux-amd64.tar.gz -C /usr/local/
  2. [root@prometheus src]# cd /usr/local/
  3. [root@prometheus local]# mv prometheus-2.0.0.linux-amd64/ prometheus/

# 验证

  1. [root@prometheus local]# cd prometheus/
  2. [root@prometheus prometheus]# ./prometheus --version


Prometheus Grafana Altermanager钉钉报警 - 图2

2. 配置文件

解压目录中的prometheus.yml
# 简单验证,主要配置采用默认文件配置,有修改/新增处用红色标示
[root@prometheus prometheus]# vim prometheus.yml

  1. # 全局配置
  2. global:
  3. scrape_interval: 15s # 设置抓取(pull)时间间隔,默认是1m
  4. evaluation_interval: 15s # 设置rules评估时间间隔,默认是1m
  5. # scrape_timeout is set to the global default (10s).
  6. # 告警管理配置,暂未使用,默认配置
  7. alerting:
  8. alertmanagers:
  9. - static_configs:
  10. - targets:
  11. # - alertmanager:9093
  12. # 加载rules,并根据设置的时间间隔定期评估,暂未使用,默认配置
  13. rule_files:
  14. # - "first_rules.yml"
  15. # - "second_rules.yml"
  16. # 抓取(pull),即监控目标配置
  17. # 默认只有主机本身的监控配置
  18. scrape_configs:
  19. # 监控目标的label(这里的监控目标只是一个metric,而不是指某特定主机,可以在特定主机取多个监控目标),在抓取的每条时间序列表中都会添加此label
  20. - job_name: 'prometheus'
  21. # metrics_path defaults to '/metrics'
  22. # scheme defaults to 'http'.
  23. # 可覆盖全局配置设置的抓取间隔,由15秒重写成5秒。
  24. scrape_interval: 5s
  25. # 静态指定监控目标,暂不涉及使用一些服务发现机制发现目标
  26. static_configs:
  27. - targets: ['localhost:9090']
  28. # (opentional)再添加一个label,标识了监控目标的主机
  29. labels:
  30. instance: prometheus
  31. - job_name: 'linux'
  32. scrape_interval: 10s
  33. static_configs:
  34. # 采用node_exporter默认开放的端口
  35. - targets: ['172.20.1.212:9100','192.168.233.131:9100']
  36. labels:
  37. instance: node1

3. 设置用户

添加用户,后期用此账号启动服务

  1. [root@prometheus prom etheus]# groupadd prometheus
  2. [root@prometheus prometheus]# useradd -g prometheus -s /sbin/nologin prometheus

赋权

  1. [root@prometheus prometheus]# cd ~
  2. [root@prometheus ~]# chown -R prometheus:prometheus /usr/local/prometheus/

创建prometheus运行数据目录

  1. [root@prometheus ~]# mkdir -p /var/lib/prometheus
  2. [root@prometheus ~]# chown -R prometheus:prometheus /var/lib/prometheus/

4. 设置开机启动

  1. [root@prometheus ~]# touch /usr/lib/systemd/system/prometheus.service
  2. [root@prometheus ~]# chown prometheus:prometheus /usr/lib/systemd/system/prometheus.service

[root@prometheus ~]# vim /usr/lib/systemd/system/prometheus.service

  1. [Unit]
  2. Description=Prometheus
  3. Documentation=https://prometheus.io/
  4. After=network.target
  5. [Service]
  6. # Type设置为notify时,服务会不断重启
  7. Type=simple
  8. User=prometheus
  9. # --storage.tsdb.path是可选项,默认数据目录在运行目录的./dada目录中
  10. ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml --storage.tsdb.path=/var/lib/prometheus
  11. Restart=on-failure
  12. [Install]
  13. WantedBy=multi-user.target

设置开机启动

  1. [root@prometheus ~]# systemctl enable Prometheus
  2. [root@prometheus ~]# systemctl start prometheus

5. 启动并验证

1)查看服务状态

  1. [root@prometheus ~]# systemctl status prometheus

Prometheus Grafana Altermanager钉钉报警 - 图3

  1. [root@prometheus ~]# netstat -tunlp | grep 9090

Prometheus Grafana Altermanager钉钉报警 - 图4

2)web ui

Prometheus自带有简单的UI,http://localhost:9090
Prometheus Grafana Altermanager钉钉报警 - 图5
在Status菜单下,Configuration,Rule,Targets等,
Statu—>Configuration展示prometheus.yml的配置,

6. 绘图

访问:http://192.168.233.131:9100/metrics,查看从exporter具体能抓到的数据,如下:
Prometheus Grafana Altermanager钉钉报警 - 图6
访问:prometheus,在输入框中任意输入1个exporter能抓取得值,点击”Execute”与”Execute”按钮,即可见相应抓取数据的图形,同时可对时间与unit做调整,

三.部署node_exporter

Node_exporter收集机器的系统数据,这里采用prometheus官方提供的exporter,除node_exporter外,官方还提供consul,memcached,haproxy,mysqld等exporter,具体可查看官网或去github下载(官网没有的github有可能有如:windows的exporter)。
这里在prometheus node节点部署相关服务。

1. 下载&部署

下载

  1. [root@node1 ~]# cd /usr/local/src/
  2. [root@node1 src]# wget https://github.com/prometheus/node_exporter/releases/download/v0.16.0/node_exporter-0.16.0.linux-amd64.tar.gz

部署

  1. [root@node1 src]# tar -zxvf node_exporter-0.16.0.linux-amd64.tar.gz-C /usr/local/
  2. [root@node1 src]# cd /usr/local/
  3. [root@node1 local]# mv node_exporter-0.16.0.linux-amd64/ node_exporter/

2. 设置用户

  1. [root@node1 ~]# groupadd prometheus
  2. [root@node1 ~]# useradd -g prometheus -s /sbin/nologin prometheus
  3. [root@node1 ~]# chown -R prometheus:prometheus /usr/local/node_exporter/

3. 设置开机启动

[root@node1 ~]# vim /usr/lib/systemd/system/node_exporter.service

  1. [Unit]
  2. Description=node_exporter
  3. Documentation=https://prometheus.io/
  4. After=network.target
  5. [Service]
  6. Type=simple
  7. User=prometheus
  8. ExecStart=/usr/local/node_exporter/node_exporter
  9. Restart=on-failure
  10. [Install]
  11. WantedBy=multi-user.target
  1. [root@node1 ~]# systemctl enable node_exporter
  2. [root@node1 ~]# systemctl start node_exporter

4. 验证

访问prometheus,查看node1主机已经可被监控
Prometheus Grafana Altermanager钉钉报警 - 图7

四.部署grafana

在prometheus& grafana server节点部署grafana服务。

1. 下载&安装

下载

  1. [root@prometheus ~]# cd /usr/local/src/
  2. [root@prometheus src]# wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.2.2-1.x86_64.rpm

安装

  1. sudo yum localinstall grafana-5.2.2-1.x86_64.rpm

2. 配置文件

配置文件位于/etc/grafana/grafana.ini,这里暂时保持默认配置即可。

3. 设置开机启动

  1. [root@prometheus src]# systemctl enable grafana-server
  2. [root@prometheus src]# systemctl start grafana-server

5. 添加数据源

1)登陆

访问:http://localhost:3000,默认账号/密码:admin/admin

2)添加数据源

在登陆首页,点击”Configuration-Data Sources”按钮,跳转到添加数据源页面,配置如下:
Name: prometheus
Type: prometheus
URL: http://localhost:9090/
Access: Server
取消Default的勾选,其余默认,点击”Add”,如下:
Prometheus Grafana Altermanager钉钉报警 - 图8
在”Dashboards”页签下”import”自带的模版,如下:
Prometheus Grafana Altermanager钉钉报警 - 图9

6. 导入dashboard

从grafana官网下载相关dashboard到本地,如:https://grafana.com/dashboards/1860
Upload已下载至本地的json文件
Grafana.com Dashboard输入grafana官网的Dashboard链接(如:https://grafana.com/dashboards/1860
可以下载使用upload上传,也可不下载直接复制链接
Prometheus Grafana Altermanager钉钉报警 - 图10
Prometheus Grafana Altermanager钉钉报警 - 图11

7. 查看dashboard

Grafana首页—>Dashboard—>Home,Home下拉列表中可见有已添加的两个dashboard,”Prometheus Stats”与”Node Exporter Full”,选择1个即可
补充
grafana官网如果没有你想要的dashboard,你可去github上看看。

大部分的dashborad是无法直接使用,它们呈现不出图像显示“no data”或者显示的图像和本来的图像不符合,比如你要显示磁盘剩余但他显示的是磁盘已使用多少。这就很尴尬了。可以通过修改Metrics的计算公式来是之有效。
选中一个不好使的图标点击Edit
Prometheus Grafana Altermanager钉钉报警 - 图12
Add Query添加一个监控值Prometheus Grafana Altermanager钉钉报警 - 图13

五.部署Alertmanager 钉钉报警

虽然说grafana也有报警但是使用过后感觉不太好用,grafana报警无法使用模板变量并且报警规则比较繁琐,然后重新比对决定使用Alertmanager的钉钉报警。但是alertmanager不止是钉钉报警,还有微信,邮件等。

1. 下载&安装

  1. [root@localhost src]# wget https://github.com/prometheus/alertmanager/releases/download/v0.15.2/alertmanager-0.15.2.linux-amd64.tar.gz
  2. [root@localhost src]# tar zxf alertmanager-0.15.2.linux-amd64.tar.gz

2.配置文件

alertmanager的webhook集成了钉钉报警,所以他不是本来就有的。钉钉对格式要求很严格,一会还需要使用插件进行格式转换。
cat alertmanager.yml

  1. global:
  2. resolve_timeout: 5m
  3. route:
  4. receiver: webhook
  5. group_wait: 30s
  6. group_interval: 30s
  7. repeat_interval: 30s
  8. group_by: [alertname]
  9. routes:
  10. - receiver: webhook
  11. group_wait: 10s
  12. match:
  13. team: node
  14. receivers:
  15. - name: webhook
  16. webhook_configs:
  17. - url: http://localhost:8060/dingtalk/ops_dingding/send
  18. send_resolved: true

3.启动alertmanager

  1. nohup ./alertmanager --config.file=alertmanager.yml 2>&1 1>altermanager.log &

查看端口

  1. netstat -anpt | grep 9093

4.报警规则

监控主机是否存活
cd /usr/local/prometheus
cat rules.yml

  1. groups:
  2. - name: test-rule
  3. rules:
  4. - alert: 主机状态
  5. expr: up == 0
  6. for: 2m
  7. labels:
  8. status: warning
  9. annotations:
  10. summary: "{{$labels.instance}}:服务器关闭"
  11. description: "{{$labels.instance}}:服务器关闭"

5.修改prometheus配置文件

修改alerting和rule_file
rule_files可以指定多个规则

  1. # Alertmanager configuration
  2. alerting:
  3. alertmanagers:
  4. - static_configs:
  5. - targets: ["localhost:9093"]
  6. # - alertmanager:9093
  7. # Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
  8. rule_files:
  9. - "rules.yml"
  10. # - "second_rules.yml"

重启

6.将钉钉接入 Prometheus AlertManager WebHook

参考文档:http://theo.im/blog/2017/10/16/release-prometheus-alertmanager-webhook-for-dingtalk/
插件下载地址:https://github.com/timonwong/prometheus-webhook-dingtalk
安装
建议把主机名改成主机ip,方便报警时提供url或者改成域名也可以
mkdir -p /usr/lib/golang/src/github.com/timonwong/
cd /usr/lib/golang/src/github.com/timonwong/
git clone https://github.com/timonwong/prometheus-webhook-dingtalk.git
cd prometheus-webhook-dingtalk
make(出错不要管他)
启动
不会加机器人的去网上搜
ding.profile是钉钉机器人的webhook
nohup ./prometheus-webhook-dingtalk —ding.profile=”ops_dingding=https://oapi.dingtalk.com/robot/send?access_token=xxx“ 2>&1 1>dingding.log &
netstat -anpt | grep 8060

7.测试

把监控主机的exporter关闭或者关闭主机
Prometheus Grafana Altermanager钉钉报警 - 图14

再启动exporter,已经恢复
Prometheus Grafana Altermanager钉钉报警 - 图15