<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Alex Salgado</title>
    <description>The latest articles on DEV Community by Alex Salgado (@salgado).</description>
    <link>https://dev.to/salgado</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F133810%2F98e539ca-efc1-4252-af5c-24aac703ecc7.png</url>
      <title>DEV Community: Alex Salgado</title>
      <link>https://dev.to/salgado</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/salgado"/>
    <language>en</language>
    <item>
      <title>Como Configurar e Testar Políticas ILM no Elasticsearch</title>
      <dc:creator>Alex Salgado</dc:creator>
      <pubDate>Fri, 02 Aug 2024 12:52:39 +0000</pubDate>
      <link>https://dev.to/salgado/como-configurar-e-testar-politicas-ilm-no-elasticsearch-42ni</link>
      <guid>https://dev.to/salgado/como-configurar-e-testar-politicas-ilm-no-elasticsearch-42ni</guid>
      <description>&lt;h2&gt;
  
  
  Introdução
&lt;/h2&gt;

&lt;p&gt;Gerenciar dados de forma eficiente é crucial, especialmente em sistemas que lidam com grandes volumes de informações. O Elasticsearch, uma poderosa ferramenta de busca e análise, oferece o recurso de políticas de gerenciamento de ciclo de vida de índices (ILM) para ajudar a gerenciar como os dados são armazenados, movidos e excluídos ao longo do tempo. Isso não só otimiza a performance, mas também ajuda a reduzir os custos de armazenamento. Imagine uma empresa que coleta dados de sensores IoT: inicialmente, os dados precisam ser acessados rapidamente, mas com o tempo, podem ser movidos para um armazenamento mais barato antes de serem excluídos após um período.&lt;/p&gt;

&lt;h2&gt;
  
  
  Passo 1: Configurar a Política ILM
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1.1 Definindo a Política ILM
&lt;/h3&gt;

&lt;p&gt;Primeiro, precisamos criar uma política ILM chamada &lt;code&gt;my_ilm_policy&lt;/code&gt;. Esta política divide o ciclo de vida dos dados em três fases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fase "hot"&lt;/strong&gt;: Aqui, os dados são escritos inicialmente. Configuramos para fazer o rollover (criar um novo índice) quando o índice atinge 50 GB ou 30 dias de idade.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fase "warm"&lt;/strong&gt;: Após 30 dias, os dados são movidos para nós de dados "warm", que são mais baratos, mas ainda relativamente rápidos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fase "delete"&lt;/strong&gt;: Após 90 dias, os dados são excluídos para liberar espaço.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;PUT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/_ilm/policy/my_ilm_policy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"policy"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"phases"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"hot"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"actions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"rollover"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"max_size"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"50gb"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"max_age"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"30d"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"warm"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"min_age"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"30d"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"actions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"allocate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"require"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="nl"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"warm"&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"delete"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"min_age"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"90d"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"actions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"delete"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  1.2 Criar o Índice Inicial e Associar o Alias
&lt;/h3&gt;

&lt;p&gt;Agora, criamos o primeiro índice (&lt;code&gt;my_index-000001&lt;/code&gt;) e associamos a ele um alias chamado &lt;code&gt;my_alias&lt;/code&gt;. O alias é um apelido para o índice, facilitando a referência a ele. Também aplicamos a política ILM &lt;code&gt;my_ilm_policy&lt;/code&gt; ao índice.&lt;/p&gt;

&lt;p&gt;Comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;PUT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/my_index&lt;/span&gt;&lt;span class="mi"&gt;-000001&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"settings"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"index"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"lifecycle"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"my_ilm_policy"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"rollover_alias"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"my_alias"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"aliases"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"my_alias"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Passo 2: Verificar o Índice de Gravação e sua Saúde
&lt;/h2&gt;

&lt;h3&gt;
  
  
  2.1 Verificar o Índice de Gravação
&lt;/h3&gt;

&lt;p&gt;Para garantir que estamos gravando no índice correto, verificamos qual índice está associado ao alias &lt;code&gt;my_alias&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;GET&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/_alias/my_alias&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2.2 Verificar a Saúde do Índice de Gravação
&lt;/h3&gt;

&lt;p&gt;Para garantir que o índice está funcionando corretamente, verificamos sua saúde.&lt;/p&gt;

&lt;p&gt;Comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;GET&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/_cluster/health/my_index&lt;/span&gt;&lt;span class="mi"&gt;-000001&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Passo 3: Realizar o Rollover Manualmente
&lt;/h2&gt;

&lt;h3&gt;
  
  
  3.1 Forçar o Rollover do Índice
&lt;/h3&gt;

&lt;p&gt;Se quisermos forçar a criação de um novo índice de gravação manualmente (sem esperar pelos critérios de tamanho ou idade), usamos o comando abaixo. Isso cria um novo índice (por exemplo, &lt;code&gt;my_index-000002&lt;/code&gt;) e o associa ao alias &lt;code&gt;my_alias&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;POST&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/my_alias/_rollover&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Passo 4: Verificar o Novo Índice de Gravação e sua Saúde
&lt;/h2&gt;

&lt;h3&gt;
  
  
  4.1 Identificar o Novo Índice de Gravação
