Prometheus(普罗米修斯)

Prometheus(普罗米修斯)

是一个系统和服务的监控平台。它可以自定义时间间隔从已配置的目标收集指标,评估规则表达式,显示结果,并在发现某些情况时触发警报

与其他监视系统相比,Prometheus的主要区别特征是:

一个多维数据模型(时间序列由指标名称定义和设置键/值尺寸)

一个灵活的查询语言来利用这一维度

不依赖于分布式存储;单服务器节点是自治的

时间序列收集通过HTTP 上的拉模型进行

通过中间网关支持推送时间序列

通过服务发现或静态配置发现目标

多种图形和仪表板支持模式

支持分层和水平联合

实验环境:

docker01

192.168.1.70

NodeEXporter

cAdvisor+Prometheus server+gragana

docker02

192.168.1.60

NodeEXporter

cAdvisor

docker03

192.168.1.50

NodeEXporter

cAdvisor

[root@localhost ~]# hostnamectl set-hostname docker1
[root@localhost ~]# su -
[root@localhost ~]# hostnamectl set-hostname docker2
[root@localhost ~]# su -
[root@localhost ~]# hostnamectl set-hostname docker3
[root@localhost ~]# su -

全部关闭防火墙,禁用selinux

[root@docker01 ~]# systemctl  stop  firewalld
[root@docker01 ~]# systemctl  disable  firewalld
[root@docker01 ~]# setenforce  0

需要部署的组件

Prometheus server(9090):普罗米修斯的主机服务器

NodeEXporter(9100):负责收集host硬件信息和操作系统信息 //谷歌开发的监控软件。收集数据,不太直观。有历史保留,方便后期做优化

cAdvisor(8080):负责收集host上运行的容器信息

Grafana(3000):负责展示普罗米修斯监控界面 //类似于kibana的图形界面,提供可视化web页面

1)三个节点,全部部署node-exporter和cadvisor

//分别在三个节点上导入镜像

[root@docker01 ~]# docker load < node-exporter.tar && docker load < mycadvisor.tar 

//部署node-exporter,收集硬件和系统信息(三台都需要部署)

[root@docker01 ~]# docker run  -d -p 9100:9100 -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)($|/)"

PS:注意这里使用了--net=host,这样prometheus server可以直接与node-exporter通信

验证,打开浏览器验证结果(192.168.1.70:9100)

//部署安装cAdvisor,收集节点容器信息(三台都需要部署)

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

打开浏览器验证(192.168.1.70:8080)

2)在docker01上部署prometheus server服务

在部署prometheus之前,我们需要对它的配置文件进行修改,所以我们先运行一个容器,将其配置文件拷贝出来

[root@docker01 ~]# docker  load  <  prometheus.tar
[root@docker01 ~]# docker run -d -p 9090:9090 --name prometheus --net=host prom/prometheus
[root@docker01 ~]# docker exec -it prometheus /bin/sh
/prometheus $ cd /etc/prometheus/
/etc/prometheus $ ls
console_libraries  consoles           prometheus.yml
[root@docker01 ~]# docker cp prometheus:/etc/prometheus/prometheus.yml ./
[root@docker01 ~]# vim prometheus.yml
- targets: ['localhost:9090','localhost:8080','localhost:9100','192.168.1.60:8080','192.168.1.60:9100','192.168.1.50:8080','192.168.1.50:9100']

PS:这里制定了prometheus的监控项,包括它也会监控自己收集到的数据

[root@docker01 ~]# docker rm -f prometheus

//重新运行容器:

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

//浏览器访问:192.168.1.70:9090

PS:这里能够看到我们各个监控项

3)在docker01上部署grafana服务,用来展示prometheus收集到的数据

[root@docker01 ~]# docker load  < grafana.tar
[root@docker01 ~]# mkdir grafana-storage
[root@docker01 ~]# chmod 777 -R grafana-storage/
[root@docker01 ~]# docker run -d -p 3000:3000 --name grafana -v /root/grafana-storage:/var/lib/grafana -e "GF_SECURITY_ADMIN_PASSWORD=123.com"  grafana/grafana

浏览器访问:192.168.1.70:3000

用户名:admin

