1 开始安装前的准备

1.1 修改主机名

1.2 关闭防火墙

1.3 关闭seliunx

1.4 关闭防火墙

1.5 下载阿里云的yum源

2 下载所用到的包

2.1 安装 node_porter

2.2 安装 prometheus

2.3 安装 grafana

2.4 安装 alertmanager

以下是操作步骤

#修改主机名
[root@localhost ~]# hostnamectl set-hostname prometheus-server
#关闭防火墙&&设置随机不自起
[root@prometheus-server ~]# systemctl stop firewalld
[root@prometheus-server ~]# systemctl disable firewalld

#关闭SELinux
[root@prometheus-server ~]# setenforce 0
[root@prometheus-server ~]# vim /etc/selinux/config
...
SELINUX=disabled   #这个修改就行了

#下载阿里云的yum源
[root@prometheus-server ~]# wget -P /etc/yum.repo.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

软件的下载
prometheus 是一个基于golang 编写,编译后的软件包,不依赖于任何的第三方依赖。用户只需要下载对应平台的二进制包,解压并且添加基本的配置即可正常启动Prometheus Server

官网下载地址
对于非Docker用户,可以从https://prometheus.io/download/找到最新版本的Prometheus Sevrer软件包

需要下载的软件包

prometheus-2.29.2.linux-amd64.tar.gz #服务端程序
node_exporter-1.2.2.linux-amd64.tar.gz #被控端程序,用于采集监控指标数据
alertmanager-0.23.0.linux-amd64.tar.gz #用于配置故障告警

##下载方式

Linux命令行下载方式(版本可能比较低了 但是还是可以使用的 也可通过windows浏览器从官网下载以上软件包)

wget https://github.com/prometheus/prometheus/releases/download/v2.29.2/prometheus-2.29.2.linux-amd64.tar.gz

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

wget https://mirrors.aliyun.com/grafana/yum/rpm/Packages/grafana-7.4.0-1.x86_64.rpm

wget https://github.com/prometheus/node_exporter/releases/download/v1.2.2/node_exporter-1.2.2.linux-amd64.tar.gz

安装node_exporter

软件包:node_exporter-1.2.2.linux-amd64.tar.gz

#解压软件包
[root@prometheus-server ~]# tar -xf node_exporter-1.2.2.linux-amd64.tar.gz -C /usr/local/

#进入解压路径
[root@prometheus-server ~]# cd /usr/local/
[root@prometheus-server local]# ls

#创建软链接
[root@prometheus-server local]# ln -sv node_exporter-1.2.2.linux-amd64/ /usr/local/node_exporter

#进入node_exporter目录
[root@prometheus-server local]# cd node_exporter
[root@prometheus-server node_exporter]# ls
LICENSE  node_exporter  NOTICE

#添加系统启动服务(可通过systemctl命令管理服务,否则服务以前台形式运行,占用前台终端)
[root@prometheus-server node_exporter]# vim /etc/systemd/system/node_exporter.service
[Unit]
Description=node_exporter
After=network.target

[Service]
Restart=on-failure
ExecStart=/usr/local/node_exporter/node_exporter

[Install]
WantedBy=multi-user.target

#启动服务&&设置服务随机自启&&查看服务状态
[root@prometheus-server node_exporter]# systemctl start node_exporter.service
[root@prometheus-server node_exporter]# systemctl status node_exporter.service
[root@prometheus-server node_exporter]# systemctl enable node_exporter.service


#查看服务端口信息
[root@prometheus-server node_exporter]# ss -ntlpl | grep node_exporter 
tcp    LISTEN   0   128   :::9100    :::*    users:(("node_exporter",pid=56984,fd=3))

查看指标数据

浏览器:http://192.168.0.30:9100
# HELP node_disk_io_now The number of I/Os currently in progress.
# TYPE node_disk_io_now gauge
node_disk_io_now{device=“sda”} 0

指标定义格式介绍

node_disk_io_now{device=“sda”} 0
指标名称{标签名=标签值,标签名=标签值,…}指标数据

