prometheus安装部署及相关介绍

prometheus

  • 一、prometheus的优点
    • 二、部署Prometheus
      • 三、配置AlertManager

Prometheus是由SoundCloud开发的开源监控系统的开源版本。2016年由Google发起的Linux基金会(Cloud Native Computing Foundation,CNCF)将Prometheus纳入其第二大开源项目。Prometheus在开源社区也十分活跃。

Prometheus官网

一、prometheus的优点

1.易管理性
Prometheus:核心部分只有一个单独的二进制文件,可直接在本地工作,不依赖于分布式存储。
Nagios:需要有专业的人员进行安装,配置和管理,并且过程很复杂。
2.业务数据相关性
Prometheus:监控服务的运行状态,基于Prometheus丰富的Client库,用户可以轻松的在应用程序中添加对Prometheus的支持,从而让用户可以获取服务和应用内部真正的运行状态。
Nagios:大部分的监控能力都是围绕系统的一些边缘性问题,主要针对系统服务和资源的状态以及应用程序的可用性。
3.高效
单一Prometheus可以处理数以百万的监控指标,每秒处理数十万的数据点。
4.易于伸缩
通过使用功能分区(sharing)+联邦集群(federation)可以对Prometheus进行扩展,形成一个逻辑集群;Prometheus提供多种语言的客户端SDK,这些SDK可以快速让应用程序纳入到Prometheus的监控中。
5.良好的可视化
除了自带Prometheus UI,还提供了一个独立的基于Ruby On Rails的Dashboard解决方案Promdash。
另外最新的Grafana可视化工具也提供了完整的Prometheus支持,基于Prometheus提供的API,还可以实现自己的监控可视化UI。

二、部署Prometheus

1.环境准备

主机名 IP地址 安装组件
docker 192.168.229.187 nodeexporter、cadvisor、prometheus server、grafana
docker2 192.168.229.40 nodeexporter、cadvisor
docker3 192.168.229.50 nodeexporter、cadvisor

全部关闭防火墙,禁用selinux

[root@docker ~]# systemctl stop firewalld
[root@docker ~]# setenforce 0

2.部署组件介绍

组件 作用
Prometheus Server Prometheus主服务器
NodeEXporter 负责收集Host硬件信息和操作系统信息
cAdvisor 负责收集Host上运行的容器信息
Grafana 负责展示监控界面

3.3台主机部署node-EXporter
收集硬件和系统信息。

[root@docker ~]# docker run -d -p 9100:9100 --name node-exporter -v /proc:/host/proc -v /sys:/host/sys -v /:/rootfs --net=host prom/node-exporter --path.procfs /host/proc --path.sysfs /host/sys --collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($|/)"

注意:这里使用–net=host,这样Prometheus Server可以直接与Node-EXporter通信。
4.浏览器访问验证

192.168.229.187:9100
192.168.229.40:9100
192.168.229.50:9100

prometheus安装部署及相关介绍_第1张图片
5.3台主机部署cAdvisor
收集节点容器信息。

[root@docker ~]# docker run -p 8080:8080 --name=cadvisor -v /:/rootfs:ro -v /var/run:/var/run/:rw -v /sys:/sys:ro -v /var/lib/docker:/var/lib/docker:ro --detach=true --net=host google/cadvisor

6.浏览器访问验证

192.168.229.187:8080
192.168.229.40:8080
192.168.229.50:8080

prometheus安装部署及相关介绍_第2张图片
7.在docker上部署Prometheus Server服务
在部署prometheus之前,需要对它的配置文件进行修改,先运行一个容器,先将其配置文件拷贝出来。

[root@docker ~]# docker run -d -p 9090:9090 --name prometheus --net=host prom/prometheus
[root@docker ~]# docker cp prometheus:/etc/prometheus/prometheus.yml ./
[root@docker ~]# vim prometheus.yml
    - targets: ['localhost:9090','localhost:9100','localhost:8080','192.168.229.40:9100','192.168.229.40:8080','192.168.229.50:9100','192.168.229.50:8080']
[root@docker ~]# docker rm -f prometheus
[root@docker ~]# docker run -d -p 9090:9090 --name prometheus --net=host -v /root/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

注意:target处指定prometheus的监控主机项,包括它也会监控自己主机上的数据,然后重新运行prometheus容器。
8.浏览器访问验证

192.168.229.187:9090

prometheus安装部署及相关介绍_第3张图片
prometheus安装部署及相关介绍_第4张图片
9.在docker上部署grafana服务
展示prometheus收集到的数据

