采用zabbix agent代理的模式来做这个事情
1、cd zabbix_agentd.d,新增自定义key
vi userparameter_pgsql.conf
UserParameter=postgresql.get[*],zabbix目录/alertscripts/pgsqlMonitor.sh $1 $2
当然要让这个配置生效,必须修改zabbix_agentd.conf文件,设置Include=zabbix目录/zabbix_agentd.d/*.conf
2、cd alertscripts
vi pgsqlMonitor.sh
#!/bin/sh
#######################################
# Name:pgsqlMonitor.sh #
# Checks PostgreSQL activity . #
# Author:akqjxx #
# Version: 1.0 #
#######################################
zapostver="1.0"
rval=0
sql=""
case $1 in
'totalsize')
# 查数据库总大小(占用磁盘空间)
sql="select sum(pg_database_size(datid)) as total_size from pg_stat_database"
;;
'db_cache')
# 缓存
if [ ! -z $2 ]; then
shift
sql="select cast(blks_hit/(blks_read+blks_hit+0.000001)*100.0 as numeric(5,2)) as cache from pg_stat_database where datname = '$2'"
fi
;;
'db_success')
# 成功率
if [ ! -z $2 ]; then
shift
sql="select cast(xact_commit/(xact_rollback+xact_commit+0.000001)*100.0 as numeric(5,2)) as success from pg_stat_database where datname = '$2'"
fi
;;
'server_processes')
#数据库所有连接数
sql="select sum(numbackends) from pg_stat_database"
;;
'tx_commited')
#提交数
sql="select sum(xact_commit) from pg_stat_database"
;;
'tx_rolledback')
#回滚数
sql="select sum(xact_rollback) from pg_stat_database"
;;
'db_size')
# 查数据库总大小(占用磁盘空间)
if [ ! -z $2 ]; then
shift
sql="select pg_database_size('$2')" #as size"
fi
;;
'db_connections')
# 当前连接数
if [ ! -z $2 ]; then
shift
sql="select numbackends from pg_stat_database where datname = '$2'"
fi
;;
'max_connections')
# 最大连接数
if [ ! -z $2 ]; then
shift
sql="show max_connections"
fi
;;
'db_returned')
# 呈现这些数据要返回给客户的端的行数
if [ ! -z $2 ]; then
shift
sql="select tup_returned from pg_stat_database where datname = '$2'"
fi
;;
'db_fetched')
# 呈现给用户的行数
if [ ! -z $2 ]; then
shift
sql="select tup_fetched from pg_stat_database where datname = '$2'"
fi
;;
'db_inserted')
# 插入记录数
if [ ! -z $2 ]; then
shift
sql="select tup_inserted from pg_stat_database where datname = '$2'"
fi
;;
'db_updated')
# 更新记录数
if [ ! -z $2 ]; then
shift
sql="select tup_updated from pg_stat_database where datname = '$2'"
fi
;;
'db_deleted')
# 删除记录数
if [ ! -z $2 ]; then
shift
sql="select tup_deleted from pg_stat_database where datname = '$2'"
fi
;;
'db_commited')
# 提交记录数
if [ ! -z $2 ]; then
shift
sql="select xact_commit from pg_stat_database where datname = '$2'"
fi
;;
'db_rolled')
# 回滚记录数
if [ ! -z $2 ]; then
shift
sql="select xact_rollback from pg_stat_database where datname = '$2'"
fi
;;
'version')
#数据库版本
sql="version"
;;
'zapostver')
#
echo "$zapostver"
exit $rval
;;
*)
echo " 参数错误......."
exit $rval
;;
esac
if [ "$sql" != "" ]; then
if [ "$sql" == "version" ]; then
psql --version|head -n1
rval=$?
else
/usr/local/pgsql/bin/psql -h 主机 -p 端口 数据库 用户名 -t -c "$sql"
rval=$?
fi
fi
if [ "$rval" -ne 0 ]; then
echo "错误"
fi
exit $rval
#
# end pgsqlMonitor.sh
3、当然,在最后psql连接数据库的地方没有数据库密码,这个时候需要单独做配置
切换到zabbix用户下
su - zabbix
vi .pgpass 加入下面的数据库配置
ip:端口:数据库:用户名:密码
4、最后一步:
使用
zabbix_get -s ip -p 10050 -k "postgresql.get[totalsize]" 如果返回结果,且不报错,说明一切ok。
5、如果要取数据库
其他数据,只需要在上面的shell脚本中新增case即可。
6、说明,上面的shell脚本部分非原创,在什么网站上抄袭的,已经记不得了。