基于Grafana+Prometheus的轻量级企业监控实时方案

1、创建一个文件夹
mkdir monitoring_platform
2、上传相关程序包
prometheus-2.44.0.linux-amd64.tar.gz
grafana-enterprise-10.0.1.linux-amd64.tar.gz
alertmanager-0.25.0.linux-amd64.tar.gz

3、解压安装包
tar -xvf prometheus-2.44.0.linux-amd64.tar.gz
tar -xvf grafana-enterprise-10.0.1.linux-amd64.tar.gz
tar -xvf alertmanager-0.25.0.linux-amd64.tar.gz

可将减压后的安装包移动到指定的路径下,此处不做安装路径调整。
mv grafana-10.0.1 grafana
mv prometheus-2.44.0.linux-amd64 prometheus
mv alertmanager-0.25.0.linux-amd64 alertmanager

4、Grafana设置
(1)、调整Grafana配置文件
cd grafana/conf/
vi defaults.ini
在文件中找到[server]部分,将其中的domain = localhost修改为domain = 你的服务器地址。
例如:domain = 10.1.101.101
保存退出。
(2)、启动Grafana
返回安装路劲下
cd /home/infa/monitoring_platform/grafana
创建日志记录文件夹
mkdir log
执行命令
nohup ./bin/grafana-server web > /home/infa/monitoring_platform/grafana/grafana-server.log 2>&1 &
查看后台任务
ps -ef|grep grafana
返回结果中存在grafana server web
查看前端UI页面
http://服务器IP:3000/login
初始用户/密码为admin/admin
首次登陆提示修改密码,可跳过,点击skip跳过

5、Prometheus设置
(1)、调整Prometheus配置文件
进入Prometheus安装路劲
cd prometheus/
编辑yml文件
vi prometheus.yml
将其中scrape_configs下面的- job_name: "prometheus"中的- targets: ["localhost:9090"]的localhost修改为服务器地址
例如:
      - targets: ["10.1.101.101:9090"]
保存退出。
(2)、启动Prometheus
返回安装目录下:
cd /home/infa/monitoring_platform/prometheus
创建一个日志目录:
mkdir log
执行命令:
nohup ./prometheus --web.enable-lifecycle --config.file=prometheus.yml > /home/infa/monitoring_platform/prometheus/log/prometheus.log 2>&1 &
检查服务是否启动:
ps -ef |grep prometheus
返回结果中:
infa     20785  5485  1 16:36 pts/0    00:00:00 ./prometheus --web.enable-lifecycle --config.file=prometheus.yml
查看前端UI页面:
http://10.1.5.120:9090/
选择上方菜单栏中Status -> Targets,prometheus的state为UP说明成功。

6、Alertmanager设置
(1)、Alertmanager配置简述
进入Alertmanager安装路径下:
cd alertmanager/
查看alertmanager的配置文件alertmanager.yml:
cat alertmanager.yml
可以看到如下的信息:
route:
  group_by: ['alertname']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 1h
  receiver: 'web.hook'
receivers:
  - name: 'web.hook'
    webhook_configs:
      - url: 'http://127.0.0.1:5001/'
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

在这里可以根据您的需求进行调整,例如您只需将异常告警信息发送单一目标,例如钉钉或者邮件等,那可以之间在这里进行配置。
如果您的告警信息,无法直接送达,需要第三方转接,例如使用 webhook服务,则只需在此设置地址即可。
下面将使用webhook示例。

(2)、创建一个webhook服务
此处是使用Python3创建的一个webhook服务脚本,如需增加其他业务,例如解析json数据,将指定信息发送钉钉、邮件、企微等,可在此服务中进行集成。
因为使用的是python3,所以需要先行安装Python3服务和一些第三方库。

返回此前的安装路径下:
cd monitoring_platform/
创建webhook文件夹:
mkdir webhook
创建python脚本:
vi webhook.py
将下述脚本贴入,保存


# -*- coding: utf-8 -*-
import os, json, requests, arrow, time
from flask import Flask
from flask import request
from datetime import datetime

app = Flask(__name__)
#获取请求信息
def getData():
    data = request.get_data()  # 获取jira POST请求的原始数据
    data = json.loads(data)  # 将json格式的数据转换为字典
    JsonData = json.dumps(data, ensure_ascii=False, indent=4) #格式化json数据
    return data

#webhook服务
@app.route('/', methods=['POST', 'GET'])
def send():
    if request.method == 'POST':  #判断是否是POST请求
        jsonDate = getData()
        print(jsonDate) #输出接收到的数据
        return "OK", 200
    else:
        return "Error: No POST",500

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

赋权给webhook.py文件:
chmod 777 webhook.py
请注意,该脚本使用了os, json, requests, arrow, time, flask 库,可能需要您自行安装。
启动脚本测试:
python3 webhook.py
正常启动大致会出现如下信息:
 * Serving Flask app 'webhook'
 * Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on all addresses (0.0.0.0)
 * Running on http://127.0.0.1:5000
 * Running on http://10.1.101.101:5000
如果出现This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.警告信息如需处理。
如若启动报错,可根据报错信息进行调整。
Ctrl+c退出程序

(3)、修改alertmanager.yml文件
返回alertmanager文件夹,修改配置文件
vi alertmanager.yml
将receivers中的URL地址调整为webhook的地址:
receivers:
  - name: 'web.hook'
    webhook_configs:
      - url: 'http://10.1.101.101:5000/'
