prometheus+grafana监控以及企业微信告警

prometheus+grafana监控以及企业微信告警(单机二进制部署)
一.下载部署包,更改其中两个包名称,放到/data下
1.安装包以及解压步骤
grafana-enterprise-8.4.4-1.x86_64.rpm
prometheus-2.34.0.tar.gz
node_exporter-1.3.1.linux-amd64.tar.gz
alertmanager-0.23.0.linux-amd64.tar.gz
tar -xzvf prometheus-2.34.0.tar.gz
mv prometheus-2.34.0.linux-amd64 /data/prometheus
tar -xzvf node_exporter-1.3.1.linux-amd64.tar.gz
mv node_exporter-1.3.1.linux-amd64 /data/node_exporter
tar -xzvf alertmanager-0.23.0.linux-amd64.tar.gz
mv alertmanager-0.23.0.linux-amd64 /data/alertmanager
yum install ./grafana-enterprise-8.4.4-1.x86_64.rpm -y
二、添加各个服务的service

# 普罗米修斯
cat <<EOF | sudo tee /lib/systemd/system/prometheus.service
[Unit]
Description=Prometheus
After=network.target
 
[Service]
Type=simple
User=root
WorkingDirectory=/data/prometheus
ExecStart=/data/prometheus/prometheus --config.file=/data/prometheus/prometheus.yml
 
Restart=on-failure
LimitNOFILE=65536
 
[Install]
WantedBy=multi-user.target
EOF


# node_exporter
cat <<EOF | sudo tee /lib/systemd/system/node_exporter.service 
[Unit]
Description=Node Exporter
After=network.target
Wants=network-online.target
 
[Service]
Type=simple
User=root
ExecStart=/data/node_exporter/node_exporter
 
Restart=on-failure
LimitNOFILE=65536
 
[Install]
WantedBy=multi-user.target
EOF

# alertmanager
cat <<EOF | sudo tee /lib/systemd/system/alertmanager.service
[Unit]
Description=alertmanager
After=alertmanager.target
 
[Service]
ExecStart=/data/alertmanager/alertmanager --config.file=/data/alertmanager/alertmanager.yml
 
Restart=on-failure
LimitNOFILE=65536
 
[Install]
WantedBy=multi-user.target
EOF

三.启动

systemctl enable node_exporter
systemctl enable prometheus
systemctl enable grafana-server
systemctl enable alertmanager

systemctl start node_exporter
systemctl start prometheus
systemctl start grafana-server
/usr/share/grafana/bin/grafana-cli plugins install  grafana-piechart-panel

四.监控linux主机和windows主机
监控linux

1.在每台被控linux主机安装node_exporter
2.在普罗米yml文件里添加所要监控的主机
在这里插入图片描述

监控windows
1.在每台被控windows主机安装wmi_exporter。wmi_exporter下载地址:https://github.com/martinlindhe/wmi_exporter/releases
下载后,双击即可完成安装。完成安装后,会自动创建一个开机自启的服务。
在这里插入图片描述2.在普罗米yml文件里添加配置 在这里插入图片描述

五.配置grafana,添加数据源在这里插入图片描述

2.根据需求添加模板(linux模板12633,windows12422)
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六.企业微信监控告警
1.在企业微信创建群聊,添加机器人会有webhook地址。
2.在普罗米yml文件里开启alertmanager服务端口和自定义规则。在这里插入图片描述

3.在上述规则目录编写规则yml文件
创建目录:
mkdir /data/rules
进入目录:
cd /data/rules
编写规则文件:

1.vim host_rules.yml
groups:
# 报警组组名称
- name: alters
  #报警组规则
  rules:
   #告警名称,需唯一
  - alert: cpu使用率大于75%
    #promQL表达式
    expr: sum(avg without (cpu)(irate(node_cpu_seconds_total{mode!='idle'}[5m]))) by (instance) > 0.75
    #满足此表达式持续时间超过for规定的时间才会触发此报警
    for: 1m
    labels:
      #严重级别
      severity: warning
    annotations:
     #发出的告警标题
      summary: "实例 {{ $labels.instance }} CPU 使用率过高"
      #发出的告警内容
      description: "实例{{ $labels.instance }} CPU 使用率超过 75% (当前值为: {{ $value }})"
  - alert: 内存使用率大于90%
    expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes)/node_memory_MemTotal_bytes > 0.90
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "实例 {{ $labels.instance }} 内存使用率过高"
      description: "实例 {{ $labels.instance }} 内存使用率 90% (当前值为: {{ $value }})"
 2.vim node_alters.yml
 groups:
