结合Zabbix与Ansible打造自动化数据库监控体系

一、前言

随着业务的飞速发展,数据库服务器量级飞速增长,比如Oracle、MySQL、Redis、MongoDB的使用更加普及,对数据库运维人员的要求也越来越高,构建一个真正好用的监控系统是一项艰巨的任务。在监控系统的开源软件中,可供选择的工具众多,然而真正适合自己需求、能够真正解决自己数据库问题的监控系统软件却凤毛麟角。

Zabbix和Ansible分别是两款非常流行的开源监控和自动化工具。具有上手简单,学习曲线平滑、配置简单、功能强大、扩展性强等优点。

本次将分享如何使用Zabbix并结合Ansible打造自动化数据库监控体系。

二、Zabbix自动化核心功能介绍

Zabbix是企业级监控解决方案,和自动化相关的核心功能包括:LLD、API、Zabbix_trapper。

1、LLD

在数据库监控中监控的对象往往是变化的,以部署Redis来说:近几年硬件发展迅速,在企业中新购的X86服务器配置基本都在32C、256GB以上,大家都知道Redis是用“单线程-多路复用IO模型”来实现高性能的内存数据服务,只能用到一个CPU核心,内存配置一般也在8G-16G左右,为了提高资源利用率,一般会选择在一台服务器上部署多个实例。当需要监控的内容比较多的时候,此时每次添加一批实例都去手动部署监控、配置告警的话就会造成大量人力的消耗。

此时通过LLD能自动发现并自动发现添加新部署实例的监控项,包括Item、Trigger这些的自动添加,做到一次部署永久受益,提高数据库监控人员的幸福值。

LLD的核心思路是给服务端发送一个JSON的数据格式,下面以Redis Standalone类型实例为例说明。

  • 首先模板中添加discovey rules增加一个trapper类型:

  • 当关联好Redis的模板后,使用zabbix_sender发送给如下的数据:

{

“data”:[

{

“{#REDIS_PORT}”:6379

}

]

}

就完成了Redis的监控添加,其中一项Item示例如下:

官方也提供了详细的API功能说明。

官方API:

https://www.zabbix.com/documentation/3.2/manual/api

下面通过调用user.login的例子来说明:

3、Zabbix_trapper

Zabbix_trapper是不通过zabbix-client收集数据,直接主动向Zabbix Server发送数据的一种方式。

我们监控数据库,如果使用Agent的方式发送,要用到agent conf文件中的userParameter,这样需要接受一个参数,来返回对应的监控数据,这样等于有多少个Item就要在一次监控周期内执行多少次命令,并且对数据库说也是要建立相应次的短链接,增加了数据库的负担。

此外,在监控的数据库实例比较多的情况下,也将给Zabbix Server带来较大的压力,可以通过使用trapper的方式,一次搜集所有的监控数据到一个JSON中,并且只给Zabbix Server发送一次。

使用方式如下:

 ●  直接调用:

三、监控自动化

监控运维自动化的目的在于解放、简化、方便运维人员的工作,提高效率,减少人为故障,思路是能自动坚决不手动,将高频率低风险的监控操作全部自动。自动化的基础是基础信息的准确性和各种配置信息规则的规范化。

1、监控规范化

约定服务器主机名规范:见到这个主机名就能知道这个设备是部署了什么样的服务,以及是什么业务来使用的。

约定服务器 卡IP规范:比如一台服务器可能有多个IP:应用IP、数据IP等,监控要用哪个IP以及哪块 卡绑定IP,需要统一。

约定服务部署规范:统一所有被监控服务器的Zabbix Agent部署目录,监控脚本部署目录。还有包括数据库的标准化比如,如Oracle、MySQL、Redis这些常见服务的应用初始化流程、部署更新流程等。

警等级的规范:用于区分 警发给谁、怎么发、如何做 警升级等,还可以根据等级和监控项进行自动处理,等级较高的优先处理,较低的可以集中处理等。

等这些标准规范固化下来之后,消除了各种差异,才能为后续的自动化开发铺平前进的道路。因为连标准都没有的话,那就毫无自动化构建可言。

2、自动化部署

我们自己的项目后端开发语言为Python,Ansible基于Python开发,能够很好的支持Python项目进行二次开发发布。在不需要考虑大规模并发性能的情况下,Ansible是最合适的自动化工具,只需要一台能够SSH到其他服务器的管理机。

如上图所示,只需要在Ansible Server上执行:

这样就完成了对MySQL模板的管理,从而形成闭环。

四、数据库监控项目

下面介绍如何根据Oracle、MySQL、Redis、Mongo以及自己的需求情况使用Python开发一套DBA_Monitor项目,使监控更加全面、丰富、灵活,使交付更加快速、稳定、高效。

项目目录结构如下:

如果我们想要添加新的监控user_status,只需在Checks增加相应的方法:

3、Redis

Redis实例的监控是使用Python-Redis通过info命令来获取信息,并对信息进行处理来完成。Redis Standalone和Cluster都可以在一次LLD添加item后通过info命令收集数据来监控,而Seninel稍微特殊,下面主要说明Seninel的监控技巧。

包括item也要设置{#REDISPORT}和{#SENTINELMASTER}两个宏信息:

五、总结

Zabbix结合Ansible一键部署监控,做到了安装Zabbix Agent,修改Agent配置文件、Agent加入开机启动、启动Zabbix Agent、添加客户端Host、添加Host的模板等一系列动作,并且可以和CMDB结合,进行自动部署,简化了数据库监控操作步奏,提高数据库监控人员的工作效率。

原文发布时间为:2018-10-10

文章知识点与官方知识档案匹配,可进一步学习相关知识云原生入门技能树首页概览8587 人正在系统学习中 相关资源:火凤凰软件安装包封装大师8.56中文已注册版本.exe_火凤打包…

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2018年9月8日
下一篇 2018年9月8日

相关推荐