Você está visualizando a documentação da versão de desenvolvimento, que pode estar incompleta.
Esta página foi traduzida automaticamente. Se você notar um erro, selecione-o e pressione Ctrl+Enter para reportá-lo aos editores.

8 Regras LLD personalizadas

Visão geral

Também é possível criar uma regra de LLD completamente personalizada, descobrindo qualquer tipo de entidade - por exemplo, bancos de dados em um servidor de banco de dados.

Para isso, um item personalizado deve ser criado que retorne uma string JSON, especificando os objetos encontrados e, opcionalmente, algumas propriedades deles. A quantidade de macros por entidade não é limitada - enquanto as regras de descoberta internas retornam uma ou duas macros (por exemplo, duas para a descoberta de sistema de arquivos), é possível retornar mais.

Exemplo

O formato de string JSON necessário é melhor ilustrado com um exemplo. Suponha que você esteja executando um agent Zabbix 1.8 antigo (que não suporta a chave vfs.fs.discovery), mas ainda precisa descobrir sistemas de arquivos. Aqui está um script Perl simples para Linux que descobre sistemas de arquivos montados e gera a saída em JSON, incluindo tanto o nome quanto o tipo do sistema de arquivos. Uma maneira de usá-lo seria como um UserParameter com a chave "vfs.fs.discovery_perl":

#!/usr/bin/perl
       
       $first = 1;
       
       print "[\n";
       
       for (`cat /proc/mounts`)
       {
           ($fsname, $fstype) = m/\S+ (\S+) (\S+)/;
       
           print "\t,\n" if not $first;
           $first = 0;
       
           print "\t{\n";
           print "\t\t\"{#FSNAME}\":\"$fsname\",\n";
           print "\t\t\"{#FSTYPE}\":\"$fstype\"\n";
           print "\t}\n";
       }
       
       print "]\n";

Os símbolos permitidos para nomes de macros LLD são 0-9 , A-Z , _ , . Letras minúsculas não são suportadas nos nomes.

Um exemplo de sua saída (reformatado para maior clareza) é mostrado abaixo. O JSON para verificações de descoberta personalizadas deve seguir o mesmo formato.

[
           { "{#FSNAME}":"/",                           "{#FSTYPE}":"rootfs"   },
           { "{#FSNAME}":"/sys",                        "{#FSTYPE}":"sysfs"    },
           { "{#FSNAME}":"/proc",                       "{#FSTYPE}":"proc"     },
           { "{#FSNAME}":"/dev",                        "{#FSTYPE}":"devtmpfs" },
           { "{#FSNAME}":"/dev/pts",                    "{#FSTYPE}":"devpts"   },
           { "{#FSNAME}":"/lib/init/rw",                "{#FSTYPE}":"tmpfs"    },
           { "{#FSNAME}":"/dev/shm",                    "{#FSTYPE}":"tmpfs"    },
           { "{#FSNAME}":"/home",                       "{#FSTYPE}":"ext3"     },
           { "{#FSNAME}":"/tmp",                        "{#FSTYPE}":"ext3"     },
           { "{#FSNAME}":"/usr",                        "{#FSTYPE}":"ext3"     },
           { "{#FSNAME}":"/var",                        "{#FSTYPE}":"ext3"     },
           { "{#FSNAME}":"/sys/fs/fuse/connections",    "{#FSTYPE}":"fusectl"  }
       ]

No exemplo anterior, é necessário que as chaves correspondam aos nomes das macros LLD usadas nos protótipos, a alternativa é extrair os valores das macros LLD usando JSONPath {#FSNAME}$.fsname e {#FSTYPE}$.fstype, tornando possível tal script:

#!/usr/bin/perl
        
       $first = 1;
        
       print "[\n";
        
       for (`cat /proc/mounts`)
       {
           ($fsname, $fstype) = m/\S+ (\S+) (\S+)/;
        
           print "\t,\n" if not $first;
           $first = 0;
        
           print "\t{\n";
           print "\t\t\"fsname\":\"$fsname\",\n";
           print "\t\t\"fstype\":\"$fstype\"\n";
           print "\t}\n";
       }
        
       print "]\n";

Um exemplo de sua saída (reformatado para maior clareza) é mostrado abaixo.

[
           { "fsname":"/",                           "fstype":"rootfs"   },
           { "fsname":"/sys",                        "fstype":"sysfs"    },
           { "fsname":"/proc",                       "fstype":"proc"     },
           { "fsname":"/dev",                        "fstype":"devtmpfs" },
           { "fsname":"/dev/pts",                    "fstype":"devpts"   },
           { "fsname":"/lib/init/rw",                "fstype":"tmpfs"    },
           { "fsname":"/dev/shm",                    "fstype":"tmpfs"    },
           { "fsname":"/home",                       "fstype":"ext3"     },
           { "fsname":"/tmp",                        "fstype":"ext3"     },
           { "fsname":"/usr",                        "fstype":"ext3"     },
           { "fsname":"/var",                        "fstype":"ext3"     },
           { "fsname":"/sys/fs/fuse/connections",    "fstype":"fusectl"  }
       ]

Então, no campo Filtro da regra de descoberta, você pode especificar "{#FSTYPE}" como uma macro e "rootfs|ext3" como uma expressão regular.

Você não precisa usar nomes de macro como FSNAME/FSTYPE com regras LLD personalizadas, você é livre para usar os nomes que quiser. Caso o JSONPath seja usado, a linha LLD será um elemento de array que pode ser um objeto, mas também pode ser outro array ou um valor.

Observe que, se estiver usando um parâmetro de usuário, o valor de retorno é limitado a 16MB. Para mais detalhes, consulte limites de dados para valores de retorno do LLD.