Tutorial

Cómo instalar Elasticsearch, Logstash y Kibana (Elastic Stack) en Ubuntu 18.04

UbuntuMonitoringConfiguration ManagementElasticsearchUbuntu 18.04

El autor seleccionó el lnternet Archive para recibir una donación como parte del programa Write for DOnations.

Introducción

Elastic Stack, previamente conocida como la pila ELK, es una colección de software de código abierto producido por Elastic que le permite buscar, analizar, y visualizar registros generados desde cualquier fuente y en cualquier formato, una práctica conocida como registro centralizado. El registro centralizado puede ser muy útil al intentar identificar problemas en sus servidores o aplicaciones, ya que le permite realizar búsquedas en todos sus registros desde un solo sitio. También es útil porque le permite identificar problemas que abarcan varios servidores vinculando sus registros durante un período de tiempo específico.

Elastic Stack cuenta con cuatro componentes principales:

  • Elasticsearch: motor de búsqueda de RESTful distribuido que almacena todos los datos recopilados.
  • Logstash: componente de procesamiento de datos de Elastic Stack que envía datos entrantes a Elasticsearch.
  • Kibana: interfaz web para buscar y visualizar registros.
  • Beats: transportadores de datos ligeros de uso único que pueden enviar datos de cientos o miles de máquinas a Logstash o Elasticsearch.

A través de este tutorial, instalará Elastic Stack en un servidor de Ubuntu 18.04. Aprenderá a instalar todos los componentes de Elastic Stack, incluido Filebeat, un Beat que se usa para reenviar y centralizar registros y archivos, y los configurará para recopilar y visualizar registros del sistema. Además, debido a que Kibana normalmente está sólo disponible en el localhost, usaremos Nginx para hacer un proxy de modo que el acceso sea posible a través de un navegador web. Instalaremos todos estos componentes en un único servidor al que nos referiremos como nuestro servidor de pila de Elastic.

Nota: Al instalar Elastic Stack, debe usar la misma versión en toda la pila. A los efectos de este tutorial, instalaremos las últimas versiones de toda la pila que, al redactarse el presente artículo, fueron Elasticsearch 6.4.3, Kibana 6.4.3, Logstash 6.4.3 y Filebeat 6.4.3.

Requisitos previos

Para completar este tutorial, necesitará lo siguiente:

  • Un servidor de Ubuntu 18.04 configurado siguiendo nuestra Guía de configuración inicial para servidores de Ubuntu 18.04, incluidos un usuario no root con privilegios sudo y un firewall configurado con ufw. La proporción de CPU, RAM y almacenamiento que su servidor de Elastic Stack requiere depende del volumen de registros que desee recopilar. Para este tutorial, usaremos un VPS con las siguientes especificaciones para nuestro servidor de Elastic Stack:

    • SO: Ubuntu 18.04
    • RAM: 4 GB
    • CPU: 2
  • Java 8 (requerido por Elasticsearch y Logstash) instalado en su servidor. Tenga en cuenta que Java 9 no es compatible. Para instalarlo, siga la sección “Instalar JDK de Oracle” de nuestra guía de instalación de Java 8 en Ubuntu 18.04.

  • Nginx instalado en su servidor, que configuraremos más adelante en esta guía como proxy inverso para Kibana. Para configurarlo, siga nuestra guía Cómo instalar Nginx en Ubuntu 18.04.

Además, debido a que Elastic Stack se usa para acceder a información valiosa sobre su servidor a la que no quiere que accedan usuarios no autorizados, es importante que mantenga su servidor protegido instalando un certificado TLS o SSL. Esto es opcional, pero se** recomienda mucho**.

Sin embargo, ya que eventualmente realizará cambios en su bloque de servidor de Nginx a lo largo de esta guía, es probable que tenga más sentido completar la guía de Let´s Encrypt sobre Ubuntu 18.04 al final del segundo paso de este tutorial. Teniendo eso en cuenta, si planea configurar Let´s Encrypt en su servidor, necesitará lo siguiente antes de hacerlo:

  • Un nombre de dominio totalmente apto (FQDN). Para este tutorial, se utilizará example.com en todo momento. Puede adquirir un nombre de dominio en Namecheap, obtener uno gratuito en Freenom o utilizar un registrador de dominios de su elección.
  • Los dos registros DNS que se indican a continuación se han configurado para su servidor. Puede utilizar esta introducción al DNS de DigitalOcean para obtener más información sobre cómo agregarlos.

    • Un registro A con example.com​​​ orientado a la dirección IP pública de su servidor.
    • Un registro A con example.com​​​ ​​orientado a la dirección IP pública de su servidor.

