zabbix监控postgreSQL最简单方式(成功应用)

来源:互联网 发布:淘宝差评能追加评价吗 编辑:程序博客网 时间:2024/05/29 12:48

采用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 "错误"fiexit $rval## end pgsqlMonitor.sh 

3、当然,在最后psql连接数据库的地方没有数据库密码,这个时候需要单独做配置

切换到zabbix用户下su - zabbixvi .pgpass 加入下面的数据库配置ip:端口:数据库:用户名:密码


4、最后一步:

使用 

zabbix_get -s ip -p 10050 -k "postgresql.get[totalsize]" 如果返回结果,且不报错,说明一切ok。

5、如果要取数据库其他数据,只需要在上面的shell脚本中新增case即可。

6、说明,上面的shell脚本部分非原创,在什么网站上抄袭的,已经记不得了。


原创粉丝点击