本文档详细介绍DM数据库告警系统配置的方法和技巧,包括告警概念、告警类型、告警的重要性、告警规划、告警工具、告警最佳实践、告警实施、告警配置、告警维护等内容,风哥教程参考DM官方文档《DM8监控指南》手册,适合DBA人员进行DM数据库的告警工作。
Part01-基础概念与理论知识
1.1 DM数据库告警概念
DM数据库告警是指对数据库的运行状态、性能指标、资源使用等进行实时监控,当检测到异常情况时,及时发送告警信息,提醒运维人员及时处理。
- 实时告警:实时监控数据库,及时发现异常
- 及时通知:及时发送告警信息,通知运维人员
- 问题预防:通过告警预防问题的发生
- 快速响应:快速响应告警,及时处理问题
1.2 DM数据库告警类型
DM数据库告警类型:
#
# 1. 状态告警
– 定义:监控数据库的运行状态,当状态异常时发送告警
– 告警内容:数据库状态、实例状态、会话状态等
– 告警级别:严重
– 告警方式:邮件、短信、电话
– 适用场景:数据库状态异常
#
# 2. 性能告警
– 定义:监控数据库的性能指标,当性能异常时发送告警
– 告警内容:CPU使用率、内存使用率、磁盘IO、网络IO等
– 告警级别:警告
– 告警方式:邮件、短信
– 适用场景:性能异常
#
# 3. 资源告警
– 定义:监控数据库的资源使用情况,当资源不足时发送告警
– 告警内容:表空间使用率、数据文件大小、日志文件大小等
– 告警级别:警告
– 告警方式:邮件、短信
– 适用场景:资源不足
#
# 4. 业务告警
– 定义:监控数据库的业务指标,当业务异常时发送告警
– 告警内容:业务量、响应时间、错误率等
– 告警级别:警告
– 告警方式:邮件、短信
– 适用场景:业务异常
#
# 5. 日志告警
– 定义:监控数据库的日志信息,当发现异常日志时发送告警
– 告警内容:错误日志、警告日志、审计日志等
– 告警级别:严重、警告
– 告警方式:邮件、短信、电话
– 适用场景:日志异常
风哥提示:
1.3 DM数据库告警的重要性
DM数据库告警的重要性:
- 实时监控:实时监控数据库的运行状态,及时发现异常
- 及时通知:及时发送告警信息,通知运维人员
- 问题预防:通过告警预防问题的发生
- 快速响应:快速响应告警,及时处理问题
- 降低风险:降低数据库故障的风险
- 提高效率:提高运维工作的效率
- 保障稳定:保障数据库的稳定运行
- 提升服务:提升数据库服务质量
Part02-生产环境规划与建议
2.1 DM数据库告警规划
生产环境DM数据库告警规划:
#
# 1. 告警需求分析
– 业务需求:根据业务特点确定告警需求
– 技术需求:根据技术要求确定告警方案
– 时间要求:确定告警的时间要求
– 成本预算:确定告警的预算
#
# 2. 告警目标设定
– 实时性:确定告警的实时性要求
– 准确性:确定告警的准确性要求
– 完整性:确定告警的完整性要求
– 可用性:确定告警的可用性要求 学习交流加群风哥微信: itpux-com
#
# 3. 告警方案选择
– 状态告警:监控数据库的运行状态
– 性能告警:监控数据库的性能指标
– 资源告警:监控数据库的资源使用
– 业务告警:监控数据库的业务指标
– 日志告警:监控数据库的日志信息
#
# 4. 告警技术选型
– Zabbix:开源监控系统,支持告警
– Prometheus:开源监控系统,支持告警
– Grafana:开源可视化工具,支持告警
– DM自带的告警工具:DM自带的告警工具
#
# 5. 告警资源规划
– 硬件资源:告警服务器、存储、网络等
– 软件资源:告警软件、数据库等
– 人力资源:告警实施和维护人员
– 时间资源:告警实施和维护时间
#
# 6. 告警流程设计
– 告警采集:采集告警数据
– 告警分析:分析告警数据
– 告警发送:发送告警信息
– 告警处理:处理告警信息
#
# 7. 告警风险控制
– 风险识别:识别告警过程中的风险
– 风险评估:评估风险的影响和可能性
– 风险应对:制定风险应对措施
– 应急预案:制定应急预案
#
# 8. 告警文档与培训
– 告警文档:告警方案、操作手册等
– 人员培训:对相关人员进行培训
– 演练计划:定期进行告警演练
2.2 DM数据库告警工具
DM数据库告警工具:
- Zabbix:开源监控系统,支持多种告警方式
- Prometheus:开源监控系统,支持Alertmanager告警
- Grafana:开源可视化工具,支持告警
- DM自带的告警工具:DM自带的告警工具,简单易用
学习交流加群风哥QQ113257174
2.3 DM数据库告警最佳实践
DM数据库告警最佳实践:
#
# 1. 告警准备
– 详细评估:详细评估告警需求
– 工具选择:选择合适的告警工具
– 环境准备:准备告警环境和工具
– 文档准备:准备告警文档
#
# 2. 告警实施
– 分步实施:采用分步实施的策略
– 规则验证:每步完成后验证告警规则
– 日志记录:详细记录告警过程
– 告警测试:测试告警功能
#
# 3. 告警测试
– 全面测试:全面测试告警功能
– 性能测试:测试告警性能
– 功能测试:测试告警功能
– 数据测试:测试告警数据
#
# 4. 告警配置
– 告警规则:配置告警规则
– 告警级别:配置告警级别
– 告警方式:配置告警方式
– 告警通知:配置告警通知
#
# 5. 告警优化
– 规则优化:优化告警规则
– 级别优化:优化告警级别
– 方式优化:优化告警方式
– 通知优化:优化告警通知
#
# 6. 告警维护
– 告警监控:监控告警系统的运行
– 问题处理:及时处理告警问题
– 规则调优:持续优化告警规则
– 文档更新:更新告警文档
#
# 7. 告警管理
– 责任明确:明确告警管理的责任
– 流程规范:建立规范的告警管理流程
– 持续改进:根据实际情况持续改进 更多视频教程www.fgedu.net.cn
– 经验总结:总结告警管理的经验
Part03-生产环境项目实施方案
3.1 DM数据库告警实施
3.1.1 Zabbix告警实施
#
# 1. 环境准备
##
# 告警服务器环境
– 主机名:fgedu-zabbix
– IP地址:192.168.1.100
– 操作系统:Oracle Linux 9.3
– 数据库:MySQL 8.0
##
# 被告警服务器环境
– 主机名:fgedu-db
– IP地址:192.168.1.200
– 操作系统:Oracle Linux 9.3
– 数据库:DM8
#
# 2. 安装Zabbix服务器
##
# 安装Zabbix仓库
$ rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/9/x86_64/zabbix-release-6.0-4.el9.noarch.rpm
$ yum clean all
##
# 安装Zabbix服务器
$ yum install zabbix-server-mysql zabbix-web-mysql zabbix-apache-conf zabbix-sql-scripts zabbix-sender
zabbix-agent -y
##
# 安装MySQL数据库
$ yum install mysql-server -y
$ systemctl start mysqld
$ systemctl enable mysqld
##
# 创建Zabbix数据库
$ mysql -u root -p
mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
mysql> create user zabbix@fgedu.localhost identified by ‘Zabbix123’;
mysql> grant all privileges on zabbix.* to zabbix@fgedu.localhost;
mysql> flush privileges;
mysql> exit;
##
# 导入Zabbix数据库
$ zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql –default-character-set=utf8mb4 -uzabbix -p
zabbix
##
# 配置Zabbix服务器 更多学习教程公众号风哥教程itpux_com
$ vi /etc/zabbix/zabbix_server.conf
DBHost=fgedu.localhost
DBName=zabbix
DBUser=zabbix
DBPassword=Zabbix123
##
# 启动Zabbix服务器
$ systemctl start zabbix-server
$ systemctl enable zabbix-server
$ systemctl start httpd
$ systemctl enable httpd
$ systemctl start zabbix-agent
$ systemctl enable zabbix-agent
##
# 访问Zabbix Web界面
http://192.168.1.100/zabbix
# 默认用户名:Admin
# 默认密码:zabbix
#
# 3. 配置Zabbix告警
##
# 配置邮件告警
# Zabbix Web界面操作:
# 步骤1:管理 – 报警媒介类型 – Email
# 步骤2:SMTP服务器:smtp.fgedu.net.cn
# 步骤3:SMTP端口:587
# 步骤4:SMTP HELO:fgedu.net.cn
# 步骤5:SMTP邮箱:monitor@fgedu.net.cn
# 步骤6:认证:TLS
# 步骤7:用户名:monitor@fgedu.net.cn
# 步骤8:密码:******
# 步骤9:更新
##
# 配置短信告警
# Zabbix Web界面操作: from DB视频:www.itpux.com
# 步骤1:管理 – 报警媒介类型 – 创建媒体类型
# 步骤2:名称:SMS
# 步骤3:类型:脚本
# 步骤4:脚本名称:sms_alert.sh
# 步骤5:更新
##
# 创建短信告警脚本
#!/bin/bash
# sms_alert.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
PHONE=$1
SUBJECT=$2
MESSAGE=$3
# 调用短信网关API
curl -X POST http://sms.fgedu.net.cn/api/send \
-d “phone=$PHONE” \
-d “message=$SUBJECT: $MESSAGE”
##
# 配置微信告警
# Zabbix Web界面操作:
# 步骤1:管理 – 报警媒介类型 – 创建媒体类型
# 步骤2:名称:WeChat
# 步骤3:类型:脚本
# 步骤4:脚本名称:wechat_alert.sh
# 步骤5:更新
##
# 创建微信告警脚本
#!/bin/bash
# wechat_alert.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
USER=$1
SUBJECT=$2
MESSAGE=$3
# 调用微信企业号API
curl -X POST https://qyapi.weixin.qq.com/cgi-bin/message/send \
-d “{
\”touser\”: \”$USER\”,
\”msgtype\”: \”text\”,
\”agentid\”: 123456,
\”text\”: {
\”content\”: \”$SUBJECT: $MESSAGE\”
}
}”
#
# 4. 配置告警规则
##
# 创建触发器
# Zabbix Web界面操作:
# 步骤1:配置 – 主机 – fgedu-db – 触发器 – 创建触发器
# 步骤2:名称:DM数据库状态异常
# 步骤3:表达式:last(/fgedu-db/dm.status)<>OPEN
# 步骤4:严重性:严重
# 步骤5:添加 – 完成
##
# 创建动作
# Zabbix Web界面操作:
# 步骤1:配置 – 动作 – 触发器动作 – 创建动作
# 步骤2:名称:DM数据库告警
# 步骤3:条件:触发器=DM数据库状态异常
# 步骤4:操作:发送消息到用户
# 步骤5:添加 – 更新
#
# 5. 配置告警通知
##
# 配置用户告警
# Zabbix Web界面操作:
# 步骤1:管理 – 用户 – Admin – 报警媒介
# 步骤2:类型:Email
# 步骤3:收件人:dba@fgedu.net.cn
# 步骤4:当发送时:所有严重性
# 步骤5:添加 – 更新
##
# 配置用户组告警
# Zabbix Web界面操作:
# 步骤1:管理 – 用户组 – Zabbix administrators – 权限
# 步骤2:添加主机:fgedu-db
# 步骤3:更新
#
# 6. 测试告警
##
# 测试邮件告警
# Zabbix Web界面操作:
# 步骤1:管理 – 报警媒介类型 – Email – 测试
# 步骤2:输入收件人地址
# 步骤3:发送测试邮件
##
# 测试短信告警
# Zabbix Web界面操作:
# 步骤1:管理 – 报警媒介类型 – SMS – 测试
# 步骤2:输入手机号码
# 步骤3:发送测试短信
##
# 测试微信告警
# Zabbix Web界面操作:
# 步骤1:管理 – 报警媒介类型 – WeChat – 测试
# 步骤2:输入微信用户
# 步骤3:发送测试微信
##
# 测试触发器告警
# 停止DM数据库服务
# 查看告警信息
# 启动DM数据库服务
3.1.2 Prometheus告警实施
#
# 1. 环境准备
##
# 告警服务器环境
– 主机名:fgedu-prometheus
– IP地址:192.168.1.100
– 操作系统:Oracle Linux 9.3
##
# 被告警服务器环境
– 主机名:fgedu-db
– IP地址:192.168.1.200
– 操作系统:Oracle Linux 9.3
– 数据库:DM8
#
# 2. 安装Prometheus
##
# 下载Prometheus
$ cd /tmp
$ wget https://github.com/prometheus/prometheus/releases/download/v2.45.0/prometheus-2.45.0.linux-amd64.tar.gz
$ tar -xzf prometheus-2.45.0.linux-amd64.tar.gz
$ mv prometheus-2.45.0.linux-amd64 /opt/prometheus
##
# 配置Prometheus
$ vi /opt/prometheus/prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
rule_files:
– “/opt/prometheus/alerts.yml”
alerting:
alertmanagers:
– static_configs:
– targets: [‘fgedu.localhost:9093’]
scrape_configs:
– job_name: ‘dm_database’
static_configs:
– targets: [‘192.168.1.200:9100’]
##
# 创建Prometheus服务
$ vi /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus
After=network.target
[Service]
Type=simple
User=prometheus
ExecStart=/opt/prometheus/prometheus –config.file=/opt/prometheus/prometheus.yml
–storage.tsdb.path=/opt/prometheus/data
Restart=on-failure
[Install]
WantedBy=multi-user.target
##
# 启动Prometheus
$ useradd prometheus
$ chown -R prometheus:prometheus /opt/prometheus
$ systemctl daemon-reload
$ systemctl start prometheus
$ systemctl enable prometheus
##
# 访问Prometheus Web界面
http://192.168.1.100:9090
#
# 3. 安装Alertmanager
##
# 下载Alertmanager
$ cd /tmp
$ wget https://github.com/prometheus/alertmanager/releases/download/v0.26.0/alertmanager-0.26.0.linux-amd64.tar.gz
$ tar -xzf alertmanager-0.26.0.linux-amd64.tar.gz
$ mv alertmanager-0.26.0.linux-amd64 /opt/alertmanager
##
# 配置Alertmanager
$ vi /opt/alertmanager/alertmanager.yml
global:
resolve_timeout: 5m
route:
group_by: [‘alertname’]
group_wait: 10s
group_interval: 10s
repeat_interval: 1h
receiver: ’email’
receivers:
– name: ’email’
email_configs:
– to: ‘dba@fgedu.net.cn’
from: ‘monitor@fgedu.net.cn’
smarthost: ‘smtp.fgedu.net.cn:587’
auth_username: ‘monitor@fgedu.net.cn’
auth_password: ‘******’
require_tls: true
– name: ‘wechat’
wechat_configs:
– corp_id: ‘wx1234567890’
api_secret: ‘******’
to_user: ‘fengge’
agent_id: ‘123456’
inhibit_rules:
– source_match:
severity: ‘critical’
target_match:
severity: ‘warning’
equal: [‘alertname’, ‘instance’]
##
# 创建Alertmanager服务
$ vi /etc/systemd/system/alertmanager.service
[Unit]
Description=Alertmanager
After=network.target
[Service]
Type=simple
User=prometheus
ExecStart=/opt/alertmanager/alertmanager –config.file=/opt/alertmanager/alertmanager.yml
–storage.path=/opt/alertmanager/data
Restart=on-failure
[Install]
WantedBy=multi-user.target
##
# 启动Alertmanager
$ chown -R prometheus:prometheus /opt/alertmanager
$ systemctl daemon-reload
$ systemctl start alertmanager
$ systemctl enable alertmanager
##
# 访问Alertmanager Web界面
http://192.168.1.100:9093
#
# 4. 配置告警规则
##
# 创建告警规则文件
$ vi /opt/prometheus/alerts.yml
groups:
– name: dm_database
interval: 30s
rules:
– alert: DMDatabaseStatus
expr: dm_status == 0
for: 1m
labels:
severity: critical
annotations:
summary: “DM数据库状态异常”
description: “DM数据库状态异常,实例: {{ $labels.instance }}”
– alert: DMDatabaseSessionsHigh
expr: dm_sessions > 1000
for: 5m
labels:
severity: warning
annotations:
summary: “DM数据库会话数过高”
description: “DM数据库会话数过高,实例: {{ $labels.instance }},当前值: {{ $value }}”
– alert: DMDatabaseCPUHigh
expr: dm_cpu > 80
for: 5m
labels:
severity: warning
annotations:
summary: “DM数据库CPU使用率过高”
description: “DM数据库CPU使用率过高,实例: {{ $labels.instance }},当前值: {{ $value }}”
– alert: DMDatabaseMemoryHigh
expr: dm_memory > 80
for: 5m
labels:
severity: warning
annotations:
summary: “DM数据库内存使用率过高”
description: “DM数据库内存使用率过高,实例: {{ $labels.instance }},当前值: {{ $value }}”
##
# 重启Prometheus
$ systemctl restart prometheus
#
# 5. 验证告警
##
# 查看告警规则
# Prometheus Web界面操作:
# http://192.168.1.100:9090
# Status – Rules
##
# 查看告警状态
# Prometheus Web界面操作:
# http://192.168.1.100:9090
# Alerts
##
# 查看Alertmanager
# Alertmanager Web界面操作:
# http://192.168.1.100:9093
##
# 测试告警
# 停止DM数据库服务
# 查看告警信息
# 启动DM数据库服务
3.2 DM数据库告警配置
3.2.1 告警规则配置
#
# 1. 状态告警规则
##
# 数据库状态告警
– 告警名称:DM数据库状态异常
– 告警条件:dm_status<>OPEN
– 告警级别:严重
– 告警方式:邮件、短信、电话
– 告警频率:每5分钟
##
# 实例状态告警
– 告警名称:DM实例状态异常
– 告警条件:dm_instance_status<>OPEN
– 告警级别:严重
– 告警方式:邮件、短信、电话
– 告警频率:每5分钟
##
# 会话状态告警
– 告警名称:DM会话数过高
– 告警条件:dm_sessions>1000
– 告警级别:警告
– 告警方式:邮件、短信
– 告警频率:每10分钟
#
# 2. 性能告警规则
##
# CPU使用率告警
– 告警名称:DM数据库CPU使用率过高
– 告警条件:dm_cpu_usage>80%
– 告警级别:警告
– 告警方式:邮件、短信
– 告警频率:每10分钟
##
# 内存使用率告警
– 告警名称:DM数据库内存使用率过高
– 告警条件:dm_memory_usage>80%
– 告警级别:警告
– 告警方式:邮件、短信
– 告警频率:每10分钟
##
# 磁盘IO告警
– 告警名称:DM数据库磁盘IO过高
– 告警条件:dm_disk_io>10000
– 告警级别:警告
– 告警方式:邮件、短信
– 告警频率:每10分钟
##
# 网络IO告警
– 告警名称:DM数据库网络IO过高
– 告警条件:dm_network_io>10000
– 告警级别:警告
– 告警方式:邮件、短信
– 告警频率:每10分钟
#
# 3. 资源告警规则
##
# 表空间使用率告警
– 告警名称:DM数据库表空间使用率过高
– 告警条件:dm_tablespace_usage>80%
– 告警级别:警告
– 告警方式:邮件、短信
– 告警频率:每10分钟
##
# 数据文件大小告警
– 告警名称:DM数据库数据文件过大
– 告警条件:dm_datafile_size>100GB
– 告警级别:警告
– 告警方式:邮件、短信
– 告警频率:每10分钟
##
# 日志文件大小告警
– 告警名称:DM数据库日志文件过大
– 告警条件:dm_logfile_size>10GB
– 告警级别:警告
– 告警方式:邮件、短信
– 告警频率:每10分钟
#
# 4. 业务告警规则
##
# 业务量告警
– 告警名称:DM数据库业务量异常
– 告警条件:dm_business_volume>10000
– 告警级别:警告
– 告警方式:邮件、短信
– 告警频率:每10分钟
##
# 响应时间告警
– 告警名称:DM数据库响应时间过长
– 告警条件:dm_response_time>1秒
– 告警级别:警告
– 告警方式:邮件、短信
– 告警频率:每10分钟
##
# 错误率告警
– 告警名称:DM数据库错误率过高
– 告警条件:dm_error_rate>1%
– 告警级别:警告
– 告警方式:邮件、短信
– 告警频率:每10分钟
#
# 5. 日志告警规则
##
# 错误日志告警
– 告警名称:DM数据库错误日志异常
– 告警条件:dm_error_log不为空
– 告警级别:严重
– 告警方式:邮件、短信、电话
– 告警频率:每5分钟
##
# 警告日志告警
– 告警名称:DM数据库警告日志异常
– 告警条件:dm_warning_log不为空
– 告警级别:警告
– 告警方式:邮件、短信
– 告警频率:每10分钟
##
# 审计日志告警
– 告警名称:DM数据库审计日志异常
– 告警条件:dm_audit_log不为空
– 告警级别:警告
– 告警方式:邮件、短信
– 告警频率:每10分钟
3.2.2 告警通知配置
#
# 1. 邮件通知配置
##
# SMTP服务器配置
– SMTP服务器:smtp.fgedu.net.cn
– SMTP端口:587
– 发件人:monitor@fgedu.net.cn
– 收件人:dba@fgedu.net.cn
– 认证方式:TLS
– 用户名:monitor@fgedu.net.cn
– 密码:******
##
# 邮件模板配置
Subject: [告警] {ALERT_NAME}
Severity: {ALERT_LEVEL}
Instance: {INSTANCE}
Time: {ALERT_TIME}
Message: {ALERT_MESSAGE}
#
# 2. 短信通知配置
##
# 短信网关配置
– 短信网关:sms.fgedu.net.cn
– API接口:http://sms.fgedu.net.cn/api/send
– 接收人:13800138000
– 认证方式:API Key
##
# 短信模板配置
【告警】{ALERT_NAME}
级别:{ALERT_LEVEL}
实例:{INSTANCE}
时间:{ALERT_TIME}
消息:{ALERT_MESSAGE}
#
# 3. 微信通知配置
##
# 微信企业号配置
– 微信企业号:wx1234567890
– 应用ID:123456
– 接收人:fengge
– 认证方式:Secret
##
# 微信模板配置
【告警】{ALERT_NAME}
级别:{ALERT_LEVEL}
实例:{INSTANCE}
时间:{ALERT_TIME}
消息:{ALERT_MESSAGE}
#
# 4. 电话通知配置
##
# 电话通知配置
– 电话网关:phone.fgedu.net.cn
– API接口:http://phone.fgedu.net.cn/api/call
– 接收人:13800138000
– 认证方式:API Key
##
# 电话模板配置
【告警】{ALERT_NAME}
级别:{ALERT_LEVEL}
实例:{INSTANCE}
时间:{ALERT_TIME}
消息:{ALERT_MESSAGE}
#
# 5. 告警通知策略
##
# 告警级别策略
– 严重级别:邮件、短信、电话
– 警告级别:邮件、短信
– 信息级别:邮件
##
# 告警时间策略
– 工作时间:邮件、短信
– 非工作时间:邮件、短信、电话
##
# 告警频率策略
– 严重告警:每5分钟
– 警告知警:每10分钟
– 信息告警:每30分钟
3.3 DM数据库告警维护
3.3.1 告警维护计划
#
# 1. 日常维护
– 告警检查:检查告警系统运行状态
– 规则检查:检查告警规则配置
– 通知检查:检查告警通知情况
– 日志检查:检查告警日志信息
#
# 2. 定期维护
– 系统更新:定期更新告警系统
– 规则优化:定期优化告警规则
– 通知优化:定期优化告警通知
– 性能优化:定期优化告警系统性能
#
# 3. 维护任务
##
# 告警系统维护
– 系统检查:检查告警系统运行状态
– 数据备份:备份告警数据
– 系统更新:更新告警系统
– 性能优化:优化告警系统性能
##
# 告警规则维护
– 规则检查:检查告警规则配置
– 规则优化:优化告警规则
– 规则测试:测试告警规则
– 规则更新:更新告警规则
##
# 告警通知维护
– 通知检查:检查告警通知情况
– 通知优化:优化告警通知
– 通知测试:测试告警通知
– 通知更新:更新告警通知
##
# 告警日志维护
– 日志检查:检查告警日志信息
– 日志分析:分析告警日志
– 日志归档:归档告警日志
– 日志清理:清理告警日志
#
# 4. 维护工具
– 告警工具:监控告警系统状态
– 备份工具:备份告警数据
– 分析工具:分析告警日志
– 优化工具:优化告警系统
#
# 5. 维护文档
– 维护计划:制定详细的维护计划
– 维护记录:记录维护过程和结果
– 问题记录:记录维护中发现的问题
– 改进措施:记录改进措施
3.3.2 告警维护执行
#
# 1. 日常维护
##
# 告警检查
$ /dm/scripts/check_alert.sh
##
# 规则检查
$ /dm/scripts/check_alert_rules.sh
##
# 通知检查
$ /dm/scripts/check_alert_notification.sh
##
# 日志检查
$ /dm/scripts/check_alert_logs.sh
#
# 2. 定期维护
##
# 系统更新
$ yum update zabbix-server-mysql zabbix-web-mysql zabbix-agent -y
$ systemctl restart zabbix-server
$ systemctl restart zabbix-agent
##
# 规则优化
# Zabbix Web界面操作:
# 配置 – 触发器 – 优化告警规则
##
# 通知优化
# Zabbix Web界面操作:
# 管理 – 报警媒介类型 – 优化告警通知
##
# 性能优化
$ vi /etc/zabbix/zabbix_server.conf
# 优化参数
StartPollers=10
StartPingers=5
StartTrappers=5
StartDiscoverers=5
#
# 3. 告警系统维护
##
# 系统检查
$ systemctl status zabbix-server
$ systemctl status zabbix-agent
$ systemctl status httpd
##
# 数据备份
#!/bin/bash
# backup_alert_data.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
DATE=$(date +%Y%m%d)
BACKUP_DIR=/dm/backup/alert
mkdir -p $BACKUP_DIR
# 备份告警数据
mysqldump -u zabbix -p zabbix > $BACKUP_DIR/zabbix_alert_backup_$DATE.sql
echo “告警数据备份完成”
##
# 系统更新
$ yum update zabbix-server-mysql zabbix-web-mysql zabbix-agent -y
##
# 性能优化
$ vi /etc/zabbix/zabbix_server.conf
# 优化参数
CacheSize=256M
HistoryCacheSize=64M
HistoryIndexCacheSize=16M
TrendCacheSize=64M
ValueCacheSize=64M
#
# 4. 告警规则维护
##
# 规则检查
# Zabbix Web界面操作:
# 配置 – 触发器 – 检查告警规则
##
# 规则优化
# Zabbix Web界面操作:
# 配置 – 触发器 – 优化告警规则
##
# 规则测试
# Zabbix Web界面操作:
# 监控 – 最新数据 – 测试告警规则
##
# 规则更新
# Zabbix Web界面操作:
# 配置 – 触发器 – 更新告警规则
#
# 5. 告警通知维护
##
# 通知检查
# Zabbix Web界面操作:
# 管理 – 报警媒介类型 – 检查告警通知
##
# 通知优化
# Zabbix Web界面操作:
# 管理 – 报警媒介类型 – 优化告警通知
##
# 通知测试
# Zabbix Web界面操作:
# 管理 – 报警媒介类型 – 测试告警通知
##
# 通知更新
# Zabbix Web界面操作:
# 管理 – 报警媒介类型 – 更新告警通知
#
# 6. 告警日志维护
##
# 日志检查
$ tail -f /var/log/zabbix/zabbix_server.log
$ tail -f /var/log/zabbix/zabbix_agentd.log
##
# 日志分析
#!/bin/bash
# analyze_alert_logs.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
DATE=$(date +%Y%m%d)
LOG_FILE=/var/log/zabbix/zabbix_server.log
# 分析告警日志
grep “ALERT” $LOG_FILE | grep “$DATE” > /dm/logs/alert_analysis_$DATE.log
echo “告警日志分析完成”
##
# 日志归档
#!/bin/bash
# archive_alert_logs.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
DATE=$(date +%Y%m%d)
ARCHIVE_DIR=/dm/archive/alert
mkdir -p $ARCHIVE_DIR
# 归档告警日志
tar -czf $ARCHIVE_DIR/zabbix_alert_logs_$DATE.tar.gz /var/log/zabbix/*.log
echo “告警日志归档完成”
##
# 日志清理
#!/bin/bash
# clean_alert_logs.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
# 清理30天前的日志
find /var/log/zabbix -name “*.log” -mtime +30 -delete
echo “告警日志清理完成”
#
# 7. 维护文档
##
# 维护计划
$ vi /dm/docs/alert_maintenance_plan.md
##
# 维护记录
$ vi /dm/docs/alert_maintenance_log.md
##
# 问题记录
$ vi /dm/docs/alert_issue_log.md
##
# 改进措施
$ vi /dm/docs/alert_improvement_plan.md
Part04-生产案例与实战讲解
4.1 DM数据库Zabbix告警案例
以下是一个Zabbix告警的案例:
# Zabbix告警案例
##
# 场景描述
某企业需要为DM数据库搭建Zabbix告警系统,实现对数据库的实时告警和通知。
##
# 实施步骤
# 1. 环境准备
#
# 告警服务器环境
– 主机名:fgedu-zabbix
– IP地址:192.168.1.100
– 操作系统:Oracle Linux 9.3
– 数据库:MySQL 8.0
– 内存:8GB
– CPU:4核
– 磁盘:100GB
#
# 被告警服务器环境
– 主机名:fgedu-db
– IP地址:192.168.1.200
– 操作系统:Oracle Linux 9.3
– 数据库:DM8
– 内存:64GB
– CPU:16核
– 磁盘:1TB
# 2. 安装Zabbix服务器
##
# 安装Zabbix仓库
$ rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/9/x86_64/zabbix-release-6.0-4.el9.noarch.rpm
$ yum clean all
##
# 安装Zabbix服务器
$ yum install zabbix-server-mysql zabbix-web-mysql zabbix-apache-conf zabbix-sql-scripts zabbix-sender
zabbix-agent -y
##
# 安装MySQL数据库
$ yum install mysql-server -y
$ systemctl start mysqld
$ systemctl enable mysqld
##
# 创建Zabbix数据库
$ mysql -u root -p
mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
mysql> create user zabbix@fgedu.localhost identified by ‘Zabbix123’;
mysql> grant all privileges on zabbix.* to zabbix@fgedu.localhost;
mysql> flush privileges;
mysql> exit;
##
# 导入Zabbix数据库
$ zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql –default-character-set=utf8mb4 -uzabbix -p
zabbix
##
# 配置Zabbix服务器
$ vi /etc/zabbix/zabbix_server.conf
DBHost=fgedu.localhost
DBName=zabbix
DBUser=zabbix
DBPassword=Zabbix123
CacheSize=256M
HistoryCacheSize=64M
HistoryIndexCacheSize=16M
TrendCacheSize=64M
ValueCacheSize=64M
StartPollers=10
StartPingers=5
StartTrappers=5
StartDiscoverers=5
##
# 启动Zabbix服务器
$ systemctl start zabbix-server
$ systemctl enable zabbix-server
$ systemctl start httpd
$ systemctl enable httpd
$ systemctl start zabbix-agent
$ systemctl enable zabbix-agent
##
# 访问Zabbix Web界面
http://192.168.1.100/zabbix
# 默认用户名:Admin
# 默认密码:zabbix
# 3. 配置Zabbix告警
##
# 配置邮件告警
# Zabbix Web界面操作:
# 步骤1:管理 – 报警媒介类型 – Email
# 步骤2:SMTP服务器:smtp.fgedu.net.cn
# 步骤3:SMTP端口:587
# 步骤4:SMTP HELO:fgedu.net.cn
# 步骤5:SMTP邮箱:monitor@fgedu.net.cn
# 步骤6:认证:TLS
# 步骤7:用户名:monitor@fgedu.net.cn
# 步骤8:密码:******
# 步骤9:更新
##
# 配置短信告警
# Zabbix Web界面操作:
# 步骤1:管理 – 报警媒介类型 – 创建媒体类型
# 步骤2:名称:SMS
# 步骤3:类型:脚本
# 步骤4:脚本名称:sms_alert.sh
# 步骤5:更新
##
# 创建短信告警脚本
#!/bin/bash
# sms_alert.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
PHONE=$1
SUBJECT=$2
MESSAGE=$3
# 调用短信网关API
curl -X POST http://sms.fgedu.net.cn/api/send \
-d “phone=$PHONE” \
-d “message=$SUBJECT: $MESSAGE”
##
# 配置微信告警
# Zabbix Web界面操作:
# 步骤1:管理 – 报警媒介类型 – 创建媒体类型
# 步骤2:名称:WeChat
# 步骤3:类型:脚本
# 步骤4:脚本名称:wechat_alert.sh
# 步骤5:更新
##
# 创建微信告警脚本
#!/bin/bash
# wechat_alert.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
USER=$1
SUBJECT=$2
MESSAGE=$3
# 调用微信企业号API
curl -X POST https://qyapi.weixin.qq.com/cgi-bin/message/send \
-d “{
\”touser\”: \”$USER\”,
\”msgtype\”: \”text\”,
\”agentid\”: 123456,
\”text\”: {
\”content\”: \”$SUBJECT: $MESSAGE\”
}
}”
# 4. 配置告警规则
##
# 创建触发器
# Zabbix Web界面操作:
# 步骤1:配置 – 主机 – fgedu-db – 触发器 – 创建触发器
# 步骤2:名称:DM数据库状态异常
# 步骤3:表达式:last(/fgedu-db/dm.status)<>OPEN
# 步骤4:严重性:严重
# 步骤5:添加 – 完成
##
# 创建动作
# Zabbix Web界面操作:
# 步骤1:配置 – 动作 – 触发器动作 – 创建动作
# 步骤2:名称:DM数据库告警
# 步骤3:条件:触发器=DM数据库状态异常
# 步骤4:操作:发送消息到用户
# 步骤5:添加 – 更新
# 5. 配置告警通知
##
# 配置用户告警
# Zabbix Web界面操作:
# 步骤1:管理 – 用户 – Admin – 报警媒介
# 步骤2:类型:Email
# 步骤3:收件人:dba@fgedu.net.cn
# 步骤4:当发送时:所有严重性
# 步骤5:添加 – 更新
##
# 配置用户组告警
# Zabbix Web界面操作:
# 步骤1:管理 – 用户组 – Zabbix administrators – 权限
# 步骤2:添加主机:fgedu-db
# 步骤3:更新
# 6. 测试告警
##
# 测试邮件告警
# Zabbix Web界面操作:
# 步骤1:管理 – 报警媒介类型 – Email – 测试
# 步骤2:输入收件人地址
# 步骤3:发送测试邮件
##
# 测试短信告警
# Zabbix Web界面操作:
# 步骤1:管理 – 报警媒介类型 – SMS – 测试
# 步骤2:输入手机号码
# 步骤3:发送测试短信
##
# 测试微信告警
# Zabbix Web界面操作:
# 步骤1:管理 – 报警媒介类型 – WeChat – 测试
# 步骤2:输入微信用户
# 步骤3:发送测试微信
##
# 测试触发器告警
# 停止DM数据库服务
# 查看告警信息
# 启动DM数据库服务
# 7. 效果评估
##
# 告警效果
– 告警系统正常运行
– 告警规则配置正确
– 告警及时发送
##
# 通知效果
– 邮件通知及时
– 短信通知及时
– 微信通知及时
##
# 处理效果
– 告警处理及时
– 问题解决及时
– 系统恢复及时
4.2 DM数据库Prometheus告警案例
以下是一个Prometheus告警的案例:
# Prometheus告警案例
##
# 场景描述
某企业需要为DM数据库搭建Prometheus告警系统,实现对数据库的实时告警和通知。
##
# 实施步骤
# 1. 环境准备
#
# 告警服务器环境
– 主机名:fgedu-prometheus
– IP地址:192.168.1.100
– 操作系统:Oracle Linux 9.3
– 内存:8GB
– CPU:4核
– 磁盘:100GB
#
# 被告警服务器环境
– 主机名:fgedu-db
– IP地址:192.168.1.200
– 操作系统:Oracle Linux 9.3
– 数据库:DM8
– 内存:64GB
– CPU:16核
– 磁盘:1TB
# 2. 安装Prometheus
##
# 下载Prometheus
$ cd /tmp
$ wget https://github.com/prometheus/prometheus/releases/download/v2.45.0/prometheus-2.45.0.linux-amd64.tar.gz
$ tar -xzf prometheus-2.45.0.linux-amd64.tar.gz
$ mv prometheus-2.45.0.linux-amd64 /opt/prometheus
##
# 配置Prometheus
$ vi /opt/prometheus/prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
rule_files:
– “/opt/prometheus/alerts.yml”
alerting:
alertmanagers:
– static_configs:
– targets: [‘fgedu.localhost:9093’]
scrape_configs:
– job_name: ‘dm_database’
static_configs:
– targets: [‘192.168.1.200:9100’]
labels:
instance: ‘fgedu-db’
##
# 创建Prometheus服务
$ vi /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus
After=network.target
[Service]
Type=simple
User=prometheus
ExecStart=/opt/prometheus/prometheus –config.file=/opt/prometheus/prometheus.yml
–storage.tsdb.path=/opt/prometheus/data –web.console.templates=/opt/prometheus/consoles
–web.console.libraries=/opt/prometheus/console_libraries
Restart=on-failure
[Install]
WantedBy=multi-user.target
##
# 启动Prometheus
$ useradd prometheus
$ chown -R prometheus:prometheus /opt/prometheus
$ systemctl daemon-reload
$ systemctl start prometheus
$ systemctl enable prometheus
##
# 访问Prometheus Web界面
http://192.168.1.100:9090
# 3. 安装Alertmanager
##
# 下载Alertmanager
$ cd /tmp
$ wget https://github.com/prometheus/alertmanager/releases/download/v0.26.0/alertmanager-0.26.0.linux-amd64.tar.gz
$ tar -xzf alertmanager-0.26.0.linux-amd64.tar.gz
$ mv alertmanager-0.26.0.linux-amd64 /opt/alertmanager
##
# 配置Alertmanager
$ vi /opt/alertmanager/alertmanager.yml
global:
resolve_timeout: 5m
route:
group_by: [‘alertname’]
group_wait: 10s
group_interval: 10s
repeat_interval: 1h
receiver: ’email’
receivers:
– name: ’email’
email_configs:
– to: ‘dba@fgedu.net.cn’
from: ‘monitor@fgedu.net.cn’
smarthost: ‘smtp.fgedu.net.cn:587’
auth_username: ‘monitor@fgedu.net.cn’
auth_password: ‘******’
require_tls: true
– name: ‘wechat’
wechat_configs:
– corp_id: ‘wx1234567890’
api_secret: ‘******’
to_user: ‘fengge’
agent_id: ‘123456’
inhibit_rules:
– source_match:
severity: ‘critical’
target_match:
severity: ‘warning’
equal: [‘alertname’, ‘instance’]
##
# 创建Alertmanager服务
$ vi /etc/systemd/system/alertmanager.service
[Unit]
Description=Alertmanager
After=network.target
[Service]
Type=simple
User=prometheus
ExecStart=/opt/alertmanager/alertmanager –config.file=/opt/alertmanager/alertmanager.yml
–storage.path=/opt/alertmanager/data
Restart=on-failure
[Install]
WantedBy=multi-user.target
##
# 启动Alertmanager
$ chown -R prometheus:prometheus /opt/alertmanager
$ systemctl daemon-reload
$ systemctl start alertmanager
$ systemctl enable alertmanager
##
# 访问Alertmanager Web界面
http://192.168.1.100:9093
# 4. 配置告警规则
##
# 创建告警规则文件
$ vi /opt/prometheus/alerts.yml
groups:
– name: dm_database
interval: 30s
rules:
– alert: DMDatabaseStatus
expr: dm_status == 0
for: 1m
labels:
severity: critical
annotations:
summary: “DM数据库状态异常”
description: “DM数据库状态异常,实例: {{ $labels.instance }}”
– alert: DMDatabaseSessionsHigh
expr: dm_sessions > 1000
for: 5m
labels:
severity: warning
annotations:
summary: “DM数据库会话数过高”
description: “DM数据库会话数过高,实例: {{ $labels.instance }},当前值: {{ $value }}”
– alert: DMDatabaseCPUHigh
expr: dm_cpu > 80
for: 5m
labels:
severity: warning
annotations:
summary: “DM数据库CPU使用率过高”
description: “DM数据库CPU使用率过高,实例: {{ $labels.instance }},当前值: {{ $value }}”
– alert: DMDatabaseMemoryHigh
expr: dm_memory > 80
for: 5m
labels:
severity: warning
annotations:
summary: “DM数据库内存使用率过高”
description: “DM数据库内存使用率过高,实例: {{ $labels.instance }},当前值: {{ $value }}”
##
# 重启Prometheus
$ systemctl restart prometheus
# 5. 验证告警
##
# 查看告警规则
# Prometheus Web界面操作:
# http://192.168.1.100:9090
# Status – Rules
##
# 查看告警状态
# Prometheus Web界面操作:
# http://192.168.1.100:9090
# Alerts
##
# 查看Alertmanager
# Alertmanager Web界面操作:
# http://192.168.1.100:9093
##
# 测试告警
# 停止DM数据库服务
# 查看告警信息
# 启动DM数据库服务
# 6. 效果评估
##
# 告警效果
– 告警系统正常运行
– 告警规则配置正确
– 告警及时发送
##
# 通知效果
– 邮件通知及时
– 微信通知及时
##
# 处理效果
– 告警处理及时
– 问题解决及时
– 系统恢复及时
4.3 DM数据库自定义告警案例
以下是一个自定义告警的案例:
# 自定义告警案例
##
# 场景描述
某企业需要为DM数据库搭建自定义告警系统,实现对特定业务指标的告警和通知。
##
# 实施步骤
# 1. 环境准备
#
# 告警服务器环境
– 主机名:fgedu-alert
– IP地址:192.168.1.100
– 操作系统:Oracle Linux 9.3
– 数据库:MySQL 8.0
– 内存:8GB
– CPU:4核
– 磁盘:100GB
#
# 被告警服务器环境
– 主机名:fgedu-db
– IP地址:192.168.1.200
– 操作系统:Oracle Linux 9.3
– 数据库:DM8
– 内存:64GB
– CPU:16核
– 磁盘:1TB
# 2. 安装告警平台
##
# 安装Python环境
$ yum install python3 python3-pip -y
##
# 安装Flask
$ pip3 install flask
##
# 安装MySQL驱动
$ pip3 install pymysql
##
# 安装DM驱动
$ pip3 install dmPython
# 3. 创建告警平台
##
# 创建告警数据库
$ mysql -u root -p
mysql> create database alert character set utf8mb4 collate utf8mb4_bin;
mysql> create user alert@fgedu.localhost identified by ‘Alert123’;
mysql> grant all privileges on alert.* to alert@fgedu.localhost;
mysql> flush privileges;
mysql> exit;
##
# 创建告警表
$ mysql -u alert -p alert << EOF create table dm_alert ( id int auto_increment primary key, instance varchar(100), alert_name varchar(100), alert_level varchar(20), alert_message text, alert_status varchar(20), create_time datetime default current_timestamp, update_time datetime default current_timestamp on update current_timestamp ); create table dm_alert_rule ( id int auto_increment primary key, rule_name varchar(100), rule_condition text, rule_level varchar(20), rule_enabled tinyint default 1, create_time datetime default current_timestamp ); create table dm_alert_notification ( id int auto_increment primary key, alert_id int, notification_type varchar(20), notification_target varchar(100), notification_status varchar(20), create_time datetime default current_timestamp ); EOF ### 创建告警API #!/usr/bin/env python3 # dm_alert_api.py # from:www.itpux.com.qq113257174.wx:itpux-com # web: `http://www.fgedu.net.cn` from flask import Flask, jsonify, request import pymysql import dmPython import datetime import smtplib from email.mime.text import MIMEText app=Flask(__name__) # DM数据库连接 def get_dm_connection(): return dmPython.connect( user='zabbix' , password='Zabbix123' , server='192.168.1.200' , port=5236 ) # MySQL数据库连接 def get_mysql_connection(): return pymysql.connect( host='fgedu.localhost' , user='alert' , password='Alert123' , database='alert' ) # 获取告警规则 @app.route('/api/alert/rules', methods=['GET']) def get_alert_rules(): try: conn=get_mysql_connection() cursor=conn.cursor(pymysql.cursors.DictCursor) cursor.execute(""" select * from dm_alert_rule where rule_enabled=1 """) rules = cursor.fetchall() cursor.close() conn.close() return jsonify(rules) except Exception as e: return jsonify({'error': str(e)}), 500 # 创建告警 @app.route('/api/alert/create', methods=['POST']) def create_alert(): try: data = request.json conn = get_mysql_connection() cursor = conn.cursor() cursor.execute(""" insert into dm_alert (instance, alert_name, alert_level, alert_message, alert_status) values (%s, %s, %s, %s, 'pending' ) """, ( data['instance'], data['alert_name'], data['alert_level'], data['alert_message'] )) alert_id = cursor.lastrowid conn.commit() cursor.close() conn.close() return jsonify({'alert_id': alert_id, 'success': True}) except Exception as e: return jsonify({'error': str(e)}), 500 # 获取告警列表 @app.route('/api/alert/list', methods=['GET']) def get_alert_list(): try: conn = get_mysql_connection() cursor = conn.cursor(pymysql.cursors.DictCursor) cursor.execute(""" select * from dm_alert order by create_time desc limit 100 """) alerts = cursor.fetchall() cursor.close() conn.close() return jsonify(alerts) except Exception as e: return jsonify({'error': str(e)}), 500 # 发送邮件告警 def send_email_alert(alert): try: msg = MIMEText(alert['alert_message']) msg['Subject'] = f" [告警] {alert['alert_name']}" msg['From']='monitor@fgedu.net.cn' msg['To']='dba@fgedu.net.cn' smtp=smtplib.SMTP('smtp.fgedu.net.cn', 587) smtp.starttls() smtp.login('monitor@fgedu.net.cn', '******' ) smtp.send_message(msg) smtp.quit() return True except Exception as e: print(f"发送邮件告警失败: {e}") return False # 发送短信告警 def send_sms_alert(alert): try: import requests url='http://sms.fgedu.net.cn/api/send' data={ 'phone' : '13800138000' , 'message' : f"[告警] {alert['alert_name']}: {alert['alert_message']}" } response=requests.post(url, data=data) return response.status_code==200 except Exception as e: print(f"发送短信告警失败: {e}") return False # 发送微信告警 def send_wechat_alert(alert): try: import requests url='https://qyapi.weixin.qq.com/cgi-bin/message/send' data={ 'touser' : 'fengge' , 'msgtype' : 'text' , 'agentid' : 123456, 'text' : { 'content' : f"[告警] {alert['alert_name']}: {alert['alert_message']}" } } response=requests.post(url, json=data) return response.status_code==200 except Exception as e: print(f"发送微信告警失败: {e}") return False # 处理告警 @app.route('/api/alert/process', methods=['POST']) def process_alert(): try: data=request.json alert_id=data['alert_id'] conn=get_mysql_connection() cursor=conn.cursor(pymysql.cursors.DictCursor) cursor.execute(""" select * from dm_alert where id=%s """, (alert_id,)) alert = cursor.fetchone() # 发送告警通知 if alert['alert_level'] == 'critical': send_email_alert(alert) send_sms_alert(alert) send_wechat_alert(alert) elif alert['alert_level'] == 'warning': send_email_alert(alert) send_wechat_alert(alert) # 更新告警状态 cursor.execute(""" update dm_alert set alert_status='sent' where id=%s """, (alert_id,)) conn.commit() cursor.close() conn.close() return jsonify({'success': True}) except Exception as e: return jsonify({'error': str(e)}), 500 if __name__ == '__main__': app.run(host='0.0.0.0', port=5000) ## # 创建告警服务 $ vi /etc/systemd/system/dm_alert_api.service [Unit] Description=DM Alert API After=network.target [Service] Type=simple User=alert WorkingDirectory=/dm/scripts ExecStart=/usr/bin/python3 /dm/scripts/dm_alert_api.py Restart=on-failure [Install] WantedBy=multi-user.target ## # 启动告警服务 $ useradd alert $ chown -R alert:alert /dm/scripts $ systemctl daemon-reload $ systemctl start dm_alert_api $ systemctl enable dm_alert_api # 4. 创建告警脚本 ## # 创建告警检查脚本 #!/bin/bash # dm_alert_check.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: `http://www.fgedu.net.cn` export DM_HOME=/dm/app export PATH=$PATH:$DM_HOME/bin # 获取DM数据库状态 STATUS=$(disql zabbix/Zabbix123 << EOF set echo off set heading off select status from v\$instance; EOF ) # 检查数据库状态 if [ " $STATUS" !="OPEN" ]; then curl -X POST http://192.168.1.100:5000/api/alert/create \ -H "Content-Type: application/json" \ -d "{ \" instance\": \"fgedu-db\", \"alert_name\": \"DM数据库状态异常\", \"alert_level\": \"critical\", \"alert_message\": \"DM数据库状态异常,当前状态: $STATUS\" }" fi # 获取会话数 SESSIONS= $(disql zabbix/Zabbix123 << EOF set echo off set heading off select count(*) from v\$sessions; EOF ) # 检查会话数 if [ $SESSIONS -gt 1000 ]; then curl -X POST http://192.168.1.100:5000/api/alert/create \ -H "Content-Type: application/json" \ -d "{ \" instance\": \"fgedu-db\", \"alert_name\": \"DM数据库会话数过高\", \"alert_level\": \"warning\", \"alert_message\": \"DM数据库会话数过高,当前会话数: $SESSIONS\" }" fi # 获取CPU使用率 CPU= $(disql zabbix/Zabbix123 << EOF set echo off set heading off select value from v\$sysstat where name='CPU TIME' ; EOF ) # 检查CPU使用率 if [ $(echo "$CPU > 80″ | bc) -eq 1 ];
then curl -X POST http://192.168.1.100:5000/api/alert/create \ -H “Content-Type: application/json” \ -d “{
\” instance\”: \”fgedu-db\”, \”alert_name\”: \”DM数据库CPU使用率过高\”, \”alert_level\”: \”warning\”,
\”alert_message\”: \”DM数据库CPU使用率过高,当前使用率: $CPU%\” }” fi # 获取内存使用率 MEMORY=
$(disql zabbix/Zabbix123 << EOF set echo off set heading off select value from v\$sysstat where name='MEMORY USAGE' ; EOF ) # 检查内存使用率 if [ $(echo "$MEMORY > 80″ | bc) -eq 1 ]; then curl -X POST http://192.168.1.100:5000/api/alert/create \
-H “Content-Type: application/json” \ -d “{
\” instance\”: \”fgedu-db\”, \”alert_name\”: \”DM数据库内存使用率过高\”, \”alert_level\”: \”warning\”, \”alert_message\”:
\”DM数据库内存使用率过高,当前使用率: $MEMORY%\” }” fi echo “告警检查完成” ### 创建告警处理脚本 #!/bin/bash # dm_alert_process.sh
#
from:www.itpux.com.qq113257174.wx:itpux-com # web: `http://www.fgedu.net.cn`
# 获取待处理的告警 ALERTS=
$(curl -s
http://192.168.1.100:5000/api/alert/list | jq -r ‘.[] | select(.alert_status==”pending”) | .id’ ) # 处理每个告警 for
ALERT_ID in $ALERTS; do curl -X POST http://192.168.1.100:5000/api/alert/process \
-H “Content-Type: application/json” \ -d “{
\” alert_id\”: $ALERT_ID }” done echo “告警处理完成” ##
# 创建定时任务
$ crontab -e # 每分钟检查一次告警 * * * * *
/dm/scripts/dm_alert_check.sh>> /dm/logs/dm_alert_check.log 2>&1
# 每分钟处理一次告警
* * * * * /dm/scripts/dm_alert_process.sh >> /dm/logs/dm_alert_process.log 2>&1
# 5. 创建告警前端
##
# 创建告警页面
DM数据库告警
告警列表
##
# 配置Web服务器
$ yum install nginx -y
$ vi /etc/nginx/conf.d/dm_alert.conf
server {
listen 80;
server_name dm-alert.fgedu.net.cn;
location / {
root /dm/web;
index index.html;
}
location /api/ {
proxy_pass http://192.168.1.100:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
$ systemctl start nginx
$ systemctl enable nginx
# 6. 验证告警
##
# 访问告警页面
http://dm-alert.fgedu.net.cn
##
# 查看告警列表
# 查看告警信息
# 查看告警状态
# 查看告警时
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
