Dump de mensagens atrasadas

 

O problema

A partir da versão 6.3.3 do OpMon foi implementado um dump para o cache de mensagens não enviadas. Por mensagens não enviadas entendem-se as mensagens(textos, queries, etc) que não conseguiram ser atribuídas para o Gearman e portanto permanecem na memória interna do OpMon aguardando outra oportunidade de serem enviadas.

Em outras palavras, quando o OpMon não consegue entregar uma mensagem para o Gearman ele mantem a mensagem em uma fila interna ao processo intintulada delayed_messages, quando paramos o processo do OpMon estas mensagens são gravadas no arquivo:

/usr/local/opmon/var/delayed-messages.dump

no seguinte formato:

<fila> <mensagem>

Vale ressaltar que estas mensagens antes da versão 6.3.3 eram simplesmente descartadas quando o processo do OpMon parava, o que veio a acarretar uma gama grande de problemas pois estados eram perdidos e os relatórios de Disponibilidade acabavam não retratando fielmente o estado da monitoração. Também é importante ter em mente que o OpMon continua tentando entregar estas mensagens, sendo assim, esta fila deverá conter apenas as mensagens que ainda não puderam ser entregues mas poderão no futuro caso a conexão com o Gearman se restabeleça. Em outras palavras, se o processo do Gearmand for parado por alguns instantes é possível que esta fila passe a receber mensagens porém quando o processo do Gearman voltar ao ar estas mensagens serão entregues automaticamente, portanto a fila tornará a ficar vazia.

Como saber se o OpMon tem mensagens atrasadas

Para isto, basta rodar o seguinte comando:

[root@opmon ~]# echo "[`date +%s`] _OPDB_FETCH_DELAYED" >/usr/local/opmon/var/rw/opmon.cmd

A quantidade de mensagens aguardando na fila para serem entregues aparecerá no arquivo opmon.log, dentro do diretório /usr/local/opmon/var. Para forçar o dump das mensagens que estão na fila basta parar o processo do OpMon ou então rodar o seguinte comando:

[root@opmon ~]# echo "[`date +%s`] _OPDB_DUMP_DELAYED" >/usr/local/opmon/var/rw/opmon.cmd

Após rodar o comando acima, todas as mensagens pendentes serão armazenadas no arquivo de dump citado anteriormente.

Re-importando mensagens

Caso o OpMon possua mensagens(linhas) no arquivo de dump, as mesmas deverão ser importadas usando um utilitário de linha de comando. Isso garantirá que os estados e as checagens que não puderam ser entregues ao Gearman sejam novamente importadas assegurando relatórios tanto de Capacidade quanto de Disponibilidade mais reais.

Para importar as mensagens primeiro precisamos garantir que o OpMon esteja parado, para assegurar que novas mensagens não entrem enquanto importamos as antigas. Uma vez que o OpMon esteja parado, basta rodar o seguinte comando:

[root@opmon ~]# import_opmon_delayed_messages

Uma mensagem de sucesso será exibida. Caso isto não ocorra, recomenda-se que se copie o arquivo de dump para um diretório temporário e se comunique a equipe de desenvolvimento da OpServices. Caso a mensagem de sucesso apareça(que é o que se espera), o arquivo de dump deve ser deletado/removido manualmente e o processo do OpMon iniciado novamente.

Considerações finais

Não considera-se a existência de mensagens no arquivo de dump como algo normal, porém, devido a oscilações na rede elas podem eventualmente acontecer.  Recomenda-se fortemente a monitoração deste arquivo buscando por possíveis linhas e caso isso ocorra um alerta seja gerado, podendo até ser configurado um Event Handler para re-importar os dados do arquivo.

Temendo efeitos colaterais como por exemplo uma latência maior na monitoração, este processo não foi automatizado porém no futuro não descartamos esta ideia.

Updated on 01/12/2021

Esse artigo foi útil para você?

Ficou com alguma dúvida?

Perguntas & Respostas

Participe da nossa comunidade e tire dúvidas ou compartilhe respostas e ideias.

Participar

Professional Support

Não encontrou a resposta que procura? Não se preocupe, estamos aqui para ajudar!

Abrir chamado

Treinamento Online

Através da plataforma Udemy, você encontra todos os treinamentos das nossas soluções.

Inscreva-se