ubuntu 16.04 + zabbix 3.4 + postgresql pg_monz

os: ubuntu 16.04
zabbix: 3.4
pg_monz: 2.1

ip 规划
192.168.56.101 node1 pgsql 9.6 master
192.168.56.102 node2 pgsql 9.6 slave
192.168.56.103 node3 zabbix proxy
192.168.56.104 node4 zabbix server

本篇blog介绍在 node1、node2 节点上使用 pg_monz 监控 postgresql 的具体过程。

查看 zabbix_agentd.conf

# egrep ^[A-Z] /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=192.168.56.103
ServerActive=192.168.56.103
Hostname=node2
AllowRoot=1
Include=/etc/zabbix/zabbix_agentd.d/*.conf
LoadModulePath=/usr/lib/zabbix/modules

pg_monz 的简介

Directory/File name                         Function
Template                                      Monitoring template
usr-local-bin/*                             Backend scripts
usr-local-etc/*                             Configuration files for backend scripts
zabbix-agentd.d/userparameter_pgsql.conf      UserParameter configuration file for Zabbix Agent

Backend scripts
Usr-local-bin directory includes some backend scripts. These scripts are called by UserParameters which are defined at userparameter_pgsql.conf.

Configuration files
Usr-local-etc directory includes two configuration files. These scripts are used to executing backend scripts.

pgsql_funcs.conf : Configuration file of connection information to PostgreSQL server
pgpool_funcs.conf : Configuration file of connection information to pgpool-II

[Note] At version 1.0, this information is set to Zabbix MACRO. But, at version 2.0, this information is set to above files.

pg_monz 的模版说明

Template directory includes the following 5 monitoring template xml.

Template name                           Use
Template_App_PostgreSQL.xml             Monitoring for single PostgreSQL server
Template_App_PostgreSQL_SR.xml          Monitoring for Streaming Replication
Template_App_PostgreSQL_SR_Cluster.xml  Monitoring for the whole Streaming Replication cluster
Template_App_pgpool-II.xml              Monitoring for pgpool-II (pgpool-II 3.5 or earlier)
Template_App_pgpool-II-36.xml             Monitoring for pgpool-II (pgpool-II 3.6 or later)
Template_App_pgpool-II_watchdog.xml     Monitoring for the whole pgpool-II cluster

pg_monz下载、安装

Requirements
pg_monz requires the following software products: Also note that Zabbix Agent and Zabbix Sender must be installed on the monitoring target server since it utilizes the functions of Zabbix Agent and Zabbix Sender for acquiring PostgreSQL information.

Software name                               Version
Zabbix Server,Zabbix Agent,Zabbix Sender    2.0 or later
PostgreSQL                                9.2 or later
pgpool-II                                   3.4.0 or later

Since bc command is executed in pg_monz backend scripts, bc command must be installed on the monitoring target server.

安装 zabbix-sender

# apt install zabbix-sender bc

# dpkg -l |grep -i zabbix
ii  zabbix-agent                        1:3.4.13-1+xenial                          amd64        Zabbix network monitoring solution - agent
ii  zabbix-release                      3.4-1+xenial                               all          Zabbix official repository configuration
ii  zabbix-sender                       1:3.4.13-1+xenial                          amd64        Zabbix network monitoring solution - sender

从git下载,node1、node2上都需要操作

# cd /tmp
# wget https://github.com/pg-monz/pg_monz/archive/2.1.tar.gz
# tar -zxvf ./2.1.tar.gz 
# cd pg_monz-2.1/
# more quick-install.txt

# cd pg_monz/
# cp usr-local-etc/* /usr/local/etc
# cp usr-local-bin/* /usr/local/bin
# cp zabbix_agentd.d/* /etc/zabbix/zabbix_agentd.d

zabbix 导入监控模版

zabbix web 页面操作

Configuration -> Templates -> Import

导入 pg_monz 模版 Template App PostgreSQL.xml、Template_App_PostgreSQL_SR.xml、Template_App_PostgreSQL_SR_Cluster.xml

zabbix 主机配置模板

zabbix web 页面操作
Configuration -> Host groups -> Create host group

输入 PostgreSQL,输入的这个名字对应 Template_App_PostgreSQL_SR_Cluste 模版的 {$PG_HOST_GROUP} 值

Configuration -> Hosts

点击某台机器,进去选择 Templates,
点击Select,选中 Template App PostgreSQL、Template_App_PostgreSQL_SR 或者Template_App_PostgreSQL_SR_Cluster ,点击页下面的 Select
点击 Add
点击 Update

参考:
http://pg-monz.github.io/pg_monz/index-en.html

https://github.com/pg-monz/pg_monz/releases
https://github.com/pg-monz/pg_monz/releases/tag/2.1

https://github.com/pg-monz/pg_monz

附录:

# ls -l /tmp/pg_monz-2.1/pg_monz/template
total 344
-rw-rw-r-- 1 root root  56856 Mar 30 17:32 Template_App_pgpool-II-36.xml
-rw-rw-r-- 1 root root   6216 Mar 30 17:32 Template_App_pgpool-II_watchdog.xml
-rw-rw-r-- 1 root root  53618 Mar 30 17:32 Template_App_pgpool-II.xml
-rw-rw-r-- 1 root root   7974 Mar 30 17:32 Template_App_PostgreSQL_SR_Cluster.xml
-rw-rw-r-- 1 root root  52620 Mar 30 17:32 Template_App_PostgreSQL_SR.xml
-rw-rw-r-- 1 root root 164024 Mar 30 17:32 Template_App_PostgreSQL.xml
# ls -l /tmp/pg_monz-2.1/pg_monz/usr-local-bin
total 88
-rwxrwxr-x 1 root root  747 Mar 30 17:32 find_dbname.sh
-rwxrwxr-x 1 root root 2064 Mar 30 17:32 find_dbname_table.sh
-rwxrwxr-x 1 root root 1363 Mar 30 17:32 find_pgpool_backend_ip.sh
-rwxrwxr-x 1 root root  841 Mar 30 17:32 find_pgpool_backend.sh
-rwxrwxr-x 1 root root  490 Mar 30 17:32 find_sr_client_ip.sh
-rwxrwxr-x 1 root root  406 Mar 30 17:32 find_sr.sh
-rwxrwxr-x 1 root root 1921 Mar 30 17:32 pgpool_backend_status.sh
-rwxrwxr-x 1 root root 2287 Mar 30 17:32 pgpool_cache.sh
-rwxrwxr-x 1 root root 1547 Mar 30 17:32 pgpool_connections.sh
-rwxrwxr-x 1 root root  433 Mar 30 17:32 pgpool_delegate_ip.sh
-rwxrwxr-x 1 root root  255 Mar 30 17:32 pgpool_simple.sh
-rwxrwxr-x 1 root root 2781 Mar 30 17:32 pgsql_db_funcs.sh
-rwxrwxr-x 1 root root  256 Mar 30 17:32 pgsql_primary.sh
-rwxrwxr-x 1 root root 4903 Mar 30 17:32 pgsql_server_funcs.sh
-rwxrwxr-x 1 root root  241 Mar 30 17:32 pgsql_simple.sh
-rwxrwxr-x 1 root root 4680 Mar 30 17:32 pgsql_sr_server_funcs.sh
-rwxrwxr-x 1 root root  249 Mar 30 17:32 pgsql_standby.sh
-rwxrwxr-x 1 root root 5368 Mar 30 17:32 pgsql_tbl_funcs.sh
-rwxrwxr-x 1 root root 1319 Mar 30 17:32 pgsql_userdb_funcs.sh
# ls -l tmp/pg_monz-2.1/pg_monz/usr-local-etc
total 8
-rw-rw-r-- 1 root root 119 Mar 30 17:32 pgpool_funcs.conf
-rw-rw-r-- 1 root root  65 Mar 30 17:32 pgsql_funcs.conf
# ls -l /tmp/pg_monz-2.1/pg_monz/zabbix_agentd.d
total 4
-rw-rw-r-- 1 root root 3108 Mar 30 17:32 userparameter_pgsql.conf

需要copy的东西

# cp /tmp/pg_monz-2.1/pg_monz/zabbix_agentd.d/* /etc/zabbix/zabbix_agentd.d
# cp /tmp/pg_monz-2.1/pg_monz/usr-local-bin/* /usr/local/bin
# cp /tmp/pg_monz-2.1/pg_monz/usr-local-etc/* /usr/local/etc

1、userparameter_pgsql.conf

# PostgreSQL user parameter

# Discovery Rule
#
# Database Discovery
UserParameter=db.list.discovery[*],"$1"/find_dbname.sh "$2"
UserParameter=db_table.list.discovery[*],"$1"/find_dbname_table.sh "$2"
UserParameter=sr.discovery[*],"$1"/find_sr.sh "$2"
UserParameter=sr.status.discovery[*],"$1"/find_sr_client_ip.sh "$2"
UserParameter=sr.db.list.discovery[*],"$1"/find_dbname.sh "$2"

# For pg_monz 2.0 psql monitoring
# $1: pgsql_*_funcs.sh directory path
# $2: pgsql_funcs.conf directory path
UserParameter=psql.running[*],"$1"/pgsql_simple.sh "$2"
UserParameter=psql.primary_server[*],"$1"/pgsql_primary.sh "$2"
UserParameter=psql.standby_server[*],"$1"/pgsql_standby.sh "$2"

# For pg_monz 2.0
#---  PostgreSQL user parameter  -----------------------------------------------
# $1: pgsql_*_funcs.sh directory path
# $2: pgsql_funcs.conf directory path
# $3: hostname (which means the designated name specified on Zabbix Web UI)
# $4: zabbix_agentd.conf file path
# $5: DB name        (only for LLD) or  {$PGSLOWQUERY_TIME_THRESHOLD} ( only for pgsql.get.pg.slow_query )
# $6: DB schema name (only for LLD)
# $7: DB table name  (only for LLD)
#-------------------------------------------------------------------------------
UserParameter=pgsql.get.pg.transactions[*],"$1"/pgsql_server_funcs.sh pg.transactions "$2" "$3" "$4"
UserParameter=pgsql.get.pg.bgwriter[*],"$1"/pgsql_server_funcs.sh pg.bgwriter $2 "$3" "$4"
UserParameter=pgsql.get.pg.slow_query[*],"$1"/pgsql_server_funcs.sh pg.slow_query "$2" "$3" "$4" "$5"
UserParameter=pgsql.get.pg.stat_database[*],"$1"/pgsql_db_funcs.sh pg.stat_database "$2" "$3" "$4" "$5"
UserParameter=pgsql.get.pg.size[*],"$1"/pgsql_userdb_funcs.sh pg.size "$2" "$3" "$4" "$5"

UserParameter=pgsql.get.pg.stat_table[*],"$1"/pgsql_tbl_funcs.sh pg.stat_table "$2" "$3" "$4" "$5" "$6" "$7"

#---  PostgreSQL SR user parameter  --------------------------------------------
# $1: pgsql_*_funcs.sh directory path
# $2: pgsql_funcs.conf directory path
# $3: hostname (which means the designated name specified on Zabbix Web UI)
# $4: zabbix_agentd.conf file path
#-------------------------------------------------------------------------------
UserParameter=pgsql.get.pg.stat_replication[*],"$1"/pgsql_sr_server_funcs.sh pg.stat_replication "$2" "$3" "$4"
UserParameter=pgsql.get.pg.sr.status[*],"$1"/pgsql_sr_server_funcs.sh pg.sr.status "$2" "$3" "$4"

#---  pgpool-II user parameter  --------------------------------------------
# Discovery Rule
UserParameter=backend.discovery[*],"$1"/find_pgpool_backend.sh "$2"
UserParameter=backend.status.discovery[*],"$1"/find_pgpool_backend_ip.sh "$2"

#---  pgpool-II user parameter  --------------------------------------------
UserParameter=pgpool.running[*],"$1"/pgpool_simple.sh "$2"
UserParameter=pgpool.have_delegate_ip[*],"$1"/pgpool_delegate_ip.sh "$2"
UserParameter=pgpool.get.nodes[*],"$1"/pgpool_backend_status.sh pgpool.nodes "$2" "$3" "$4"
UserParameter=pgpool.get.connections[*],"$1"/pgpool_connections.sh pgpool.connections "$2" "$3" "$4"
UserParameter=pgpool.get.cache[*],"$1"/pgpool_cache.sh pgpool.cache $2 "$3" "$4"

2、pgsql_funcs.conf

PGHOST=127.0.0.1
PGPORT=5432
PGROLE=postgres
PGDATABASE=postgres

3、find_sr.sh

#!/bin/bash

PGSHELL_CONFDIR="$1"

GETROW="select count(*) from pg_stat_replication"

# Load the psql connection option parameters.
source $PGSHELL_CONFDIR/pgsql_funcs.conf

result=$(psql -h $PGHOST -p $PGPORT -U $PGROLE -d $PGDATABASE -t -c "$GETROW" 2>&1)
if [ $? -ne 0 ]; then
    echo "$result"
    exit
fi

if [ $result -ge 1 ]; then
    echo '{"data":[{"{#MODE}":"streaming"} ]}'
else
    echo '{"data":[ ]}'
fi

4、find_sr_client_ip.sh

#!/bin/bash

PGSHELL_CONFDIR="$1"

GETTABLE="select row_to_json(t) from (select client_addr as \"{#SRCLIENT}\" from pg_stat_replication) as t"

# Load the psql connection option parameters.
source $PGSHELL_CONFDIR/pgsql_funcs.conf

result=$(psql -h $PGHOST -p $PGPORT -U $PGROLE -d $PGDATABASE -t -c "${GETTABLE}" 2>&1)
if [ $? -ne 0 ]; then
    echo "$result"
    exit
fi

IFS=$'\n'
for row in $result; do
    sr_client_list="$sr_client_list,"${row# }
done
echo '{"data":['${sr_client_list#,}' ]}'
posted @ 2018-09-10 18:21  peiybpeiyb  阅读(683)  评论(0编辑  收藏  举报