当前位置: 首页 > Linux

未完待续的第二部分再次推出,继续讲解oracledb_exporter监控Oracle,一种极低入侵的监控方案

时间:2023-04-06 02:00:47 Linux

是开篇基于上一篇oracledb_exporter监控Oracle,非常低侵入的监控解决方案文章写的。本篇继续讲解以下内容:根据实际业务需求编写自定义监控指标,让它们真正在生产中使用起来拉起oracledb_exporter的备机拉主配置,再次巩固下一个方案。这篇文章是关于下图红框的。红框内为oracledb_exporter的主备计划。结合前面的设计,这张图就是一个完整的监控架构。.oracledb_exporter的master-backup方案的设计思路和Prometheus类似。无论架构如何设计,都是为了避免生产环境出现单点。再巩固一下作者的环境规划目的主备角色物理IPVIP接管VIP地址oracledb_exporterMaster192.168.11.20接管192.168.11.200oracledb_exporterBackup192.168.11.21接管192.168.11.200自定义指标规范什么是自定义指标如果oracledb_exporter默认监控指标没有你想要的怎么办?很简单的!oracledb_exporter支持自定义指标,按照其标准格式编写相应的指标,在??文件格式以.toml结尾的配置文件(指标文件)中写入自定义指标,那么oracledb_exporter如何使用这个自定义指标文件呢?有两种方式,如下:使用--custom.metrics参数,然后指定指标文件设置全局或局部环境变量,如下:exportCUSTOM_METRICS=my-custom-metrics.toml自定义指标文件格式和规范写一个自定义指标文件,一定要按照它的规范来写,我们用官方小栗子来解释,剖析,官方小栗子如下:[[metric]]context="test"request="SELECT1asvalue_1,2asvalue_2FROMDUAL"metricsdesc={value_1="简单示例始终返回1。",value_2="相同但始终返回2。}根据上面的小栗子,我们可以知道,必须包含的元素如下:一个或多个指标,需要一个或多个[[metric]]部分,即一个metric,对应一个[[公制]]部分。对于每个[[metric]]部分,至少要有以下字段:context:metricname(meaningful(of)request:writecustomsqlmetricsdesc:descriptionofindicators自定义指标实战下面我们用一个更实际的案例来进行实战实战,假设要获取IOPS指标,需要计算该指标,特别需要注意的是,在编写自定义指标之前,必须编写并调试SQL。笔者写的获取iops的sql如下:selectsum(decode(name,'物理读IO请求',value,'物理写IO请求',value,0))asiops,sum(decode(name,'physicalreadbytes',value,'physicalwritebytes',value,0))/1024/1024asmbpsfromv$sysstatwherenamein('physicalreadIOrequests','physicalwriteIOrequests','physicalreadbytes','物理读总字节数','物理写字节数','物理写总字节数','物理读总IO请求数','物理写总IO请求数');通过plsql工具连接oracle执行调试,看结果是否如预期,效果如下:完美!达到了预期,好吗?创建一个自定义指标文件“./custom_metrics/performance_metric.toml”,写成如下:',value,'physicalwriteIOrequests',value,0))asiops,sum(decode(name,'physicalreadbytes',value,'physicalwritebytes',value,0))/1024/1024asmbpsfromv$sysstatwherenamein('物理读IO请求','物理写IO请求','物理读字节','物理读总字节','物理写字节','物理写总字节','物理readtotalIOrequests','physicalwritetotalIOrequests')"metricsdesc={iops="每秒读写操作数"}启动oracledb_exporter启动脚本如下:#!/bin/sh#监控和测试环境oraclesource.env_var/.9161_192.168.11.8_PDB1_ZABBIX.DBnohuporacledb_exporter--log.levelwarn--web.listen-address:9161--custom.metrics./custom_metrics/performance_metric.toml>>./logs/9161_192.168.11.8_PDB1_ZABBIX.DB.log&启动启动:[root@exporter-server-masteroracle]#shstart.sh效果如下:完美!一切都符合预期!关于指标的其他字段,在实际应用中,也可以使用指标部分的labels和ignorezeroreresult字段。下面简单了解一下它们的使用场景标签:顾名思义,这就是标签的意思,除了为指标取一个有意义的名字之外,其实还可以自己定义一些标签(当然如果需要的话)。下面是它的定义格式:[[metric]]...labels=["iops","io","io_performance"]...刚才的例子中使用了labels,可以定义多个labels相同的指标,以逗号分隔。ignorezeroreresult:这个字段是什么鬼?该字段的作用是忽略0的结果。假设在您的自定义指标中,如果某个时刻获取的值为0,但您想要忽略它,那么您可以使用该字段。它的定义格式如下:ignorezeroresult=true当然,如果不显示规范,则表示默认不忽略0的结果。oracledb_exporter的主备配置oracledb_exporter的从服务器需要拉取主服务器的配置。当master的配置发生变化时,会通知slave,然后slave会访问masetr拉取。其实这个原理和笔者之前设计prometheus主备方案时拉取配置文件的原理是一样的,脚本也可以修改复用。下面我来配置一下。master配置按照我们之前的规划,所有数据库监控的根目录都在/data/database_monitoring/路径下,所以我们把下面的脚本放到这个目录下拉上来。slave在拉取配置时访问8000端口(拉取后的默认端口),这样就可以同步目录下所有业务的索引文件。部署配置文件同步Api创建startOracledbExporterConfSyncApi.sh#!/bin/shnohup/usr/bin/python-mSimpleHTTPServer>/dev/null&提取脚本并检查[root@exporter-server-masterdatabase_monitoring]#shstartOracledbExporterConfSyncApi.sh[root@exporter-server-masterdatabase_monitoring]#netstat-tulnp|grep8000tcp000.0.0.0:80000.0.0.0:*LISTEN1462/python部署配置文件变化时的检测脚本注意:这个脚本也要运行在/data/database_monitoring/#路径下的startTarPackConf.sh!/bin/shtime_log=`date"+%Y-%m-%d%H:%M:%S"`echo"${time_log}配置检查器已启动"task_wait_sec=4find./business-typef-print0|xargs-0md5sum>./cfmd5/cfmd5.listwhiletruedotime_bak=`date"+%Y%m%d%H%M%S"`time_log=`date"+%Y-%m-%d%H:%M:%S"`md5sum-c./cfmd5/cfmd5.list>./cfmd5/check_cfmd5.logmd5ret=`cat./cfmd5/check_cfmd5.log|grep“失败”|wc-l`whiletruedoif[${md5ret}-gt0]thenecho"${time_log}配置文件发生变化,触发打包动作"mv./business.tar.gz./backup/business.tar.gz_bak_${time_bak}tar-zcfbusiness.tar.gzbusiness/echo1>./notice_slave.actionbreakelseecho0>./notice_slave.actionbreakfidonefind./business-typef-print0|xargs-0md5sum>./cfmd5/cfmd5.listsleep${task_wait_sec}done继续在该目录下创建检测脚本需要的目录[root@exporter-server-masterdatabase_monitoring]#mkdircfmd5[root@exporter-server-masterdatabase_monitoring]#mkdirbackup[root@exporter-server-masterdatabase_monitoring]#mkdirlogspullupthescriptandcheck[root@exporter-server-masterdatabase_monitoring]#nohupsh./startTarPackConf.sh>>./logs/tar_pack.log&[root@exporter-server-masterdatabase_monitoring]#ps-aux|grepTarroot17550.00.61132921464pts/0S19:400:00sh./startTarPackConf.shBackup配置在数据目录下创建标准目录[root@exporter-server-backup~]#mkdir-p/data/database_monitoring[root@exporter-server-backup~]#cd/data/database_monitoring/[root@exporter-server-backupdatabase_monitoring]#部署拉取配置脚本创建定时拉取配置脚本startUpdateSyncConf.sh#!/bin/shtime_log=`date"+%Y-%m-%d%H:%M:%S"`echo"${time_log}configupdaterstarted"pull_wait_sec=2whiletruedowgethttp://192.168.11.20:8000/notice_slave.action-Onotice_slave.action>/dev/null2>&1status=`cat./notice_slave.action`if[${status}-eq1]thentime_bak=`date"+%Y%m%d%H%M%S"`time_log=`date"+%Y-%m-%d%H:%M:%S"`echo"${time_log}从master下载配置压缩文件"wgethttp://192.168.11.20:8000/business.tar.gz-Obusiness.tar.gzecho"${time_log}备份原配置目录"mv./business./backup/business_bak_${time_bak}echo"${time_log}解压下载的配置包"tar-zxfbusiness.tar.gzfisleep${pull_wait_sec}donecreate脚本所需的目录[root@exporter-server-backupdatabase_monitoring]#mkdirbackup[root@exporter-server-backupdatabase_monitoring]#mkdirlogs拉起脚本并检查nohupshstartUpdateSyncConf.sh>./logs/update_sync.log&配置同步验证修改master上的配置文件笔者打开之前配置的配置文件,修改context内容,后面加了一个test,改成:"reads_and_writes_per_second_test"[[metric]]context="reads_and_writes_per_second_test"labels=["iops"]request="selectsum(decode(name,'物理读取IO请求',value,'物理写入IO请求',value,0))asiops,sum(decode(name,'physicalreadbytes',value,'physicalwritebytes',value,0))/1024/1024asmbpsfromv$sysstatwherenamein('physicalreadIOrequests','physicalwriteIOrequests','物理读字节数','物理读总字节数','物理写字节数','物理写总字节数','物理读总IO请求数','物理写总IO请求数')"metricsdesc={iops="每秒读写次数"}在备份上查看是否有触发拉取修改配置文件后,立即登录备份查看,成功与master保持同步。拉起备份的oracledb_exporter看效果masterbackup!非常完美!一切正常,可以正常采集监控指标。不过需要注意的是,在正式生产使用中,只需要激活master的oracledb_exporter,backup的oracledb_exporter不需要激活。当master挂了,VIP就会漂到backup上接手。这时候可以去备份手动拉起oracledb_exporter,也可以写个脚本自动拉起。我不会做示范!写到这里,oracledb_exporter主备方案的规划部署全部结束。欢迎小伙伴们按照作者的方案进行实践,给出更好的方案。我们将共同学习,共同进步。再次感谢大家!请多多关注我们,转发,收藏,点赞!本文转载于:https://mp.weixin.qq.com/s/gF...