指标名称:用于说明指标的含义,名称必须有字母、数据、下划线或者冒号组成
标签:通过标签名与标签值组成,用于指定具体监控的指标数据

第二章:安装Prometheus

安装步骤

软件包:prometheus-2.29.2.linux-amd64.tar.gz

#解压软件包
[root@prometheus-server ~]# tar -xf prometheus-2.29.2.linux-amd64.tar.gz -C /usr/local

#进入解压路径
[root@prometheus-server ~]# cd /usr/local/

#创建软链接
[root@prometheus-server local]# ln -sv /usr/local/prometheus-2.29.2.linux-amd64/ /usr/local/prometheus

#进入prometheus目录
[root@prometheus-server local]# cd /usr/local/prometheus
[root@prometheus-server prometheus]# ls
console_libraries  consoles  LICENSE  NOTICE  prometheus  prometheus.yml  promtool

#添加系统启动服务,指定了配置文件、数据库文件地址,指定了prometheus的端口
[root@prometheus-server prometheus]# vim /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io/docs/introduction/overview/
After=network-online.target

[Service]
Restart=on-failure
ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml --storage.tsdb.path=/var/lib/prometheus --web.external-url=http://0.0.0.0:9090

[Install]
WantedBy=multi-user.target

#启动服务&&设置服务随机自启&&查看服务运行状态
[root@prometheus-server prometheus]# systemctl start prometheus
[root@prometheus-server prometheus]# systemctl status prometheus
[root@prometheus-server prometheus]# systemctl enable prometheus


#查看服务端口信息
[root@prometheus-server prometheus]# ss -ntlp | grep prometheus
LISTEN   0    128  :::9090    :::*    users:(("prometheus",pid=58591,fd=8))

配置文件详解

主配置文件为prometheus.yml,配置文件遵循的是YAML语法格式,整体分为三个模块 globalrule_files,和scrape_configs

#备份配置文件
[root@prometheus-server prometheus]# cp prometheus.yml prometheus.yml.bak

[root@prometheus-server prometheus]# vim prometheus.yml 
#global模块为Prometheus 服务器的全局配置
global:                        
  scrape_interval: 15s         # 抓取指标数据时间间隔,默认为1分钟
  evaluation_interval: 15s     # 规则发现时间间隔,默认为1分钟
  # scrape_timeout is set to the global default (10s).  # 收集数据超时时间,默认10秒

# alerting模块用于关联prometheus报警配置,需指定alertmanager组件的ip和端口
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

# rule_files模块指定Prometheus服务器加载的任何规则的位置(例如:告警规则)
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# scrape_configs模块控制Prometheus监控的资源,Prometeheus也将自身作为被监控的对象,用于监控自身健康状态
scrape_configs:
  - job_name: "prometheus"           # 对象名称,名称自定义
    static_configs:
      - targets: ["localhost:9090"]  #指定要抓取的目标主机IP地址与端口

  - job_name: 'my target'            #对象名称,名称自定义
    static_configs:
      - targets: ['localhost:9100']  #指定要抓取的目标主机IP地址与端口
      
#重启服务
[root@prometheus-server prometheus]# systemctl restart prometheus

浏览器访问:http://192.168.0.30:9090

prometheus监控进程IO使用率 prometheus监控日志_linux

第三章:添加被控主机

环境准备

#修改主机名
[root@localhost ~]# hostnamectl set-hostname host31

#关闭防火墙&&设置随机不自起
[root@host31 ~]# systemctl stop firewalld
[root@host31 ~]# systemctl disable firewalld

#关闭SELinux
[root@host31 ~]# setenforce 0
[root@host31 ~]# vim /etc/selinux/config 
...
SELINUX=disabled

拷贝node_exporter-1.2.2.linux-amd64.tar.gz至被控主机

[root@prometheus-server ~]# scp node_exporter-1.2.2.linux-amd64.tar.gz root@192.168.0.31:/root

安装node_exporter

#解压软件包&&进入解压路径
[root@host31 ~]# tar -xf node_exporter-1.2.2.linux-amd64.tar.gz -C /usr/local
[root@host31 ~]# cd /usr/local/