这样,在alertmanager接收到异常告警后,就会将消息发送到webhook服务。

(4)、修改prometheus的配置文件
返回prometheus的安装路径,编辑prometheus.yml文件
vi prometheus.yml
修改alerting中的地址
# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093
           - 10.1.101.101:9093
修改scrape_configs,增加一段job_name:
  - job_name: "alertmanager"
    static_configs:
      - targets: ["10.1.5.120:9093"]

(5)、启动alertmanager
返回alertmanager文件夹,创建日志文件夹
mkdir log
执行启动命令:
nohup ./alertmanager --config.file=alertmanager.yml > log/alertmanager.log 2>&1 &
重新加载prometheus配置文件:
curl -X POST http://10.1.101.101:9090/-/reload
登录web页面查看是否启动成功:
http://10.1.101.101:9090
http://10.1.101.101:9093

(6)、设置告警检查文件
返回prometheus安装文件夹下,创建一个告警文件夹,用于存放告警规则文件
mkdir alert_rules
修改prometheus.yml文件,将告警规则执行alert_rules文件夹:
vi prometheus.yml
将rule_files的地址指向alert_rules下所有yml文件
rule_files:
  - "alert_rules/*.yml"
进入alert_rules文件夹中,创建一个测试用的告警文件:
vi TestAlert.yml
贴入下述脚本

groups:
 - name: TestAlert #规则组名(每个组下可以有多个规则,可合并报警,减少报警量)
   rules:
   - alert: "测试项一:节点down了" #告警名称
     expr: up == 0 #告警条件
     for: 0m #满足告警条件持续多久时间后,发出告警
     labels: #标签项
       severity: critical #告警级别
     annotations: #解析项, 详细解释告警信息
       summary: Prometheus target missing (instance {{ $labels.instance }})
       description: "节点down了\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"

   - alert: "测试项二:节点正常" #告警名称
     expr: up == 1 #告警条件
     for: 0m #满足告警条件持续多久时间后,发出告警
     labels: #标签项
       severity: critical #告警级别
     annotations: #解析项, 详细解释告警信息
       summary: Prometheus target missing (instance {{ $labels.instance }})
       description: "节点正常\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"

重新加载prometheus配置文件:
curl -X POST http://10.1.101.101:9090/-/reload
查看web页面:
http://10.1.101.101:9090
查看Alert中是否有了两个规则,等加载一段时间后,一个正常一个异常
在看alertmanager的web页面
http://10.1.101.101:9093
刷新,此时应当接收到告警信息
到此处说明prometheus和alertmanager的设置都已成功。

(7)、后台挂起webhook服务,并测试告警信息能否获取到。
返回webhook文件夹,将webhook服务启动。
nohup python3 -u webhook.py > webhook.log 2>&1 &

返回prometheus文件夹,进入告警文件夹,将测试的告警文件先无效化,重加载prometheus配置:
cd prometheus/alert_rules
mv TestAlert.yml TestAlert.yml.bak
curl -X POST http://10.1.101.101:9090/-/reload
刷新prometheus的web页面,此时Alert中的警告配置已经不再

返回alertmanager文件夹,重启alertmanager的服务
cd alertmanager
查询alertmanager的后台进程号,杀掉重启
执行命令:
ps -ef | grep alertmanager
返回结果中找到:
infa     22177  5485  0 13:49 pts/0    00:00:03 ./alertmanager --config.file=alertmanager.yml
执行命令:
kill -9 进程号
例如:kill -9 22177
提示已杀死。
重启alertmanager的服务:

返回告警文件夹:
cd ../prometheus/alert_rules/
将测试的告警文件名称还原:
mv TestAlert.yml.bak TestAlert.yml
重加载prometheus配置:
curl -X POST http://10.1.101.101:9090/-/reload
返回webhook文件夹,查看日志:
cd ../../webhook/
cat webhook.log
此时日志中应当有alertmanager发送的json信息。


7、export服务安装
目前在gethup中,prometheus的第三方export已经有很多了,此处仅已mysql数据库为例,如需安装其他导出器,可参考各自的gethup文档。
(1)、安装前准备
主要确认以下几点:
安装的export的服务器能访问目标数据库
目标数据库创建一个具有DBA权限的能够远程访问的账号

(2)、安装mysqld_export
上传安装包并解压, 重命名文件夹。

创建一个配置文件 .my.cnf 
vi .my.cnf
写入以下信息:
[client]
user=你的数据库用户名
password=你的数据库密码
创建一个日志文件夹:
mkdir log
启动mysqld_export:
nohup ./mysqld_exporter --config.my-cnf=.my.cnf > log/mysqld_export.log 2>&1 &
查看日志,是否有报错信息
cat log/mysqld_export.log

(3)、关联prometheus
返回prometheus的安装路径,修改配置文件,将mysqld_export关联。
增加下述信息:
  - job_name: "mysqld_export"
    static_configs:
      - targets: ["你的ip:9104"]
重新加载prometheus配置文件:
curl -X POST http://10.1.101.101:9090/-/reload
此时去prometheus的前端页面,查看是否正常接入。

8、告警配置
在此之前,已经将刚模块搭建组装,此时只需设置具体的告警规则即可。
进入prometheus/alert_rules文件夹中,定义告警信息即可,具体规则和公式,可自行查询设置。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值