&lt;/h3&gt;

&lt;p&gt;Depois de realizar o rollover, verificamos novamente qual índice está associado ao alias &lt;code&gt;my_alias&lt;/code&gt; e está sendo usado para gravar novos dados.&lt;/p&gt;

&lt;p&gt;Comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;GET&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/_alias/my_alias&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4.2 Verificar a Saúde do Novo Índice de Gravação
&lt;/h3&gt;

&lt;p&gt;Verificamos a saúde do novo índice de gravação (por exemplo, &lt;code&gt;my_index-000002&lt;/code&gt;) para garantir que ele está funcionando corretamente.&lt;/p&gt;

&lt;p&gt;Comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;GET&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/_cluster/health/my_index&lt;/span&gt;&lt;span class="mi"&gt;-000002&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Passo 5: Verificar Remoção do Alias de Índices Antigos na Fase "warm"
&lt;/h2&gt;

&lt;h3&gt;
  
  
  5.1 Verificar a Configuração do Alias Após a Mudança de Fase
&lt;/h3&gt;

&lt;p&gt;Depois que o índice original se move para a fase "warm", verificamos se ele foi removido do alias &lt;code&gt;my_alias&lt;/code&gt;. Isso deve acontecer automaticamente conforme nossa política ILM.&lt;/p&gt;

&lt;p&gt;Comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;GET&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/_alias/my_alias&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Resumo
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Configurar a política ILM&lt;/strong&gt; para gerenciar como e quando os índices são movidos ou excluídos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Criar o primeiro índice&lt;/strong&gt; e associar um alias a ele.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verificar qual índice está sendo usado&lt;/strong&gt; para gravação e sua saúde.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Forçar a criação de um novo índice&lt;/strong&gt; de gravação manualmente.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verificar o novo índice de gravação&lt;/strong&gt; e garantir que ele está saudável.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verificar se o índice antigo foi removido do alias&lt;/strong&gt; quando se move para uma fase de dados menos importante.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Esses passos ajudam a garantir que seus dados estão sendo gerenciados de forma eficiente e que você sempre está escrevendo em um índice saudável e atualizado.&lt;/p&gt;

&lt;h2&gt;
  
  
  Referências
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/index-lifecycle-management.html" rel="noopener noreferrer"&gt;Documentação oficial do Elasticsearch sobre ILM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.elastic.co/blog/implementing-hot-warm-cold-in-elasticsearch-with-index-lifecycle-management" rel="noopener noreferrer"&gt;Tutoriais e exemplos de uso de ILM&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>ilm</category>
      <category>elasticsearch</category>
      <category>gerenciamentodedados</category>
      <category>elk</category>
    </item>
    <item>
      <title>Usando Consultas de Percolação do Elasticsearch, Netflix Aperfeiçoa Buscas Reversas Eficientemente</title>
      <dc:creator>Alex Salgado</dc:creator>
      <pubDate>Fri, 10 May 2024 14:00:27 +0000</pubDate>
      <link>https://dev.to/salgado/usando-consultas-de-percolacao-do-elasticsearch-netflix-aperfeicoa-buscas-reversas-eficientemente-o02</link>
      <guid>https://dev.to/salgado/usando-consultas-de-percolacao-do-elasticsearch-netflix-aperfeicoa-buscas-reversas-eficientemente-o02</guid>
      <description>&lt;h2&gt;
  
  
  Você já ouviu falar de buscas de percolação, buscas reversas? Olha esse case da &lt;strong&gt;NetFlix&lt;/strong&gt; usando &lt;strong&gt;Elasticsearch&lt;/strong&gt;.
&lt;/h2&gt;

&lt;p&gt;🎥🍿 No mais recente artigo do &lt;strong&gt;Netflix Tech Blog&lt;/strong&gt;, a equipe técnica descreve como transformaram os desafios de notificações personalizadas em uma solução eficiente que economiza tempo e recursos. Utilizando buscas reversas, a Netflix pode agora identificar rapidamente quais consultas são satisfeitas por um novo documento, como a adição de um filme, e notificar automaticamente os funcionários sobre atualizações relevantes.&lt;/p&gt;

&lt;p&gt;Esta abordagem não só melhora a eficiência interna mas também abre novas possibilidades para personalizar a experiência do usuário final. 🎥🍿&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmuw7n21tvs7o91pvxfk5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmuw7n21tvs7o91pvxfk5.png" alt="Image description" width="800" height="527"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  O que é uma busca reversa?
&lt;/h2&gt;

&lt;p&gt;Normalmente, quando você faz uma busca na internet ou em um banco de dados, você tem uma pergunta ou critério específico e está procurando por respostas ou itens que correspondam a esse critério. Por exemplo, se você pesquisar "filmes de comédia" em um site de streaming, você está procurando por filmes que se encaixem na categoria de comédia.&lt;/p&gt;

&lt;p&gt;A busca reversa é o oposto disso. Em vez de você ter a pergunta e procurar por respostas, você tem uma "resposta" e está procurando por todas as perguntas ou critérios que essa resposta satisfaz. Por exemplo, se um novo filme de comédia é adicionado ao catálogo, a busca reversa encontra todas as buscas salvas que deveriam incluir esse filme, como "filmes de comédia" ou "novos lançamentos".&lt;/p&gt;

