yashanb教程FG193-YashanDB巡检脚本开发
本文档风哥主要介绍YashanDB巡检脚本开发相关知识,包括YashanDB巡检的概念、重要性、组成部分、开发规划、方法、实现、监控、告警、生产案例与实战讲解等内容,风哥教程参考YashanDB官方文档监控和运维内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 YashanDB巡检的概念
YashanDB巡检是指定期对YashanDB数据库系统进行检查,以确保系统的稳定运行和性能优化。巡检脚本是自动化执行巡检任务的工具,能够定期收集和分析数据库的运行状态,及时发现潜在问题。更多视频教程www.fgedu.net.cn
- 巡检是对数据库系统进行定期检查的过程
- 巡检脚本是自动化执行巡检任务的工具
- 巡检的目的是确保数据库系统的稳定运行
- 巡检可以及时发现和解决潜在问题
1.2 YashanDB巡检的重要性
YashanDB巡检的重要性包括:
- 及时发现问题:通过定期巡检,及时发现数据库系统的潜在问题
- 预防故障:通过巡检,预防数据库故障的发生
- 性能优化:通过巡检,发现性能瓶颈,进行性能优化
- 合规性检查:通过巡检,确保数据库系统符合合规要求
- 资源管理:通过巡检,合理分配和管理系统资源
- 安全保障:通过巡检,发现安全隐患,保障系统安全
1.3 YashanDB巡检的组成部分
YashanDB巡检的组成部分包括:
- 系统资源检查:CPU、内存、磁盘、网络等系统资源的使用情况
- 数据库状态检查:数据库实例状态、连接数、会话数等
- 存储检查:表空间使用率、数据文件大小、备份状态等
- 性能检查:SQL执行情况、锁等待、缓冲区使用等
- 安全检查:用户权限、审计日志、安全配置等
- 配置检查:数据库参数配置、操作系统参数配置等
Part02-生产环境规划与建议
2.1 YashanDB巡检脚本开发规划
YashanDB巡检脚本开发规划建议:
– 明确目标:确定巡检脚本的开发目标和范围
– 选择检查项:选择关键的检查项进行监控和分析
– 确定频率:确定巡检的执行频率
– 定义阈值:定义检查项的告警阈值
– 建立流程:建立巡检脚本的开发、测试和部署流程
# 巡检脚本开发步骤
1. 需求分析:分析巡检需求,确定检查项
2. 设计脚本:设计巡检脚本的结构和功能
3. 开发脚本:编写巡检脚本代码
4. 测试脚本:测试巡检脚本的功能和可靠性
5. 部署脚本:部署巡检脚本到生产环境
6. 维护脚本:定期维护和更新巡检脚本
# 巡检频率建议
– 日常巡检:每小时或每天执行一次
– 周巡检:每周执行一次
– 月巡检:每月执行一次
– 季度巡检:每季度执行一次
– 年度巡检:每年执行一次
2.2 YashanDB巡检脚本开发方法
YashanDB巡检脚本开发方法建议:
# 1. 脚本语言选择
– Shell脚本:适合简单的系统命令执行和数据收集
– Python:适合复杂的数据处理和分析
– Perl:适合文本处理和系统管理
– PowerShell:适合Windows环境
# 2. 数据收集方法
– 系统命令:使用操作系统命令收集系统资源数据
– SQL语句:使用SQL语句收集数据库性能数据
– API调用:使用数据库API收集数据
– 日志分析:分析数据库和系统日志
# 3. 数据存储方法
– 文本文件:将巡检结果存储为文本文件
– 数据库:将巡检结果存储到数据库中
– 监控系统:将巡检结果发送到监控系统
– 云存储:将巡检结果存储到云存储中
# 4. 告警方法
– 邮件告警:通过邮件发送告警信息
– 短信告警:通过短信发送告警信息
– 微信告警:通过微信发送告警信息
– 监控系统告警:通过监控系统发送告警信息
# 5. 报告生成方法
– 文本报告:生成文本格式的巡检报告
– HTML报告:生成HTML格式的巡检报告
– PDF报告:生成PDF格式的巡检报告
– 监控系统报告:通过监控系统生成巡检报告
2.3 YashanDB巡检脚本开发最佳实践
YashanDB巡检脚本开发最佳实践:
# 1. 脚本设计
– 模块化设计:将脚本分为多个模块,便于维护和扩展
– 参数化设计:使用参数控制脚本行为,提高灵活性
– 错误处理:添加错误处理机制,确保脚本的可靠性
– 日志记录:添加日志记录,便于调试和问题排查
# 2. 数据收集
– 高效收集:使用高效的方法收集数据,减少对系统的影响
– 完整收集:确保收集的数据完整,覆盖所有检查项
– 准确收集:确保收集的数据准确,避免误报
– 及时收集:及时收集数据,确保数据的时效性
# 3. 数据分析
– 自动化分析:使用自动化方法分析数据,减少人工干预
– 阈值分析:根据阈值分析数据,识别异常
– 趋势分析:分析数据趋势,预测未来情况
– 对比分析:与历史数据对比,识别变化
# 4. 告警机制
– 分级告警:根据问题的严重程度,设置不同级别的告警
– 智能告警:避免重复告警和误告警
– 及时告警:及时发送告警信息,确保问题得到及时处理
– 详细告警:提供详细的告警信息,便于问题排查
# 5. 报告生成
– 清晰易懂:生成清晰易懂的报告,便于理解
– 内容完整:报告内容完整,覆盖所有检查项
– 格式美观:报告格式美观,便于阅读
– 及时生成:及时生成报告,确保信息的时效性
Part03-生产环境项目实施方案
3.1 YashanDB巡检脚本开发实现
3.1.1 开发YashanDB系统资源巡检脚本
# system_check.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
# 系统资源巡检脚本
# 输出文件
output_file=”/tmp/system_check_$(date +%Y%m%d_%H%M%S).log”
echo “开始系统资源巡检” > ${output_file}
echo “巡检时间: $(date)” >> ${output_file}
echo “” >> ${output_file}
# 检查CPU使用率
echo “===== CPU使用率检查 ====” >> ${output_file}
sar -u 1 5 | grep Average >> ${output_file}
echo “” >> ${output_file}
# 检查内存使用率
echo “===== 内存使用率检查 ====” >> ${output_file}
free -h >> ${output_file}
echo “” >> ${output_file}
# 检查磁盘使用率
echo “===== 磁盘使用率检查 ====” >> ${output_file}
df -h >> ${output_file}
echo “” >> ${output_file}
# 检查磁盘I/O
echo “===== 磁盘I/O检查 ====” >> ${output_file}
iostat -x 1 5 >> ${output_file}
echo “” >> ${output_file}
# 检查网络状态
echo “===== 网络状态检查 ====” >> ${output_file}
netstat -tunap | grep LISTEN >> ${output_file}
echo “” >> ${output_file}
# 检查系统负载
echo “===== 系统负载检查 ====” >> ${output_file}
uptime >> ${output_file}
echo “” >> ${output_file}
echo “系统资源巡检完成,结果保存至:${output_file}” >> ${output_file}
echo “系统资源巡检完成,结果保存至:${output_file}”
# 检查是否有异常
cpu_usage=$(sar -u 1 5 | grep Average | awk ‘{print $3 + $5}’)
if (( $(echo “$cpu_usage > 80” | bc -l) )); then
echo “CPU使用率异常!当前值: $cpu_usage%,阈值: 80%”
# 发送告警
echo “系统告警:CPU使用率异常” | mail -s “YashanDB系统告警” admin@fgedu.net.cn
fi
disk_usage=$(df -h | grep ‘/dev/sda1’ | awk ‘{print $5}’ | sed ‘s/%//’)
if [ $disk_usage -gt 80 ]; then
echo “磁盘使用率异常!当前值: $disk_usage%,阈值: 80%”
# 发送告警
echo “系统告警:磁盘使用率异常” | mail -s “YashanDB系统告警” admin@fgedu.net.cn
fi
3.1.2 开发YashanDB数据库状态巡检脚本
# db_status_check.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
# 数据库状态巡检脚本
# 输出文件
output_file=”/tmp/db_status_check_$(date +%Y%m%d_%H%M%S).log”
echo “开始数据库状态巡检” > ${output_file}
echo “巡检时间: $(date)” >> ${output_file}
echo “” >> ${output_file}
# 检查数据库实例状态
echo “===== 数据库实例状态检查 ====” >> ${output_file}
sqlplus -s / as sysdba << EOF>> ${output_file}
SELECT instance_name, status, database_status FROM v\$instance;
EXIT;
EOF
echo “” >> ${output_file}
# 检查数据库连接数
echo “===== 数据库连接数检查 ====” >> ${output_file}
sqlplus -s / as sysdba << EOF>> ${output_file}
SELECT count(*) FROM v\$session;
EXIT;
EOF
echo “” >> ${output_file}
# 检查表空间使用率
echo “===== 表空间使用率检查 ====” >> ${output_file}
sqlplus -s / as sysdba << EOF>> ${output_file}
SELECT tablespace_name, used_percent
FROM dba_tablespace_usage_metrics;
EXIT;
EOF
echo “” >> ${output_file}
# 检查备份状态
echo “===== 备份状态检查 ====” >> ${output_file}
sqlplus -s / as sysdba << EOF>> ${output_file}
SELECT backup_type, status, completion_time
FROM v\$backup_set
ORDER BY completion_time DESC
FETCH FIRST 10 ROWS ONLY;
EXIT;
EOF
echo “” >> ${output_file}
# 检查SQL执行情况
echo “===== SQL执行情况检查 ====” >> ${output_file}
sqlplus -s / as sysdba << EOF>> ${output_file}
SELECT sql_id, elapsed_time, buffer_gets, executions
FROM v\$sql
WHERE executions > 10
ORDER BY elapsed_time DESC
FETCH FIRST 10 ROWS ONLY;
EXIT;
EOF
echo “” >> ${output_file}
echo “数据库状态巡检完成,结果保存至:${output_file}” >> ${output_file}
echo “数据库状态巡检完成,结果保存至:${output_file}”
# 检查是否有异常
tablespace_usage=$(sqlplus -s / as sysdba << EOF SET HEAD OFF SET FEEDBACK OFF SELECT
MAX(used_percent) FROM dba_tablespace_usage_metrics; EXIT; EOF )
tablespace_usage=$(echo $tablespace_usage | tr -d ' ' ) if ((
$(echo "$tablespace_usage > 90″ | bc -l) )); then
echo “表空间使用率异常!当前值: $tablespace_usage%,阈值: 90%” # 发送告警 echo “数据库告警:表空间使用率异常” | mail
-s “YashanDB数据库告警” admin@fgedu.net.cn fi
3.1.3 开发YashanDB综合巡检脚本
# comprehensive_check.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
# 综合巡检脚本
# 输出文件
output_file=”/tmp/comprehensive_check_$(date +%Y%m%d_%H%M%S).log”
report_file=”/tmp/comprehensive_check_report_$(date +%Y%m%d).html”
echo “开始综合巡检” > ${output_file}
echo “巡检时间: $(date)” >> ${output_file}
echo “” >> ${output_file}
# 执行系统资源巡检
echo “===== 执行系统资源巡检 ====” >> ${output_file}
./system_check.sh
# 执行数据库状态巡检
echo “===== 执行数据库状态巡检 ====” >> ${output_file}
./db_status_check.sh
# 生成HTML报告
echo ”
” >> ${report_file}
echo “
echo “
YashanDB综合巡检报告
” >> ${report_file}
echo “
巡检时间: $(date)
” >> ${report_file}
# 添加系统资源巡检结果
echo “
echo “
系统资源巡检
” >> ${report_file}
echo “
CPU使用率
” >> ${report_file}
echo “
$(sar -u 1 5 | grep Average)
” >> ${report_file}
echo “
内存使用率
” >> ${report_file}
echo “
$(free -h)
” >> ${report_file}
echo “
磁盘使用率
” >> ${report_file}
echo “
$(df -h)
” >> ${report_file}
echo “
” >> ${report_file}
# 添加数据库状态巡检结果
echo “
echo “
数据库状态巡检
” >> ${report_file}
echo “
数据库实例状态
” >> ${report_file}
echo “
$(sqlplus -s / as sysdba << EOF SELECT instance_name, status, database_status FROM v\$instance; EXIT; EOF )
”
>> ${report_file}
echo “
表空间使用率
” >> ${report_file}
echo “
| 表空间名称 | 使用率 |
|---|---|
| ‘ || tablespace_name || ‘ | ‘ || used_percent || ‘% |
” >> ${report_file}
echo “
” >> ${report_file}
echo “
” >> ${report_file}
echo “” >> ${report_file}
echo “综合巡检完成,结果保存至:${output_file}” >> ${output_file}
echo “HTML报告生成至:${report_file}” >> ${output_file}
echo “综合巡检完成,结果保存至:${output_file}”
echo “HTML报告生成至:${report_file}”
# 发送报告邮件
cat ${report_file} | mail -s “YashanDB综合巡检报告” -a “Content-Type: text/html”
admin@fgedu.net.cn
3.2 YashanDB巡检脚本监控
3.2.1 YashanDB巡检脚本监控配置
# 1. 配置crontab定时执行
$ crontab -e
# 每小时执行一次系统资源巡检
0 * * * * /path/to/system_check.sh
# 每4小时执行一次数据库状态巡检
0 */4 * * * /path/to/db_status_check.sh
# 每天凌晨执行一次综合巡检
0 0 * * * /path/to/comprehensive_check.sh
# 2. 配置日志轮转
$ cat > /etc/logrotate.d/yashanb_check << EOF /tmp/*_check_*.log { daily rotate
7 compress delaycompress missingok notifempty } EOF # 3. 配置监控系统 #
部署Prometheus和Grafana $ helm repo add prometheus-community
https://prometheus-community.github.io/helm-charts $ helm install prometheus
prometheus-community/kube-prometheus-stack # 配置Prometheus监控巡检脚本执行状态 #
在prometheus.yml中添加监控配置 - job_name: 'yashanb_check' static_configs: -
targets: ['fgedu.net.cn:9100'] metrics_path: /metrics scrape_interval: 1m
3.2.2 YashanDB巡检脚本监控工具
# 1. Prometheus + Grafana
– 部署Prometheus收集巡检脚本的执行状态
– 部署Grafana可视化巡检结果
– 配置告警规则,当巡检脚本执行失败时触发告警
# 2. Zabbix
– 配置Zabbix监控巡检脚本的执行状态
– 配置Zabbix告警,当巡检脚本执行失败时触发告警
– 使用Zabbix的监控面板查看巡检结果
# 3. Nagios
– 配置Nagios监控巡检脚本的执行状态
– 配置Nagios告警,当巡检脚本执行失败时触发告警
– 使用Nagios的Web界面查看巡检结果
# 4. ELK Stack
– 使用Elasticsearch存储巡检结果
– 使用Logstash处理巡检结果
– 使用Kibana可视化巡检结果
– 配置告警,当巡检结果异常时触发告警
# 5. 自定义监控工具
– 开发自定义监控工具,监控巡检脚本的执行状态
– 配置告警,当巡检脚本执行失败时触发告警
– 提供Web界面查看巡检结果
3.3 YashanDB巡检脚本告警
3.3.1 YashanDB巡检脚本告警配置
# 1. 邮件告警配置
# 配置邮件服务器
$ sudo vi /etc/postfix/main.cf
# 设置邮件服务器
relayhost = [smtp.example.com]:587
# 设置发件人
myorigin = fgedu.net.cn
# 重启postfix服务
$ sudo systemctl restart postfix
# 测试邮件发送
$ echo “Test email” | mail -s “Test” admin@fgedu.net.cn
# 2. 短信告警配置
# 安装短信发送工具
$ sudo apt install gammu
# 配置短信发送
$ sudo vi /etc/gammurc
[gammu]
port = /dev/ttyUSB0
connection = at
# 测试短信发送
$ echo “Test SMS” | gammu-smsd-inject TEXT 13800138000
# 3. 微信告警配置
# 安装微信发送工具
$ pip install wechatpy
# 编写微信发送脚本
$ cat > send_wechat.py << EOF #!/usr/bin/env python3 from wechatpy
import WeChatClient # 初始化客户端
client=WeChatClient('app_id', 'app_secret' ) # 发送消息
client.message.send_text('user_id', 'Test message' ) EOF # 测试微信发送 $
python3 send_wechat.py # 4. 监控系统告警配置 # 配置Prometheus告警规则 $ cat>
/etc/prometheus/rules/yashanb_check_rules.yml << EOF groups: - name:
yashanb_check rules: - alert: YashanDBCheckFailed expr:
yashanb_check_status==0 for: 5m labels: severity: critical
annotations: summary: "YashanDB巡检失败"
description: "YashanDB巡检脚本执行失败,请检查" EOF # 配置Grafana告警通知 #
在Grafana中配置邮件、短信、微信等通知渠道
3.3.2 YashanDB巡检脚本告警示例
# 1. 系统资源告警
if (( $(echo “$cpu_usage > 80” | bc -l) )); then
echo “CPU使用率异常!当前值: $cpu_usage%,阈值: 80%”
# 发送邮件告警
echo “系统告警:CPU使用率异常” | mail -s “YashanDB系统告警”
admin@fgedu.net.cn
# 发送短信告警
echo “系统告警:CPU使用率异常” | gammu-smsd-inject TEXT 13800138000
# 发送微信告警
python3 send_wechat.py “系统告警:CPU使用率异常”
fi
# 2. 数据库状态告警
if (( $(echo “$tablespace_usage > 90” | bc -l) )); then
echo “表空间使用率异常!当前值: $tablespace_usage%,阈值: 90%”
# 发送邮件告警
echo “数据库告警:表空间使用率异常” | mail -s “YashanDB数据库告警”
admin@fgedu.net.cn
# 发送短信告警
echo “数据库告警:表空间使用率异常” | gammu-smsd-inject TEXT 13800138000
# 发送微信告警
python3 send_wechat.py “数据库告警:表空间使用率异常”
fi
# 3. 巡检脚本执行失败告警
if [ $? -ne 0 ]; then
echo “巡检脚本执行失败!”
# 发送邮件告警
echo “巡检告警:巡检脚本执行失败” | mail -s “YashanDB巡检告警”
admin@fgedu.net.cn
# 发送短信告警
echo “巡检告警:巡检脚本执行失败” | gammu-smsd-inject TEXT 13800138000
# 发送微信告警
python3 send_wechat.py “巡检告警:巡检脚本执行失败”
fi
Part04-生产案例与实战讲解
4.1 YashanDB巡检脚本开发案例一
案例背景:某企业需要开发YashanDB巡检脚本,用于监控数据库系统的运行状态。
# 1. 环境信息
– 数据库版本:YashanDB 19c
– 操作系统:Oracle Linux 9.3
– 硬件配置:8核CPU,32GB内存,1TB SSD
– 业务类型:OLTP
# 2. 需求分析
– 监控系统资源:CPU、内存、磁盘、网络
– 监控数据库状态:实例状态、连接数、表空间使用率
– 监控性能指标:SQL执行情况、锁等待
– 生成巡检报告:HTML格式
– 配置告警:邮件、短信
# 3. 脚本开发
# 开发系统资源巡检脚本
$ cat > system_check.sh << EOF #!/bin/bash # system_check.sh
# from:www.itpux.com.qq113257174.wx:itpux-com # web:
`http://www.fgedu.net.cn` # 系统资源巡检脚本 # 输出文件
output_file="/tmp/system_check_$(date +%Y%m%d_%H%M%S).log"
echo "开始系统资源巡检"> ${output_file}
echo “巡检时间: $(date)” >> ${output_file}
echo “” >> ${output_file}
# 检查CPU使用率
echo “===== CPU使用率检查 ====” >> ${output_file}
sar -u 1 5 | grep Average >> ${output_file}
echo “” >> ${output_file}
# 检查内存使用率
echo “===== 内存使用率检查 ====” >> ${output_file}
free -h >> ${output_file}
echo “” >> ${output_file}
# 检查磁盘使用率
echo “===== 磁盘使用率检查 ====” >> ${output_file}
df -h >> ${output_file}
echo “” >> ${output_file}
echo “系统资源巡检完成,结果保存至:${output_file}” >> ${output_file}
echo “系统资源巡检完成,结果保存至:${output_file}”
# 检查是否有异常
cpu_usage=$(sar -u 1 5 | grep Average | awk ‘{print $3 +
$5}’)
if (( $(echo “$cpu_usage > 80” | bc -l) )); then
echo “CPU使用率异常!当前值: $cpu_usage%,阈值: 80%”
# 发送告警
echo “系统告警:CPU使用率异常” | mail -s “YashanDB系统告警”
admin@fgedu.net.cn
fi
EOF
# 开发数据库状态巡检脚本
$ cat > db_status_check.sh << EOF #!/bin/bash #
db_status_check.sh #
from:www.itpux.com.qq113257174.wx:itpux-com # web:
`http://www.fgedu.net.cn` # 数据库状态巡检脚本 # 输出文件
output_file="/tmp/db_status_check_$(date +%Y%m%d_%H%M%S).log"
echo "开始数据库状态巡检"> ${output_file}
echo “巡检时间: $(date)” >> ${output_file}
echo “” >> ${output_file}
# 检查数据库实例状态
echo “===== 数据库实例状态检查 ====” >> ${output_file}
sqlplus -s / as sysdba << EOF>> ${output_file}
SELECT instance_name, status, database_status
FROM v\$instance;
EXIT;
EOF
echo “” >> ${output_file}
# 检查表空间使用率
echo “===== 表空间使用率检查 ====” >> ${output_file}
sqlplus -s / as sysdba << EOF>> ${output_file}
SELECT tablespace_name, used_percent
FROM dba_tablespace_usage_metrics;
EXIT;
EOF
echo “” >> ${output_file}
echo “数据库状态巡检完成,结果保存至:${output_file}” >>
${output_file}
echo “数据库状态巡检完成,结果保存至:${output_file}”
# 检查是否有异常
tablespace_usage=$(sqlplus -s / as sysdba <<
EOF SET HEAD OFF SET FEEDBACK OFF SELECT
MAX(used_percent) FROM
dba_tablespace_usage_metrics; EXIT; EOF
) tablespace_usage=$(echo
$tablespace_usage | tr -d ' ' ) if ((
$(echo "$tablespace_usage > 90″ | bc -l)
)); then
echo “表空间使用率异常!当前值: $tablespace_usage%,阈值: 90%”
# 发送告警 echo “数据库告警:表空间使用率异常” | mail
-s “YashanDB数据库告警” admin@fgedu.net.cn fi
EOF # 开发综合巡检脚本 $ cat>
comprehensive_check.sh << EOF
#!/bin/bash # comprehensive_check.sh
#
from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn` #
综合巡检脚本 # 输出文件
output_file="/tmp/comprehensive_check_$(date +%Y%m%d_%H%M%S).log"
report_file="/tmp/comprehensive_check_report_$(date +%Y%m%d).html"
echo "开始综合巡检"> ${output_file}
echo “巡检时间: $(date)” >>
${output_file}
echo “” >> ${output_file}
# 执行系统资源巡检
echo “===== 执行系统资源巡检 ====” >>
${output_file}
./system_check.sh
# 执行数据库状态巡检
echo “===== 执行数据库状态巡检 ====” >>
${output_file}
./db_status_check.sh
# 生成HTML报告
echo ”
” > ${report_file}
echo “” >>
${report_file}
echo ”
” >> ${report_file}
echo ”
” >>
${report_file}
echo ”
” >>
${report_file}
echo “
echo “