#创建链接
[root@host31 local]# ln -sv /usr/local/node_exporter-1.2.2.linux-amd64/ /usr/local/node_exporter

#添加系统服务
[root@host31 local]# vim /etc/systemd/system/node_exporter.service
[Unit]
Description=node_exporter
After=network.target

[Service]
Restart=on-failure
ExecStart=/usr/local/node_exporter/node_exporter

[Install]
WantedBy=multi-user.target

#启动服务&&设置服务随机自启&&查看服务状态
[root@host31 local]# systemctl start node_exporter.service 
[root@host31 local]# systemctl status node_exporter.service 
[root@host31 local]# systemctl enable node_exporter.service 


#查看服务端口信息
[root@host31 local]# ss -ntlp | grep node_exporter
LISTEN     0      128   :::9100     :::*   users:(("node_exporter",pid=8225,fd=3))

添加监控对象

修改prometheus.yml文件,添加监控对象

[root@prometheus-server prometheus]# vim prometheus.yml
...
scrape_configs:
  - job_name: "prometheus"

    static_configs:
      - targets: ["localhost:9090"]

  - job_name: 'my target'
    static_configs:
      - targets: ['localhost:9100']

  - job_name: 'host31'       #添加监控对象             
    static_configs:
      - targets: ["192.168.0.31:9100"]    #指定要抓取的目标主机IP地址与端口

#重启服务
[root@prometheus-server prometheus]# systemctl restart prometheus.service

查看监控对象

浏览器:http://192.168.0.30:9090/

prometheus监控进程IO使用率 prometheus监控日志_prometheus监控进程IO使用率_02

第四章:部署Grafana展示数据

Grafana介绍

Grafana是一款用Go语言开发的开源数据可视化工具,可以做数据监控和数据统计 ,并带有报警功能。

官网: https://grafana.com

Guafana特点

**可视化:**快速和灵活的客户端图形具有多种选项。面板插件为许多不同的方式可视化指标和日志。

**报警:**可视化地为最重要的指标定义警报规则。Grafana将持续评估它们,并发送通知。

**通知:**警报更改状态时,它会发出通知。接收电子邮件通知。

**动态仪表盘:**使用模板变量创建动态和可重用的仪表板,这些模板变量作为下拉菜单出现在仪表板顶部。

**混合数据源:**在同一个图中混合不同的数据源!可以根据每个查询指定数据源。这甚至适用于自定义数据源。

**注释:**注释来自不同数据源图表。将鼠标悬停在事件上可以显示完整的事件元数据和标记。

**过滤器:**过滤器允许您动态创建新的键/值过滤器,这些过滤器将自动应用于使用该数据源的所有查询。

Grafana安装

方法一 安装
软件包可从清华大学源下载:https://mirrors.tuna.tsinghua.edu.cn/

#下载软件包
[root@prometheus-server ~]# wget https://mirrors.tuna.tsinghua.edu.cn/grafana/yum/el7/grafana-5.4.2-1.x86_64.rpm

#安装grafana
[root@prometheus-server ~]# yum -y install grafana-5.4.2-1.x86_64.rpm 

#启动服务&&设置服务随机自启&&查看服务运行状态
[root@prometheus-server ~]# systemctl start grafana-server
[root@prometheus-server ~]# systemctl status grafana-server
[root@prometheus-server ~]# systemctl enable grafana-server

#查看服务端口信息
[root@prometheus-server ~]# ss -ntlp | grep grafana
LISTEN   0   128   :::3000    :::* users:(("grafana-server",pid=7907,fd=6))

方法二 安装

解压软件包&&进入解压路径
[root@prometheus-server ~]# tar zxf grafana-enterprise-8.5.4.linux-amd64.tar.gz  -C /usr/local/ 
[root@prometheus-server ~]# cd  /usr/local/

创建链接
[root@prometheus-server ~]# ln -s grafana-8.5.4/ /usr/local/grafana

添加系统服务
[root@prometheus-server ~]# vim /etc/systemd/system/grafana.service
[Unit]
Description=grafana
[Service]
ExecStart=/usr/local/grafana/bin/grafana-server -homepath=/usr/local/grafana
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.targetWantedBy=multi-user.target

