Prometheus企业级监控、普罗米修斯监控他来啦,配置邮箱报警、安装篇

Prometheus企业级监控

Prometheus 是一款基于时序数据库的开源监控告警系统,非常适合Kubernetes集群的监控。Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做非常适合做虚拟化环境监控系统,比如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP接口被叫做exporter 。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系统信息(包括磁盘、内存、CPU、网络等等)。Promethus有以下特点:

  • 支持多维数据模型:由度量名和键值对组成的时间序列数据

  • 内置时间序列数据库TSDB

  • 支持PromQL查询语言,可以完成非常复杂的查询和分析,对图表展示和告警非常有意义

  • 支持HTTP的Pull方式采集时间序列数据

  • 支持PushGateway采集瞬时任务的数据

  • 支持服务发现和静态配置两种方式发现目标

  • 支持接入Grafana

1. Prometheus架构介绍

在这里插入图片描述

### 1.1 组件说明

* prometheus server是Prometheus组件中的核心部分,负责实现对监控数据的获取,存储以及查询。
* exporter简单说是采集端,通过http服务的形式保留一个url地址,prometheusserver通过访问该exporter提供的endpoint端点,即可获取到需要采集的监控数据。
* AlertManager在prometheus中,支持基于PromQL创建告警规则,如果满足定义的规则,则会产生一条告警信息,进入AlertManager进行处理。可以集成邮件,微信或者通过webhook自定义报警。
* Pushgateway由于Prometheus数据采集采用pull方式进行设置的,内置必须保证prometheusserver和对应的exporter必须通信,当网络情况无法直接满足时,可以使用pushgateway来进行中转,可以通过pushgateway将内部网络数据主动push到gateway里面去,而prometheus采用pull方式拉取pushgateway中数据。

1.2 总结:

  • prometheus负责从pushgateway和job中采集数据,存储到后端Storatge中,可以通过

    PromQL进行查询,推送alerts信息到AlertManager。AlertManager根据不同的路由规则

    进行报警通知

1.3 对比Zabbix

| **Zabbix**                                                   | **Prometheus**                                               |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| 后端用 C 开发,界面用 PHP 开发,定制化难度很高。             | 后端用 golang 开发,前端是 Grafana,JSON 编辑即可解决。定制化难度较低。 |
| 集群规模上限为 10000 个节点。                                | 支持更大的集群规模,速度也更快。                             |
| 更适合监控物理机环境,以IP地址为监控标识                     | 更适合云环境的监控,对 OpenStack,Kubernetes 有更好的集成。  |
| 监控数据存储在关系型数据库内,如 MySQL,很难从现有数据中扩展维度。 | 监控数据存储在基于时间序列的数据库内,便于对已有数据进行新的聚合。 |
| 安装简单,zabbix-server 一个软件包中包括了所有的服务端功能。 | 安装相对复杂,监控、告警和界面都分属于不同的组件。           |
| 图形化界面比较成熟,界面上基本上能完成全部的配置操作。       | 界面相对较弱,很多配置需要修改配置文件。                     |

| **Zabbix**                                                   | **Prometheus**                                               |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| 后端用 C 开发,界面用 PHP 开发,定制化难度很高。             | 后端用 golang 开发,前端是 Grafana,JSON 编辑即可解决。定制化难度较低。 |
| 集群规模上限为 10000 个节点。                                | 支持更大的集群规模,速度也更快。                             |
| 更适合监控物理机环境,以IP地址为监控标识                     | 更适合云环境的监控,对 OpenStack,Kubernetes 有更好的集成。  |
| 监控数据存储在关系型数据库内,如 MySQL,很难从现有数据中扩展维度。 | 监控数据存储在基于时间序列的数据库内,便于对已有数据进行新的聚合。 |
| 安装简单,zabbix-server 一个软件包中包括了所有的服务端功能。 | 安装相对复杂,监控、告警和界面都分属于不同的组件。           |
| 图形化界面比较成熟,界面上基本上能完成全部的配置操作。       | 界面相对较弱,很多配置需要修改配置文件。                     |

1.4 环境介绍

在这里插入图片描述

Prometheus部署

2.1 下载安装
在这里插入图片描述
我是直接采用的安装包配置的,都一样

[root@prometheus ~]#wget https://github.com/prometheus/prometheus/releases/download/v2.31.0-rc.0/prometheus-2.31.0-rc.0.linux-amd64.tar.gz
[root@prometheus ~]# tar -xzvf prometheus-2.31.0-rc.0.linux-amd64.tar.gz  -C /usr/local/
[root@prometheus local]# mv prometheus-2.31.0-rc.0.linux-amd64/ prometheus
[root@prometheus local]# cd prometheus/
[root@prometheus prometheus]# mkdir data #创建数据存放目录

