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文件夹中,定义告警信息即可,具体规则和公式,可自行查询设置。