web-dev-qa-db-fra.com

elasticsearch / kibana 4: le champ existe mais n'est pas égal à une valeur

elasticsearch version 1.4.5

kibana 4.1.1

logstash 1.5.2-1

Comment structurer une recherche dans l'onglet de découverte de kibana 4 qui ne renvoie des résultats que si un champ existe mais n'est pas égal à une valeur spécifique?

J'ai des données de journal Apache dans logstash et je veux renvoyer toutes les entrées qui ont status_code défini mais différent de 200. Donc, si les valeurs possibles sont {undefined, 200, 403, 404, 500, etc.}, j'aimerais voir toutes les variantes d'erreurs 4xx et 5xx, mais pas les messages où le champ n'est pas défini et pas là où il est réglé sur 200.

J'ai essayé ce qui suit:

+status_code: (*) -status_code: (200)

((status_code: (*) AND NOT status_code: (200))

Je vois aussi des références à elasticsearch requêtes curl mais je ne sais pas comment les transformer en quelque chose que je peux utiliser dans la barre de recherche de kibana. Voici un exemple:

{
  "query": {
    "constant_score": {
      "filter": {
        "bool": {
          "must": {
            "exists": {
              "field": "status_code"
            }
          },
          "must_not": {
            "term": {
              "status_code": '200'
            }
          }
        }
      }
    }
  }
}

Merci!

28
Peter M

La requête que vous recherchez est celle-ci:

_exists_:status_code AND NOT status_code:200

Ce lien vous montre tout ce qui est supporté par les requêtes de chaînes de requête.

54
Val

La réponse précédente correspond exactement à ce que j’avais demandé, mais cela peut aussi être utile:

 status_code:[300 TO 600]
5
Peter M