#启动服务&&设置服务随机自启&&查看服务状态
[root@prometheus-server ~]# systemctl start grafana.service
[root@prometheus-server ~]# systemctl status grafana.service
[root@prometheus-server ~]# systemctl enable grafana.service

#查看服务端口信息
[root@VM-4-12-centos local]# ss -ntlp | grep grafana
LISTEN     0      128       [::]:3000                  [::]:*                   users:(("grafana-server",pid=29002,fd=8))

浏览器访问:http://192.168.0.30:3000
grafana监控模板下载地址:https://grafana.com/grafana/dashboards/
可用模板:https://grafana.com/grafana/dashboards/9702

第五章:Prometheus故障告警

告警功能概述

  • Prometheus支持故障触发告警功能,但是告警功能由Alertmanager组件实现,Alertmanager支持多种告警媒介类型,如:邮件、短信、微信、钉钉等告警功能,不同的报警媒介,告警的配置方式也有所不同
  • 在Prometheus上定义告警规则生成告警通知,Alertmanager接收到Prometheus告警通知后,按需分别进行处理,将告警信息发送给接收人。
  • Alertmanager支持对告警通知进行分组去重、抑制、静默和路由等功能。

分组去重(group):将相似的告警合并为单个告警通知的机制,在系统引大面积故障而触发告警潮时,分组机制能避免用户被大量告警信息轰炸,进而导致关键告警信息隐没。

抑制(Inhibition):系统中某个组件或服务故障而触发告警通知后,哪些依赖于该组件的其他服务也可能触发告警通知,抑制便是避免类似的级联告警的一种特性,从而让用户能够将精力集中于真正的故障根源。

静默(Silent):是指在一个特定的时间窗口内,即便接收到告警通知,Alertmanager也不会真正向用户发送告警信息的形为,通常在系统例行维护期间,需要激活告警系统的静默特性。

路由(route):用于配置Alertmanager如何处理传入的特定类型的告警通知,其基本逻辑是根据路由匹配规则的结果来确定处理当前告警通知的路径和行为。

安装Alertmanager

#解压软件包&&进入解压路径
[root@prometheus-server ~]# tar -xf alertmanager-0.23.0.linux-amd64.tar.gz -C /usr/local
[root@prometheus-server ~]# cd /usr/local

#创建链接
[root@prometheus-server local]# ln -s /usr/local/alertmanager-0.23.0.linux-amd64/ /usr/local/alertmanager

#添加系统启动服务
[root@prometheus-server alertmanager]# vim /etc/systemd/system/alertmanager.service
[Unit]
Description=Alertmanager
After=network-online.target

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

[Install]
WantedBy=multi-user.target

#启动服务&&设置服务随机自启&&查看服务运行状态
[root@prometheus-server alertmanager]# systemctl start alertmanager
[root@prometheus-server alertmanager]# systemctl enable alertmanager
[root@prometheus-server alertmanager]# systemctl status alertmanager

#查看服务端口信息
[root@prometheus-server alertmanager]# ss -ntlp | grep alertmanager
LISTEN     0  128  :::9093    :::* users:(("alertmanager",pid=8877,fd=8)) #alertmanager监听端口
LISTEN     0  128  :::9094    :::* users:(("alertmanager",pid=6765,fd=3)) #集群服务端口

访问测试:http://192.168.0.30:9093

配置文件介绍 (这个是默认的配置文件 可以备份一下 这个咱不用)

Alertmanager的配置文件也是遵循YAML格式

[root@prometheus-server alertmanager]# vim alertmanager.yml
route:                      #根路由,所有的告警信息进入根路由后,由根路由设置报警的分发策略
  group_by: ['alertname']   #接收到报警信息后,重新分组,将多条告警信合并为一个通知
  group_wait: 30s           #当一个新的报警分组被创建后,需要等待30s来初始化通知
  group_interval: 5m        #当第一个报警发送后,等待5m时间来发送新的一组报警信息
  repeat_interval: 1h       #相同告警信息发送时间间隔,等待1h再次发送新的一组报警信息
  receiver: 'web.hook'      #默认的接收器,可选择多种接收方式(如邮件、微信等)