密码:123.com

//创建数据源

PS:看到这这提示,说明prometheus和grafana服务是正常连接的

此时,虽然grafana收集到了数据,但怎么显示它,仍然是个问题,grafana支持自定义显示信息,不过要自定义起来非常麻烦,不过好在,grafana官方为我们提供了一些模板,来供我们使用

Grafana官网:https://grafana.com

//可以根据自己的喜好选择模板

选中一款模板后,然后,我们又两种方式可以套用这个模板

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

下载完成之后,回到grangana控制台

第二种方式:

可以直接通过模板的ID号

配置AlertManager

AlertManager:用来接收prometheus发送的报警信息,并且执行设置好的报警方式、报警内容

AlertManager.yml配置文件:

global:全部配置,包括报警解决后的超时时间、SMTP相关配置、各种渠道通知的API地址等新消息

route:用来设置报警的分发策略

receivers:配置告警消息接收者信息

inhibit_rules:抑制规则配置,当存在于另一组匹配的报警时,抑制规则将禁用一组匹配的警报

//运行一个容器获取配置文件并进行配置

[root@docker01 ~]# docker  run  -d  --name  alertmanager  -p  9093:993  prom/alertmanager:latest
[root@docker01 ~]# docker  cp  alertmanager:/etc/alertmanager/alertmanager  ./
[root@docker01 ~]# cat alertmanager.yml 
global:
  resolve_timeout: 5m
  smtp_from: '[email protected]'
  smtp_smarthost: 'smtp.qq.com:465'
  smtp_auth_username: '[email protected]'
  smtp_auth_password: 'aseydtzejqfqdhai'
  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']

//删除容器并重新运行

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

//浏览器访问:192.168.1.70:9093

Prometheus配置alertmanager报警规则

[root@docker01 ~]# mkdir  -p  prometheus/rules
[root@docker01 ~]# cd  prometheus/rules/
[root@docker01 rules]# ls
node-up.rules
[root@docker01 rules]# cat  node-up.rules 
groups:
- name: node-up
  rules:
  - alert: node-up
    expr: up{job="prometheus"} == 0   //这个job要和prometheus里的job名称一样
    for: 15s
    labels:
      severity: 1
      team: node
    annotations:
      summary: "{{ $labels.instance }} 已停止运行超过 15s!"
-----------------------------------------------------------------------------------------------
/etc/prometheus $ cat  prometheus.yml
.......
- job_name: 'prometheus'
//监控的内容是:
    - targets: ['localhost:9090','localhost:8080','localhost:9100','192.168.1.60:9100','192.168.1.60:8080','192.168.1.50:9100','192.168.1.50:8080']
.......

//编辑prometheus的配置文件

[root@docker01 ~]# vim  prometheus.yml
# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
       - 192.168.1.70:9093   //目标为alertmanager容器

rule_files:
  - "/usr/local/prometheus/rules/*.rules"  //路径是容器内的路径

//删除prometheus容器,重新挂载配置文件

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

//浏览器访问:192.168.1.70:9090

//随便关闭一个容器进行测试

AlertManager配置自定义邮件模板

[root@docker01 ~]# mkdir  prometheus/alertmanager-tmpl
[root@docker01 ~]# cd  prometheus/alertmanager-tmpl/
[root@docker01 alertmanager.tmpl]# cat  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 "2019-08-04 16:58:15" }} <br>
=========end==========<br>
{{ end }}
{{ end }}

//修改altermanager的配置文件

[root@docker01 ~]# vim  alertmanager.yml
//在第九行添加
templates:
  - '/etc/alertmanager-tmpl/*.tmpl'  //容器内的路径
//修改第20行,和第21行:
  - to: '{{ template "email.to" }}'  //必须和email.tmpl中的{{ define “email.to”}} [email protected]{{end}}对应
    html: '{{ template "email.to.html" . }}'  //必须和email.tml中的{{ define "email.to.html" }}名字对应

//删除alertmanager容器,重新运行并挂载

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

//停止容器测试

发布了27 篇原创文章 · 获赞 14 · 访问量 552

猜你喜欢

转载自blog.csdn.net/weixin_45636702/article/details/104016563
今日推荐