&lt;h2&gt;
  
  
  Como a Netflix usa isso?
&lt;/h2&gt;

&lt;p&gt;A Netflix usa essa técnica para enviar notificações personalizadas. Eles usaram o exemplo de uma funcionária da Netflix, chamada Tiffany, que é responsável por supervisionar vários filmes. Ela pode querer ser notificada sobre coisas específicas, como "filmes sendo filmados na Cidade do México que ainda não têm um diretor designado".&lt;/p&gt;

&lt;p&gt;Ela não está inscrita para receber atualizações de filmes específicos, mas sim para tipos de atualizações que correspondem a certos critérios. Então, quando um filme é atualizado e agora se encaixa nos critérios de uma das buscas de Tiffany, ela recebe uma notificação automaticamente.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que são consultas de percolação?
&lt;/h2&gt;

&lt;p&gt;Para fazer isso de forma eficiente, a Netflix usa algo chamado "consultas de percolação" do Elasticsearch. Isso permite que a Netflix não apenas guarde as consultas de busca como se fossem documentos num índice, mas também verifique rapidamente novos filmes contra essas consultas para ver quais consultas eles satisfazem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Por que isso é útil?
&lt;/h2&gt;

&lt;p&gt;Esse método é super eficiente porque evita que a Netflix tenha que refazer todas as buscas salvas toda vez que um filme é atualizado para ver se ele agora se encaixa em alguma das buscas. Em vez disso, eles podem rapidamente verificar o filme contra as consultas salvas e ver quais notificações precisam ser enviadas. Isso economiza muitos recursos e tempo, tornando o sistema de notificação rápido e eficiente.&lt;/p&gt;