Paso 1: Instalar y configurar Elasticsearch

Los componentes de Elastic Stack no están disponibles en los repositorios de paquetes predeterminados de Ubuntu. Sin embargo, pueden instalarse con APT una vez que agregue la lista de fuentes de paquetes de Elastic.

Todos los paquetes de Elastic Stack están firmados con la clave de firma de Elasticsearch para proteger su sistema contra la suplantación de paquetes. Su administrador de paquetes considerará confiables los paquetes autenticados con la clave. En este paso, importará la clave GPG pública de Elasticsearch y agregará la lista de fuentes de paquetes de Elastic para instalar Elasticsearch.

Para comenzar, ejecute el siguiente comando a fin de importar la clave de GPG pública de Elasticsearch en APT:

  • wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

A continuación, agregue la lista de fuentes de Elastic al directorio sources.list.d, donde APT buscará nuevas fuentes:

  • echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list

A continuación, actualice sus listas de paquetes para que APT lea la nueva fuente de Elastic:

  • sudo apt update

Luego, instale Elasticsearch con este comando:

  • sudo apt install elasticsearch

Una vez que Elasticsearch complete la instalación, utilice su editor de texto preferido para editar el archivo de configuración principal de Elasticsearch, elasticsearch.yml. En este caso, utilizaremos nano:

  • sudo nano /etc/elasticsearch/elasticsearch.yml

Nota: El archivo de configuración de Elasticsearch tiene formato YAML; esto significa que la indentación es muy importante. Asegúrese de no añadir espacios adicionales al editar este archivo.

Elasticsearch escucha el tráfico de todos los lugares en el puerto 9200. Deberá restringir el acceso externo a su instancia de Elasticsearch para evitar que terceros lean sus datos o cierren su clúster de Elasticsearch a través de la API REST. Encuentre la línea que especifica network.host, quite los comentarios y sustituya su valor por localhost para que tenga este aspecto:

/etc/elasticsearch/elasticsearch.yml
. . .
network.host: localhost
. . .

Guarde y cierre elasticsearch.yml presionando CTRL+X, seguido de Y y ENTER si está usando nano. A continuación, inicie el servicio de Elasticsearch con systemctl:

  • sudo systemctl start elasticsearch

Luego, ejecute el siguiente comando para permitir que Elasticsearch se cargue cada vez que su servidor se inicie:

  • sudo systemctl enable elasticsearch

Puede comprobar si su servicio de Elasticsearch se está ejecutando enviando una solicitud HTTP:

  • curl -X GET "localhost:9200"

Visualizará una respuesta que mostrará información básica sobre su nodo local, similar a la siguiente:

