Passos de Instalação do Zabbix 6.0 no Rocky/Alma Linux 8

Isaque Profeta
Zabbix Brasil
Published in
6 min readAug 6, 2020

Instalação do Zabbix 6.0 com PostgresSQL 15, todos os módulos em apenas uma máquina no Rocky/Alma Linux versão 8, com dicas de SELinux e TimescaleDB (testado com vagrant com a imagem almalinux/8 no virtualbox)

Atualizado em 11/05/2023 : Zabbix 6.0 + Postgres 15

Todo o tutorial desta instalação prevê o uso direto do usuário root

Sistema operacional: CentOS 8

Desabilitar o SELinux (No final dou uma dica de como manter ele ligado e em modo enforcing):

sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/configsetenforce 0

Configure o firewall e reinicie a máquina para desativar o SELinux editado anteriormente:

# monitorações agente zabbix
firewall-cmd --add-port={10051/tcp,10050/tcp} --permanent
# monitorações agente snmp
firewall-cmd --add-port={161/udp,162/udp} --permanent
# acesso ao frontend web
firewall-cmd --add-service={http,https} --permanent
# recarrega as regras de firewall
firewall-cmd --reload

Banco de dados: PostgreSQL 15

Adicione o repositório para o PostgresSQL, desabilite o repositório padrão do CentOS para esse pacote e finalmente instale os pacotes do sistema de banco de dados, executando logo depois o setup inicial do sistema de banco:

yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpmdnf -y module disable postgresqldnf -y install postgresql15 postgresql15-server/usr/pgsql-15/bin/postgresql-15-setup initdb

Edite o modo de autenticação, alterando a opção ident para md5 nas linhas do arquivo /var/lib/pgsql/15/data/pg_hba.conf:

sed -i "s/ident/md5/g" /var/lib/pgsql/15/data/pg_hba.conf

Configure para que o PostgreSQL responda em todos os endereços IP do servidor (para facilitar integrações), alterando a opção listen_addresses na linha abaixo no arquivo /var/lib/pgsql/15/data/postgresql.conf:

sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/" /var/lib/pgsql/15/data/postgresql.conf

Inicie o serviço do postgresql-12, habilite o inicio com o sistema operacional:

systemctl enable --now postgresql-15

Crie um usuário no banco de dados com senha e crie o banco a ser usado (o segundo comando pode apresentar um erro de “could not change directory” que deve ser ignorado):

Atenção, troque a senha abaixo de exemplo “Z4bb1xD4t4b4s3”

sudo -u postgres psql -c "CREATE USER zabbix WITH ENCRYPTED PASSWORD 'Z4bb1xD4t4b4s3'" 2>/dev/nullsudo -u postgres createdb -O zabbix -E Unicode -T template0 zabbix 2>/dev/null

Zabbix Server 6.0

Adicione o repositório do Zabbix, instalando o zabbix-server-pgsql em seguida:

rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-1.el8.noarch.rpmdnf -y install zabbix-server-pgsql zabbix-sql-scripts

Crie o schema do banco de dados (novamente pode apresentar um erro de “could not change directory” que deve ser ignorado):

zcat /usr/share/zabbix-sql-scripts/postgresql/server.sql.gz | sudo -u zabbix PGPASSWORD=Z4bb1xD4t4b4s3 psql -hlocalhost -Uzabbix zabbix 2>/dev/null

Edite, alterando ou removendo os comentários, nas linhas no /etc/zabbix/zabbix_server.conf:

Atenção, troque a senha abaixo de exemplo “Z4bb1xD4t4b4s3”

DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=Z4bb1xD4t4b4s3

Inicie o serviço do zabbix-server e habilite o inicio com o sistema operacional:

systemctl enable --now zabbix-server

Zabbix Frontend

Considerando que o repositório do zabbix já foi configurado, instale os pacotes de frontend e de configurações do Apache:

dnf -y install zabbix-web-pgsql zabbix-nginx-conf

Editar o arquivo /etc/php-fpm.d/zabbix.conf adicionando a configuração de timezone:

echo "php_value[date.timezone] = America/Sao_Paulo" >> /etc/php-fpm.d/zabbix.conf

Agora configura-se o Zabbix para ser o Virtual Server principal na porta 80, e em seguida é necessário substituir o padrão do NGINX do Debian pelo padrão do Zabbix:

echo "       listen          80;/        listen 80 default_server;\\n        listen [::]:80 default_server;/" /etc/nginx/conf.d/zabbix.conf"
echo " server_name example.com;/ server_name _;/" /etc/nginx/conf.d/zabbix.conf"
sed -i "/.*listen.*/d" /etc/nginx/nginx.conf
sed -i "/.*server_name.*/d" /etc/nginx/nginx.conf

Inicie primeiro o serviço do php-fpm e depois o do Apache, habilitando também os mesmos no inicio com o sistema operacional:

systemctl enable --now php-fpmsystemctl enable --now httpd

Zabbix Frontend - Setup Wizard

Normalmente existe a configuração via wizard web, mas vamos fazer essa configuração pela linha de comando neste artigo. (caso prefira, pode usar o link do YouTube da versão antiga deste artigo na 5.0: Link do vídeo)

Atenção, troque a senha abaixo de exemplo “Z4bb1xD4t4b4s3”

