Reconnaître les repères temporels à Kibana et ElasticSearch
Je suis nouveau à ElasticSearch et Kibana et j'ai du mal à faire reconnaître Kibana mes horodateurs.
j'ai un fichier JSON avec beaucoup de données que je souhaite insérer dans Elasticsearch en utilisant Curl. Voici un exemple d'une des entrées JSON.
{"index":{"_id":"63"}}
{"account_number":63,"firstname":"Hughes","lastname":"Owens", "email":"hughesowens@valpreal.com", "_timestamp":"2013-07-05T08:49:30.123"}
j'ai essayé de créer un index dans Elasticsearch en utilisant la commande:
curl -XPUT 'http://localhost:9200/test/'
j'ai alors essayé de mettre en place une cartographie appropriée pour le timestamp:
curl -XPUT 'http://localhost:9200/test/container/_mapping' -d'
{
"container" : {
"_timestamp" : {
"_timestamp" : {"enabled: true, "type":"date", "format": "date_hour_minute_second_fraction", "store":true}
}
}
}'
/ / format de l'horodatage de http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-date-format.html
j'ai alors essayé d'insérer mes données en vrac:
curl -XPOST 'localhost:9200/test/container/_bulk?pretty' --data-binary @myfile.json
toutes ces commandes s'exécutent sans faute cependant lorsque les données sont vues dans Kibana le champ _timestamp n'est pas reconnu. Tri via l'horodatage ne fonctionne pas et essayer de filtrer les données en utilisant des périodes différentes ne fonctionne pas. Toute idée sur la raison pour laquelle ce problème se produit est appréciée.
3 réponses
a Réussi à résoudre le problème. Donc, pour quelqu'un d'autre ayant ce problème:
le format dans lequel nous avions enregistré notre date était incorrect, devait être:
"_timestamp":"2013-07-05 08:49:30.123"
alors notre cartographie devait être:
curl -XPUT 'http://localhost:9200/test/container/_mapping' -d'
{
"container" : {
"_timestamp" : {"enabled": true, "type":"date", "format": "yyyy-MM-dd HH:mm:ss.SSS", "store":true, "path" : "_timestamp"}
}
}'
J'espère que ça aidera quelqu'un.
il n'y a pas besoin de faire et date ISO8601 dans le cas où vous avez un horodatage d'époque. Pour faire Kibana reconnaître le champ date est doit être un champ de date.
veuillez noter que vous devez définir le champ comme le type de date avant vous entrez n'importe quelle donnée dans le /index/type. Sinon il sera stocké aussi longtemps et immuable.
exemple Simple qui peut être collé dans le marvel/sens plugin:
# Make sure the index isn't there
DELETE /logger
# Create the index
PUT /logger
# Add the mapping of properties to the document type `mem`
PUT /logger/_mapping/mem
{
"mem": {
"properties": {
"timestamp": {
"type": "date"
},
"free": {
"type": "long"
}
}
}
}
# Inspect the newly created mapping
GET /logger/_mapping/mem
exécutez chacune de ces commandes en série.
Générer un mem journaux
voici un script simple qui fait écho à votre terminal et se connecte à votre elasticsearch local:
while (( 1==1 )); do memfree=`free -b|tail -n 1|tr -s ' ' ' '|cut -d ' ' -f4`; echo $load; curl -XPOST "localhost:9200/logger/mem" -d "{ \"timestamp\": `date +%s%3N`, \"free\": $memfree }"; sleep 1; done
Inspecter des données dans elastic search
collez ceci dans votre merveille / sens
GET /logger/mem/_search
Maintenant vous pouvez allez à Kibana et faites quelques graphiques. Kibana va autodétecter ton champ de rendez-vous.
cette solution fonctionne pour les plus vieux ES < 2.4 Pour la nouvelle version de ES, vous pouvez utiliser le champ "date" avec les paramètres suivants:: https://www.elastic.co/guide/en/elasticsearch/reference/current/date.html