Instalação distribuída
Cenário
+-------------+ +-------------+ +-------------+ +-------------+ +-------------+
| zbDB | | zbServer | | zbFront | | zbProxy | | Grafana |
|10.0.140.100 | |10.0.140.110 | |10.0.140.120 | |10.0.140.130 | |10.0.140.140 |
+-------------+ +-------------+ +-------------+ +-------------+ +-------------+
↑ ↑ | ↑ ↑ | | ↑ | |
| | | | | | | | | |
| +-----------------+ | +----------------+ | | | |
+-----------------------+----------------------+ +-----------------+---------------------+
+-------------------------------------------+
Criação das VMs no Vagrant
- Vagrantfile
# cat Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
ENV['VAGRANT_DEFAULT_PROVIDER'] = 'libvirt'
Vagrant.configure("2") do |config|
config.vm.define :zbDB do |zbDB|
zbDB.vm.network :private_network, :ip => "10.0.240.100"
zbDB.vm.box = "generic/oracle8"
zbDB.vm.hostname = "zbDB"
zbDB.vm.provider :libvirt do |lv|
lv.memory = 4096
lv.cpus = 2
lv.storage :file, :size => '64G', :type => 'qcow2'
end
end
config.vm.define :zbServer do |zbServer|
zbServer.vm.network :private_network, :ip => "10.0.240.110"
zbServer.vm.box = "generic/oracle8"
zbServer.vm.hostname = "zbServer"
zbServer.vm.provider :libvirt do |lv|
lv.memory = 4096
lv.cpus = 2
end
end
config.vm.define :zbFront do |zbFront|
zbFront.vm.network :private_network, :ip => "10.0.240.120"
zbFront.vm.network :forwarded_port, host: 8080, guest: 80
zbFront.vm.box = "generic/oracle8"
zbFront.vm.hostname = "zbFront"
zbFront.vm.provider :libvirt do |lv|
lv.memory = 2048
lv.cpus = 2
end
end
config.vm.define :zbProxy do |zbProxy|
zbProxy.vm.network :private_network, :ip => "10.0.240.130"
zbProxy.vm.box = "generic/oracle8"
zbProxy.vm.hostname = "zbProxy"
zbProxy.vm.provider :libvirt do |lv|
lv.memory = 2048
lv.cpus = 2
end
end
config.vm.define :grafana do |grafana|
grafana.vm.network :private_network, :ip => "10.0.240.140"
grafana.vm.box = "generic/oracle8"
grafana.vm.hostname = "grafana"
grafana.vm.provider :libvirt do |lv|
lv.memory = 2048
lv.cpus = 2
end
end
end
PGSQL
Instalação do PostgreSQL
$ sudo dnf install https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm
$ sudo dnf repolist
Failed to set locale, defaulting to C.UTF-8
repo id repo name
ol8_UEKR6 Latest Unbreakable Enterprise Kernel Release 6 for Oracle Linux 8 (x86_64)
ol8_appstream Oracle Linux 8 Application Stream (x86_64)
ol8_baseos_latest Oracle Linux 8 BaseOS Latest (x86_64)
pgdg-common PostgreSQL common RPMs for RHEL / Rocky 8 - x86_64
pgdg10 PostgreSQL 10 for RHEL / Rocky 8 - x86_64
pgdg11 PostgreSQL 11 for RHEL / Rocky 8 - x86_64
pgdg12 PostgreSQL 12 for RHEL / Rocky 8 - x86_64
pgdg13 PostgreSQL 13 for RHEL / Rocky 8 - x86_64
pgdg14 PostgreSQL 14 for RHEL / Rocky 8 - x86_64
$ sudo dnf module disable postgresql
$ sudo dnf install postgresql13-server postgresql13-contrib
$ sudo postgresql-13-setup initdb
$ sudo systemctl enable --now postgresql-13
Instalação da extensão TimescaleDB
$ sudo tee /etc/yum.repos.d/timescale_timescaledb.repo <<EOL
[timescale_timescaledb]
name=timescale_timescaledb
baseurl=https://packagecloud.io/timescale/timescaledb/el/$(rpm -E %{rhel})/\$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packagecloud.io/timescale/timescaledb/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
EOL
$ sudo dnf install timescaledb-2-postgresql-13
$ sudo timescaledb-tune --pg-config=/usr/pgsql-13/bin/pg_config
Using postgresql.conf at this path:
/var/lib/pgsql/13/data/postgresql.conf
Is this correct? [(y)es/(n)o]: y
Writing backup to:
/tmp/timescaledb_tune.backup202207082016
shared_preload_libraries needs to be updated
Current:
#shared_preload_libraries = ''
Recommended:
shared_preload_libraries = 'timescaledb'
Is this okay? [(y)es/(n)o]: y
success: shared_preload_libraries will be updated
Tune memory/parallelism/WAL and other settings? [(y)es/(n)o]: y
Recommendations based on 3.56 GB of available memory and 2 CPUs for PostgreSQL 13
Memory settings recommendations
Current:
shared_buffers = 128MB
#effective_cache_size = 4GB
#maintenance_work_mem = 64MB
#work_mem = 4MB
Recommended:
shared_buffers = 932011kB
effective_cache_size = 2730MB
maintenance_work_mem = 466005kB
work_mem = 9320kB
Is this okay? [(y)es/(s)kip/(q)uit]: y
success: memory settings will be updated
Parallelism settings recommendations
Current:
missing: timescaledb.max_background_workers
#max_worker_processes = 8
#max_parallel_workers_per_gather = 2
#max_parallel_workers = 8
Recommended:
timescaledb.max_background_workers = 8
max_worker_processes = 13
max_parallel_workers_per_gather = 1
max_parallel_workers = 2
Is this okay? [(y)es/(s)kip/(q)uit]: y
success: parallelism settings will be updated
WAL settings recommendations
Current:
#wal_buffers = -1
min_wal_size = 80MB
Recommended:
wal_buffers = 16MB
min_wal_size = 512MB
Is this okay? [(y)es/(s)kip/(q)uit]: y
success: WAL settings will be updated
Miscellaneous settings recommendations
Current:
#default_statistics_target = 100
#random_page_cost = 4.0
#checkpoint_completion_target = 0.5
max_connections = 100
#max_locks_per_transaction = 64
#autovacuum_max_workers = 3
#autovacuum_naptime = 1min
#effective_io_concurrency = 1
Recommended:
default_statistics_target = 500
random_page_cost = 1.1
checkpoint_completion_target = 0.9
max_connections = 50
max_locks_per_transaction = 64
autovacuum_max_workers = 10
autovacuum_naptime = 10
effective_io_concurrency = 256
Is this okay? [(y)es/(s)kip/(q)uit]: y
success: miscellaneous settings will be updated
Saving changes to: /var/lib/pgsql/13/data/postgresql.conf
$ sudo systemctl restart postgresql-13
$ sudo systemctl status postgresql-13
● postgresql-13.service - PostgreSQL 13 database server
Loaded: loaded (/usr/lib/systemd/system/postgresql-13.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2022-07-08 20:17:19 UTC; 8s ago
Docs: https://www.postgresql.org/docs/13/static/
Process: 6080 ExecStartPre=/usr/pgsql-13/bin/postgresql-13-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
Main PID: 6086 (postmaster)
Tasks: 9 (limit: 23062)
Memory: 46.2M
CGroup: /system.slice/postgresql-13.service
├─6086 /usr/pgsql-13/bin/postmaster -D /var/lib/pgsql/13/data/
├─6087 postgres: logger
├─6089 postgres: checkpointer
├─6090 postgres: background writer
├─6091 postgres: walwriter
├─6092 postgres: autovacuum launcher
├─6093 postgres: stats collector
├─6094 postgres: TimescaleDB Background Worker Launcher
└─6095 postgres: logical replication launcher
Jul 08 20:17:19 pgsql systemd[1]: Starting PostgreSQL 13 database server...
Jul 08 20:17:19 pgsql postmaster[6086]: 2022-07-08 20:17:19.683 UTC [6086] LOG: redirecting log output to logging collector process
Jul 08 20:17:19 pgsql postmaster[6086]: 2022-07-08 20:17:19.683 UTC [6086] HINT: Future log output will appear in directory "log".
Jul 08 20:17:19 pgsql systemd[1]: Started PostgreSQL 13 database server.
Preparando o volume para o banco zabbix
$ sudo fdisk -l /dev/vdb
Disk /dev/vdb: 64 GiB, 68719476736 bytes, 134217728 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
$ sudo pvcreate /dev/vdb
$ sudo vgcreate vgPGSQL /dev/vdb
$ sudo lvcreate -L 32G -n lvZABBIX vgPGSQL
$ sudo mkfs.xfs /dev/vgPGSQL/lvZABBIX
$ sudo mkdir -p /pgsql/zabbix
$ sudo mount /dev/vgPGSQL/lvZABBIX /pgsql/zabbix
$ sudo blkid | egrep vg
/dev/mapper/vgPGSQL-lvZABBIX: UUID="0565add4-01b6-42ab-a65f-321071c124a9" BLOCK_SIZE="512" TYPE="xfs"
$ echo -e "UUID=0565add4-01b6-42ab-a65f-321071c124a9\t/pgsql/zabbix\txfs\tdefaults\t0 0" | sudo tee -a /etc/fstab
$ sudo mount -a
$ mount | grep pgsql
/dev/mapper/vgPGSQL-lvZABBIX on /pgsql/zabbix type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
$ df -h | grep pgsql
/dev/mapper/vgPGSQL-lvZABBIX 32G 261M 32G 1% /pgsql/zabbix
Criando o banco e o acesso do zabbix
$ sudo dnf install policycoreutils-python-utils
$ sudo chown postgres:postgres /pgsql/zabbix/ -R
$ sudo semanage fcontext -a -t postgresql_db_t "/pgsql/zabbix(/.*)?"
$ sudo restorecon -R -v /pgsql/zabbix/
$ sudo su - postgres
$ psql
# create tablespace tbZabbix location '/pgsql/zabbix';
# create role zabbix login;
# \password zabbix
# create database zabbix owner zabbix tablespace tbZabbix;
# \db+
pg_default | postgres | | | | 23 MB |
pg_global | postgres | | | | 559 kB |
tbzabbix | postgres | /pgsql/zabbix | | | 7909 kB |
# \q
$ exit
$ sudo vim /var/lib/pgsql/13/data/pg_hba.conf
[...]
# Acesso Zabbix
host zabbix zabbix 127.0.0.1/32 scram-sha-256
host zabbix zabbix 10.0.240.0/24 scram-sha-256
$ sudo vim /var/lib/pgsql/13/data/postgresql.conf
[...]
listen_addresses = 'localhost,10.0.240.100'
[...]
$ sudo systemctl restart postgresql-13
$ psql -h 127.0.0.1 -U zabbix zabbix
zabbix=> create extension if not exists timescaledb cascade;
WARNING:
WELCOME TO
_____ _ _ ____________
|_ _(_) | | | _ \ ___ \
| | _ _ __ ___ ___ ___ ___ __ _| | ___| | | | |_/ /
| | | | _ ` _ \ / _ \/ __|/ __/ _` | |/ _ \ | | | ___ \
| | | | | | | | | __/\__ \ (_| (_| | | __/ |/ /| |_/ /
|_| |_|_| |_| |_|\___||___/\___\__,_|_|\___|___/ \____/
Running version 2.7.1
For more information on TimescaleDB, please visit the following links:
1. Getting started: https://docs.timescale.com/timescaledb/latest/getting-started
2. API reference documentation: https://docs.timescale.com/api/latest
3. How TimescaleDB is designed: https://docs.timescale.com/timescaledb/latest/overview/core-concepts
Note: TimescaleDB collects anonymous reports to better understand and assist our users.
For more information and how to disable, please see our docs https://docs.timescale.com/timescaledb/latest/how-to-guides/configuration/telemetry.
CREATE EXTENSION
zabbix=> \dx
List of installed extensions
Name | Version | Schema | Description
-------------+---------+------------+-------------------------------------------------------------------
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
timescaledb | 2.7.1 | public | Enables scalable inserts and complex queries for time-series data
(2 rows)
$ sudo firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="10.0.240.0/24" destination address=10.0.240.100/32 service name="postgresql" accept'
$ sudo firewall-cmd --reload
Zabbix Server
$ sudo rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-2.el8.noarch.rpm
$ sudo dnf install zabbix-server-pgsql zabbix-agent2 zabbix-selinux-policy zabbix-sql-scripts postgresql
$ sudo dnf install net-snmp-utils net-snmp nmap tcpdump bind-utils traceroute
$ rpm -qil zabbix-sql-scripts-6.0.6-1.el8.noarch
Name : zabbix-sql-scripts
Version : 6.0.6
Release : 1.el8
Architecture: noarch
Install Date: Fri Jul 8 20:37:37 2022
Group : Applications/Internet
Size : 8827042
License : GPLv2+
Signature : RSA/SHA512, Mon Jun 27 12:29:08 2022, Key ID 082ab56ba14fe591
Source RPM : zabbix-6.0.6-1.el8.src.rpm
Build Date : Mon Jun 27 11:26:55 2022
Build Host : d701cf2a492e
Relocations : (not relocatable)
URL : http://www.zabbix.com/
Summary : Zabbix database sql scripts
Description :
SQL files needed to setup Zabbix server or proxy databases
/usr/share/doc/zabbix-sql-scripts
/usr/share/doc/zabbix-sql-scripts/AUTHORS
/usr/share/doc/zabbix-sql-scripts/COPYING
/usr/share/doc/zabbix-sql-scripts/ChangeLog
/usr/share/doc/zabbix-sql-scripts/NEWS
/usr/share/doc/zabbix-sql-scripts/README
/usr/share/doc/zabbix-sql-scripts/mysql/double.sql
/usr/share/doc/zabbix-sql-scripts/mysql/history_pk_prepare.sql
/usr/share/doc/zabbix-sql-scripts/mysql/proxy.sql
/usr/share/doc/zabbix-sql-scripts/mysql/server.sql.gz
/usr/share/doc/zabbix-sql-scripts/postgresql/double.sql
/usr/share/doc/zabbix-sql-scripts/postgresql/history_pk_prepare.sql
/usr/share/doc/zabbix-sql-scripts/postgresql/proxy.sql
/usr/share/doc/zabbix-sql-scripts/postgresql/server.sql.gz
/usr/share/doc/zabbix-sql-scripts/postgresql/timescaledb.sql
/usr/share/doc/zabbix-sql-scripts/sqlite3/proxy.sql
$ zcat /usr/share/doc/zabbix-sql-scripts/postgresql/server.sql.gz | psql -h 10.0.240.100 -U zabbix zabbix
$ psql -h 10.0.240.100 -U zabbix zabbix < /usr/share/doc/zabbix-sql-scripts/postgresql/timescaledb.sql
]$ sudo cat /etc/zabbix/zabbix_server.conf | egrep -v "^#|^$"
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=0
PidFile=/run/zabbix/zabbix_server.pid
SocketDir=/run/zabbix
DBHost=10.0.240.100
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
DBPort=5432
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=4
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1
$ sudo systemctl enable --now zabbix-server
$ sudo systemctl enable --now zabbix-agent2
$ sudo firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="10.0.240.120/32" destination address=10.0.240.110/32 service name="zabbix-server" accept'
$ sudo firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="10.0.240.130/32" destination address=10.0.240.110/32 service name="zabbix-server" accept'
$ sudo firewall-cmd --reload
Zabbix Web
$ sudo dnf install oraclelinux-developer-release-el8 oracle-instantclient-release-el8
$ sudo dnf module enable php:7.4 php-oci8
$ sudo rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-2.el8.noarch.rpm
$ sudo dnf install zabbix-web-pgsql zabbix-apache-conf zabbix-agent2 zabbix-selinux-policy
$ sudo systemctl enable --now httpd
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --reload
$ sudo vim /etc/zabbix/web/zabbix.conf.php
[...]
// Uncomment and set to desired values to override Zabbix hostname/IP and port.
$ZBX_SERVER = '10.0.240.110';
$ZBX_SERVER_PORT = '10051';
[...]
$ sudo systemctl restart httpd
Zabbix Proxy
$ sudo rpm -Uvh https://repo.zabbix.com/zabbix/6.2/rhel/8/x86_64/zabbix-release-6.2-1.el8.noarch.rpm
Retrieving https://repo.zabbix.com/zabbix/6.2/rhel/8/x86_64/zabbix-release-6.2-1.el8.noarch.rpm
warning: /var/tmp/rpm-tmp.yJGTHQ: Header V4 RSA/SHA512 Signature, key ID a14fe591: NOKEY
Verifying... ################################# [100%]
Preparing... ################################# [100%]
Updating / installing...
1:zabbix-release-6.2-1.el8 ################################# [100%]
$ sudo dnf install zabbix-proxy-sqlite3 zabbix-agent2 zabbix-get zabbix-selinux-policy
$ sudo dnf install net-snmp-utils net-snmp nmap tcpdump bind-utils traceroute
$ sudo cat /etc/zabbix/zabbix_proxy.conf | egrep -v "^#|^$"
Server=10.0.240.110
Hostname=zbProxy
LogFile=/var/log/zabbix/zabbix_proxy.log
LogFileSize=0
PidFile=/run/zabbix/zabbix_proxy.pid
SocketDir=/run/zabbix
DBName=/var/lib/sqlite/zabbix.db
DBUser=zabbix
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=4
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1
$ sudo sed s/SELINUX=enforcing/SELINUX=permissive/g -i /etc/selinux/config
$ sudo setenforce 0
$ sudo mkdir /var/lib/sqlite
$ sudo chown zabbix:zabbix /var/lib/sqlite/ -R
$ sudo systemctl enable --now zabbix-porxy
$ sudo systemctl enable --now zabbix-agent2
Grafana
$ cat <<EOF | sudo tee /etc/yum.repos.d/grafana.repo
[grafana]
name=grafana
baseurl=https://packages.grafana.com/oss/rpm
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packages.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
EOF
$ sudo dnf update
$ sudo dnf search grafana
$ sudo dnf -y install grafana
$ sudo systemctl enable --now grafana-server.service
$ sudo firewall-cmd --permanent --add-rich-rule='rule family=ipv4 forward-port to-port=3000 protocol=tcp port=80'
$ sudo firewall-cmd --reload
$ sudo firewall-cmd --list-all
Referências