- name: example
  rules:
  - alert: 服务器宕机
    expr: avg by (instance) (up{}) == 0
    for: 10s
    labels:
      severity: emergency
    annotations:
      description: "实例 {{ $labels.instance }}服务器已宕机,请进行检查."
      summary: "{{ $labels.instance }} 服务器宕机"
  - alert: 磁盘使用率大于80%
    expr: 100 - (node_filesystem_free_bytes{mountpoint="/",fstype=~"ext4|xfs"} / node_filesystem_size_bytes{fstype=~"ext4|xfs"} * 100) > 80
    for: 2m
    labels:
      severity: warning
    annotations:
      description: "{{ $labels.instance  }} : {{ $labels.job  }} :{{ $labels.mountpoint  }} 这个分区使用大于百分之80% (当前值:{{ $value }})"
      summary: "Instance {{ $labels.instance  }} :{{ $labels.mountpoint }} 分区使用率过高"

4.访问普罗米页面,看是否添加成功
在这里插入图片描述
5.在普罗米服务端添加python自动化脚本
(1)安装python3环境
(2)把脚本app.py放在/usr/bin/目录下,脚本内容如下:

cd /usr/bin
vim app.py
import json
import os
from flask import request, Flask   
from dingtalkchatbot.chatbot import DingtalkChatbot     

def Open(s):
    Path = './temp.json'
    if os.path.exists(Path):
        os.remove(Path)     
    f = open(Path, 'w')
    print(s, file = f)
    f.close()
 

def GetData():
    PostData = request.get_data()  
    Data = json.loads(PostData)  
    JsonData = json.dumps(Data, ensure_ascii=False, indent=4)  
    return Data

app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False
 
 
@app.route('/webhook/test/', methods=['POST'])
def IssueCreate():
    # Open(GetData())
    status = GetData()['status']
    alertname = GetData()['alerts'][0]['labels']['alertname']
    serverity = GetData()['alerts'][0]['labels']['severity']
    instance = GetData()['alerts'][0]['labels']['instance']
    start_time = GetData()['alerts'][0]['startsAt']
    message = str(
                     '##' + 'Prometheus告警:%s' + '##' + '\n'
                     '状态:%s' %status + '\n'
                     '告警信息:%s' %alertname + '\n'
                     '告警级别:%s' %serverity + '\n'
                     'IP地址:%s' %instance + '\n'
                     '开始时间:%s' %start_time + '\n'
    )
    print(message)
    send_message(message)
    return "OK", 200
def send_message(message):
    webhook = '机器人地址'
    xiaoding = DingtalkChatbot(webhook)
    xiaoding.send_text(msg=message, is_at_all=True)     
 
if __name__ == '__main__':
    app.run(debug = False, host = '0.0.0.0', port = 8888)

(3)配置脚本自启动文件

vim /usr/lib/systemd/system/app.service
[Unit]
Description=QR Code Reader Service
After=multi-user.target
Conflicts=getty@tty1.service

[Service]
Type=simple
ExecStart=/usr/bin/python3 /usr/bin/app.py
StandardInput=tty-force

[Install]
WantedBy=multi-user.target

(4)在alertmanager的yml文件修改

global:
  resolve_timeout: 5m   处理超时时间
route:
  group_by: ['alertname']
  group_wait: 10s    等待时间
  group_interval: 10s   相同的Gourp之间发送告警通知的时间间隔
  repeat_interval: 5m   重复报警的间隔时长
  receiver: 'web.hook'
receivers:
  - name: 'web.hook'
    webhook_configs:
      - url: 'http://本机ip:8888/webhook/test/'
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

(5)重启服务alertmanager。看企业微信是否可以收到告警信息。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值