sudo tee /etc/zabbix/web/zabbix.conf.php <<EOL
<?php
\$DB["TYPE"] = "POSTGRESQL";
\$DB["SERVER"] = "localhost";
\$DB["PORT"] = "5432";
\$DB["DATABASE"] = "zabbix";
\$DB["USER"] = "zabbix";
\$DB["PASSWORD"] = "Z4bb1xD4t4b4s3";
\$DB["SCHEMA"] = "";
\$DB["ENCRYPTION"] = false;
\$DB["KEY_FILE"] = "";
\$DB["CERT_FILE"] = "";
\$DB["CA_FILE"] = "";
\$DB["VERIFY_HOST"] = false;
\$DB["CIPHER_LIST"] = "";
\$DB["VAULT_URL"] = "";
\$DB["VAULT_DB_PATH"] = "";
\$DB["VAULT_TOKEN"] = "";
\$DB["DOUBLE_IEEE754"] = true;
\$ZBX_SERVER = "localhost";
\$ZBX_SERVER_PORT = "10051";
\$ZBX_SERVER_NAME = "zabbix";
\$IMAGE_FORMAT_DEFAULT = IMAGE_FORMAT_PNG;
EOL

Agora basta acessar via browser o Zabbix em http://ip_do_servidor/ (Essa instalação coloca o Zabbix direto na raiz do site “/” e não no “/zabbix”)

Zabbix Agent para a instalação deste Zabbix Server

Considerando que o repositório do Zabbix já está instalado (essa instalação coloca todos os módulos na mesma máquina), instale o agente:

dnf install zabbix-agent

Edite, alterando ou removendo os comentários, se necessário nas linhas do arquivo /etc/zabbix/zabbix_agentd.conf:

Server=127.0.0.1
ServerActive=127.0.0.1
Hostname=Zabbix server

Inicie o serviço do zabbix-agent e habilite o inicio com o sistema operacional:

systemctl enable --now zabbix-agent

Dando tudo certo

Espere alguns segundos e veja que o host zabbix-server já está com agente verde e o ambiente pronto para uso.

Caso algo dê errado

Revise todo o passo-a-passo verificando o status dos serviços e as logs, e se precisar de ajuda dê um pulo no canal do Telegram do Zabbix Brasil.

Zabbix Server:

systemctl status zabbix-servercat /var/log/zabbix/zabbix_server.log

PostgreSQL:

systemctl status postgresql-15cat /var/lib/pgsql/15/data/log/postgresql*.log

Apache:

systemctl status httpdcat /var/log/httpd/error_log

php-fpm:

systemctl status php-fpmcat /var/log/php-fpm/error.log

Zabbix Agente:

systemctl status zabbix-agentcat /var/log/zabbix/zabbix_agentd.log

Extra 1: SELinux em modo enforcing

Pare todos os serviços ligados ao zabbix-server na ordem:

systemctl stop httpd
systemctl stop php-fpm
systemctl stop zabbix-server
systemctl stop postgresql-15

Habilite o SELinux como enforcing no /etc/selinux/config:

SELINUX=enforcing

Reinicie a máquina:

reboot

Verifique se todos os serviços já estão rodando, sendo que o zabbix-server deve estar com problemas:

systemctl status httpd
systemctl status php-fpm
systemctl status zabbix-server
systemctl status postgresql-15

Instale a ferramenta para facilitar a criação de exceções para a auditoria do SELinux:

dnf install policycoreutils-python-utils

O SELinux mantem todas as falhas não permitidas dentro de um arquivos de auditoria que são os /var/log/audit/audit.log* então a partir dessas falhas crie o arquivo de exceções:

grep AVC /var/log/audit/audit.log* | audit2allow -M systemd-allow

Aplique as exceções no sistema do SELinux:

semodule -i systemd-allow.pp

Confira com calma se tudo está funcionando, pois vai ser necessário repetir várias vezes essa liberação, em meus testes para esse artigo precisei de realizar o comando cinco vezes pelo motivo abaixo:

IMPORTANTE: Tome o cuidado de revisar essas permissões sempre que criar novos tipos de monitoração uma vez que o SELinux funciona sempre negando acesso primeiro para depois permitir.

Então tome o cuidado também de revisar essas permissões sempre que criar novos tipos de monitoração que dependam de outros acessos, ou até mesmo se você for configurar um envio de e-mail e mensagens via bot telegram, ou integração com LDAP e etc.

Extra 2: TimescaleDB

Para usar o sistema de particionamento de tabelas do TimescaleDB, primeiro instale o pacote da extensão:

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
dnf -y install timescaledb-2-postgresql-15

Pare o banco de dados:

systemctl stop zabbix-server

Realize as configurações do postgres, o tunning do plugin e adicione a extensão ao banco de dados do zabbix:

echo "shared_preload_libraries = 'timescaledb'" > /var/lib/pgsql/15/data/postgresql.confsudo sed -i "s/max_connections = 20/max_connections = 50/" /var/lib/pgsql/15/data/postgresql.confecho "timescaledb.license=timescale" >> /var/lib/pgsql/15/data/postgresql.confsudo systemctl restart postgresql-15sudo -u postgres timescaledb-tune --quiet --yes --pg-config=/usr/pgsql-15/bin/pg_configecho "CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;" | sudo -u postgres psql zabbix 2>/dev/null

Execute o script de migração e reinicie o ambiente:

cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb.sql | sudo -u zabbix psql zabbixsystemctl start zabbix-serversystemctl restart php-fpmsystemctl restart nginx

Agora você pode configurar os prazos de dados no banco a partir do frontend web no caminho de Administration -> General -> Housekeeping:

Artigo originalmente publicado no LinkedIn.

Atualizado em 11/12/2020 : Zabbix 5.2 + Postgres 12

--

--

Isaque Profeta
Zabbix Brasil

Security operations automation, monitoring tools specialist and Python/JavaScript enthusiast, but sometimes I can play with OKR and ITIL too.