2.2 配置systemctl管理

[root@prometheus prometheus]# vim /usr/lib/systemd/system/prometheus.service
[Unit]
Description=https://prometheus.io

[Service]
Restart=on-failure
ExecStart=/usr/local/prometheus/prometheus --storage.tsdb.path=/usr/local/prometheus/data --config.file=/usr/local/prometheus/prometheus.yml

[Install]
WantedBy=multi-user.target
[root@prometheus prometheus]# cp prometheus.yml prometheus.yml.bak
[root@prometheus prometheus]# systemctl start prometheus

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.Prometheus**配置文件介绍

global:此片段指定的是prometheus的全局配置,比如采集间隔,抓取超时时间等。
rule_files:此片段指定报警规则文件,prometheus根据这些规则信息,会推送报警信息到alertmanager中。
scrape_configs:此片段指定抓取配置,prometheus的数据采集通过此片段配置。
alerting:此片段指定报警配置,这里主要是指定prometheus将报警规则推送到指定的alertmanager实例地址。
remote_write:指定后端的存储的写入api地址。
remote_read:指定后端的存储的读取api地址。

3.1 Global配置参数

#Howfrequentlytoscrapetargetsbydefault.[scrape_interval:<duration>|default=1m] #抓取间隔
#Howlonguntilascraperequesttimesout.[scrape_timeout:<duration>|default=10s] #抓取超时时间
#Howfrequentlytoevaluaterules.[evaluation_interval:<duration>|default=1m] #评估规则间隔

3.2 scrapy_config片段主要参数

一个scrape_config片段指定一组目标和参数,目标就是实例,指定采集的端点,参数描述如何采集这些实例,主要参数如下:
scrape_interval:抓取间隔,默认继承global值。
scrape_timeout:抓取超时时间,默认继承global值。metric_path:抓取路径,默认是/metrics
*_sd_configs:指定服务发现配置
static_configs:静态指定服务job。
relabel_config:relabel设置。

配置监控远程Linux主机

在这里插入图片描述
下载安装node_exporter,再需要被监控的机器上面

[root@node1 ~]# wget https://github.com/prometheus/node_exporter/releases/download/v1.2.2/node_exporter-1.2.2.linux-amd64.tar.gz #github网站连接时好时坏,不断的下载,一直到下载成功!
[root@node1 ~]# systemctl stop firewalld
[root@node1 ~]# setenforce 0
[root@node1 ~]# tar -xvzf node_exporter-1.2.2.linux-amd64.tar.gz  -C /usr/local/
[root@node1 ~]# cd /usr/local/
[root@node1 local]# mv node_exporter-1.2.2.linux-amd64/ node_exporter
[root@node1 node_exporter]# nohup ./node_exporter & #这样启动也可以,但是我不是
[root@node1 node_exporter]# netstat -tnlp

在这里插入图片描述

5.1 配置systemctl管理

[root@node1 node_exporter]# vim /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=Prometheusnode_exporter

[Service]
User=nobody
ExecStart=/usr/local/node_exporter/node_exporter --log.level=error
ExecStop=/usr/bin/killallnode_exporter

[Install]
WantedBy=default.target
[root@node1 node_exporter]# systemctl start node_exporter  #配置完成之后,这样启动

在这里插入图片描述

5.2 配置监控

#来到监控节点
[root@prometheus prometheus]# pwd
/usr/local/prometheus
[root@prometheus prometheus]# vim prometheus.yml  #在最后面添加监控主机
  - job_name: "node1"
    static_configs:
      - targets: ["192.168.153.144:9100"]

在这里插入图片描述

检测语法,检测配置文件有没有问题?

[root@prometheus prometheus]# ./promtool check config prometheus.yml #检查配置文件语法有无问题

在这里插入图片描述
启动

[root@prometheus prometheus]# systemctl restart prometheus

在这里插入图片描述

部署Grafana,就是一个展示页面,部署在哪个机器上面都可以,可要可不要

安装方式:

1.选择rpm安装。

2.二进制安装。

我这里是rpm安装
在这里插入图片描述
在这里插入图片描述

[root@grafana ~]# wget https://dl.grafana.com/oss/release/grafana-6.4.3-1.x86_64.rpm
[root@grafana ~]# yum -y install grafana-6.4.3-1.x86_64.rpm
[root@grafana ~]# systemctl start grafana-server
[root@grafana ~]# netstat -tnlp

在这里插入图片描述
默认账号:admin ; 默认密码:admin

登录之后,需要修改密码,自行修改即可
在这里插入图片描述
在这里插入图片描述
下面我们把prometheus服务器收集的数据做为一个数据源添加到 grafana,让grafana可以得到prometheus的数据。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

邮箱报警实战

