Victor Catalán

Pila ELK (II): Monitorizando Twiter con ELK

December 19, 2017 | Victor Catalán | 3 Minute Read

Profundizando un poco más en la pila ELK, vamos a ver algunos plugins de Logstash y como configurarlos para monitorizar una serie de keywords de Twitter.

Vamos a continuar con la parte dos de la entrada anterior Pila ELK (I): Introducción, y veremos como configurar una serie de plugins de logstash para monitorizar Twitter, almacenar la información en ElasticSearch y mostrar un dashboard en Kibana.

Requisitos

Logstash - Plugins

Los plugins de logstash permiten aumentar la funcionalidad del sistema, así como la integración con otras plataformas, están divididos en los de entrada y los de salida.

  • En el siguiente enlace se puede encontrar un listado de los plugins de entrada. Nosotros vamos a utilizar el plugin de entrada de Twitter, aquí se pueden ver todos los parámetros que se pueden configurar.
  • En el siguiente enlace se puede encontrar un listado de los plugins de salida. Nosotros vamos a utilizar el plugin de salida de ElasticSearch, aquí se pueden ver todos los parámetros que se pueden configurar.

Hands on

Para utilizar el plugin de Twitter se necesita que el usuario se registre en la plataforma y dé de alta una aplicación para poder atacar a la API de Twitter. Una vez tenemos los tokens para poder acceder a la API configuramos el plugin de entrada de logstash de la siguiente forma:

input {
  twitter {
    consumer_key => "XXX"
    consumer_secret => "XXX"
    oauth_token => "XXX"
    oauth_token_secret => "XXX"
    keywords => [ "Keyword1", "Keyword2", "Keyword3" ]
    full_tweet => true
    id => "id_plugin"
  }
}

De esta forma conseguiremos recoger toda la información publicada en Twitter con las Keywords seleccionadas.

A continuación, se necesita configurar el plugin de salida de ElasticSearch para almacenar la información de Twitter. Para ello le definimos los campos que queremos sobreescribir y para ello utilizamos una plantilla, así como la información de los índices que se van a crear. Dicho plugin de salida de logstash lo configuramos de la siguiente forma:

output {
  elasticsearch {
    hosts => "localhost:9200"
    index       => "twitter_index"
    document_type => "tweets"
    template    => "./twitter_template.json"
    template_name => "twitter_template"
    template_overwrite => true
  }
}
{
    "index_patterns": "twitter_task3",
    "mappings": {
        "tweets": {
            "properties": {
                "@timestamp": {
                    "type": "date",
                    "format": "dateOptionalTime"
                },
                "text": {
                    "type": "text"
                },
                "user": {
                    "type": "object",
                    "properties": {
                        "description": {
                            "type": "text"
                        }
                    }
                },
                "coordinates": {
                    "type": "object",
                    "properties": {
                        "coordinates": {
                            "type": "geo_point"
                        }
                    }
                }
            }
        }
    }
}

Nota: Para esta versión no se han utilizado filtros, pero se podrían añadir para mejorar la calidad de la información almacenada en ElasticSearch. Aquí se puede encontrar un listado de los filtros.

Esta configuración completa se puede ver en el repositorio de mi github.

Y finalmente, por sencillez lanzamos el siguiente comando en un terminal y se comenzará a guardar la información publicada en Twitter. Si queremos lanzar la aplicación como servicio se puede ver más información aquí.

 ../kibana-5.0.1-linux-x86_64/bin$ ./logstash -f ~/twitter_run.config

Visualización

Ya se está recogiendo la información de Twitter, por lo que vamos a visualizarla mediante Kibana. Lanzamos la aplicación y accedemos a ella mediante el puerto por defecto 5601. Vamos a la pestaña de Discover, y seleccionando el filtro "twitter*" y ya podemos ver todos los Tweets que hemos ido almacenando. A continuación se puede observar la estructura en formato JSON de cada Tweet almacenado.

Además del formato plano, Kibana permite analizar los datos de una manera mucho más visual, mediante gráficos como : gráfico de Tarta, gráfico de barras, gráfico de líneas, métricas, tablas entre otros..

Y adicionalmente permite agrupar todos los gráficos anteriores en Dashboards. Así por ejemplo se puede analizar la información recibida según se ve a continuación:

Dashboard Kibana

Saludos