工控智汇

工控智汇

zabbix系列(十二) 监控MongoDB业务数据

admin 150 193

目录

一、简介

二、部署说明

2.1编写python程序进行获取mogno数据

2.2、上传python脚本至服务器,并测试通过

2.3、配置zabbixweb页面,获取数据入库

2.4、配置grafana展现数据,详细配置可参考我之前的grafana文章

一、简介

网上有很多的zabbix监控mongodb的性能模版,但很少有调用获取mongo中的表数据的,因为公司需要做业务监控,所有就做了一下,基本思路是通过
1、python获取mongo表数据,python获取到数据后做逻辑计算

2、zabbix调用python获取数据入库,并配置触发器进行监控

3、grafana调用zabbix的api接口进行数据可视化展现

环境介绍:

服务器版本:centos7

python版本:3.6

zabbix版本:3.4.10

grafana版本:4.6.3

mongodb版本:3.0(集群)被监控的表为

各个服务的搭建本文中就不介绍了,需要了解的同学可以去找我的zabbix系列文章,下面进行说明

二、部署说明2.1编写python程序进行获取mogno数据

先通过工具,查询下mongo数据,推介工具nosqlboosterformongodb

mac的版本有需要的可以从这里下载:

windows版本从这里下载:

编写python脚本,脚本如下:

-*-coding:utf-8-*-importjsonimportdatetimeimporttimeimportloggingimportsysimportosimportsubprocessimportpymongoclasszabbixmongodb:这里进行判断,如果列表为空,则添加,否则,直接去写日志(level=,定义输出log的格式datefmt='%Y-%m-%d%A%H:%M:%S',log文件名filemode='a')配置这一段是为了输出至屏幕定义consolehandler定义该handler级别定义该handler格式().addHandler(console)配置这一段是为了输出至屏幕().removeHandler(console)defselmongodata(self):客户编号appCode=""供应商channel=""终止任务(0)mongoconf=""ifmongoenv=="dev":mongoconf=DEV_MONGO_HOSTelifmongoenv=="stg":mongoconf=STG_MONGO_HOSTelifmongoenv=="pro":mongoconf=PRO_MONGO_HOSTelse:mongoconf=DEV_MONGO_HOSTmyquery={"appCode":appCode,"orderType":orderType,"channel":channel}loginfo='workcode:【'+workcode+'】,【---执行查询命令---】数据库环境:【'+mongoenv+'】,查询条件:【'+str(myquery)+'】'_out(loginfo,'info')try:myclient=(mongoconf)mydb=myclient["boluome"]mycol=mydb["data_statistics"]s_str=_one(myquery){'_id':ObjectId('5bf64f5be4ba49123aef2cda'),--数据库uuid'orderType':'waimai',--场景'updatedAt':00,--更新时间戳'orderPayNum':117,--当天支付订单量'orderTobePayNum':0,--当天待支付订单量若异常返回print('error')print(type(s_str),type(s_str),s_str)'appCode':'zjrcu',--客户编号'channel':'eleb',--供应商'orderCountNum':128,--当天下单总量'orderCancelNum':11,--当天取消订单量'date':'2018-12-1016:05'}--数据更新时间pythons="/etc/zabbix/qingyunsdk/"huanjing="dev"forxins_str:strs_orderCountNum="UserParameter=mongodata-"+huanjing+"-"+x["appCode"]+"-"+x["orderType"]+"-"+x["channel"]+"-orderCountNum,"+pythons+""+huanjing+""+x["appCode"]+""+x["orderType"]+""+x["channel"]+"orderCountNum"strs_orderPayNum="UserParameter=mongodata-"+huanjing+"-"+x["appCode"]+"-"+x["orderType"]+"-"+x["channel"]+"-orderPayNum,"+pythons+""+huanjing+""+x["appCode"]+""+x["orderType"]+""+x["channel"]+"orderPayNum"strs_orderCancelNum="UserParameter=mongodata-"+huanjing+"-"+x["appCode"]+"-"+x["orderType"]+"-"+x["channel"]+"-orderCancelNum,"+pythons+""+huanjing+""+x["appCode"]+""+x["orderType"]+""+x["channel"]+"orderCancelNum"strs_orderTobePayNum="UserParameter=mongodata-"+huanjing+"-"+x["appCode"]+"-"+x["orderType"]+"-"+x["channel"]+"-orderTobePayNum,"+pythons+""+huanjing+""+x["appCode"]+""+x["orderType"]+""+x["channel"]+"orderTobePayNum"print(strs_orderCountNum)print(strs_orderPayNum)print(strs_orderCancelNum)print(strs_orderTobePayNum)()if__name__=='__main__':数据连接参数说明authSource=admin验证用、readPreference=secondaryPreferred当主节点不能读取时候会自动切换至从节点读取,生成配置文件,zabbix时候调用,执行python3/Users/ll/Desktop/work/gogs/qingyunsdk//Users/ll/Desktop/work/gogs/qingyunsdk/执行查询命令()

2.2、上传python脚本至服务器,并测试通过

上传该程序至服务器,我是上传至zabbix-server所在服务器,其实这个可以上传任务服务器,上面的环境需要有python3和zabbix-agent

安装pyhton连接mongodb的插件pymongo

使用pip3installpymongo

[root@i-pumjfiuu~]ls
qingyunsdktcp____

[root@i-pumjfiuuzabbix]ls

[root@i-pumjfiuuqingyunsdk]

chmod+

测试脚本是否起作用

[root@i-pumjfiuuqingyunsdk]cd..
[root@i-pumjfiuuzabbix]cdzabbix_/
[root@i-pumjfiuuzabbix_]
编辑,配置zabbix的监控项

比如我这边,添加以下内容,其中mongodata-dev-icbc-jiayouka-juhe-orderCountNum就是zabbix的键值:

[root@i-pumjfiuuzabbix_]cd..
[root@i-pumjfiuuzabbix]开启远程脚本执行权限EnableRemoteCommands=1脚本使用root权限执行AllowRoot=1

执行重启命令使配置生效

[root@i-pumjfiuuzabbix]/usr/bin/zabbix_"mongodata-dev-icbc-jiayouka-juhe-orderCountNum"

ok,正常,如果这里报错就需要检查下zabbix的zabbix_和的配置

2.3、配置zabbixweb页面,获取数据入库

找到主机zabbixserver,新建监控项,配置如下

设置键值:mongodata-dev-oklife-game-yizhong-orderCountNum

建立图形验证该键值是否能正常获取数据

ok,能获取数据

2.4、配置grafana展现数据,详细配置可参考我之前的grafana文章