receivers:                  #报警接收器
- name: 'web.hook'          #接收器名称
  webhook_configs:          #通过webhook方式发送
  - url: 'http://127.0.0.1:5001/'   #发送地址
inhibit_rules:              #以下是关于告警抑制的配置
  - source_match:           #源告警,根据这个告警来抑制target_match中匹配的告警
      severity: 'critical'  #标签匹配满足severity=critical的告警作为源告警
    target_match:           #目标告警(被抑制的告警)
      severity: 'warning'   #告警必须满足标签匹配severity=warning才会被抑制
    equal: ['alertname', 'dev', 'instance']  #必须在源告警和目标告警中具有相等值的标签才能使抑制生效。(即源告警和目标告警中这三个标签的值相等'alertname', 'cluster', 'service')

接收器详细参数配置文档:

  • email: https://prometheus.io/docs/alerting/latest/configuration/#email_config
  • webhook: https://prometheus.io/docs/alerting/latest/configuration/#webhook_config
  • wechat: https://prometheus.io/docs/alerting/latest/configuration/#wechat_config
  • pagerduty:https://prometheus.io/docs/alerting/latest/configuration/#pagerduty_config

配置微信告警 这个是咱自己需要创建一个 小程序

登录企业微信:https://work.weixin.qq.com/

创建Prometheus企业应用:【应用管理】–【创建应用】
AgentId 企业应用ID:1000002
Secret 应用密码:uMoTDaYEurlDtsLQYVWC_fokkdfXiXR8iBF7m #写自己对应的 这个是我的
企业ID:【我的企业】 wwe29b2be83a5ce659
企业微信账号: DingFeng #这个可以简写 @all 就行了

修改alertmanager.yml文件,配置报警 (把这个复制进去就行了)

[root@prometheus-server alertmanager]# vim alertmanager.yml 
global:                     #全局配置
  resolve_timeout: 5m       #处理告警超时时间

templates:                  #指定告警模板文件位置
  - './template/test.tmpl'  #模板文件地址,默认不存在,需要手动创建

route:
  group_by: ['alertname']   # 分组标签
  group_wait: 10s           # 告警等待时间。告警产生后等待10s,如果有同组告警一起发出
  group_interval: 10s       # 两组告警的间隔时间
  repeat_interval: 1m       # 重复告警的间隔时间,减少相同告警的发送频率 此处为测试设置为1分钟 
  receiver: 'wechat'        # 默认接收者

receivers:                  #告警接收器
- name: 'wechat'            #接收器名称
  wechat_configs:           #企业微信报警配置
    - send_resolved: true   #定义发送账号信息
      agent_id: '1000002'      # 自建应用的agentId
      to_user: 'DingFeng'         # 接收告警消息的人员Id   
      api_secret: 'uMoTDaYEurlDtsLQYVWC_fokkdfXiXR8iBF7m_3pphg' # 自建应用的secret
      corp_id: 'wwa78d6212da74fd51'  # 企业ID

创建告警模板

#创建模板目录
[root@prometheus-server alertmanager]# mkdir template
[root@prometheus-server alertmanager]# cd template/

#创建告警模板文件,该模板在故障时会发送告警通知,故障恢复时也会发送告警通知
[root@prometheus-server template]# vim test.tmpl 
{{ define "wechat.default.message" }}
{{- if gt (len .Alerts.Firing) 0 -}}
{{- range $index, $alert := .Alerts -}}
{{- if eq $index 0 -}}
**********告警通知**********
告警类型: {{ $alert.Labels.alertname }}
告警级别: {{ $alert.Labels.severity }}
{{- end }}
=====================
告警详情: {{ $alert.Annotations.description }}
故障时间: {{ $alert.StartsAt.Local }}
{{ if gt (len $alert.Labels.instance) 0 -}}故障实例: {{ $alert.Labels.instance }}{{- end -}}
{{- end }}
{{- end }}