&lt;p&gt;Quer saber mais sobre como isso funciona e as implicações dessa tecnologia? Leia o artigo completo no Netflix Tech Blog! (&lt;a href="https://netflixtechblog.com/reverse-searching-netflixs-federated-graph-222ac5d23576"&gt;https://netflixtechblog.com/reverse-searching-netflixs-federated-graph-222ac5d23576&lt;/a&gt;)&lt;/p&gt;

&lt;h2&gt;
  
  
  Referências:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/percolator.html#:~:text=The%20percolator%20field%20type%20parses,to%20be%20a%20percolator%20field."&gt;Campos de percolador: que podem ser usados para indexar consultas do Elasticsearch.&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-percolate-query.html"&gt;Consultas de percolação: que podem ser usadas para determinar quais consultas indexadas correspondem a um documento de entrada.&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>elasticsearch</category>
      <category>reversesearch</category>
      <category>dataengineering</category>
      <category>netflix</category>
    </item>
    <item>
      <title>[IoT - Drones] Visualizando os dados com o Kibana - Episódio FINAL</title>
      <dc:creator>Alex Salgado</dc:creator>
      <pubDate>Thu, 16 Feb 2023 21:17:42 +0000</pubDate>
      <link>https://dev.to/salgado/iot-drones-visualizando-os-dados-com-o-kibana-episodio-final-265c</link>
      <guid>https://dev.to/salgado/iot-drones-visualizando-os-dados-com-o-kibana-episodio-final-265c</guid>
      <description>&lt;p&gt;Como um bom sistema de IoT, precisamos de algo como um sistema supervisório para acompanharmos em tempo real. Nada melhor que o Kibana Canvas.&lt;/p&gt;

&lt;p&gt;Usando sua imaginação, criando queries como fonte de dados dos componentes, é possível criar seu dashboard personalizado.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AbG-z0fZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zuvu9lvy2pgqq99ukhum.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AbG-z0fZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zuvu9lvy2pgqq99ukhum.png" alt="Image description" width="880" height="489"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Neste último episódio da nossa série sobre IoT e drones, vamos explorar como visualizar de maneira eficiente os dados coletados dos sensores do drone no Elasticsearch através do Filebeat.&lt;/p&gt;

&lt;p&gt;Com o Elasticsearch populado com os dados da telemetria do drone, agora é hora de explorar esses dados de uma maneira visual e interativa. Para isso, vamos usar o Kibana, uma plataforma de análise e visualização de dados da Elastic.&lt;/p&gt;

&lt;p&gt;No Kibana, vamos criar dashboards personalizados para exibir gráficos e métricas baseados nos dados da telemetria do drone. Além disso, vamos criar visualizações interativas, como mapas de calor e gráficos em tempo real, para ajudar a monitorar e entender os dados em tempo real.&lt;/p&gt;

&lt;p&gt;Para criar dashboards e visualizações no Kibana, primeiro precisamos criar um índice no Elasticsearch para armazenar nossos dados da telemetria do drone. Em seguida, podemos usar o Kibana para criar dashboards e visualizações baseadas nesse índice.&lt;/p&gt;

&lt;p&gt;Já havíamos criado o índice no episódio 2, então ele será usando como fonte das nossas informações.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HCskC9vx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/keolgx7ah7z984fxbo8v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HCskC9vx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/keolgx7ah7z984fxbo8v.png" alt="Image description" width="880" height="506"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Em resumo, nesta série de episódios, abordamos como coletar, processar e visualizar os dados da telemetria dos drones usando as ferramentas IoT. Começamos por apresentar o problema de coletar dados de sensores em drones em movimento e explicar como a combinação de Filebeat, Elasticsearch e Kibana pode ser uma solução eficiente. Em seguida, apresentamos como configurar o Filebeat e o Elasticsearch para coletar e armazenar dados da telemetria do drone. Finalmente, mostramos como criar dashboards e visualizações interativas no Kibana para ajudar a monitorar e entender esses dados de maneira eficiente.&lt;/p&gt;

&lt;p&gt;Com as informações apresentadas nesta série, agora é possível coletar dados da telemetria dos drones, processá-los e visualizá-los de maneira eficiente. Isso pode ser útil para uma ampla gama de aplicações, desde monitoramento de condições climáticas até inspeção de edifícios e infraestruturas. Esperamos que você tenha encontrado esta série útil e informativa e que possa aplicar estas técnicas em seus próprios projetos de IoT e drones.&lt;/p&gt;

&lt;p&gt;Abraços!&lt;/p&gt;

&lt;p&gt;Este é o &lt;strong&gt;quinto&lt;/strong&gt; capítulo da série [IoT Drones]. Caso tenha perdido algum episódio anterior, não se preocupe, confira a lista abaixo para acompanhar a série completa.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://dev.to/salgado/iiot-trabalhando-com-telemetria-de-drones-episodio-1-38mb"&gt;[IoT - Drones] Trabalhando com telemetria - Episódio 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/salgado/iot-drones-configurando-o-mqtt-broker-episodio-2-28l4"&gt;[IoT - Drones] Configurando o MQTT Broker - Episódio 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/salgado/iot-drones-preparando-a-ingestao-de-dados-atraves-do-filebeat-episodio-3-40ok"&gt;[IoT - Drones] Preparando a ingestão de dados através do Filebeat- Episódio 3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/salgado/iot-drones-testando-a-telemetria-episodio-4-3j9e"&gt;[IoT - Drones] Testando a Telemetria - Episódio 4
&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>kibana</category>
      <category>datavisualization</category>
      <category>drones</category>
      <category>businessinteligence</category>
    </item>
    <item>
      <title>[IoT - Drones] Testando a Telemetria - Episódio 4</title>
      <dc:creator>Alex Salgado</dc:creator>
      <pubDate>Sun, 12 Feb 2023 22:34:40 +0000</pubDate>
      <link>https://dev.to/salgado/iot-drones-testando-a-telemetria-episodio-4-3j9e</link>
      <guid>https://dev.to/salgado/iot-drones-testando-a-telemetria-episodio-4-3j9e</guid>
      <description>&lt;p&gt;Neste episódio, vamos explorar como testar a telemetria dos drones. Para testar nosso cenário, precisamos ligar o drone Tello. Ao fazer isso, ele cria uma rede Wi-Fi "TELLO***" que podemos conectar ao nosso computador usando o código em Python.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2riotnt1z37ggaehofhz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2riotnt1z37ggaehofhz.png" alt="Image description" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Com o drone ligado, podemos criar vôos programaticamente, gravar vídeos e ler a telemetria dos sensores. De acordo com a documentação do Tello, é possível ler 16 informações de sensores, incluindo temperatura, altitude, tempo de vôo, movimentação nos eixos x, y, z, entre outras. Essas informações são coletadas no seguinte formato: &lt;/p&gt;

&lt;p&gt;&lt;code&gt;“pitch:%d;roll:%d;yaw:%d;vgx:%d;vgy%d;vgz:%d;templ:%d;temph:%d;tof:%d;h:%d;bat:%d;baro:%.2f; time:%d;agx:%.2f;agy:%.2f;agz:%.2f;\r\n”&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Usamos o código em Python para ler esses dados na porta 8890, montar um JSON e publicá-los no MQTT no tópico "drones/drone01" de acordo com o padrão publish/subscribe. A frequência de leitura pode ser regulada no código Python (neste caso, 0,3 segundos).&lt;/p&gt;

&lt;p&gt;Antes de iniciar a coleta da telemetria, precisamos acionar o Filebeat para que ele fique escutando as publicações no MQTT e enviando os dados para o Elasticsearch, através do pipeline "mqtt-test" que criamos anteriormente.&lt;/p&gt;

&lt;p&gt;Na sua máquina com o Filebeat instalado, execute os seguintes comandos no terminal para testar, configurar e executar o Filebeat:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;./filebeat test config
./filebeat test output
./filebeat setup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se tudo estiver funcionando corretamente, podemos executar o Filebeat com o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;./filebeat -e

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para finalizar o teste acima, vamos criar um código para programar uma ação/Vôo com drone.&lt;/p&gt;

&lt;h2&gt;
  
  
  Código do Drone
&lt;/h2&gt;

&lt;p&gt;Precisamos criar um código em python para ler os dados dos sensores do Drone e publicá-los no nosso broker MQTT. Toda publicação precisa de um tópico e no nosso caso será "drones/drone01". Se eu estivesse gerenciando uma frota de drones, poderia criar outros tópicos como drones/drone02, drones/drone03, etc.&lt;/p&gt;

&lt;p&gt;Existem algumas bibliotecas que fornece mecanismos para a programação no Tello.&lt;br&gt;
Aqui um exemplo da biblioteca djitellopy.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install djitellopy

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E um simples código exemplo que imprime os dados da telemetria, coletadas do drone em pleno vôo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Drone telemetry with Tello
from asyncio import sleep
from djitellopy import Tello

tello = Tello()

tello.connect()

while True:
    print(tello.get_current_state())
    sleep(0.3)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Teste final
&lt;/h2&gt;

&lt;p&gt;Agora, com o drone ligado e conectado, iniciamos a coleta da telemetria usando o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python pub-drone-telemetry.py

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enquanto os dados são coletados pelo drone, processados pelo nosso pipeline e populados no índice, podemos ver os registros chegando através da opção "Discover" no Kibana.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0536porl8usj64rci00r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0536porl8usj64rci00r.png" alt="Kibana Drone" width="800" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note os campos drone-data.sensorX criados na lateral esquerda da tela. Cada campo corresponde a um dado de sensor do drone no mesmo timestamp.&lt;/p&gt;

&lt;p&gt;Agora que temos a telemetria coletada dos sensores do drone e enviada para o Elasticsearch através do Filebeat, no próximo episódio final, podemos explorar como visualizar esses dados de maneira eficiente no Kibana.&lt;/p&gt;

&lt;p&gt;Abraços!&lt;/p&gt;

&lt;p&gt;Este é o quarto capítulo da série [IoT Drones]. Caso tenha perdido algum episódio anterior, não se preocupe, confira a lista abaixo para acompanhar a série completa.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://dev.to/salgado/iiot-trabalhando-com-telemetria-de-drones-episodio-1-38mb"&gt;[IoT - Drones] Trabalhando com telemetria - Episódio 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/salgado/iot-drones-configurando-o-mqtt-broker-episodio-2-28l4"&gt;[IoT - Drones] Configurando o MQTT Broker - Episódio 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/salgado/iot-drones-preparando-a-ingestao-de-dados-atraves-do-filebeat-episodio-3-40ok"&gt;[IoT - Drones] Preparando a ingestão de dados através do Filebeat- Episódio 3&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>productivity</category>
      <category>discuss</category>
    </item>
    <item>
      <title>[IoT - Drones] Preparando a ingestão de dados através do Filebeat- Episódio 3</title>
      <dc:creator>Alex Salgado</dc:creator>
      <pubDate>Mon, 30 Jan 2023 11:36:13 +0000</pubDate>
      <link>https://dev.to/salgado/iot-drones-preparando-a-ingestao-de-dados-atraves-do-filebeat-episodio-3-40ok</link>
      <guid>https://dev.to/salgado/iot-drones-preparando-a-ingestao-de-dados-atraves-do-filebeat-episodio-3-40ok</guid>
      <description>&lt;p&gt;A Internet das Coisas (IoT) e drones estão se tornando cada vez mais populares e amplamente utilizados em muitas indústrias. A combinação de IoT e drones permite a coleta de dados em tempo real, o que é útil para análises e tomada de decisões. No entanto, armazenar e processar esses dados em grandes volumes pode ser um desafio. Aqui, mostraremos como preparar a ingestão de dados MQTT no Elasticsearch para simplificar esse processo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg83a39zts8r942ea0pxt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg83a39zts8r942ea0pxt.png" alt="Image description" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/salgado/iot-drones-configurando-o-mqtt-broker-episodio-2-28l4"&gt;Todo o processo para configurar o MQTT broker, foi definido no episódio anterior&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Para executar essa tarefa de ingestão de dados publicados no MQTT broker, vamos utilizar o Filebeat. Instalar e configurar o Filebeat é uma tarefa simples, mas é importante seguir alguns passos para garantir que tudo esteja funcionando corretamente. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Passo 1 - Instalar e configurar Filebeat&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O Filebeat pode ser instalado de acordo com as instruções da &lt;a href="https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-installation-configuration.html" rel="noopener noreferrer"&gt;documentação oficial&lt;/a&gt;. Em nosso caso, estamos usando a versão Cloud da Elastic.&lt;/p&gt;

&lt;p&gt;A seguir, precisamos dizer ao Filebeat que gostaríamos de nos inscrever no tópico o qual conterá os dados publicados pelo drone.&lt;br&gt;
Edite o arquivo &lt;code&gt;filebeat.yml&lt;/code&gt; na seção inputs, como mostrado a seguir:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;filebeat.inputs:
#--- drone
- type: mqtt
  hosts:
    - tcp://ec2-18-204-19-124.compute-1.amazonaws.com:1883
  topics:
    - drones/drone01
  tags:
    ["advent_calendar"]
  fields:
    fleet_id: "drone"
  fields_under_root: true
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;Passo 2 - Recebendo e transformando os dados dentro do Elasticsearch&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A partir do momento em que o Beat se inscreve no tópico &lt;strong&gt;&lt;em&gt;"drones/drone01"&lt;/em&gt;&lt;/strong&gt; do MQTT, toda vez em que alguém publicar informações no mesmo (no caso, o nosso drone), o processo de ingestão de dados é acionado. A telemetria inicial publicada pelo drone, envia dados dos sensores no formato JSON. Dessa forma, criamos um pipeline de ingestão para que transforma os atributos do JSON em campos no nosso índice dentro do Elasticsearch. Seguindo a documentação, no menu &lt;strong&gt;"Stack Management&amp;gt;Ingest Pipelines&amp;gt;Create Pipelines"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh0o4q1nd2fxyjkr0aau1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh0o4q1nd2fxyjkr0aau1.png" alt="Image description" width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Após nomear o seu pipeline, "mqtt-test", clique em &lt;strong&gt;&lt;em&gt;"Add processor"&lt;/em&gt;&lt;/strong&gt; para definir a regra do parser.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faxtgaheicn33arvpca2g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faxtgaheicn33arvpca2g.png" alt="Image description" width="800" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Em nosso caso, desejamos extrair os atributos do campo &lt;code&gt;"message"&lt;/code&gt; que está no formato JSON e transformá-los em campos do próprio índice com prefixo "data-drone". Clique em "Add" para adicionar nosso processor e em seguida "Create Pipeline".&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Como vocês sabem, existem várias formas de resolver problemas semelhantes no Elastic, é uma questão de arquitetura, performance, etc. Neste caso, por exemplo, poderíamos configurar um script no próprio Filebeat, mas para me beneficiar da UI e ilustrar melhor o funcionamento do processor, resolvi utilizar esta opção dentro do próprio Elasticsearch. Qual outra opção você usaria?&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Criamos então o nosso pipeline "mqtt-test" :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[
  {
    "json": {
      "field": "message",
      "target_field": "drone-data"
    }
  }
]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Precisamos agora dizer ao Filebeat que acione esse pipeline após a ingestão dos dados do drone. Fazemos isso editando o arquivo &lt;code&gt;filebeat.yml&lt;/code&gt; na seguinte seção:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;output.elasticsearch:
  indices:
    - index: "my-mqtt-%{[agent.version]}-%{+yyyy.MM.dd}"
  pipeline: mqtt-test
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;Passo 3 - Reinicie o Filebeat&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Depois de ter configurado o Filebeat para usar o pipeline de ingestão de dados, é necessário reiniciar o Filebeat para que as alterações tenham efeito.&lt;/p&gt;

&lt;p&gt;Com estes passos, o Filebeat estará configurado para usar o pipeline de ingestão de dados do Elasticsearch para transformar os dados recebidos em campos separados no índice do Elasticsearch. Verifique o log do Filebeat periodicamente para garantir que tudo esteja funcionando corretamente e para resolver quaisquer problemas que possam ocor&lt;/p&gt;

&lt;p&gt;Pronto, tudo configurado, hora de testar. atento ao próximo episódio :)&lt;/p&gt;

