JSON analisando com o plugin Nagios

1

Estou procurando usar o plugin JSON Nagios de Drew Kerrigan no GitHub (drewkerrigan / nagios-http-json) para monitorar a saída de uma API REST, mas estou com dificuldades para obter a sintaxe de consulta correta.

Aqui está um exemplo do JSON que é retornado quando eu clico na API da Web:

{"Checks":[
{"description":"can read interconnect 0910", 
"result":"passed"},
{"description":"can read interconnect 1011", 
"result":"passed"},
{"description":"can read linknode 1112", 
"result":"passed"},
{"description":"can read linknode 1213", 
"result":"passed"},
{"description":"can read dbnode 1314", 
"result":"passed"},
{"description":"can read dbnode 1415", 
"result":"passed"},
{"description":"can read dbnode 1516", 
"result":"passed"},
{"description":"can read dbnode 1617", 
"result":"passed"},
{"description":"can read dbnode 1718", 
"result":"passed"},
{"description":"can read main table", 
"result":"passed"},
{"description":"can read secondary table", 
"result":"passed"},
{"description":"can read postcode table", 
"result":"passed"},
{"description":"can read/write to docs folder", 
"result":"passed"},
{"description":"can read/write to config folder", 
"result":"passed"},
{"description":"la integration enabled", 
"result":"passed"},
{"description":"webservice password", 
"result":"passed"},
{"description":"can authenticate in largedb", 
"result":"passed"},
{"description":"can import locales", 
"result":"passed"}
]}

O plug-in de Drew tem um comutador de teste de igualdade:

-q [KEY_VALUE_LIST [KEY_VALUE_LIST ...]], --key_equals [KEY_VALUE_LIST [KEY_VALUE_LIST ...]]
                        Checks equality of these keys and values
                        (key[>alias],value key2,value2) to determine status.
                        Multiple key values can be delimited with colon
                        (key,value1:value2). Return warning if equality check
                        fails

e Drew dá exemplos de como estruturar uma consulta para várias sintaxes de chave / valor, mas não consigo acertar e estou recebendo erros de python que espero não estarem refletindo a sintaxe da minha consulta que reflete a estrutura JSON. / p>

Alguém pode me ajudar com um exemplo para verificar se, digamos, "pode ler a tabela principal" é "passado".

    
por Linker3000 16.08.2017 / 17:05

1 resposta

1

O plug-in de Drew não está codificado para lidar com esse formato JSON específico, então eu fiz uma pequena correção para pegar nossos dados JSON e convertê-los em uma estrutura mais amigável para plug-ins (chave simples: pares de valor) - não consegui mudar o formato do JSON que nosso aplicativo gera como é usado em outro lugar e muito seria quebrado. No bloco principal do programa:

[SNIP]
else:
    debugPrint(args.debug, 'DEBUG: In expected loop')
    jsondata = response.read()
    data = json.loads(jsondata)
    # Modify the data structure to a format more friendly to the plugin
    newD={}
    for item in data["Checks"]:
            newD[item.get("description")]=item.get("result")
    data = newD
    # End of modification
    debugPrint(args.debug, 'json:')
    debugPrint(args.debug, data, True)
    # Apply rules to returned JSON data
    processor = JsonRuleProcessor(data, args)
[SNIP]
    
por 25.08.2017 / 12:28

Tags