Install Zabbix database(postgresql)
Install software
portmaster -d net-mgmt/zabbix6-server net-mgmt/zabbix6-agent postgresql14-server databases/timescaledb
DB ZFS Dataset
zfs create -o mountpoint=/var/db/postgres zroot/postgres
zfs set atime=off zroot/postgres
zfs set recordsize=16K zroot/postgres
zfs set compression=lz4 zroot/postgres
#enable only when zpool have SLOG device or have SSD, create a lot of fragment
#zfs set logbias=throughput zroot/postgres
#only when work set fit in RAM size, zabbix not need
#zfs set primarycache=metadata zroot/postgres
zfs get atime,recordsize,compression,logbias,primarycache zroot/postgres
chown postgres:postgres /var/db/postgres
https://people.freebsd.org/~seanc/postgresql/scale15x-2017-postgresql_zfs_best_practices.pdf
Setup DB
/usr/local/etc/rc.d/postgresql initdb --no-locale --encoding=UTF8
vi postgresql.conf
full_page_writes = off
random_page_cost = 1.5
Create zabbix database and user
service postgresql start
su postgres
psql
create database zabbix;
CREATE USER zabbix WITH password '39zabbix';
GRANT ALL PRIVILEGES ON DATABASE zabbix to zabbix;
Config access for zabbix server vi /var/db/postgres/data14/postgresql.conf
listen_addresses = '*'
shared_preload_libraries = 'timescaledb'
echo 'host zabbix zabbix 192.168.213.30/32 trust' >> /var/db/postgres/data14/pg_hba.conf
echo 'host zabbix zabbix 192.168.213.33/32 md5' >> /var/db/postgres/data14/pg_hba.conf
service postgresql restart
psql -d zabbix -c 'CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;'
psql -d zabbix -c 'ALTER EXTENSION timescaledb UPDATE;'
psql -c 'ALTER SYSTEM SET synchronous_commit=off'
Create DB
cd /usr/local/share/zabbix6/server/database/postgresql
cat schema.sql | psql -U zabbix zabbix
cat images.sql | psql -U zabbix zabbix
cat data.sql | psql -U zabbix zabbix
cat timescaledb.sql | psql -U zabbix zabbix
Seup DB monitor
https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/db/postgresql Zabbix agent config
UserParameter=pgsql.bgwriter[*], /usr/local/bin/psql -qtAX -h "$1" -p "$2" -U "$3" -d "$4" -f "/usr/local/share/zabbix/postgresql/pgsql.bgwriter.sql"
UserParameter=pgsql.connections.sum[*], /usr/local/bin/psql -qtAX -h "$1" -p "$2" -U "$3" -d "$4" -f "/usr/local/share/zabbix/postgresql/pgsql.connections.sum.sql"
UserParameter=pgsql.connections[*], /usr/local/bin/psql -qtAX -h "$1" -p "$2" -U "$3" -d "$4" -f "/usr/local/share/zabbix/postgresql/pgsql.connections.sql"
UserParameter=pgsql.connections.prepared[*], /usr/local/bin/psql -qtAX -h "$1" -p "$2" -U "$3" -d "$4" -f "/usr/local/share/zabbix/postgresql/pgsql.connections.prepared.sql"
UserParameter=pgsql.dbstat.sum[*], /usr/local/bin/psql -qtAX -h "$1" -p "$2" -U "$3" -d "$4" -f "/usr/local/share/zabbix/postgresql/pgsql.dbstat.sum.sql"
UserParameter=pgsql.dbstat[*], /usr/local/bin/psql -qtAX -h "$1" -p "$2" -U "$3" -d "$4" -f "/usr/local/share/zabbix/postgresql/pgsql.dbstat.sql"
UserParameter=pgsql.transactions[*], /usr/local/bin/psql -qtAX -h "$1" -p "$2" -U "$3" -d "$4" -f "/usr/local/share/zabbix/postgresql/pgsql.transactions.sql"
UserParameter=pgsql.config.hash[*], /usr/local/bin/psql -qtAX -h "$1" -p "$2" -U "$3" -d "$4" -f "/usr/local/share/zabbix/postgresql/pgsql.config.hash.sql"
UserParameter=pgsql.wal.stat[*], /usr/local/bin/psql -qtAX -h "$1" -p "$2" -U "$3" -d "$4" -f "/usr/local/share/zabbix/postgresql/pgsql.wal.stat.sql"
UserParameter=pgsql.locks[*], /usr/local/bin/psql -qtAX -h "$1" -p "$2" -U "$3" -d "$4" -f "/usr/local/share/zabbix/postgresql/pgsql.locks.sql"
UserParameter=pgsql.queries[*], /usr/local/bin/psql -qtAX -h "$1" -p "$2" -U "$3" -d "$4" -v tmax=$5 -f "/usr/local/share/zabbix/postgresql/pgsql.query.time.sql"
UserParameter=pgsql.uptime[*], /usr/local/bin/psql -qtAX -h "$1" -p "$2" -U "$3" -d "$4" -f "/usr/local/share/zabbix/postgresql/pgsql.uptime.sql"
UserParameter=pgsql.cache.hit[*], /usr/local/bin/psql -qtAX -h "$1" -p "$2" -U "$3" -d "$4" -f "/usr/local/share/zabbix/postgresql/pgsql.cache.hit.sql"
UserParameter=pgsql.scans[*], /usr/local/bin/psql -qtAX -h "$1" -p "$2" -U "$3" -d "$4" -f "/usr/local/share/zabbix/postgresql/pgsql.scans.sql"
UserParameter=pgsql.frozenxid[*], /usr/local/bin/psql -qtAX -h "$1" -p "$2" -U "$3" -d "$4" -f "/usr/local/share/zabbix/postgresql/pgsql.frozenxid.sql"
UserParameter=pgsql.discovery.db[*], /usr/local/bin/psql -qtAX -h "$1" -p "$2" -U "$3" -d "$4" -f "/usr/local/share/zabbix/postgresql/pgsql.discovery.db.sql"
UserParameter=pgsql.db.size[*], /usr/local/bin/psql -qtAX -h "$1" -p "$2" -U "$3" -d "$4" -c "SELECT pg_database_size('$5')"
UserParameter=pgsql.ping[*], /usr/local/bin/pg_isready -h "$1" -p "$2" -U "$3" -d "$4"
UserParameter=pgsql.ping.time[*], /usr/local/bin/psql -qtAX -h "$1" -p "$2" -U "$3" -d "$4" -f "/usr/local/share/zabbix/postgresql/pgsql.ping.time.sql"
UserParameter=pgsql.version[*], /usr/local/bin/psql -qtAX -h "$1" -p "$2" -U "$3" -d "$4" -c "SELECT version();"
UserParameter=pgsql.replication.count[*], /usr/local/bin/psql -qtAX -h "$1" -p "$2" -U "$3" -d "$4" -c "SELECT count(*) FROM pg_stat_replication"
UserParameter=pgsql.replication.recovery_role[*], /usr/local/bin/psql -qtAX -h "$1" -p "$2" -U "$3" -d "$4" -f "/usr/local/share/zabbix/postgresql/pgsql.replication.recovery_role.sql"
UserParameter=pgsql.replication.lag.sec[*], /usr/local/bin/psql -qtAX -h "$1" -p "$2" -U "$3" -d "$4" -f "/usr/local/share/zabbix/postgresql/pgsql.replication.lag.sql"
UserParameter=pgsql.replication.status[*], /usr/local/bin/psql -qtAX -h "$1" -p "$2" -U "$3" -d "$4" -f "/usr/local/share/zabbix/postgresql/pgsql.replication.status.sql"