Base de dados do Zabbix crescendo muito grande (backend do PostgreSQL)

2

No momento, estamos executando o Zabbix 3.0 LTS com um banco de dados PostgreSQL na versão 9.5.6 em execução no Ubuntu 16.04. Estamos nos deparando com um problema em que nosso banco de dados Zabbix continua crescendo continuamente. Não temos certeza do que está causando o problema, mas até agora alocamos 400 GB para o Zabbix e já estamos perto de crescer. Temos serviço de limpeza ativado e temos que manter 30 dias de dados. Nosso ambiente também é de 550 hosts e temos cerca de 65.000 itens no Zabbix com um intervalo de 60 segundos. Nossa contagem de itens é muito alta porque nosso ambiente é principalmente janelas.

Aqui estão algumas imagens do nosso ambiente Zabbix

EstaéumafotodosnossosparâmetrosdeHousekeeping

Nãotenhocertezadoqueestácausandoocrescimento,masestáaumentandoemtornode40GBacadasemana,oquepareceumaloucura.Eunãoquerocontinuardandomaisarmazenamentoseissonãoresolvernada.AlguémsaberiaqualéoproblemaoualguémsedeparoucomalgumproblemasemelhanteexecutandooZabbixemumbackenddoPostgreSQL?Aúnicacoisaquedescobriquepodeserumasoluçãoéparticionarobancodedados,masqueriaverificaraquiantesdeseguiressecaminho.

Qualquercomentáriooufeedbackseriamuitoapreciado!

EDITAR

AdicionandoográficodonossoprocessointernodoZabbix,quemostraagovernantaoperandoa100%.Governantaestádefinidaparaexecutaracadahoraeexcluirumnúmeromáximode40.000.NossasmaiorestabelasparecemseraHistóriaqueestálevando175GB&History_uint,queestárecebendo100GB.Seeufizerumabuscapor"governanta" ou "arrumação" nos logs do zabbix server, eu realmente não vejo nada, o que me leva a acreditar que não está realmente apagando nada

    
por Nare 02.08.2017 / 14:18

1 resposta

1

Sem ver estatísticas das grandes tabelas (especificamente elas estão sendo efetivamente aspiradas pelo auto-vácuo), minha sugestão principal é limitar a quantidade de histórico que você mantém (especificamente o que entra nas tabelas * history, ao contrário da tendência * tabelas).

De modo geral, o Zabbix gerencia o volume de dados coletados ao transformar o histórico (observações detalhadas) em tendências (observações agregadas); a idéia é que você mantenha a história por um breve período em que pode ser significativo ver dados exatos minuto a minuto, mas, para estudos de longo prazo, os dados agregados são adequados. Além disso, isso significa que as tabelas de histórico (que estão ocupadas com dados adicionados) também são menores, e as tabelas de tendência podem ser maiores, mas com menos atividade de gravação.

Parece que você está fazendo o oposto, não mantendo dados de tendência, mas toda a história? Existe uma razão ou acidente?

Além disso, o que se torna relevante em um momento: o particionamento é uma ferramenta, não resolverá seu problema imediato, mas trabalhando em conjuntos de dados muito grandes como este, ele se tornará seu amigo. Dito isso, o particionamento (principalmente) exige disciplina na retenção de histórico e tendência, você precisa manter todos os itens com duração semelhante para que você possa soltar a partição associada à medida que envelhece. De volta à resposta principal ...

O que eu faço é olhar para itens diferentes e decidir como eu os uso, e manter o histórico apenas o tempo que eu realmente precisar, e manter a tendência apenas o tempo todo, se necessário. Por exemplo, eu tenho algumas verificações de sanidade, que alertam se algo vai mal, mas geralmente são itens retornando 0, "OK" ou algo assim. É inútil guardar esses mais que alguns dias. Essa retenção específica de item está em desacordo com o particionamento, portanto, você decide.

Mais relevante é o que você pesquisa e com que frequência. Eu deixei cair o nosso número de itens por um fator de talvez 10, filtrando agressivamente as coisas que ninguém estava olhando. Uma das maiores é a interface - alguns dispositivos que possuem uma interface física podem ter 6 ou 10 virtuais; com certeza (alguém dirá) eles têm algum significado, mas será que alguém está realmente olhando para os dados coletados deles? Subinterfaces, interfaces de loopback, (algumas) interfaces virtuais, etc. Os administradores de rede geralmente pensam "Eu guardarei tudo apenas no caso", mas raramente é útil - vá ao spelunking nos dados do item e veja onde você tem um grande número de interfaces você nunca precisará saber. Ou no pior caso, você pode ter que começar a monitorar novamente. Bata-os da descoberta de baixo nível.

Enquanto estiver lá, observe o que você está coletando para interfaces. Mesma ideia; muitas vezes as pessoas colecionam tudo que o SNMP mostra porque, bem, elas podem. Finja, por um momento, que você está pagando por cada item de dados e pergunte a si mesmo se vale a pena mantê-lo se estiver pagando pelo item. (Em certo sentido, armazenamento de dados sábio, você é). Se você fez um monitoramento por alguns anos, pergunte a si mesmo se você já precisou de uma contagem de falhas de fragmentos (um exemplo simples do que parece ser um item real e útil, talvez para algumas pessoas). O que você faria se dissesse 5 aparecer? Se não é acionável, por que mantê-lo? Se é o tipo de coisa que você olha reativamente, em tempo real, por que mantê-lo em todos os sistemas historicamente?

Enquanto estiver lá, pergunte por que você está pesquisando tão rápido em alguns itens. Considere os problemas de contagem de pacotes / bytes - claro, é legal assistir a um gráfico de histórico em tempo real a cada 60 segundos, mas é acionável? Isso te ensina mais de um a cada 180 segundos? A cada 300 segundos? Você provavelmente está coletando muitos desses dados, muito rápido - você vai usá-los? Os administradores de rede disseram "mas preciso reagir rapidamente aos problemas". Então você os encontra colocando em latência e histerese para evitar falsos alarmes e flapping.

Retorne ao que você coleta e com que frequência e seu histórico diminuirá em um fator de 10 (+/-) sem afetar significativamente sua utilidade. Em seguida, reduza em quanto tempo você o mantém em detalhes (vs trends) e ele pode diminuir em outro fator de 2 ou 4.

Resposta longa e desconexa, mas basicamente: se não for acionável, não guarde. Você pode sempre colocá-lo de volta se você errar.

Finalmente: Certifique-se de que o auto-vácuo está funcionando efetivamente, considere configurar o máximo de eliminação do serviço para 0 (excluir tudo de uma vez), mas monitorar cuidadosamente após o bloqueio (em um sistema de bom tamanho com memória / processo / disco acelerar a manutenção da casa, mas também arrisca bloquear se tentar fazer muito de uma só vez).

OK, realmente finalmente: Se você decidir fazer o que foi sugerido e eliminar muitos itens, considere se você pode simplesmente recomeçar os dados. Limpar centenas de gigabytes de dados em tarefas domésticas será um grande desafio.

    
por 02.08.2017 / 18:20