&lt;p&gt;Abraços!&lt;/p&gt;

&lt;p&gt;Este é o &lt;strong&gt;terceiro&lt;/strong&gt; capítulo da série [IoT Drones]. Caso tenha perdido algum episódio anterior, não se preocupe, confira a lista abaixo para acompanhar a série completa.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://dev.to/salgado/iiot-trabalhando-com-telemetria-de-drones-episodio-1-38mb"&gt;[IoT - Drones] Trabalhando com telemetria - Episódio 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/salgado/iot-drones-configurando-o-mqtt-broker-episodio-2-28l4"&gt;[IoT - Drones] Configurando o MQTT Broker - Episódio 2&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>crypto</category>
      <category>blockchain</category>
      <category>offers</category>
    </item>
    <item>
      <title>[IoT - Drones] Configurando o MQTT Broker - Episódio 2</title>
      <dc:creator>Alex Salgado</dc:creator>
      <pubDate>Mon, 23 Jan 2023 12:32:45 +0000</pubDate>
      <link>https://dev.to/salgado/iot-drones-configurando-o-mqtt-broker-episodio-2-28l4</link>
      <guid>https://dev.to/salgado/iot-drones-configurando-o-mqtt-broker-episodio-2-28l4</guid>
      <description>&lt;p&gt;Primeiramente, gostaria de agradecer a todos que se manifestaram, compartilhando seus próprios cases e "dores" com Drones após a publicação do Episódio 1. Espero que consiga ajudá-los ainda mais e aqueles que nunca trabalharam nessa área, possam iniciar com mais informação.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fojmmoo0osxiha8ojxm3x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fojmmoo0osxiha8ojxm3x.png" alt="Image description" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/salgado/iiot-trabalhando-com-telemetria-de-drones-episodio-1-38mb"&gt;A partir do arquitetura proposta no episódio 1, vamos seguindo na implementação.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Talvez umas das partes essenciais nessa arquitetura seja a instalação de um Broker utilizando o protocolo MQTT. Então vamos colocá-lo como primeiro passo de configuração em nosso projeto.&lt;/p&gt;