Output
{ "name" : "ZlJ0k2h", "cluster_name" : "elasticsearch", "cluster_uuid" : "beJf9oPSTbecP7_i8pRVCw", "version" : { "number" : "6.4.2", "build_flavor" : "default", "build_type" : "deb", "build_hash" : "04711c2", "build_date" : "2018-09-26T13:34:09.098244Z", "build_snapshot" : false, "lucene_version" : "7.4.0", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" }

Ahora que Elasticsearch está configurado y activo, instalaremos Kibana, el siguiente componente de Elastic Stack.

Paso 2: Instalar y configurar el panel de Kibana

De acuerdo con la documentación oficial, deberá instalar Kibana sólo después de instalar Elasticsearch. La instalación en este orden garantiza que los componentes de los que depende cada producto estén correctamente implementados.

Debido a que ya agregó la fuente de paquetes de Elastic en el paso anterior, puede instalar los componentes restantes de Elastic Stack usando apt:

  • sudo apt install kibana

A continuación, habilite e inicie el servicio de Kibana:

  • sudo systemctl enable kibana
  • sudo systemctl start kibana

Debido a que Kibana está configurado para escuchar solo en localhost, debemos configurar un proxy inverso para permitir el acceso externo a este. Utilizaremos Nginx para este propósito, que ya debería estar instalado en su servidor.

Primero, utilice el comando openssl para crear un usuario administrativo de Kibana que usará para acceder a la interfaz web de Kibana. Como ejemplo, nombraremos esta cuenta kibanaadmin, pero para garantizar una mayor seguridad, le recomendamos elegir un nombre no estándar para su usuario que sea difícil de adivinar.

Con el siguiente comando se crearán el usuario y la contraseña administrativa de Kibana, y se almacenarán en el archivo htpasswd.users. Configurará Nginx para que requiera este nombre de usuario y contraseña, y lea este archivo de manera momentánea:

  • echo "kibanaadmin:`openssl passwd -apr1`" | sudo tee -a /etc/nginx/htpasswd.users

Introduzca y confirme una contraseña cuando se le solicite. Recuerde este dato de inicio de sesión o tome nota de él, ya que lo necesitará para acceder a la interfaz web de Kibana.

A continuación, crearemos un archivo de bloque de servidor de Nginx. Como ejemplo, nos referiremos a este archivo como example.com, aunque podría resultarle más útil dar al suyo un nombre más descriptivo. Por ejemplo, si tiene un FQDN y registros de DNS configurados para este servidor, podría dar a este archivo el nombre de su FQDN:

  • sudo nano /etc/nginx/sites-available/example.com

Añada el siguiente bloque de código al archivo y asegúrese de actualizar example.com para que coincida con el FQDN o la dirección IP pública de su servidor. Con este código, se configura Nginx para dirigir el tráfico HTTP de su servidor a la aplicación de Kibana, que escucha en localhost:5601. También se configura Nginx para leer el archivo htpasswd.users y requerir la autenticación básica.

Tenga en cuenta que si siguió todo el tutorial de los requisitos previos de Nginx, es posible que ya haya creado este archivo y lo haya completado con contenido. En ese caso, elimine todo el contenido existente en el archivo antes de añadir lo siguiente:

/etc/nginx/sites-available/example.com
server {
    listen 80;

    server_name example.com;

    auth_basic "Restricted Access";
    auth_basic_user_file /etc/nginx/htpasswd.users;

    location / {
        proxy_pass http://localhost:5601;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

Cuando termine, guarde y cierre el archivo.

A continuación, habilite la nueva configuración creando un enlace simbólico al directorio sites-enabled. Si ya creó un archivo de bloque de servidor con el mismo nombre en el requisito previo de Nginx, no necesitará ejecutar este comando:

  • sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com

A continuación, compruebe que no haya errores de sintaxis en la configuración:

  • sudo nginx -t

Si se muestran errores en su resultado, regrese y verifique bien que el contenido que ingresó en su archivo de configuración se haya agregado correctamente. Una vez que vea syntax is ok en el resultado, reinicie el servicio de Nginx:

  • sudo systemctl restart nginx

Si siguió la guía de configuración inicial para servidores, debería tener activado un firewall UFW. Para permitir las conexiones con Nginx, podemos ajustar las reglas escribiendo lo siguiente:

  • sudo ufw allow 'Nginx Full'

Nota: Si siguió el tutorial de los requisitos previos de Nginx, es posible que haya creado una regla de UFW que admita el perfil Nginx HTTP en el firewall. Debido a que el perfil Nginx Full admite el paso del tráfico HTTP y HTTPS por el firewall, puede eliminar de forma segura la regla que creó en el tutorial de los requisitos previos. Hágalo con el siguiente comando:

  • sudo ufw delete allow 'Nginx HTTP'

Con esto, el acceso a Kibana será posible a través de su FQDN o de la dirección IP pública de su servidor de Elastic Stack. Puede comprobar la página de estado del servidor de Kibana visitando la siguiente dirección e ingresando sus credenciales de inicio de sesión cuando se le soliciten:

http://your_server_ip/status

En esta página de estado se muestra información sobre el uso de los recursos del servidor y se enumeran los complementos instalados.

Página de estado de Kibana

Nota: Como se indica en la sección de requisitos previos, se le recomienda habilitar SSL o TLS en su servidor. Puede seguir este tutorial ahora para obtener un certificado SSL gratuito para Nginx en Ubuntu 18.04. Una vez que obtenga sus certificados SSL y TLS, puede volver y completar este tutorial.

Ahora que el panel de Kibana está configurado, instalaremos el siguiente componente: Logstash.

Paso 3: Instalar y configurar Logstash

Aunque es posible que Beats envíe datos de manera directa a la base de datos de Elasticsearch, recomendamos usar Logstash para procesar los datos. Esto le permitirá recopilar datos de diferentes fuentes, transformarlos en un formato común y exportarlos a otra base de datos.

Instale Logstash con este comando:

  • sudo apt install logstash

Después de instalar Logstash, puede continuar con su configuración. Los archivos de configuración de Logstash están escritos en el formato JSON y se alojan en el directorio /etc/logstash/conf.d. Al configurarlo, es útil considerar a Logstash como un ducto que obtiene datos en un extremo, los procesa de una manera u otra y los envía a su destino (en este caso, el destino será Elasticsearch). Un proceso de Logstash tiene dos elementos necesarios, input y output, y un elemento opcional, filter. Los complementos de entrada consumen datos de una fuente, los complementos del filtro procesan los datos y los complementos de salida escriben los datos en un destino.

Proceso de Logstash

Cree un archivo de configuración llamado 02-beats-input.conf en el que establecerá su entrada de Filebeat:

  • sudo nano /etc/logstash/conf.d/02-beats-input.conf

Introduzca la siguiente configuración de input. Con esto, se especifica una entrada de beats que escuchará en el puerto TCP 5044.

/etc/logstash/conf.d/02-beats-input.conf
input {
  beats {
    port => 5044
  }
}

Guarde y cierre el archivo. A continuación, cree un archivo de configuración llamado 10syslog-filter.conf, en el que añadiremos un filtro para registros de sistema, también conocido como syslogs:

  • sudo nano /etc/logstash/conf.d/10-syslog-filter.conf

Introduzca la siguiente configuración del filtro de syslog. Este ejemplo de registro de sistema se tomó de la documentación oficial de Elastic. Este filtro se utiliza para analizar los registros de sistema entrantes a fin de hacer que tengan estructura y puedan utilizarse en los paneles predeterminados de Kibana:

/etc/logstash/conf.d/10-syslog-filter.conf
filter {
  if [fileset][module] == "system" {
    if [fileset][name] == "auth" {
      grok {
        match => { "message" => ["%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: %{DATA:[system][auth][ssh][event]} %{DATA:[system][auth][ssh][method]} for (invalid user )?%{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]} port %{NUMBER:[system][auth][ssh][port]} ssh2(: %{GREEDYDATA:[system][auth][ssh][signature]})?",
                  "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: %{DATA:[system][auth][ssh][event]} user %{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]}",
                  "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: Did not receive identification string from %{IPORHOST:[system][auth][ssh][dropped_ip]}",
                  "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sudo(?:\[%{POSINT:[system][auth][pid]}\])?: \s*%{DATA:[system][auth][user]} :( %{DATA:[system][auth][sudo][error]} ;)? TTY=%{DATA:[system][auth][sudo][tty]} ; PWD=%{DATA:[system][auth][sudo][pwd]} ; USER=%{DATA:[system][auth][sudo][user]} ; COMMAND=%{GREEDYDATA:[system][auth][sudo][command]}",
                  "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} groupadd(?:\[%{POSINT:[system][auth][pid]}\])?: new group: name=%{DATA:system.auth.groupadd.name}, GID=%{NUMBER:system.auth.groupadd.gid}",
                  "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} useradd(?:\[%{POSINT:[system][auth][pid]}\])?: new user: name=%{DATA:[system][auth][user][add][name]}, UID=%{NUMBER:[system][auth][user][add][uid]}, GID=%{NUMBER:[system][auth][user][add][gid]}, home=%{DATA:[system][auth][user][add][home]}, shell=%{DATA:[system][auth][user][add][shell]}$",
                  "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} %{DATA:[system][auth][program]}(?:\[%{POSINT:[system][auth][pid]}\])?: %{GREEDYMULTILINE:[system][auth][message]}"] }
        pattern_definitions => {
          "GREEDYMULTILINE"=> "(.|\n)*"
        }
        remove_field => "message"
      }
      date {
        match => [ "[system][auth][timestamp]", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
      }
      geoip {
        source => "[system][auth][ssh][ip]"
        target => "[system][auth][ssh][geoip]"
      }
    }
    else if [fileset][name] == "syslog" {
      grok {
        match => { "message" => ["%{SYSLOGTIMESTAMP:[system][syslog][timestamp]} %{SYSLOGHOST:[system][syslog][hostname]} %{DATA:[system][syslog][program]}(?:\[%{POSINT:[system][syslog][pid]}\])?: %{GREEDYMULTILINE:[system][syslog][message]}"] }
        pattern_definitions => { "GREEDYMULTILINE" => "(.|\n)*" }
        remove_field => "message"
      }
      date {
        match => [ "[system][syslog][timestamp]", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
      }
    }
  }
}

Guarde y cierre el archivo cuando termine.

Por último, cree un archivo de configuración llamado 30-elasticsearch-output.conf:

  • sudo nano /etc/logstash/conf.d/30-elasticsearch-output.conf

Introduzca la siguiente configuración de output. Básicamente, con este resultado se configura Logstash para almacenar los datos de Beats en Elasticsearch, que se ejecuta en localhost:9200, en un índice con el nombre del Beat utilizado. El Beat utilizado en este tutorial es Filebeat:

/etc/logstash/conf.d/30-elasticsearch-output.conf
output {
  elasticsearch {
    hosts => ["localhost:9200"]
    manage_template => false
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
  }
}

Guarde y cierre el archivo.

Si desea añadir filtros para otras aplicaciones que utilizan la entrada de Filebeat, asegúrese de dar nombres a los archivos de modo que estén ordenados entre la configuración de entrada y salida, lo que significa que los nombres de archivo deben comenzar con un número de dos dígitos entre 02 y 30.

Pruebe su configuración de Logstash con el siguiente comando:

  • sudo -u logstash /usr/share/logstash/bin/logstash --path.settings /etc/logstash -t

Si no hay errores de sintaxis, en su resultado verá Configuration OK después de unos segundos. Si no visualiza esto en su resultado, verifique cualquier error que aparezca en su resultado y actualice su configuración para corregirlo.

Si su prueba de configuración tiene éxito, inicie y habilite Logstash para implementar los cambios de configuración:

  • sudo systemctl start logstash
  • sudo systemctl enable logstash

Ahora que Logstash se ejecuta de manera correcta y está totalmente configurado, instalaremos Filebeat.

Paso 4: Instalar y configurar Filebeat

La pila de Elastic utiliza varios transportadores de datos ligeros llamados Beats para recopilar datos de varias fuentes y transportarlos a Logstash o Elasticsearch. Aquí se muestran los Beats que ahora están disponibles en Elastic:

  • Filebeat: recopila y envía archivos de registro.
  • Metricbeat: recopila métricas de sus sistemas y servicios.
  • Packetbeat: recopila y analiza datos de red.
  • Winlogbeat: recopila registros de eventos de Windows.
  • Auditbeat: recopila datos del marco de trabajo de auditoría de Linux y supervisa la integridad de los archivos.
  • Heartbeat: supervisa la disponibilidad de los servicios con sondeo activo.

En este tutorial, usaremos Filebeat para reenviar registros locales a nuestra pila de Elastic.

Instale Filebeat usando apt:

  • sudo apt install filebeat

A continuación, configure Filebeat para establecer conexión con Logstash. Aquí, modificaremos el archivo de configuración de ejemplo que viene con Filebeat.

Abra el archivo de configuración de Filebeat:

  • sudo nano /etc/filebeat/filebeat.yml

Nota: Al igual que con Elasticsearch, el archivo de configuración de Filebeat está en formato YAML. Esto significa que una correcta indentación es esencial. Por lo tanto, asegúrese de usar el mismo número de espacios que se indican en estas instrucciones.

Filebeat admite numerosas salidas, pero por lo general sólo enviará eventos directamente a Elasticsearch o a Logstash para su procesamiento adicional. En este tutorial, usaremos Logstash para aplicar procesamiento adicional a los datos recopilados por Filebeat. Filebeat no tendrá que enviar datos de manera directa a Elasticsearch, por lo que desactivaremos esa salida. Para hacerlo, encuentre la sección output.elasticsearch y comente las siguientes líneas anteponiéndoles “#”:

/etc/filebeat/filebeat.yml
...
#output.elasticsearch:
  # Array of hosts to connect to.
  #hosts: ["localhost:9200"]
...

A continuación, configure la sección output.logstash. Elimine el comentario de las líneas output.logstash: y hosts: ["localhost:5044"] quitando el “#”. Con esto, se configurará Filebeat para establecer conexión con Logstash en su servidor de Elastic Stack en el puerto 5044, para el que especificamos una entrada de Logstash previamente:

/etc/filebeat/filebeat.yml
output.logstash:
  # The Logstash hosts
  hosts: ["localhost:5044"]

Guarde y cierre el archivo.

La funcionalidad de Filebeat puede ampliarse con módulos de Filebeat. En este tutorial usaremos el módulo de sistema, que recopila y analiza registros creados por el servicio de registro del sistema de distribuciones comunes de Linux.

Vamos a habilitarlo:

  • sudo filebeat modules enable system

Puede ver una lista de módulos habilitados y desactivados ejecutando lo siguiente:

  • sudo filebeat modules list

Verá una lista similar a la siguiente:

Output
Enabled: system Disabled: apache2 auditd elasticsearch icinga iis kafka kibana logstash mongodb mysql nginx osquery postgresql redis traefik

Por defecto, Filebeat está configurado para usar rutas predeterminadas para los registros syslog y de autorización. En el caso de este tutorial, no necesita aplicar cambios en la configuración. Puede ver los parámetros del módulo en el archivo de configuración /etc/filebeat/modules.d/system.yml.

A continuación, cargue la plantilla de índice en Elasticsearch. Un índice de Elasticsearch es un conjunto de documentos que tienen características similares. Los índices se identifican con un nombre, que se utiliza para referirse al índice cuando se realizan varias operaciones dentro de este. La plantilla de índice se aplicará de forma automática al crear un nuevo índice.

Para cargar la plantilla, utilice el siguiente comando:

  • sudo filebeat setup --template -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["localhost:9200"]'
Output
Loaded index template

Filebeat viene empaquetado con paneles de muestra de Kibana que le permiten visualizar datos de Filebeat en Kibana. Para poder usar los paneles, deberá crear el patrón de índice y cargar los paneles en Kibana.

Al cargarse los paneles, Filebeat se conecta a Elasticsearch para verificar la información de la versión. Para cargar paneles cuando se habilite Logstash, deberá desactivar el resultado de Logstash y habilitar el de Elasticsearch:

  • sudo filebeat setup -e -E output.logstash.enabled=false -E output.elasticsearch.hosts=['localhost:9200'] -E setup.kibana.host=localhost:5601

Verá un resultado similar a este:

Output
2018-09-10T08:39:15.844Z INFO instance/beat.go:273 Setup Beat: filebeat; Version: 6.4.2 2018-09-10T08:39:15.845Z INFO elasticsearch/client.go:163 Elasticsearch url: http://localhost:9200 2018-09-10T08:39:15.845Z INFO pipeline/module.go:98 Beat name: elk 2018-09-10T08:39:15.845Z INFO elasticsearch/client.go:163 Elasticsearch url: http://localhost:9200 2018-09-10T08:39:15.849Z INFO elasticsearch/client.go:708 Connected to Elasticsearch version 6.4.2 2018-09-10T08:39:15.856Z INFO template/load.go:129 Template already exists and will not be overwritten. Loaded index template Loading dashboards (Kibana must be running and reachable) 2018-09-10T08:39:15.857Z INFO elasticsearch/client.go:163 Elasticsearch url: http://localhost:9200 2018-09-10T08:39:15.865Z INFO elasticsearch/client.go:708 Connected to Elasticsearch version 6.4.2 2018-09-10T08:39:15.865Z INFO kibana/client.go:113 Kibana url: http://localhost:5601 2018-09-10T08:39:45.357Z INFO instance/beat.go:659 Kibana dashboards successfully loaded. Loaded dashboards 2018-09-10T08:39:45.358Z INFO elasticsearch/client.go:163 Elasticsearch url: http://localhost:9200 2018-09-10T08:39:45.361Z INFO elasticsearch/client.go:708 Connected to Elasticsearch version 6.4.2 2018-09-10T08:39:45.361Z INFO kibana/client.go:113 Kibana url: http://localhost:5601 2018-09-10T08:39:45.455Z WARN fileset/modules.go:388 X-Pack Machine Learning is not enabled Loaded machine learning job configurations

Ahora podrá iniciar y habilitar Filebeat:

  • sudo systemctl start filebeat
  • sudo systemctl enable filebeat

Si configuró su pila de Elastic de manera correcta, Filebeat iniciará el envío de sus registros syslog y de autorización a Logstash, que a su vez cargará esos datos en Elasticsearch.

Para verificar que Elasticsearch realmente reciba estos datos, consulte el índice de Filebeat con este comando:

  • curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty'

Verá un resultado similar a este:

Output
... { "took" : 32, "timed_out" : false, "_shards" : { "total" : 3, "successful" : 3, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : 1641, "max_score" : 1.0, "hits" : [ { "_index" : "filebeat-6.4.2-2018.10.10", "_type" : "doc", "_id" : "H_bZ62UBB4D0uxFRu_h3", "_score" : 1.0, "_source" : { "@version" : "1", "message" : "Oct 10 06:22:36 elk systemd[1]: Reached target Local File Systems (Pre).", "@timestamp" : "2018-10-10T08:43:56.969Z", "host" : { "name" : "elk" }, "source" : "/var/log/syslog", "input" : { "type" : "log" }, "tags" : [ "beats_input_codec_plain_applied" ], "offset" : 296, "prospector" : { "type" : "log" }, "beat" : { "version" : "6.4.2", "hostname" : "elk", "name" : "elk" } } }, ...

Si en su resultado no se muestran aciertos, Elasticsearch significa que no está cargando ningún registro bajo el índice que buscó y deberá verificar su configuración en busca de errores. Si obtuvo el resultado esperado, continúe con el siguiente paso, en el que veremos la manera de explorar algunos de los paneles de Kibana.

Paso 5: Explorar los paneles de Kibana

Veamos Kibana, la interfaz web que instalamos previamente.

En un navegador web, diríjase al FQDN o a la dirección IP pública de su servidor de Elastic Stack. Después de ingresar las credenciales de inicio de sesión que definió en el paso 2, verá la página de inicio de Kibana:

Página de inicio de Kibana

Haga clic en el enlace Discover de la barra de navegación del lado izquierdo. En la página Discover, seleccione el patrón de índice predeterminado de filebeat-* para ver datos de Filebeat. Por defecto, esto le mostrará todos los datos de registro de los últimos 15 minutos. Visualizará un histograma con eventos de registro y algunos mensajes de registro a continuación:

Página de Discover

Aquí puede buscar y explorar sus registros y también personalizar su panel. Sin embargo, en este punto no habrá muchos registros porque solo recopila syslogs de su servidor de Elastic Stack.

Utilice el panel del lado izquierdo para acceder a la página Dashboard y buscar los paneles de Filebeat System. Una vez ahí, puede buscar los paneles de muestra que vienen con el módulo system de Filebeat.

Por ejemplo, puede ver estadísticas detalladas basadas en sus mensajes de syslog:

Panel de Syslog

También puede ver los usuarios que utilizaron el comando sudo y el momento en que lo hicieron:

Panel de sudo

Kibana tiene muchas otras características, como graficar y filtrar. No dude en explorarlas.

Conclusión

A través de este tutorial, aprendió a instalar y configurar Elastic Stack para recopilar y analizar registros del sistema. Recuerde que puede enviar casi cualquier tipo de datos de registro o de índice a Logstash usando Beats, pero los datos se vuelven aún más útiles si se analizan y estructuran con un filtro de Logstash, ya que transforma los datos en un formato uniforme que Elasticsearch puede leer de forma sencilla.

0 Comments

Creative Commons License