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

采用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脚本部分非原创,在什么网站上抄袭的,已经记不得了。


你可能感兴趣的:(zabbix)