【Prometheus简介】

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 【Prometheus简介】

prometheus官方网站:https://prometheus.io/

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

Prometheus的优点:

易管理性:

Prometheus: Prometheus核心部分只有一个单独的二进制文件,可直接在本地工作,不依赖于分布式存储。

Nagios: 需要有专业的人员进行安装,配置和管理,并且过程很复杂。

业务数据相关性:

Prometheus:监控服务的运行状态,基于Prometheus丰富的Client库,用户可以轻松的在应用程序中

添加对Prometheus的支持,从而让用户可以获取服务和应用内部真正的运行状态。

Nagios:大部分的监控能力都是围绕系统的一些边缘性的问题,主要针对系统服务和资源的状态以及应用程序的可用性。

另外Prometheus还存在以下优点:

高效:单一Prometheus可以处理数以百万的监控指标;每秒处理数十万的数据点。

易于伸缩:通过使用功能分区(sharing)+联邦集群(federation)可以对Prometheus进行扩展,形成一个逻辑集群;Prometheus提供多种语言的客户端SDK,这些SDK可以快速让应用程序纳入到Prometheus的监控当中。

良好的可视化:Prometheus除了自带有Prometheus UI,Prometheus还提供了一个独立的基于RubyOn Rails的Dashboard解决方案Promdash。另外最新的Grafana可视化工具也提供了完整的Proetheus支持,基于Prometheus提供的API还可以实现自己的监控可视化UI。

实验环境:

| 主机名称 | IP地址         | 安装组件                                            || -------- | ------------- | -------------------------------------------------- || docker1  | 192.168.1.100 | NodeEXporter、cAdvisor、Prometheus Server、Grafana || docker2  | 192.168.1.101 | NodeEXporter、cAdvisor                             || docker3  | 192.168.1.102 | NodeEXporter、cAdvisor                             |
全部关闭防火墙,禁用selinux。
需要部署的组件:
Prometheus Server: 普罗米修斯的主服务器。
NodeEXporter: 负责收集Host硬件信息和操作系统信息。
cAdvisor: 负责收集Host上运行的容器信息。
Grafana: 负责展示普罗米修斯监控界面。
##### 1)3个节点,全部部署node-EXporter,和cAdvisor.
//部署node-EXporter,收集硬件和系统信息。
docker run -d -p 9100:9100 --name 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)($|/)"

PS: 注意,这里使用了--net=host,这样Prometheus Server可以直接与Node-EXporter通信。

验证:打开浏览器验证结果。

http://192.168.100.205:9100

//部署安装cAdvisor,收集节点容器信息。
docker run -v /:/rootfs:ro -v /var/run:/var/run/:rw -v /sys:/sys:ro -v /var/lib/docker:/var/lib/docker:ro -p8080:8080 --detach=true --name=cadvisor --net=host google/cadvisor

部署完成之后,打开浏览器验证。

http://192.168.1.100:8080


##### 2)在docker01上部署Prometheus Server服务。

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

docker run -d -p 9090:9090 --name prometheus --net=host prom/prometheus
docker cp prometheus:/etc/prometheus/prometheus.yml /root
vim prometheus.yml
     - targets:['localhost:9090','localhost:8080','localhost:9100','192.168.1.101:8080','192.168.1.101:9100','192.168.1.102:8080','192.168.1.102:9100']

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

修改配置文件后删除掉前面开启的prometheus容器,因为我们已经得到配置文件并按照实际修改了,后面需要重新开启新的容器

docker rm -f prometheus  容器名
//重新运行prometheus容器。
docker run -d -p 9090:9090 --name prometheus --net=host -v
/root/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

浏览器访问验证。

http://192.168.1.100:9090/targets

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

##### 3)在docker01上,部署grafana服务,用来展示prometheus收集到的数据。
mkdir /grafana-storage 
chmod 777 -R /grafana-storage/
docker run -d -p 3000:3000 --name grafana -v /grafana-storage:/var/lib/grafana -e
"GF_SECURITY_ADMIN_PASSWORD=123.com" grafana/grafana

浏览器访问验证:

http://192.168.1.100:3000/login

用户名:admin

密码:123.com

设置Grafana,添加数据来源(prometheus)

点击“DATA SOURCES”

选择“Prometheus”

Name 选择Prometheus  

URL  填写http://192.168.1.100:9090

点击  Save & Test

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

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

grafana官网: https://grafana.com/ 
Grafana
Dashboards
Prometheus
Node Exporter for full
Download JSON
选中一款模板,然后,我们有2种方式可以套用这个模板。
**第一种方式:通过JSON文件使用模板。**
下载完成之后,来到grafana控制台
http://192.168.1.100:3000/datasources
点击左侧“+”,import ,upload JSON file

