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