{{- if gt (len .Alerts.Resolved) 0 -}}
{{- range $index, $alert := .Alerts -}}
{{- if eq $index 0 -}}
**********恢复通知**********
告警类型: {{ $alert.Labels.alertname }}
告警级别: {{ $alert.Labels.severity }}
{{- end }}
=====================
告警详情: {{ $alert.Annotations.description }}
故障时间: {{ $alert.StartsAt.Local }}
恢复时间: {{ $alert.EndsAt.Local }}
{{ if gt (len $alert.Labels.instance) 0 -}}故障实例: {{ $alert.Labels.instance }}{{- end -}}
{{- end }}
{{- end }}
{{- end }}


#检测配置alertmanager.yml文件语法是否正确
[root@prometheus-server alertmanager]# ./amtool  check-config alertmanager.yml 
Checking 'alertmanager.yml'  SUCCESS
Found:
 - global config
 - route
 - 0 inhibit rules
 - 1 receivers
 - 1 templates   #模板文件以识别
  SUCCESS

#重启alertmanager服务&&查看服务状态
[root@prometheus-server alertmanager]# systemctl restart alertmanager.service
[root@prometheus-server alertmanager]# systemctl status alertmanager.service

添加告警

修改 prometheus.yml文件,添加告警

[root@prometheus-server prometheus]# vim prometheus.yml
...
# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
           - 192.168.0.30:9093   #指定alertmanager主机IP与端口

#指定加载的告警规则文件
rule_files:
    - "first_rules.yml"    #去注释
  # - "second_rules.yml"

    
#重启服务&&查看服务运行状态
[root@prometheus-server prometheus]# systemctl restart prometheus
[root@prometheus-server prometheus]# systemctl status prometheus

配置告警规则

创建first_rules.yml添加告警规则,路径为/usr/local/prometheus/

#配置告警规则,如果主机down了,就触发告警
[root@prometheus-server prometheus]# vim first_rules.yml
groups:                    #告警分组
- name: 'Linux Instances'  #组名
  rules:
  - alert: "主机状态告警"     #告警状态
    expr: up == 0           #告警指标,UP指标的值等于0表示Down状态,1表示正常
    for: 20s                #等待20秒发送告警信息
    labels:                 #指定告警级别
      severity: '紧急'       #告警级别
    annotations:            #告警信息描述
      summary: "服务名:{{$labels.alertname}} 主机状态告警"    #描述信息自定义
      description: "{{ $labels.alertname }} 主机以宕机20秒"  #描述信息自定义
      value: "{{ $value }}"


#重启服务&&查看服务运行状态
[root@prometheus-server prometheus]# systemctl restart prometheus
[root@prometheus-server prometheus]# systemctl status prometheus

浏览器可查看规则:http://192.168.0.30:9090/alerts

触发告警

模拟192.168.0.31主机宕机,关闭node_exporter服务即可

[root@host31 ~]# systemctl stop node_exporter.service

配置CPU利用率告警

[root@prometheus-server prometheus]# vim first_rules.yml
groups:
- name: 'Linux Instances'  #组名
  rules:

...
  - alert: 'CPU利用率告警'
    expr: sum(avg(irate(node_cpu_seconds_total{mode!='idle'}[5m])) without (cpu)) by (instance) > 0.60
    for: 10s
    labels:
      severity: '警告'
    annotations:
      summary: "服务名 {{ $labels.instance }} CPU 利用率过高"
      description: "{{ $labels.instance }} CPU 利用率达到 60%"
      value: "{{ $value }}"

  - alert: 'CPU利用率告警'
    expr: (100 - (avg by (instance) (irate(node_cpu_seconds_total{job=~".*",mode="idle"}[5m])) * 100)) > 85
    for: 10s
    labels:
      severity: '严重'
    annotations:
      summary: "服务名 {{ $labels.instance }} CPU 利用率过高"
      description: "{{ $labels.instance }} CPU 利用率达到 85%"
      value: "{{ $value }}"

重启Prometheus服务

[root@prometheus-server prometheus]# systemctl restart promethues.service

被控主机模拟CPU利用率过高

[root@host31 nginx-1.20.1]# while :
do 
echo hello word
done

#利用top观察CPU负载
[root@host31 ~]# top