[root@docker ~]# mkdir grafana-storage
[root@docker ~]# chmod -R 777 grafana-storage/
[root@docker ~]# docker run -d -p 3000:3000 --name grafana -v /root/grafana-storage:/var/lib/grafana -e "GF_SECURITY_ADMIN_PASSWORD=asd123" grafana/grafana

10.浏览器访问验证

192.168.229.187:3000

prometheus安装部署及相关介绍_第5张图片
prometheus安装部署及相关介绍_第6张图片
prometheus安装部署及相关介绍_第7张图片
prometheus安装部署及相关介绍_第8张图片
grafana支持自定义显示信息,不过要自定义非常麻烦,grafana官方提供了一些模板供我们使用。
grafana官网
prometheus安装部署及相关介绍_第9张图片
prometheus安装部署及相关介绍_第10张图片
prometheus安装部署及相关介绍_第11张图片
11.模板的选择有两种方式

第一种:通过JSON文件使用模板;

第二种:可以直接通过模板的ID号(官网可以查看到ID号);

三、配置AlertManager

接下来需要启动AlertManager来接受Prometheus发送过来的报警信息,并执行各种方式的告警。
1.Docker方式启动AlertManager
最简单的启动命令如下。

[root@docker ~]# mkdir alert
[root@docker ~]# cd alert
[root@docker alert]# docker run -d -p 9093:9093 --name alertmanager prom/alertmanager:latest
[root@docker alert]# docker cp alertmanager:/etc/alertmanager/alertmanager.yml ./
[root@docker alert]# cp alertmanager.yml alertmanager.ymlbak

AlertManager默认启动端口为9093,启动完成后,浏览器访问可以看到默认提供的UI页面,不过现在没有任何告警信息,因为还没有配置报警规则来触发报警。

http://192.168.229.187:9093

2.AlertManager配置邮件告警
默认配置文件为alertmanager.yml,在容器内路径为/etc/alertmanager/alertmanager.yml。

配置 作用
global 全局配置,包括报警解决后的超时时间、SMTP相关配置、各种渠道通知的API地址
route 用来设置报警的分发策略,它是一个树状结构,按照深度优先从左向右的顺序进行匹配
receivers 配置告警消息接受者信息,例如常用的email、wechat、slack、webhook等消息通知方式
inhibit_rules 抑制规则配置,当存在与另一组匹配的警报(源)时,抑制规则将禁用与一组匹配的警报(目标)

配置使用Email方式通知报警信息,这里以QQ邮箱为例,当然在配置QQ邮箱之前,需要登录QQ邮箱,打开SMTP服务,并获取授权码。
3.配置如下

[root@docker alert]# vim alertmanager.yml
global:
  resolve_timeout: 5m
  smtp_from: '[email protected]'
  smtp_smarthost: 'smtp.qq.com:465'
  smtp_auth_username: '[email protected]'
  smtp_auth_password: 'wnslyqzkpdtiiceg'
  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: '[email protected]'
    send_resolved: true
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

注意:以上模板中涉及的QQ邮箱换成自己的即可,授权码也一样。
以上配置调试期间出现了各种报错问题,将其中几个关键的配置说明一下。

smtp_smarthost:这里是QQ邮箱SMTP服务地址,官方地址为smtp.qq.com端口为465或587,同时要设置开启POP3/SMTP服务。

smtp_auth_password:这里是第三方登录QQ邮箱的授权码,非QQ账户登录密码,否则会报错,获取方式在QQ邮箱服务端设置开启POP3/SMTP服务时会提示。

smtp_require_tls:是否使用tls,根据环境不同,来选择开启和关闭。
如果提示报错email.loginAuth failed: 530 Must issue a STARTTLS command first,那么就需要设置为true。
如果开启了tls,提示报错starttls failed: x509: certificate signed by unknown authority,需要在email_configs下配置insecure_skip_verify: true来跳过tls验证。

4.修改AlertManager启动命令
将本地alertmanager.yml文件挂载到容器内指定位置。

[root@docker ~]# docker rm -f alertmanager
[root@docker ~]# docker run -d --name alertmanager -p 9093:9093 -v /root/alert/alertmanager.yml:/etc/alertmanager/alertmanager.yml prom/alertmanager

5.Prometheus配置AlertManager告警规则
接下来需要在Prometheus配置AlertManager服务地址以及告警规则,新建报警规则文件node-up.rules如下。

[root@docker ~]# mkdir -p prometheus/rules
[root@docker ~]# cd prometheus/rules/
[root@docker rules]# vim node-up.rules
groups:
- name: node-up
  rules:
  - alert: node-up
    expr: up{job="prometheus"} == 0
    for: 15s
    labels:
      severity: 1
      team: node
    annotations:
      summary: "{{ $labels.instance }} 已停止运行超过 15s!"

