Minha arquitetura na AWS é a seguinte:
Existem 2 agentes zabbix idênticos (baseados em zabbix/zabbix-agent:centos-4.0.11) cada um rodando em uma instância EC2 diferente. O servidor Zabbix é executado em uma terceira instância (também dockerizada com dockbix usando também a versão 4.0), todas as três dentro da mesma VPC.
A ideia é ter um Network Load Balancer que escute a porta que ambos os agentes executam (10050) e tenha essas 2 instâncias mencionadas sendo registradas no grupo de destino. Então, o DNS deste NLB seria fornecido para a configuração do host Zabbix como interface. O objetivo é ter vários hosts zabbix visando o mesmo NLB e suas solicitações sendo roteadas de acordo com a carga de tráfego para o agente diferente. Existe um item de agente zabbix em cada host que invoca um UserParameter (um script python) que é definido em cada um dos dois arquivos conf do agente zabbix.
Meu problema é o seguinte: zabbix_get (e a chamada equivalente feita automaticamente de acordo com o intervalo definido na conf do host) timeouts ocasionalmente. Uma vez eu recebo uma resposta bem sucedida
{"response":"sucesso","info":"processado: 4; falhou: 0; total: 4; segundos gastos: 0,000106"}
(script python usado é bem rápido, leva apenas 1 segundo) e outras vezes recebo uma resposta como:
zabbix_get [4515]: Tempo limite durante a execução da operação.
Isso acontece um após o outro. Então, um foi bem-sucedido e os próximos tempos limite, então o próximo foi bem-sucedido e assim por diante.
Eu tentei testar a conexão com telnet, e funciona o tempo todo. Eu até tentei usar um contêiner tcp echo simples, que também funcionou bem o tempo todo.
Qualquer idéia sobre o que pode estar errado seria muito apreciada :)
EDIT : Só queria observar que esse comportamento ocorre não apenas com meu script personalizado definido pelo UserParameter, mas também com chamadas de agente internas, como agent.version
ou agent.ping
ou net.tcp.port[<serverIp>, 10051]
etc
EDIT2 : Com tcpdump src <serverIp>
a execução dentro das instâncias do agente, parece que há tráfego semelhante acontecendo com uma resposta bem-sucedida e com tempo limite
Então, aparentemente, eu precisava habilitar o balanceamento de carga cross-AZ para meu nlb. É por isso que estava expirando a cada segunda solicitação, pois todas as minhas instâncias estavam em uma região de disponibilidade.