Kibana - Carregando dados de amostra

Vimos como fazer upload de dados do logstash para o elasticsearch. Faremos upload de dados usando logstash e elasticsearch aqui. Mas sobre os dados que possuem campos de data, longitude e latitude que precisamos usar, aprenderemos nos próximos capítulos. Também veremos como fazer upload de dados diretamente no Kibana, se não tivermos um arquivo CSV.

Neste capítulo, cobriremos os seguintes tópicos -

  • Usando Logstash, faça upload de dados com campos de data, longitude e latitude no Elasticsearch
  • Usando ferramentas Dev para fazer upload de dados em massa

Usando o upload do Logstash para dados com campos no Elasticsearch

Vamos usar os dados no formato CSV e o mesmo é retirado do Kaggle.com que trata de dados que você pode usar para uma análise.

Os dados de visitas médicas domiciliares a serem usados ​​aqui são obtidos no site Kaggle.com.

A seguir estão os campos disponíveis para o arquivo 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"]

O Home_visits.csv é o seguinte -

A seguir está o arquivo conf a ser usado com 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 }
}

Por padrão, o logstash considera tudo a ser carregado em elasticsearch como string. Caso seu arquivo CSV tenha um campo de data, você precisa fazer o seguinte para obter o formato de data.

For date field −

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

No caso de localização geográfica, elasticsearch entende o mesmo que -

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

Portanto, precisamos ter certeza de que temos Longitude e Latitude no formato que o elasticsearch precisa. Portanto, primeiro precisamos converter longitude e latitude em flutuante e, posteriormente, renomeá-lo para que esteja disponível como parte delocation objeto json com lat e lon. O código para o mesmo é mostrado aqui -

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

Para converter campos em inteiros, use o seguinte 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"]}

Depois de cuidar dos campos, execute o seguinte comando para fazer upload dos dados no elasticsearch -

  • Acesse o diretório bin do Logstash e execute o seguinte comando.
logstash -f logstash_homevisists.conf
  • Uma vez feito isso, você deve ver o índice mencionado no arquivo logstash conf no elasticsearch conforme mostrado abaixo -

Agora podemos criar um padrão de índice no índice acima carregado e usá-lo posteriormente para criar a visualização.

Usando ferramentas de desenvolvimento para fazer upload de dados em massa

Vamos usar as Dev Tools da Kibana UI. Dev Tools é útil para fazer upload de dados no Elasticsearch, sem usar o Logstash. Podemos postar, colocar, deletar, pesquisar os dados que queremos no Kibana usando Dev Tools.

Nesta seção, tentaremos carregar dados de amostra no próprio Kibana. Podemos usá-lo para praticar com os dados de amostra e brincar com os recursos do Kibana para obter um bom entendimento do Kibana.

Vamos pegar os dados json do seguinte url e carregá-los no Kibana. Da mesma forma, você pode tentar qualquer amostra de dados json a ser carregada dentro do Kibana.

Antes de começar a fazer upload dos dados de amostra, precisamos ter os dados json com índices a serem usados ​​na pesquisa elástica. Quando o carregamos usando o logstash, o logstash se preocupa em adicionar os índices e o usuário não precisa se preocupar com os índices exigidos pelo elasticsearch.

Dados Json normais

[
   {"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"}
]

O código json a ser usado com Kibana deve ser indexado da seguinte forma -

{"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"}

Observe que há dados adicionais que vão no arquivo json -{"index":{"_index":"nameofindex","_id":key}}.

Para converter qualquer arquivo json de amostra compatível com elasticsearch, aqui temos um pequeno código em php que produzirá o arquivo json fornecido no formato desejado por elasticsearch -

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++;
   }
?>

Pegamos o arquivo todo json de https://jsonplaceholder.typicode.com/todos e usar o código php para converter para o formato que precisamos enviar no Kibana.

Para carregar os dados de amostra, abra a guia de ferramentas de desenvolvimento conforme mostrado abaixo -

Agora vamos usar o console conforme mostrado acima. Pegaremos os dados json que obtivemos após executá-los por meio do código php.

O comando a ser usado nas ferramentas de desenvolvimento para fazer upload dos dados json é -

POST _bulk

Observe que o nome do índice que estamos criando é todo .

Depois de clicar no botão verde, os dados são carregados, você pode verificar se o índice foi criado ou não no elasticsearch da seguinte maneira -

Você pode verificar o mesmo nas próprias ferramentas de desenvolvimento da seguinte maneira -

Command −

GET /_cat/indices

Se você deseja pesquisar algo em seu índice: todo, você pode fazer isso conforme mostrado abaixo -

Command in dev tool

GET /todo/_search

O resultado da pesquisa acima é mostrado abaixo -

Ele fornece todos os registros presentes no todoindex. O total de registros que estamos obtendo é 200.

Procure um registro no índice de tarefas

Podemos fazer isso usando o seguinte comando -

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

Podemos obter os registros que correspondem ao título que demos.