注意:该rules目的是监测node是否存活,expr为PromQL表达式验证特定节点job="node-exporter"是否活着,for表示报警状态为Pending后等待15s变成Firing状态,一旦变成Firing状态则将报警发送到AlertManager,labels和annotations对该alert添加更多的标识说明信息,所有添加的标签注解信息,以及prometheus.yml中该job已添加label都会自动添加到邮件内容中,更多关于rule详细配置可以参考https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/#rule
然后修改prometheus.yml配置文件,添加rules规则文件。

[root@docker ~]# vim prometheus.yml
...
    - targets:
      - 192.168.229.187:9093
      # - alertmanager:9093
rule_files:
  - "/usr/local/prometheus/rules/*.rules"
  # - "first_rules.yml"
  # - "second_rules.yml"
...

注意:这里rule_files为容器内路径,需要将本地node-up.rules文件挂载到容器内指定路径,修改Prometheus启动命令如下,并重启服务。

[root@docker01 ~]# docker rm -f prometheus
[root@docker01 ~]# docker run -d -p 9090:9090 -v /root/prometheus.yml:/etc/prometheus/prometheus.yml -v /root/prometheus/rules:/usr/local/prometheus/rules --name prometheus --net=host prom/prometheus

此时在prometheus主页上可以看到相应规则。
6.触发报警发送Email
开始模拟docker1节点exporter组件失败,邮箱会收到报警信息。
7.AlertManager配置自定义邮件模板
看到默认发送的邮件模板,虽然所有核心的信息已经包含了,但是邮件格式内容可以更优雅直观一些,AlertManager也支持自定义邮件模板配置,首先新建一个模板文件email.tmpl。

[root@docker01 ~]# cd prometheus/
[root@docker01 prometheus]# mkdir alertmanager-tmpl
[root@docker01 prometheus]# cd alertmanager-tmpl/
[root@docker01 alertmanager-tmpl]# vim email.tmpl
{{ define "email.from" }}[email protected]{{ end }}
{{ define "email.to" }}[email protected]{{ end }}
{{ define "email.to.html" }}
{{ range .Alerts }}
=========start==========<br>
告警程序: prometheus_alert<br>
告警级别: {{ .Labels.severity }}<br>
告警类型: {{ .Labels.alertname }}<br>
故障主机: {{ .Labels.instance }}<br>
告警主题: {{ .Annotations.summary }}<br>
触发时间: {{ .StartsAt.Format "2006-01-02 15:04:05" }} <br> =========end==========<br>
{{ end }}
{{ end }}

上边模板文件配置了email.from、email.to、email.to.html三种模板变量,可以在alertmanager.yml文件中直接配置引用。这里email.to.html就是要发送的邮件内容,支持Html和Text格式,这里为了显示好看,采用Html格式简单显示信息。下边{{ range .Alerts }}是个循环语法,用于循环获取匹配的Alerts的信息,下边的告警信息跟上边默认邮件显示信息一样,只是提取了部分核心值来展示。
然后增加alertmanager.yml文件templates配置如下。

[root@docker ~]# cd alert/
[root@docker alert]# vim alertmanager.yml
添加:
templates:
  - '/etc/alertmanager-tmpl/*.tmpl'
...
  email_configs:
  - to: '{{ template "email.to" }}'
    html: '{{ template "email.to.html" . }}'

然后修改AlertManager启动命令,将本地email.tmpl文件挂载到容器内指定位置并重启。

[root@docker alert]# docker rm -f alertmanager
[root@docker alert]# docker run -d --name alertmanager -p 9093:9093 -v /root/alert/alertmanager.yml:/etc/alertmanager/alertmanager.yml -v /root/prometheus/alertmanager-tmpl:/etc/alertmanager-tmpl prom/alertmanager

重启完毕后,同样模拟触发报警条件(停止node-exporter服务),也是可以正常发送模板邮件出来的,这次就是我们想要的风格了。
以上模板是没有问题的,但会看到,时间不对,这是因为邮件是全球服务,所以需要更改一下语句,在时间上加上东八区时间。

...
10 告警主题: {{ .Annotations.summary }}<br>
11 触发时间: {{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }} <br> 
...

这里只有邮件服务需要加上东八区时间,而微信等其他报警途径则不需要,直接使用上述模板中的描述即可。修改配置文件后需要重启。

[root@docker alertmanager-tmpl]# docker restart alertmanager

你可能感兴趣的:(监控工具,docker,Prometheus,监控类,alertmanager)