作为核心IT业务模块,数据库的重要性毋庸置疑,数据库的稳定运行直接关系到应用系统的可用、稳定、高效性。因此,为确保数据库稳定、高效的运行,我们需要面临如下两个挑战
1. 数据库运行过程中的危险因子,怎么及时发现?
2. 数据库发生故障或因某些原因导致处于不正常工作状态时,怎样及时发现?
为了解决上述的两个难点,必须建立数据库监控体系,7*24实时监控数据库的运行状态,在数据库即将出现问题或已经出现问题时,通过立即触发事件来及时预警,使运维人员能够及时予以处理,确保数据库稳定、高效的正常运行
解释说明
(1) 生产库代表对外提供服务的线上数据库,即需要进行监控的数据库
(2) 监控数据采集数据库,集中抽取每一个生产库的监控数据并保存(通过调度任务定时完成),并且将达到预警阀值的监控数据,经过加工处理后发送至“告警推送服务器”
(3) 告警推送服务器,接受来自“监控数据采集数据库”的预警数据,通过邮件发送程序,将预警信息以邮件形式及时发送给运维人员
当前数据库监控体系中部署的监控种类以及其它一些属性如下表格
序号 |
监控种类 |
监控频率 |
备注 |
1 |
Oracle数据库UNDO表空间使用率告警 |
10分钟 |
监控undo表空间使用情况 |
2 |
Oracle数据库TEMP表空间使用率告警 |
10分钟 |
监控temp表空间使用情况 |
3 |
Oracle数据库序列使用率告警 |
每天上午9点 |
监控序列使用清理 |
4 |
Oracle数据库连接数异常告警 |
10分钟 |
监控数据库连接数情况 |
5 |
Oracle数据库表空间使用率告警 |
20分钟 |
监控数据库表空间使用情况 |
6 |
Oracle数据库会话undo使用量告警 |
5分钟 |
监控会话undo使用情况 |
7 |
Oracle数据库用户密码过期告警 |
每天上午9点 |
监控用户密码过期情况 |
8 |
Oracle数据库PGA使用率告警 |
10分钟 |
监控数据库PGA使用情况 |
9 |
Oracle数据库锁异常告警 |
5分钟 |
监控数据库内锁资源争用情况 |
10 |
Oracle数据库共享池使用告警 |
10分钟 |
监控数据库共享池使用情况 |
11 |
Oracle数据库活动连接数告警 |
2分钟 |
监控数据库两分钟类活动连接情况 |
12 |
Oracle数据库索引异常告警 |
30分钟 |
监控数据库索引状态情况 |
13 |
Oracle数据库性能告警 |
1分钟 |
监控数据库性能情况 |
14 |
Oracle数据库通断告警 |
1分钟 |
监控数据库可用性情况 |
15 |
Oracle日志监控告警 |
10分钟 |
监控数据库运行日志情况 |
备注
由于表格篇幅所限,一些其它属性将在后续体现,例如每一监控种类的阀值等等属性
凡事不可能完美,数据库监控体系也一样,目前搭建完成的数据库监控体系架构,受专业和能力受限,存在如下不足
1. 及时性,无法以语音形式将告警信息通知运维人员(电话方式),目前只能以邮件形式发送告警信息,因此肯定告警信息肯定存在延迟发现,特别是晚上时间段;
2. 健壮性,数据库监控体系架构中的“生产库”和“监控数据采集数据库”都已部署通断告警,但是“告警邮件推送服务器”(数据库)由于暂时没有完成自监控,在出现问题时,会导致整个监控体系奔溃而不能及时发现(当前只能每天早上9点和6点发送一条监控运行状态邮件来自检)
3. 专业性,由于编程能力有限,数据库监控体系完成后,肯定存在很多bug和未知缺陷,没有经过长期的运行和考验,无法进一步完善
4. 全面性,当前仅部署了15个种类的监控(根据经验实施),由于系统具体特殊性,肯定存在监控盲点,需要后续运行过程中才能一步一步完善
当前已经搭建完成的数据库监控体系架构特点如下
1. 告警信息通过邮件发送和接收(139邮箱),进一步通过手机短信接收邮件通知和内容
2. 每一个监控种类都是通过一个单独的程序包完成,任何一个监控种类出现异常时(调整或出现bug),不影响其它监控种类的正常运行
3. 每一个生产库的监控数据采集都是通过一个“监控数据库配置表”控制,可以通过修改flag字段来控制对应生产库的监控数据采集与否,进一步控制该生产库告警与否
4. 每一个监控种类的数据采集都是通过一个“监控种类配置表”控制,可以通过修改flag字段来控制对应生产库的相应监控种类的监控数据采集与否
5. 通过“监控阀值配置表”可以实现对于同一类别监控,可以根据系统的重要级别,设置不同的监控阀值。即每一个监控种类可以通过修改监控阀值字段,个性化设置监控类别的监控阀值,从而使不同数据库的相同监控种类的可以设置不同告警阀值(为后续系统等级重要性设置不同阀值)
6. 通过“告警发送配置表”可以实现采集监控数据(用于分析),但是不发送告警信息的目的
7. 所有的监控数据都通过“监控数据采集数据库”统一采集、加工处理,最后发送至“告警推送服务器”,其中监控数据保存最近半个月,用于分析和查看
数据库监控体系建设步骤简单归纳为如下表格
步骤 |
内容 |
1 |
确定需要部署的监控种类 |
2 |
在“监控数据采集数据库”上配置所有待监控的数据库的TNS |
3 |
确认配置的TNS准确性 |
4 |
在所有待监控的数据库上创建监控用户 |
5 |
在所有待监控的数据库上创建监控查询视图 |
6 |
随即选取一个待监控的数据库登录,检查“步骤四”创建的视图的有效性 |
7 |
在“监控数据采集数据库”上创建数据采集用户,同时创建指向所有待监控数据库的database link,并验证有效性 |
8 |
在“监控数据采集数据库”上创建数据采集表,针对每一个监控类别创建一个数据采集表 |
9 |
在“监控数据采集数据库”上创建几张重要监控相关的配置表 |
10 |
给上一步创建的各类配置表添加基本数据 |
11 |
建立与告警发送服务器的通道,以数据库方式建立通道联系 |
12 |
建立所有监控数据采集程序和告警数据发送程序 |
13 |
建立定时调度任务,定时采集监控数据和发送告警信息 |
14 |
建立邮件发送程序,在“邮件发送服务器”上完成邮件发送程序的部署 |
15 |
建立“监控采集数据库”的通断监控,防止由于监控采集数据库出现异常而导致整个告警体系崩溃的自检 |
16 |
监控“告警发送数据库服务器“情况,这里只部署为每天早上9点和晚上6点发出一次运行正常的邮件信息 |
17 |
数据库alert日志监控部署,由于alert日志监控特殊性,单独部署 |
18 |
后续扫尾工作,定时清理监控数据,创建索引等 |
备注:这篇文章介绍的监控体系建设方案只适合中小规模环境,对于那种及时性、稳定要求高的环境,由于监控及时性等需求无法满足,肯定不适合本文介绍的方法。而且这篇文章仅仅提供一个监控体系的参考方案,仅供大家参考!
原文:http://blog.csdn.net/oradh/article/details/37592809