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 que max(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).

Veja também

  1. How to configure optimal count of zabbix processes