&lt;p&gt;Antes porém, eu colocaria um passo 0.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Passo 0 - Configurar ambiente virtual Python&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Como estamos desenvolvendo um projeto em Python, gosto de criar um ambiente separado. Assim teremos todas as dependências e bibliotecas configuradas e descritas em um só lugar, facilitando a reprodução do projeto.&lt;/p&gt;

&lt;p&gt;Escolha uma pasta em seu computador (no meu caso estou utilizando um Macbook) e seguindo os passos do link &lt;a href="https://docs.python.org/pt-br/3/library/venv.html" rel="noopener noreferrer"&gt;https://docs.python.org/pt-br/3/library/venv.html&lt;/a&gt;, vamos criar nosso ambiente.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;python3 -m venv venvdrone&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;A partir de agora, vamos trabalhar no ambiente venvdrone e todas as bibliotecas e pacotes necessárias serão documentadas e instaladas de forma independente.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Passo 1 - Criar ou usar um broker MQTT&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Existem alguns brokers MQTT prontos para serem usados como teste, por exemplo: "test.mosquitto.org", sempre usando a porta 1883 como padrão de acesso via TCP, mas se você quer mais segurança, existem outras opções de portas com autenticação e encriptação.&lt;/p&gt;

&lt;p&gt;Para nosso experimento, criei e instalei uma máquina EC2 na AWS e acionei o Mosquitto, deixando-o disponível no seguinte endereço.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;tcp://ec2-18-204-19-124.compute-1.amazonaws.com:1883&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Dessa forma, utilizando a biblioteca python &lt;strong&gt;&lt;a href="https://www.eclipse.org/paho/" rel="noopener noreferrer"&gt;Eclipse Paho MQTT&lt;/a&gt;&lt;/strong&gt; é possível publicar e se inscrever no tópico usando o endereço do broker.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;pip install paho-mqtt&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Este comando instala o cliente python do paho para ser usado em nosso código.&lt;/p&gt;

