Install Zabbix DB(psql)

Set up database for Zabbix using PostgreSql on FreeBSD with ZFS dataset

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"