6.1 开启邮箱SNMP
在这里插入图片描述

7.部署AlterManager报警

这个这里提示一下 ,安装在那一台机器上面都可以,他只是用来部署报警的方式

[root@prometheus ~]# wget https://github.com/prometheus/alertmanager/releases/download/v0.23.0/alertmanager-0.23.0.linux-amd64.tar.gz
[root@prometheus ~]# tar -xvzf alertmanager-0.23.0.linux-amd64.tar.gz  -C /usr/local/
[root@prometheus ~]# cd /usr/local/
[root@prometheus local]# mv alertmanager-0.23.0.linux-amd64/ alertmanager
[root@prometheus local]# vim alertmanager/alertmanager.yml

配置文件需要你们改改

global:
  resolve_timeout: 5m
  smtp_from: '@163.com'
  smtp_smarthost: 'smtp.163.com:25'
  smtp_auth_username: '@163.com'
  smtp_auth_password: '填自己的' #这里要开启邮箱SMTP/POP3/IMAP认证,记录授权码
  smtp_require_tls: false
#  smtp_hello: '163.com'
route:
  group_by: ['alertname']
  group_wait: 20s
  group_interval: 5m
  repeat_interval: 5m
  receiver: 'email'
receivers:
- name: 'email'
  email_configs:
  - to: '@qq.com'
    send_resolved: true
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

检测语法

[root@prometheus alertmanager]# ./amtool check-config alertmanager.yml #检测语法

在这里插入图片描述

配置文件详解:

# 全局配置项
global: 
  resolve_timeout: 5m #处理超时时间,默认为5min
  smtp_from: '.com' # 发送邮箱名称
  smtp_smarthost: 'smtp.163.com:25' # 邮箱smtp服务器代理
  smtp_auth_username: '.com' # 邮箱名称
  smtp_auth_password: '' # 邮箱授权码

# 定义路由树信息
route:
  group_by: ['alertname'] # 报警分组依据
  group_wait: 10s # 最初即第一次等待多久时间发送一组警报的通知
  group_interval: 10s # 在发送新警报前的等待时间
  repeat_interval: 1m # 发送重复警报的周期 对于email配置中,此项不可以设置过低,否则将会由于邮件发送太多频繁,被smtp服务器拒绝
  receiver: 'email' # 发送警报的接收者的名称,以下receivers name的名称

# 定义警报接收者信息
receivers:
  - name: 'email' # 警报
    email_configs: # 邮箱配置
    - to: '[email protected]'  # 接收警报的email配置
    send_resolved: true
# 一个inhibition规则是在与另一组匹配器匹配的警报存在的条件下,使匹配一组匹配器的警报失效的规则。两个警报必须具有一组相同的标签.
inhibit_rules: #抑制规则
  - source_match: #源标签
     severity: 'critical'
    target_match:
     severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

#配置systemctl系统管理

[root@prometheus alertmanager]# cat /usr/lib/systemd/system/alertmanager.service
[Unit]
Description=alertmanager System
Documentation=alertmanager System

[Service]
ExecStart=/usr/local/alertmanager/alertmanager --config.file=/usr/local/alertmanager/alertmanager.yml

[Install]
WantedBy=multi-user.target

[root@prometheus alertmanager]# systemctl restart alertmanager.service

这里讲一下遇到的问题,alertmanager怎么起都起不来,后来查了好多方法发现是版本问题
在这里插入图片描述
报错如下:

level=warn ts=2019-01-24T09:20:01.122920737Z caller=cluster.go:148 component=cluster err="couldn't deduce an advertise address: no private IP found, explicit advertise addr not provided"
level=error ts=2019-01-24T09:20:01.129140557Z caller=main.go:199 msg="unable to initialize gossip mesh" err="create memberlist: Failed to get final advertise address: No private IP address found, and explicit IP not provided"

解决办法

wget https://github.com/prometheus/alertmanager/releases/download/v0.14.0/alertmanager-0.14.0.linux-amd64.tar.gz

把alertmanager版本降低到prom/alertmanager:v0.14.0 就没有问题,必须降到0.14其他版本没有用
在这里插入图片描述

prometheus告警实战

修改 prometheus 配置文件

[root@prometheus local]# vim prometheus/prometheus.yml #添加如下内容

在这里插入图片描述
在这里插入图片描述

编写告警规则

创建目录,还有文件

[root@prometheus local]# mkdir prometheus/rules/
[root@prometheus local]# vim prometheus/rules/host_monitor.yml
[root@prometheus local]# cat prometheus/rules/host_monitor.yml

文件内容

groups:
- name: node-up
  rules:
  - alert: node-up
    expr: up == 0
    for: 10s
    labels:
      severity: warning
      team: node
    annotations:
      summary: "民企服务 {
    
    { $labels.instance }} 服务已停止运行超过 10s!"

