Kibana: carga de datos de muestra

Hemos visto cómo cargar datos de logstash a elasticsearch. Cargaremos datos usando logstash y elasticsearch aquí. Pero sobre los datos que tienen campos de fecha, longitud y latitud que necesitamos usar, aprenderemos en los próximos capítulos. También veremos cómo subir datos directamente en Kibana, si no tenemos un archivo CSV.

En este capítulo, cubriremos los siguientes temas:

  • Usando Logstash cargar datos con campos de fecha, longitud y latitud en Elasticsearch
  • Usar herramientas de desarrollo para cargar datos masivos

Uso de la carga de Logstash para datos que tienen campos en Elasticsearch

Vamos a utilizar datos en formato CSV y los mismos se toman de Kaggle.com, que trata con datos que puede utilizar para un análisis.

Los datos de las visitas médicas domiciliarias que se utilizarán aquí se obtienen del sitio Kaggle.com.

Los siguientes son los campos disponibles para el archivo CSV:

["Visit_Status","Time_Delay","City","City_id","Patient_Age","Zipcode","Latitude","Longitude",
"Pathology","Visiting_Date","Id_type","Id_personal","Number_Home_Visits","Is_Patient_Minor","Geo_point"]

El Home_visits.csv es el siguiente:

El siguiente es el archivo conf que se utilizará con logstash:

input {
   file {
      path => "C:/kibanaproject/home_visits.csv"
      start_position => "beginning"
      sincedb_path => "NUL"
   }
}
filter {
   csv {
      separator => ","
      columns =>
      ["Visit_Status","Time_Delay","City","City_id","Patient_Age",
      "Zipcode","Latitude","Longitude","Pathology","Visiting_Date",
      "Id_type","Id_personal","Number_Home_Visits","Is_Patient_Minor","Geo_point"]
   }
   date {
      match => ["Visiting_Date","dd-MM-YYYY HH:mm"]
      target => "Visiting_Date"
   }
   mutate {convert => ["Number_Home_Visits", "integer"]}
   mutate {convert => ["City_id", "integer"]}
   mutate {convert => ["Id_personal", "integer"]}
   mutate {convert => ["Id_type", "integer"]}
   mutate {convert => ["Zipcode", "integer"]}
   mutate {convert => ["Patient_Age", "integer"]}
   mutate {
      convert => { "Longitude" => "float" }
      convert => { "Latitude" => "float" }
   }
   mutate {
      rename => {
         "Longitude" => "[location][lon]"
         "Latitude" => "[location][lat]"
      }
   }
}
output {
   elasticsearch {
      hosts => ["localhost:9200"]
      index => "medicalvisits-%{+dd.MM.YYYY}"
   }
   stdout {codec => json_lines }
}

De forma predeterminada, logstash considera que todo se carga en elasticsearch como una cadena. En caso de que su archivo CSV tenga un campo de fecha, debe hacer lo siguiente para obtener el formato de fecha.

For date field −

date {
   match => ["Visiting_Date","dd-MM-YYYY HH:mm"]
   target => "Visiting_Date"
}

En el caso de la ubicación geográfica, elasticsearch entiende lo mismo que:

"location": {
   "lat":41.565505000000044,
   "lon": 2.2349995750000695
}

Por lo tanto, debemos asegurarnos de tener Longitude y Latitude en el formato que elasticsearch necesita. Entonces, primero debemos convertir la longitud y la latitud para flotar y luego cambiarle el nombre para que esté disponible como parte delocation objeto json con lat y lon. El código para el mismo se muestra aquí:

mutate {
      convert => { "Longitude" => "float" }
      convert => { "Latitude" => "float" }
   }
mutate {
   rename => {
      "Longitude" => "[location][lon]"
      "Latitude" => "[location][lat]"
   }
}

Para convertir campos a números enteros, use el siguiente código:

mutate {convert => ["Number_Home_Visits", "integer"]}
mutate {convert => ["City_id", "integer"]}
mutate {convert => ["Id_personal", "integer"]}
mutate {convert => ["Id_type", "integer"]}
mutate {convert => ["Zipcode", "integer"]}
mutate {convert => ["Patient_Age", "integer"]}

Una vez que se cuiden los campos, ejecute el siguiente comando para cargar los datos en elasticsearch:

  • Vaya al directorio bin de Logstash y ejecute el siguiente comando.
logstash -f logstash_homevisists.conf
  • Una vez hecho esto, debería ver el índice mencionado en el archivo de configuración de logstash en elasticsearch como se muestra a continuación:

Ahora podemos crear un patrón de índice en el índice anterior cargado y usarlo más para crear visualización.

Uso de herramientas de desarrollo para cargar datos masivos

