ubuntu 16.04 + zabbix 3.4 + postgresql pg_monz

服务器   发布日期:2023年05月29日   浏览次数:78

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 的具体过程。

# 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                        :3.4.13-+xenial                          amd64        Zabbix network monitoring solution - agent
ii  zabbix-release                      3.4-+xenial                               all          Zabbix official repository configuration
ii  zabbix-sender                       :3.4.13-+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--  root root   Mar  : Template_App_pgpool-II-.xml
-rw-rw-r--  root root    Mar  : Template_App_pgpool-II_watchdog.xml
-rw-rw-r--  root root   Mar  : Template_App_pgpool-II.xml
-rw-rw-r--  root root    Mar  : Template_App_PostgreSQL_SR_Cluster.xml
-rw-rw-r--  root root   Mar  : Template_App_PostgreSQL_SR.xml
-rw-rw-r--  root root  Mar  : Template_App_PostgreSQL.xml
# ls -l /tmp/pg_monz-2.1/pg_monz/usr-local-bin
total 88
-rwxrwxr-x  root root   Mar  : find_dbname.sh
-rwxrwxr-x  root root  Mar  : find_dbname_table.sh
-rwxrwxr-x  root root  Mar  : find_pgpool_backend_ip.sh
-rwxrwxr-x  root root   Mar  : find_pgpool_backend.sh
-rwxrwxr-x  root root   Mar  : find_sr_client_ip.sh
-rwxrwxr-x  root root   Mar  : find_sr.sh
-rwxrwxr-x  root root  Mar  : pgpool_backend_status.sh
-rwxrwxr-x  root root  Mar  : pgpool_cache.sh
-rwxrwxr-x  root root  Mar  : pgpool_connections.sh
-rwxrwxr-x  root root   Mar  : pgpool_delegate_ip.sh
-rwxrwxr-x  root root   Mar  : pgpool_simple.sh
-rwxrwxr-x  root root  Mar  : pgsql_db_funcs.sh
-rwxrwxr-x  root root   Mar  : pgsql_primary.sh
-rwxrwxr-x  root root  Mar  : pgsql_server_funcs.sh
-rwxrwxr-x  root root   Mar  : pgsql_simple.sh
-rwxrwxr-x  root root  Mar  : pgsql_sr_server_funcs.sh
-rwxrwxr-x  root root   Mar  : pgsql_standby.sh
-rwxrwxr-x  root root  Mar  : pgsql_tbl_funcs.sh
-rwxrwxr-x  root root  Mar  : pgsql_userdb_funcs.sh
# ls -l tmp/pg_monz-2.1/pg_monz/usr-local-etc
total 8
-rw-rw-r--  root root  Mar  : pgpool_funcs.conf
-rw-rw-r--  root root   Mar  : pgsql_funcs.conf
# ls -l /tmp/pg_monz-2.1/pg_monz/zabbix_agentd.d
total 
-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 $ "$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 $ "$3" "$4"

2、pgsql_funcs.conf

PGHOST=127.0.0.1
PGPORT=
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" >&)
if [ $? -ne  ]; then
    echo "$result"
    exit
fi
if [ $result -ge  ]; 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}" >&)
if [ $? -ne  ]; 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#,}' ]}'

以上就是ubuntu 16.04 + zabbix 3.4 + postgresql pg_monz的详细内容,更多关于ubuntu 16.04 + zabbix 3.4 + postgresql pg_monz的资料请关注九品源码其它相关文章!