3 共通的监控工具
前面介绍的Postgresql监控工具都偏向于性能分析,没有告警功能。而且它们只是针对Postgresql的监视,有时需要监控整个业务相关的系统,这时候就要考虑通用的监控工具了。Linux下比较适合监控数据库的常用的工具有Nagios和Zabbix。Zabbix更容易使用,现在看上去也更被多数人看好,所以本文只介绍Zabbix监控Postgresql的方法。3.1 Zabbix简介
Zabbix是一个all in one高度集成的企业级监控解决方案。由一个中心的Zabbix Server和若干可能安装有Zabbix Agent被监控设备构成,主要特性可概括为以下几点
数据采集
支持agent和agent less(SNMP,IPMI,HTTP,FTP...)
支持基于JMX对java应用的监视
可灵活定制agent
数据存储
数据库为Postgresql,MysqL,Oracle,sqlite或DB2
可配置历史和趋势数据的保存时间
内建旧清理程序防止数据膨胀
报警
可定制报警阈值
灵活设置报警方式,邮件,SMS,脚本
支持报警升级
报警消息可使用宏变量定制
可视化
可定制的数据图形
仪表盘
地图
所有配置都通过GUI编辑
大规模部署
支持模板
自动发现主机和监控项目
通过Zabbix Proxy实现分布式部署
其他
Zabbix API
认证和访问控制
IT资产收集
zabbix要想监视Postgresql这种应用型的对象,一般使用zabbix agent。zabbix agent有2种工作方式。
方式1:被动代理
由Zabbix Server(或Proxy)主动查询数据(如cpu负载),作为响应Zabbix Agent返回查询结果。这也是最简单最常用的方式。
方式2:主动代理
Zabbix Agent先从Zabbix Server获取需要主动报告的监控项目一览,然后定期发送新值到Zabbix Server。主动代理可以用于处理时间比较长的监控项,比如log 。
也可以使用Zabbix Trapper
方式3:Trapper
由Zabbix Agent主动报告数据。被监控端可调用zabbix_send命令或直接利用Socket发送数据到Zabbix Server。通过Trapper可以只在状态变更时进行报告。
另外还有把Postgresql状态通过SNMP代理发布的方案(http://pgsnmpd.projects.pgfoundry.org/),估计用的不多,本文不涉及。
详细参考:
https://www.zabbix.com/documentation/2.4/manual/concepts/agent
https://www.zabbix.com/documentation/2.4/manual/appendix/items/activepassive
https://www.zabbix.com/documentation/2.4/manual/config/items/itemtypes/trapper
Zabbix没有内置对Postgresql的监控项,所以如果要监控Postgresql需要做一些监控项的配置或定制,下面会介绍几种方法。
3.2 方法1:直接扩充UserParameter 自己修改zabbix_agentd.conf的配置文件,在Zabbix agent上增加Postgresql相关的监控项,使用psql发sql的方式获取Postgresql的性能数据。
例
zabbix_agentd.conf
- #Get the Postgresql version
- UserParameter=psql.version,psql--version|head-n1
- #Get the total numberofServer Processes that are active
- UserParameter.server_processes-t-c"select sum(numbackends) from pg_stat_database"
- #Get the total numberofcommited transactions
- UserParameter.tx_commited"select sum(xact_commit) from pg_stat_database"
- #Get the total numberofrolled back transactions
- UserParameter.tx_rolledback"select sum(xact_rollback) from pg_stat_database"
参照
https://www.zabbix.com/wiki/howto/monitor/db/postgresql
3.3方法2:扩充UserParameter调用Postgresql监视脚本
和方法1类似,但方法1中定义的UserParameter太多,为方便起见,可以把监控Postgresql的sql命令做成一个单独的脚本。
比如参照下面的例子https://www.zabbix.com/forum/showthread.PHP?t=8009
zabbix_agentd.conf:
UserParameter=postgresql[*]/opt/zabbix/bin/zapost $1 $2