&lt;p&gt;Configurações feitas, precisamos de um código para testar.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from paho.mqtt import client as mqtt_client

broker = 'ec2-18-204-19-124.compute-1.amazonaws.com'
port = 1883
topic = "drones/drone01"
.
.
.
def publish(client):
    msg_count = 0
    while True:
        time.sleep(1)
        # Mock-up test for publish drone sensors in MQTT
        msg = '{"pitch": 89, "roll": 3}'

        result = client.publish(topic, msg)
        # result: [0, 1]
        status = result[0]
        if status == 0:
            print(f"Send `{msg}` to topic `{topic}`")
        else:
            print(f"Failed to send message to topic {topic}")
        msg_count += 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A primeira linha importa a biblioteca do paho de forma a conseguir publicar e se inscrever em algum tópico gerenciado pelo broker mqtt.&lt;/p&gt;

&lt;p&gt;Na linha seguinte, fizemos as configurações para conseguir acessar o broker, através de uma porta e definindo um tópico.&lt;/p&gt;

&lt;p&gt;Na função &lt;code&gt;def publish&lt;/code&gt;, criamos um código que publica um objeto json no tópico "drones/drone01", a cada 1 segundo. Caso haja erro na publicação, uma mensagem será enviada.&lt;/p&gt;

&lt;p&gt;Pronto, finalizamos a primeira parte da implementação, configurando e testando o nosso broker mqtt.&lt;/p&gt;

&lt;p&gt;Dúvidas? Como está sendo até aqui? Seguiremos no episódio 3.&lt;/p&gt;

&lt;p&gt;Abraços!&lt;/p&gt;

&lt;p&gt;Este é o &lt;strong&gt;segundo&lt;/strong&gt; capítulo da série [IoT Drones]. Caso tenha perdido algum episódio anterior, não se preocupe, confira a lista abaixo para acompanhar a série completa.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://dev.to/salgado/iiot-trabalhando-com-telemetria-de-drones-episodio-1-38mb"&gt;[IoT - Drones] Trabalhando com telemetria - Episódio 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/salgado/iot-drones-configurando-o-mqtt-broker-episodio-2-28l4"&gt;[IoT - Drones] Configurando o MQTT Broker - Episódio 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/salgado/iot-drones-preparando-a-ingestao-de-dados-atraves-do-filebeat-episodio-3-40ok"&gt;[IoT - Drones] Preparando a ingestão de dados através do Filebeat- Episódio 3&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>javascript</category>
      <category>programming</category>
      <category>developers</category>
      <category>learning</category>
    </item>
    <item>
      <title>[IoT - Drones] Trabalhando com telemetria - Episódio 1</title>
      <dc:creator>Alex Salgado</dc:creator>
      <pubDate>Mon, 16 Jan 2023 13:30:58 +0000</pubDate>
      <link>https://dev.to/salgado/iiot-trabalhando-com-telemetria-de-drones-episodio-1-38mb</link>
      <guid>https://dev.to/salgado/iiot-trabalhando-com-telemetria-de-drones-episodio-1-38mb</guid>
      <description>&lt;p&gt;Você tem interesse em Drones ou trabalha com UAVs? Como você monitora as condições da sua aeronave? E se você tiver uma frota deles? Você ainda está criando programas do zero para todas essas tarefas e ainda não resolveu seu problema?&lt;/p&gt;