配置内存利用率告警

[root@prometheus-server prometheus]# vim first_rules.yml
groups:
- name: 'Linux Instances'  #组名
  rules:
...
  - alert: '内存利用率告警'
    expr: avg by(instance) ((1 - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes) / node_memory_MemTotal_bytes) * 100) > 70
    for: 3m
    labels:
      severity: '警告'
    annotations:
      summary: "服务名 {{ $labels.instance }} 内存利用率过高"
      description: "{{ $labels.instance }} 内存利用率达到 70%"
      value: "{{ $value }}"

  - alert: '内存利用率告警'
    expr:  (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes)/node_memory_MemTotal_bytes > 0.90
    for: 3m
    labels:
      severity: '严重'
    annotations:
      summary: "服务名 {{ $labels.instance }} 内存利用率过高"
      description: "{{ $labels.instance }} 内存利用率达到 90%"
      value: "{{ $value }}"

配置磁盘利用率告警

[root@prometheus-server prometheus]# vim first_rules.yml
groups:
- name: 'Linux Instances'  #组名
  rules:
...
  - alert: '磁盘利用率告警'
    expr:  (1 - node_filesystem_free_bytes{fstype!="rootfs",mountpoint!="",mountpoint!~"/(run|var|sys|dev).*"} / node_filesystem_size_bytes) * 100 > 80
    for: 2m
    labels:
      severity: '警告'
    annotations:
      summary: "服务名 {{ $labels.instance }} 磁盘利用率过高"
      description: "{{ $labels.instance }} 磁盘利用率达到 80%"
      value: "{{ $value }}"

  - alert: '磁盘利用率告警'
    expr:  (1 - node_filesystem_free_bytes{fstype!="rootfs",mountpoint!="",mountpoint!~"/(run|var|sys|dev).*"} / node_filesystem_size_bytes) * 100 > 90
    for: 2m
    labels:
      severity: '严重'
    annotations:
      summary: "服务名 {{ $labels.instance }} 磁盘利用率过高"
      description: "{{ $labels.instance }} 磁盘利用率达到 90%"
      value: "{{ $value }}"

下面这些的告警规则 我是吧上面的写到一起了

常用告警规则配置

