Zabbix descoberta de rede de rede gerenciada de fantoches

2

Eu tento automatizar a descoberta de toda a minha rede, que é gerenciada com fantoches, e quero usar o recurso de descoberta de rede do zabbix em vez do Puppetdb por vários motivos.

Eu tentei criar um parâmetro de usuário chamado puppet.classes que retorna todas as classes como valores separados por vírgulas (ex:, apache, mysql, zabbix,). Isso é chamado de Verificações na regra de descoberta.

Emseguida,definaminhasaçõescomo"Valor recebido como, apache" e "Vincular a modelos: Apache". captura de tela

Tudo está bem com apenas algumas classes de fantoches, mas o valor é truncado no banco de dados no meu ambiente de teste:

[zabbix]> select dserviceid,dhostid,status,lastup,lastdown,value,dns from dservices where dcheckid=3 and type=9 and key_='puppet.classes' \G
*************************** 1. row ***************************
dserviceid: 9
   dhostid: 3
    status: 0
    lastup: 1464103581
  lastdown: 0
     value: ,apache,apache::default_confd_files,apache::default_mods,apache::mod::alias,apache::mod::dir,apache::mod::filter,apache::mod::mime,apache::mod::php,apache::mod::prefork,apache::mod::ssl,apache::mod::status,apache::params,apache::service,apache::version,ap
       dns: 

Depois de depurar bastante, finalmente descobri que as verificações de descoberta não podem ser maiores que 255 bytes em

src/libs/zbxdbhigh/discovery.c
  static void discovery_update_dservice(zbx_uint64_t dserviceid, int status, int lastup, int lastdown, const char *value)
  {
      char    *value_esc;
      value_esc = DBdyn_escape_string_len(value, DSERVICE_VALUE_LEN);
      DBexecute("update dservices set status=%d,lastup=%d,lastdown=%d,value='%s' where dserviceid=" ZBX_FS_UI64, status, lastup, lastdown, value_esc, dserviceid);

      zbx_free(value_esc);
  }

include/db.h
  #define DSERVICE_VALUE_LEN        255'

O uso de metadados com o registro automático terá a mesma limitação:

### Option: HostMetadata
#   Optional parameter that defines host metadata.
#   Host metadata is used at host auto-registration process.
#   An agent will issue an error and not start if the value is over limit of 255 characters.
#   If not defined, value will be acquired from HostMetadataItem.
#
# Mandatory: no
# Range: 0-255 characters
# Default:
# HostMetadata=

Eu poderia usar a API e escrever um script que faça isso sozinho, mas isso seria um projeto muito grande, e eu não encontrei um projeto na natureza fazendo isso. Eu ficaria feliz em saber se existe.

Além disso, sei que poderia criar várias verificações de descoberta na regra de descoberta, mas acabaria com 40 + verificações na descoberta e deveria adicioná-las manualmente toda vez que tivermos um novo modelo ... Gostaria de ter uma solução com a menor manipulação possível para adicionar um novo modelo.

Alguém se depara com esse problema e tem uma solução escalonável?

Estou usando o zabbix 3.0.3

    
por pbrideau 24.05.2016 / 22:59

1 resposta

2

A abordagem mais flexível e poderosa será usar a API do Zabbix para criar hosts e vinculá-los aos modelos apropriados do Puppet.

Um projeto que lida com isso é link , e parece já ter sido testado com o Zabbix 3.0. Há outros como o link e provavelmente mais.

Você deve testá-los pessoalmente para ver qual deles atende melhor às suas necessidades.

Você já conhece a descoberta de rede do Zabbix, mas o limite de 255 caracteres torna não é tão útil para você. Você poderia usar códigos mais curtos em vez de nomes completos como "apache :: default_confd_files", mas isso pode ser mais difícil de manter e provavelmente ainda há alguma chance de atingir o limite.

O registro automático do agente ativo tem o mesmo limite de tamanho, portanto, não é muito diferente .

Como solução alternativa, você pode fazer com que a descoberta de rede ou o registro automático crie somente hosts e inicie um script, que use zabbix_get para consultar uma chave de item com todas as funções que o host possui e use a API para vincular host para modelos.

    
por 25.05.2016 / 08:07