&lt;p&gt;Este post trata de telemetria de Drones. Como receber os dados dos sensores em tempo real, transformá-los e armazená-los em um banco de dados de alta performance na nuvem. Tudo isso para criar uma visualização de toda a sua frota e conseguir gerenciá-la de forma otimizada, rápida e de qualquer lugar, pois as informações de seus Veículos Aéreos Não Tripulados (UAVs) estarão na nuvem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pré-requisitos&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Tudo que precisamos é um drone, um meio de comunicação para leitura de dados dos sensores, um banco para armazenar essa telemetria e uma tela bonita para visualizar as informações.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;O Drone&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Para esse experimento, vamos usar um &lt;a href="https://dl-cdn.ryzerobotics.com/downloads/Tello/Tello%20SDK%202.0%20User%20Guide.pdf"&gt;DJI Tello&lt;/a&gt; que além do custo e tamanho reduzido, pode ser usado dentro de casa e possui API para programação em Python.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wmMTIfSy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n9lejp01lwbkx7kvdbiq.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wmMTIfSy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n9lejp01lwbkx7kvdbiq.jpg" alt="Drone Elastic|500x500" width="880" height="880"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;O Protocolo de comunicação MQTT&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Para que haja comunicação entre o drone e o servidor, vamos utilizar o protocolo &lt;a href="https://mqtt.org/"&gt;MQTT&lt;/a&gt; que trata-se de um meio de comunicação muito utilizado em arquiteturas IoT.  O MQTT atua na camada de TCP, baseia-se no padrão pub/sub e permite a transmissão dos dados dos sensores em alta velocidade. Hoje, o MQTT é usado em uma ampla variedade de indústrias, como automotiva, manufatura, telecomunicações, petróleo e gás, etc.&lt;/p&gt;

&lt;p&gt;Vamos utilizar o &lt;a href="https://mosquitto.org/"&gt;Mosquitto&lt;/a&gt; como message broker para implementar essa transmissão via MQTT.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Ingestão dos dados&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Para coletar os dados publicados no MQTT, vamos utilizar o &lt;a href="https://www.elastic.co/pt/beats/"&gt;Beat&lt;/a&gt; da Elastic chamado &lt;a href="https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-mqtt.html"&gt;Filebeat&lt;/a&gt;. Esse beat possui uma implementação customizada para ler diretamente os dados via MQTT.&lt;/p&gt;

&lt;p&gt;Após a ingestão dos dados, iremos transferir os mesmos para o Elasticsearch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;O Banco de dados&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A indústria 4.0 vem gerando bilhões de informações com seus projetos de robótica, carros autônomos, IIoT, etc. Então precisamos de um banco de dados que comporte essa quantidade imensa de informações geradas pelos sensores. Estas mesmas informações precisam estar disponíveis rapidamente quando solicitadas. &lt;br&gt;
O &lt;a href="https://www.elastic.co/pt/what-is/elasticsearch"&gt;Elasticsearch&lt;/a&gt; encaixa-se perfeitamente nesse cenário. Dessa forma, os dados chegarão ao banco através do Filebeat, e internamente as informações necessárias serão extraídas através de um &lt;a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/ingest.html"&gt;pipeline de ingestão&lt;/a&gt; o qual armazenará no índice apropriado.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;A visualização&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Toda essa informação processada em tempo-real, poderá ser visualizada e analisada através do Kibana. Neste caso em específico, vamos utilizar o Kibana Canvas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Arquitetura IoT&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A arquitetura proposta então seria como na figura abaixo&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wpqz0RgE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5llt3ylicxa4rrc85y54.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wpqz0RgE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5llt3ylicxa4rrc85y54.png" alt="Arquitetura" width="880" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Gostou? Gostaria de aprender a implementar esse sistema? Acompanhe o próximo Episódio ...&lt;/p&gt;

&lt;p&gt;Abraços!&lt;/p&gt;

&lt;p&gt;Este é o &lt;strong&gt;primeiro&lt;/strong&gt; capítulo da série [IoT Drones]. Caso tenha perdido algum episódio anterior, não se preocupe, confira a lista abaixo para acompanhar a série completa.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://dev.to/salgado/iiot-trabalhando-com-telemetria-de-drones-episodio-1-38mb"&gt;[IoT - Drones] Trabalhando com telemetria - Episódio 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/salgado/iot-drones-configurando-o-mqtt-broker-episodio-2-28l4"&gt;[IoT - Drones] Configurando o MQTT Broker - Episódio 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/salgado/iot-drones-preparando-a-ingestao-de-dados-atraves-do-filebeat-episodio-3-40ok"&gt;[IoT - Drones] Preparando a ingestão de dados através do Filebeat- Episódio 3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/salgado/iot-drones-testando-a-telemetria-episodio-4-3j9e"&gt;[IoT - Drones] Testando a Telemetria - Episódio 4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/salgado/iot-drones-visualizando-os-dados-com-o-kibana-episodio-final-265c"&gt;[IoT - Drones] Visualizando os dados com o Kibana - Episódio FINAL&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>elasticsearch</category>
      <category>iot</category>
      <category>drone</category>
      <category>telemetry</category>
    </item>
  </channel>
</rss>