**第二种导入模板的方式**:

可以直接通过模板的ID 号。

--------------------------------------

配置AlertManager

接下来,我们需要启动 AlertManager 来接受 Prometheus 发送过来的报警信息,并执行各

种方式的告警。同样以 Docker 方式启动 AlertManager,最简单的启动命令如下

docker run --name alertmanager -d -p 9093:9093 prom/alertmanager:latest
docker cp alertmanager:/etc/alertmanager/alertmanager.yml /root
cp alertmanager.yml alertmanager.ymlbak
这里 AlertManager 默认启动的端口为 9093,启动完成后,浏览器访问 http://:9093 可以看到默认提供的 UI 页面,不过现在是没有任何告警信息的,因为我们还没有配置报警规则来触发报警。
URL:http://192.168.1.100:9093
AlertManager 配置邮件告警
AlertManager 默认配置文件为 alertmanager.yml,在容器内路为/etc/alertmanager/alertmanager.yml
docker cp alertmanager:/etc/alertmanager/alertmanager.yml /root/

简单介绍一下主要配置的作用:

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

-     route: 用来设置报警的分发策略,它是一个树状结构,按照深度优先从左向右的顺序进行匹配。

-     receivers: 配置告警消息接受者信息,例如常用的 email、wechat、slack、webhook 等消息通知方式。

-     inhibit_rules: 抑制规则配置,当存在与另一组匹配的警报(源)时,抑制规则将禁用与一组匹配的警报(目标)。

那么,我们就来配置一下使用 Email 方式通知报警信息,这里以 QQ 邮箱为例,

当然在配置QQ邮箱之前,需要我们登录QQ邮箱,打开SMTP服务,并获取授权码。

配置如下:

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

PS: 以上模板中涉及的QQ邮箱换成自己的即可,授权码也一样。

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

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

### Prometheus 配置 AlertManager 告警规则

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

# mkdir  -p /root/prometheus/rules
# cd /root/prometheus/rules/
[root@docker1 rules]# cat 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!"

PS:该 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 规则文件

# vim prometheus.yml
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          - 192.168.1.100:9093
rule_files:
  - "/usr/local/prometheus/rules/*.rules"
PS:这里 rule_files 为容器内路径,需要将本地 node-up.rules 文件挂载到容器内指定路径,修改
Prometheus 启动命令如下,并重启服务。
[root@docker1 ~]# docker rm -f prometheus 
[root@docker1 ~]# 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主页上可以看到相应规则
http://192.168.1.100:9090/targets
Status
Rules

触发报警发送 Email

相关文章
|
3月前
|
Prometheus Cloud Native 机器人
Prometheus告警简介
Prometheus告警简介
|
6月前
|
存储 Prometheus 监控
【Prometheus】什么是prometheus?prometheus简介
【Prometheus】什么是prometheus?prometheus简介
57 0
|
4月前
|
存储 Prometheus 监控
Prometheus实战篇:Prometheus简介
Prometheus 是一个开源的服务监控系统和时序数据库,其提供了通用的数据模型和快捷数据采集、存储和查询接口。
|
4月前
|
Prometheus Cloud Native 关系型数据库
prometheus|云原生|prometheus项目安装postgres-exporter监视组件的部署简介
prometheus|云原生|prometheus项目安装postgres-exporter监视组件的部署简介
83 0
|
存储 缓存 Prometheus
【监控利器Prometheus】——Prometheus简介与安装
Prometheus简介与安装 1、Prometheus简介 2、安装 Prometheus Server 3、 安装 Grafana
【监控利器Prometheus】——Prometheus简介与安装
|
存储 数据采集 Prometheus
Prometheus原理简介
充分了解Prometheus原理
545 0
Prometheus原理简介
|
JSON Prometheus 监控
prometheus+grafana简介与linux下的安装
prometheus+grafana简介与linux下的安装
227 0
prometheus+grafana简介与linux下的安装
|
Cloud Native Prometheus 监控
带你读《Prometheus监控实战》之二:Prometheus简介
本书首先从监控体系讲起,介绍了关于监控的各种经典理论和方法。然后循序渐进地介绍了Prometheus的各个功能组件和配置方法,包括监控主机和容器、服务发现、警报管理,以及Kubernetes和运行其上的应用程序的监控。
|
存储 Prometheus 监控
1.1 Prometheus 简介
Prometheus 是一个开源的系统监控和警报工具,最初是在 SoundCloud 上构建的。自2012年启动以来,许多公司和组织都采用了 Prometheus,该项目拥有非常活跃的开发人员和用户社区。
1935 0
|
3月前
|
编解码 Prometheus 运维
Prometheus 的监控方法论
【1月更文挑战第24天】