Vamos a utilizar Dev Tools de Kibana UI. Dev Tools es útil para cargar datos en Elasticsearch, sin usar Logstash. Podemos publicar, poner, eliminar, buscar los datos que queremos en Kibana usando Dev Tools.

En esta sección, intentaremos cargar datos de muestra en Kibana. Podemos usarlo para practicar con los datos de muestra y jugar con las funciones de Kibana para obtener una buena comprensión de Kibana.

Tomemos los datos json de la siguiente URL y carguemos los mismos en Kibana. De manera similar, puede probar cualquier dato json de muestra para cargarlo dentro de Kibana.

Antes de comenzar a cargar los datos de muestra, necesitamos tener los datos json con índices para usarlos en elasticsearch. Cuando lo cargamos usando logstash, logstash se encarga de agregar los índices y el usuario no tiene que preocuparse por los índices que requiere elasticsearch.

Datos Json normales

[
   {"type":"act","line_id":1,"play_name":"Henry IV", 
   
   "speech_number":"","line_number":"","speaker":"","text_entry":"ACT I"},
   {"type":"scene","line_id":2,"play_name":"Henry IV",
   "speech_number":"","line_number":"","speaker":"","text_entry":"SCENE I.London. The palace."},
   {"type":"line","line_id":3,"play_name":"Henry IV",
   "speech_number":"","line_number":"","speaker":"","text_entry":
   "Enter KING HENRY, LORD JOHN OF LANCASTER, the 
   EARL of WESTMORELAND, SIR WALTER BLUNT, and others"}
]

El código json que se usará con Kibana debe estar indexado de la siguiente manera:

{"index":{"_index":"shakespeare","_id":0}}
{"type":"act","line_id":1,"play_name":"Henry IV", 
"speech_number":"","line_number":"","speaker":"","text_entry":"ACT I"}
{"index":{"_index":"shakespeare","_id":1}}
{"type":"scene","line_id":2,"play_name":"Henry IV",
"speech_number":"","line_number":"","speaker":"",
"text_entry":"SCENE I. London. The palace."}
{"index":{"_index":"shakespeare","_id":2}}
{"type":"line","line_id":3,"play_name":"Henry IV",
"speech_number":"","line_number":"","speaker":"","text_entry":
"Enter KING HENRY, LORD JOHN OF LANCASTER, the EARL 
of WESTMORELAND, SIR WALTER BLUNT, and others"}

Tenga en cuenta que hay datos adicionales que van en el archivo json:{"index":{"_index":"nameofindex","_id":key}}.

Para convertir cualquier archivo json de muestra compatible con elasticsearch, aquí tenemos un pequeño código en php que generará el archivo json en el formato que elasticsearch quiere:

Código PHP

<?php
   $myfile = fopen("todo.json", "r") or die("Unable to open file!"); // your json
   file here
   $alldata = fread($myfile,filesize("todo.json"));
   fclose($myfile);
   $farray = json_decode($alldata);
   $afinalarray = [];
   $index_name = "todo";
   $i=0;
   $myfile1 = fopen("todonewfile.json", "w") or die("Unable to open file!"); //
   writes a new file to be used in kibana dev tool
   foreach ($farray as $a => $value) {
      $_index = json_decode('{"index": {"_index": "'.$index_name.'", "_id": "'.$i.'"}}');
      fwrite($myfile1, json_encode($_index));
      fwrite($myfile1, "\n");
      fwrite($myfile1, json_encode($value));
      fwrite($myfile1, "\n");
      $i++;
   }
?>

Hemos tomado el archivo todo json de https://jsonplaceholder.typicode.com/todos y use el código php para convertir al formato que necesitamos cargar en Kibana.

Para cargar los datos de muestra, abra la pestaña de herramientas de desarrollo como se muestra a continuación:

Ahora vamos a usar la consola como se muestra arriba. Tomaremos los datos json que obtuvimos después de ejecutarlos a través del código php.

El comando que se utilizará en las herramientas de desarrollo para cargar los datos json es:

POST _bulk

Tenga en cuenta que el nombre del índice que estamos creando es todo .

Una vez que hace clic en el botón verde, se cargan los datos, puede verificar si el índice se creó o no en elasticsearch de la siguiente manera:

Puede verificar lo mismo en las herramientas de desarrollo de la siguiente manera:

Command −

GET /_cat/indices

Si desea buscar algo en su índice: todo, puede hacerlo como se muestra a continuación:

Command in dev tool

GET /todo/_search

El resultado de la búsqueda anterior es como se muestra a continuación:

Da todos los registros presentes en todoindex. El total de registros que obtenemos es 200.

Buscar un registro en el índice de tareas pendientes

Podemos hacer eso usando el siguiente comando:

GET /todo/_search
{
   "query":{
      "match":{
         "title":"delectusautautem"
      }
   }
}

Podemos recuperar los registros que coinciden con el título que le hemos dado.