[Kibana] Besoin d'aide sur l'indexation d'un field

Bonjour !

Avant de commencer, ma configuration:

Elasticsearch: 5.6.5
Logstash: 5.6.4
Kibana: 5.6.5

J'indexe un field nommé 'total-response-time' dont le mapping est le suivant:

{
  "mappings": {
    "_default_": {
      "_all": {
        "enabled": true,
        "norms": {
          "enabled": false
        }
      },
      "dynamic_templates": [
        {
          "strings": {
            "match_mapping_type": "string",
            "mapping": {
              "type": "string",
              "fields": {
                "raw": {
                  "type":  "string",
                  "index": "not_analyzed"
                }
              }
            }
          }
        }
      ],
      "properties": {
        "@timestamp": {
          "type": "date"
        },
        "offset": {
          "type": "long",
          "doc_values": "true"
        },
        "location": {
          "type": "geo_point"
        },
        "total-response-time": {
          "type": "long",
          "doc_values": "true",
        }
      }
    }
  },
  "settings": {
    "index.refresh_interval": "5s"
  },
  "template": "webinject-*"
}

N'étant pas très à l'aise avec cette notion de mapping, je me suis basé sur le field 'offset'.

Une fois indexé, je peux voir dans Kibana que ce field est:

total-response-time
  - Type: number
  - Searchable: True
  - Aggregatable: True 				

Cela est identique au field 'Offset'.

Maintenant, je souhaite créer une visualisation sur ce field (ex: gauge).
Si je choisis la configuration suivante:

Metric aggregation: MAX
Field.number: Total-response-time

Le résultat s'affichant est '0' alors qu'il devrait être 0.897.
Si je change le field par 'Offset', cela marche.

Seriez-vous me dire pourquoi cela marche pour le field 'Offset' et non pour 'total-response-time' alors qu'il semble avoir le même mapping ?

Je vous remercie.

Benjamin.

Si cela peut aider, voici la requête générée par Kibana:

{
  "size": 0,
  "query": {
    "bool": {
      "must": [
        {
          "match_all": {}
        },
        {
          "range": {
            "@timestamp": {
              "gte": 1515798000000,
              "lte": 1515884399999,
              "format": "epoch_millis"
            }
          }
        }
      ],
      "must_not": []
    }
  },
  "_source": {
    "excludes": []
  },
  "aggs": {
    "1": {
      "max": {
        "field": "total-response-time"
      }
    }
  }
}

Et la réponse retournée:

{
  "took": 0,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 2,
    "max_score": 0,
    "hits": []
  },
  "aggregations": {
    "1": {
      "value": 0
    }
  },
  "status": 200
}

Est-ce que cela ne serait pas dû au fait que la valeur présente dans le field 'total-response-time' est petite et que la recherche n'inclue pas ce qui se trouve après la virgule ?

total-reponse-time: 0.768
offset: 3804

Après avoir modifier le type du field 'total-response-time' de 'long' en 'double', cela fonctionne !

"total-response-time": {
          "type": "double",
          "doc_values": "true",
        }

Si jamais cela peut aider quelqu'un !

Cordialement.

Benjamin.

1 Like

Merci d'avoir posté la solution!

Juste une question: c'est une typo?

Logstash: 5.6.4

Pourquoi pas la même version que les autres produits?

Bonjour,

En effet question très pertinente, je viens de mettre à jour Logstash :wink:

Cordialement,

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.