大家有没这种感觉,不论甲方还是乙方,拿到一套数据库我们很难快速的知道他的配置,数据库状态以及性能状态
虽然我们手里有很多运维的脚本,但是无法有效的统一起来
如果你对一套系统不了解,在运维过程中我们往往是迷茫的,心里没有底的
特别是性能问题
虽然Oracle有他的统一管理工具,但是我想大多数还是不用的吧
正好对于Python使用也有一段时间了,而工作上也有这种需求,所以才萌发了这个想法,根据自己实际运维中的需求来开发一套系统
在开始今天的正式想说的是这套系统只是辅助我们日常的运维,对于Oracle本身的一些工具,如awr和statpack,ash等工具我们还是需要熟练掌握的
这次的分享是对上次分享的一些改进,增加了一些新的功能
首先先列出来使用到的一些环境:
开发环境
操作系统:CentOS 7.4
Python版本 :3.6
Django版本: 1.10.5
操作系统用户:oms
linux/unix模块:paramiko
Oracle模块:cx_Oracle
SQL Server模块:pymssql
数据分析:pandas
前台展示:highcharts
数据存储:MySQL,redis
熟悉Python的人对于Python的主流Web框架肯定有所了解,各有各的好处,Django可以说是其中最为强大和流行的一个,其官方文档非常详细,网上也有不少中文的文档,大家可现行了解
官方网站:
https://www.djangoproject.com/
Django采用ORM模型处理数据库关系
对象-关系映射(Object-Relational Mapping,简称ORM),简单来说就是通过面向对象的方法来映射后端数据库
它通过 类(class)的方式定义关系型数据库的表结构
Django 作为Web框架提供了一些非常有用的能够提升开发效率的特性
接下来简单介绍一下Django如何处理用户的Web请求,以及一些常用的文件的说明
获取的内容
这里我们通过Python获取
获取方式
这里通过paramiko模块连接linux服务器
分别使用如下命令获取: 1. sar/sar 2. free/swapinfo 3. df /bdf
具体可参考如下链接:
http://www.zhaibibei.cn/python/3.1/
获取的内容
这里我们通过Python获取
获取方式
这里通过cx_Oracle模块连接Oracle服务器
分别使用如下命令获取: 1. v$sqlarea 2. v$sysstat 3. v$system_event 4. v$librarycache等 5. .....
获取的内容
这里我们通过Python获取
获取方式
这里通过pymssql模块连接SQL Server 服务器
分别使用如下命令获取:
我们要判断一个系统是否正常,可以先从其CPU,内存来入手,这里我们获取到了服务器的数据后,可以进行分析
这里我每天发送2封邮件给我,主要检查:
这里检查每日数据库各非空闲等待事件的平均等待事件,超过一定数值则报警
通过上面两个程序并结合CPU,内存使用率我们大体可以知道一套数据库的性能情况
接下来我们可以根据上面的问题点进行分析
这里我们可以看到等待实践的趋势图
可以根据每天
也可以根据每小时
这样就可以对数据库的等待事件有所了解
这里我们针对常见的性能指标来画出趋势图,有:
等等
这里也分每天的趋势图和每小时的趋势图
所有状态一目了然
通过上面的检查我们可以定位到某小时某个指标较高,这时我们可以查询这个时间段的TOP SQL,主要有:
这个功能还在评估要不要加入,暂无打算
可以设置数据库某个指标的某天趋势为基线方便对比
这里还有个功能就是对于我们日常用到的一些运维脚本集成到网页上方便执行
由于我也负责SQL Server,就也写了写它的脚本,本人了解不太深,没写太多,后续完善
主要功能有:
目前用的是crontab在调用,正在学Celery + Redis,还是没有时间研究。。
我所有程序都写了异常处理模块,并重定向了标准错误输出到文件以确保所以程序异常得到及时处理
数据获取之后我们需要根据实际需求来进行分析然后发现问题并报警,
指标先紧后送,持续更改
主要有以下方面
好了今天的介绍就到这了,欢迎大家提问