10 Tuning de performance
Este manual é um trabalho em progresso.
Visão geral
É muito importante que o Zabbix esteja ajustado apropriadamente para a sua melhor performance.
Hardware
Definições gerais de hardware:
- Utilize o processador mais rápido que tiver disponível
- SCSI ou SAS é melhor que IDE (a performance de discos IDE podem ser melhoradas significativamente pelo utilitário hdparm) e SATA
- 15K RPM é melhor que 10K RPM que é melhor que 7200 RPM...
- Utilize armazenamento de RAID rápido
- Utilize adaptadores fast Ethernet
- Quanto mais memória, melhor
Sistema operacional
- Utilize a última versão estável do SO
- Não instale / remova funcionalidades não necessárias do kernel
- Otimize os parâmetros do kernel
Parâmetros de configuração do Zabbix
Vários parâmetros de configuração do Zabbix podem ser otimizados para melhorar a performance.
zabbix_server
StartPollers
Regra geral - mantenha este parâmetro no menor valor possível, cada
instância adicional do Zabbix Server adiciona seu próprio 'overhead', ao
mesmo tempo, o paralelismo é aumentado. O melhor número de instâncias é
obtido quando a fila, na média, contêm o mínimo de parâmetros
(idealmente 0 em algum momento). Este valor pode ser monitorado pelas
verificações internas do Zabbix zabbix[queue].
Consulte a seção "Veja também" ao final desta página para maiores informações sobre como otimizar a quantidade de processos do Zabbix.
DebugLevel
O melhor valor é 3.
DBSocket
Apenas para MySQL. É recomendado utilizar DBSocket para se conectar ao banco, é a forma mais rápida e mais segura.
Tecnologia de banco de dados
Esta é, provavelmente, a This is probably the most important part of Zabbix tuning. Zabbix heavily depends on the availability and performance of database engine.
- use a tecnologia mais rápida, ex. MySQL
- use versões estáveis
- recompile a partir dos códigos fonte o MySQL ou PostgreSQL para obter a máxima performance
- use a documentação de tuning do MySQL ou PostgreSQL
- para MySQL, utilize a estrutura de tabelas
- o Zabbix funciona pelo menos 1.5 vezes mais rápido com InnoDB (quando comparado com MyISAM). Isso ocorre por conta do aumento de paralelelismo. Por outro lado, InnoDB precisa de mais CPU.
- otimize o banco de dados periodicamente para sua melhor performance.
- mantenha as tabelas de bancos de dados em discos diferentes
- As tabelas 'history', 'history_str, 'items' 'functions', triggers', e 'trends' são as mais pesadas.
- Para grandes ambientes, mantenha os arquivos temporários do MySQL em armazenamento tmpfs
Avisos gerais
- Monitore os parâmetros necessários somente
- otimize o 'Intervalo entre verificações' de todos os itens. Quanto menor o intervalo, menor para os gráficos e pior para a performance do Zabbix
- otimize os parâmetros, não os deixe com seus valores padrões (inclusive os templates fornecidos pela Zabbix)
- otimize os parâmetros de limpeza de dados
- não monitorem parâmetros que retornam a mesma informação (ex. memora livre, memoria usada, memória total... somente 2 destes são necessários).
- evite triggers com expressões envolvendo grandes períodos de tempo.
Por exemplo,
max(3600)será calculada de forma significativamente mais lenta quemax(60).
Acompanhe a performance dos processos do Zabbix com o "ps" e o "top"
O Zabbix 2.2 introduziu uma nova característica, os processos mudam suas linhas de comando para exibir a atividade atual:
UID PID PPID C STIME TTY TIME CMD
zabbix22 4584 1 0 14:55 ? 00:00:00 zabbix_server -c /home/zabbix22/zabbix_server.conf
zabbix22 4587 4584 0 14:55 ? 00:00:00 zabbix_server: configuration syncer [synced configuration in 0.041169 sec, idle 60 sec]
zabbix22 4588 4584 0 14:55 ? 00:00:00 zabbix_server: db watchdog [synced alerts config in 0.018748 sec, idle 60 sec]
zabbix22 4608 4584 0 14:55 ? 00:00:00 zabbix_server: timer #1 [processed 3 triggers, 0 events in 0.007867 sec, 0 maint.periods in 0.005677 sec, idle 30 sec]
zabbix22 4609 4584 0 14:55 ? 00:00:00 zabbix_server: timer #2 [processed 2 triggers, 0 events in 0.004209 sec, idle 30 sec]
zabbix22 4637 4584 0 14:55 ? 00:00:01 zabbix_server: history syncer #4 [synced 35 items in 0.166198 sec, idle 5 sec]
zabbix22 4657 4584 0 14:55 ? 00:00:00 zabbix_server: vmware collector #1 [updated 0, removed 0 VMware services in 0.000004 sec, idle 5 sec]
zabbix22 4670 1 0 14:55 ? 00:00:00 zabbix_proxy -c /home/zabbix22/zabbix_proxy.conf
zabbix22 4673 4670 0 14:55 ? 00:00:00 zabbix_proxy: configuration syncer [synced config 15251 bytes in 0.111861 sec, idle 60 sec]
zabbix22 4674 4670 0 14:55 ? 00:00:00 zabbix_proxy: heartbeat sender [sending heartbeat message success in 0.013643 sec, idle 30 sec]
zabbix22 4688 4670 0 14:55 ? 00:00:00 zabbix_proxy: icmp pinger #1 [got 1 values in 1.811128 sec, idle 5 sec]
zabbix22 4690 4670 0 14:55 ? 00:00:00 zabbix_proxy: housekeeper [deleted 9870 records in 0.233491 sec, idle 3599 sec]
zabbix22 4701 4670 0 14:55 ? 00:00:08 zabbix_proxy: http poller #2 [got 1 values in 0.024105 sec, idle 1 sec]
zabbix22 4707 4670 0 14:55 ? 00:00:00 zabbix_proxy: history syncer #4 [synced 22 items in 0.008565 sec, idle 5 sec]
zabbix22 4738 1 0 14:55 ? 00:00:00 zabbix_agentd -c /home/zabbix22/zabbix_agentd.conf
zabbix22 4739 4738 0 14:55 ? 00:00:00 zabbix_agentd: collector [idle 1 sec]
zabbix22 4740 4738 0 14:55 ? 00:00:00 zabbix_agentd: listener #1 [waiting for connection]
zabbix22 4741 4738 0 14:55 ? 00:00:00 zabbix_agentd: listener #2 [processing request]
O processo principal é uma exceção. A sua atividade atual não é apresentada para facilitar sua identificação entre as múltiplas instâncias.
Esta funcionalidade não é implementada no Windows.
Se o nível de log for definido apra DebugLevel=4 estas atividades e mensagens de estatísticas serão gravadas no log.
Linux
Em ambientes Linux o comando ps pode ser utilizado em conjunto com o
ocmando watch para observar como o Zabbix está indo. Por exemplo, para
rodar o comando ps 5 vezes por segundo para ver as atividades dos
processos:
watch -n 0.2 ps -fu zabbix
Para mostrar apenas os processos do Zabbix Proxy/Agent:
watch -tn 0.2 'ps -f -C zabbix_proxy -C zabbix_agentd'
Para mostrar apenas o processo de sincronismo do histórico:
watch -tn 0.2 'ps -fC zabbix_server | grep history'
O comando ps produz uma saída longa (aproximadamente 190 colunas),
algumas mensagens de ativiades serão longas. Se o seu terminal for menor
que 190 colunas de texto você pode tentar
watch -tn 0.2 'ps -o cmd -C zabbix_server -C zabbix_proxy -C zabbix_agentd'
para exibir apenas as linhas de comando sem UID, PID, start time etc.
O comando top também pode ser utilizado para observar a performance do
Zabbix. Pressionando a tecla 'c' no top exibe os processos com seus
comandos. Em nossos testes o top e atop apresentam corretamente as
mudanças de atividades nos processos do Zabbix mas o htop não mostrou
as atividades.
BSD
Se o comando watch não estive instalado pode-se conseguir efeito
similar com o comando abaixo
while [ 1 ]; do ps x; sleep 0.2; clear; done
AIX, HP-UX
Se o comando watch não estiver disponível, pode-se tentar
while [ 1 ]; do ps -fu zabbix; sleep 1; clear; done
Solaris
Por padrão o comando ps não mostra as mudanças de atividades. Uma
opção é usar o /usr/ucb/ps em seu lugar. Se o comando watch não
estiver instalado, a periodicidade de atualização da lista de processos
pode ser vista com
while [ 1 ]; do /usr/ucb/ps gxww; sleep 1; clear; done
No Solaris 11, o comando sleep aceita frações de 1 segundo (e.g.
sleep 0.2).