- alert: CpuUsageAlert_waring
    expr: sum(avg(irate(node_cpu_seconds_total{mode!='idle'}[5m])) without (cpu)) by (instance) > 0.60
    for: 2m
    labels:
      level: warning
    annotations:
      summary: "Instance {{ $labels.instance }} CPU usage high"
      description: "{{ $labels.instance }} CPU usage above 60% (current value: {{ $value }})"
  - alert: CpuUsageAlert_serious
    expr: (100 - (avg by (instance) (irate(node_cpu_seconds_total{job=~".*",mode="idle"}[5m])) * 100)) > 85
    for: 3m
    labels:
      level: serious
    annotations:
      summary: "Instance {{ $labels.instance }} CPU usage high"
      description: "{{ $labels.instance }} CPU usage above 85% (current value: {{ $value }})"
  - alert: MemUsageAlert_waring
    expr: avg by(instance) ((1 - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes) / node_memory_MemTotal_bytes) * 100) > 70
    for: 2m
    labels:
      level: warning
    annotations:
      summary: "Instance {{ $labels.instance }} MEM usage high"
      description: "{{$labels.instance}}: MEM usage is above 70% (current value is: {{ $value }})"
  - alert: MemUsageAlert_serious
    expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes)/node_memory_MemTotal_bytes > 0.90
    for: 3m
    labels:
      level: serious
    annotations:
      summary: "Instance {{ $labels.instance }} MEM usage high"
      description: "{{ $labels.instance }} MEM usage above 90% (current value: {{ $value }})"
  
  - alert: DiskUsageAlert_warning
    expr: (1 - node_filesystem_free_bytes{fstype!="rootfs",mountpoint!="",mountpoint!~"/(run|var|sys|dev).*"} / node_filesystem_size_bytes) * 100 > 80
    for: 2m
    labels:
      level: warning
    annotations:
      summary: "Instance {{ $labels.instance }} Disk usage high"
      description: "{{$labels.instance}}: Disk usage is above 80% (current value is: {{ $value }})"

  - alert: DiskUsageAlert_serious
    expr: (1 - node_filesystem_free_bytes{fstype!="rootfs",mountpoint!="",mountpoint!~"/(run|var|sys|dev).*"} / node_filesystem_size_bytes) * 100 > 90
    for: 3m
    labels:
      level: serious
    annotations:
      summary: "Instance {{ $labels.instance }} Disk usage high"
      description: "{{$labels.instance}}: Disk usage is above 90% (current value is: {{ $value }})"

  - alert: NodeFileDescriptorUsage
    expr: avg by (instance) (node_filefd_allocated{} / node_filefd_maximum{}) * 100 > 60
    for: 2m
    labels:
      level: warning
    annotations:
      summary: "Instance {{ $labels.instance }} File Descriptor usage high"
      description: "{{$labels.instance}}: File Descriptor usage is above 60% (current value is: {{ $value }})"
  - alert: NodeLoad15
    expr: avg by (instance) (node_load15{}) > 80
    for: 2m
    labels:
      level: warning
    annotations:
      summary: "Instance {{ $labels.instance }} Load15 usage high"
      description: "{{$labels.instance}}: Load15 is above 80 (current value is: {{ $value }})"
  - alert: NodeAgentStatus
    expr: avg by (instance) (up{}) == 0
    for: 2m
    labels:
      level: warning
    annotations:
      summary: "{{$labels.instance}}: has been down"
      description: "{{$labels.instance}}: Node_Exporter Agent is down (current value is: {{ $value }})"
  - alert: NodeProcsBlocked
    expr: avg by (instance) (node_procs_blocked{}) > 10
    for: 2m
    labels:
      level: warning
    annotations:
      summary: "Instance {{ $labels.instance }}  Process Blocked usage high"
      description: "{{$labels.instance}}: Node Blocked Procs detected! above 10 (current value is: {{ $value }})"
  - alert: NetworkTransmitRate
    #expr:  avg by (instance) (floor(irate(node_network_transmit_bytes_total{device="ens192"}[2m]) / 1024 / 1024)) > 50
    expr:  avg by (instance) (floor(irate(node_network_transmit_bytes_total{}[2m]) / 1024 / 1024 * 8 )) > 40
    for: 1m
    labels:
      level: warning
    annotations:
      summary: "Instance {{ $labels.instance }} Network Transmit Rate usage high"
      description: "{{$labels.instance}}: Node Transmit Rate (Upload) is above 40Mbps/s (current value is: {{ $value }}Mbps/s)"
  - alert: NetworkReceiveRate
    #expr:  avg by (instance) (floor(irate(node_network_receive_bytes_total{device="ens192"}[2m]) / 1024 / 1024)) > 50
    expr:  avg by (instance) (floor(irate(node_network_receive_bytes_total{}[2m]) / 1024 / 1024 * 8 )) > 40
    for: 1m
    labels:
      level: warning
    annotations:
      summary: "Instance {{ $labels.instance }} Network Receive Rate usage high"
      description: "{{$labels.instance}}: Node Receive Rate (Download) is above 40Mbps/s (current value is: {{ $value }}Mbps/s)"
  - alert: DiskReadRate
    expr: avg by (instance) (floor(irate(node_disk_read_bytes_total{}[2m]) / 1024 )) > 200
    for: 2m
    labels:
      level: warning
    annotations:
      summary: "Instance {{ $labels.instance }} Disk Read Rate usage high"
      description: "{{$labels.instance}}: Node Disk Read Rate is above 200KB/s (current value is: {{ $value }}KB/s)"
  - alert: DiskWriteRate
    expr: avg by (instance) (floor(irate(node_disk_written_bytes_total{}[2m]) / 1024 / 1024 )) > 20
    for: 2m
    labels:
      level: warning
    annotations:
      summary: "Instance {{ $labels.instance }} Disk Write Rate usage high"
      description: "{{$labels.instance}}: Node Disk Write Rate is above 20MB/s (current value is: {{ $value }}MB/s)"