意思详解

# alert:告警规则的名称。 
# expr:基于 PromQL 表达式告警触发条件,用于计算是否有时间序列满足该条件。
# for:评估等待时间,可选参数。用于表示只有当触发条件持续一段时间后才发送告警。在等待期间新产生告警的状态为 pending。 
# labels:自定义标签,允许用户指定要附加到告警上的一组附加标签。 
# annotations:用于指定一组附加信息,比如用于描述告警详细信息的文字等,annotations 的内容在告警产生时会一同作为参数发送到 Alertmanager。 
# summary 描述告警的概要信息,description 用于描述告警的详细信息。 
# 同时 Alertmanager 的 UI 也会根据这两个标签值,显示告警信息。

启动

[root@prometheus local]# systemctl restart  prometheus

测试报警

#来到node1上关闭node_exporter
[root@node1 node_exporter]# systemctl stop node_exporter
#查看Prometheus监控页面

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
状态说明

Prometheus Alert 告警状态有三种状态:Inactive、Pending、Firing。
1、Inactive:非活动状态,表示正在监控,但是还未有任何警报触发。
2、Pending:表示这个警报必须被触发。由于警报可以被分组、压抑/抑制或静默/静音,所 以等待验证,一旦所有的验证都通过,则将转到 Firing 状态。
3、Firing:将警报发送到 AlertManager,它将按照配置将警报的发送给所有接收者。一旦警 报解除,则将状态转到 Inactive,如此循环。

报警邮件:

![在这里插入图片描述](https://img-blog.csdnimg.cn/d253d5228cc448cf93e652b0a6e96d1d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZOH5ZKU5ZKU5piO6Z2S,size_20,color_FFFFFF,t_70,g_se,x_1
以上就是测试版完成,下面是终极优化版

普罗米修斯邮箱报警优化版

步骤一:来到alertmanager,机器上面

[root@prometheus alertmanager]# pwd
/usr/local/alertmanager
[root@prometheus alertmanager]# vim email.tmpl

编辑配置文件

{
    
    {
    
     define "email.from" }}@qq.com{
    
    {
    
     end }}
{
    
    {
    
     define "email.to" }}@qq.com{
    
    {
    
     end }}
{
    
    {
    
     define "email.to.html" }}
{
    
    {
    
     if gt (len .Alerts.Firing) 0 }}{
    
    {
    
     range .Alerts }}
@告警: <br>
告警程序: prometheus_alert <br>
告警级别: {
    
    {
    
     .Labels.severity }}<br>
告警类型: {
    
    {
    
     .Labels.alertname }} <br>
故障主机: {
    
    {
    
     .Labels.instance }} <br>
告警主题: {
    
    {
    
     .Annotations.summary }} <br>
告警详情: {
    
    {
    
     .Annotations.description }} <br>
触发时间: {
    
    {
    
     .StartsAt.Add 28800e9 }} <br>
{
    
    {
    
     end }}
{
    
    {
    
     end }}
{
    
    {
    
     if gt (len .Alerts.Resolved) 0 }}{
    
    {
    
     range .Alerts }}
@恢复: <br>
告警主机:{
    
    {
    
     .Labels.instance }} <br>
告警主题:{
    
    {
    
     .Annotations.summary }} <br>
恢复时间: {
    
    {
    
     .EndsAt.Add 28800e9 }} <br>
{
    
    {
    
     end }}
{
    
    {
    
     end }}
{
    
    {
    
     end }}

在这里插入图片描述
在这里插入图片描述
步骤一:来到alertmanager,机器上面

vim alertmanager.yml  再次编辑个文件

完整版

global:
  resolve_timeout: 5m
  smtp_from: '@163.com'
  smtp_smarthost: 'smtp.163.com:25'
  smtp_auth_username: '[email protected]'
  smtp_auth_password: 'P'
  smtp_require_tls: false
  smtp_hello: '163.com'
templates:
  - "/usr/local/alertmanager/email.tmpl"
route:
  group_by: ['alertname']
  group_wait: 5s
  group_interval: 1m
  repeat_interval: 1m
  receiver: 'email'
receivers:
- name: 'email'
  email_configs:
  - to: '@qq.com'
  - to: '{
    
    { template "email.to" . }}'
    html: '{
    
    { template "email.to.html" . }}'
    send_resolved: true
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

检测语法完成测试

[root@prometheus alertmanager]# ./amtool check-config alertmanager.yml #每次改完配置,都可以检测一下配置文件,只检测alertmanager.yml即可,里面包含报警模板等配置文件

在这里插入图片描述

[root@node1 ~]# systemctl stop node_exporter

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/tianmingqing0806/article/details/121756328