Uso de Beats y Logstash para enviar registros a ElasticSearch

Uso de Beats y Logstash para enviar registros a ElasticSearch

  • ITOps y DevOps
5 min de lectura Actualizado Jul 5, 2019

Puntos clave: Se proporcionan instrucciones para enviar registros a ElasticSearch usando Beats y Logstash son proporcionadas, centradas en analizar los logs del servidor web nginx. Beats convierte los logs a JSON, mientras que Logstash se encarga del análisis y envía los datos a ElasticSearch.

  • Beats monitoriza los archivos de registro y los envía a Logstash para su análisis analizable.
  • Logstash escucha Beats y formatea los registros antes de enviarlos a ElasticSearch.

Aquí explicamos cómo enviar registros a ElasticSearch usando Beats (también conocido como File Beats) y Logstash. Analizaremos los logs del servidor web nginx, ya que es uno de los casos más fáciles de utiliza. También utiliza Elastic Cloud en lugar de nuestra propia instalación local de ElasticSearch. Pero las instrucciones para una instalación independiente son las mismas, salvo que te no necesitan usar un usuario y contraseña en una instalación independiente, en la mayoría de los casos.

Anteriormente escribimos sobre cómo analizar logs nginx usando Beats por sí solo, sin Logstash. Puede que te preguntes por qué tú necesitas ambos. La respuesta es que Beats convertirá los logs a JSON, el formato que requiere ElasticSearch, pero no analizará el campo de mensaje Obtén o POST al servidor web para extraer la URL, operación, ubicación, etc. Con logstash tú puedes hacer todo eso.

  • Beats está configurado para vigilar nuevas entradas de registro escritas en /var/logs/nginx*.logs.
  • Logstash está configurado para escuchar Beat y analizar esos logs y luego enviarlos a ElasticSearch.

Descargar e instalar Beats:

    wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.1.1-amd64.deb
sudo dpkg -i filebeat-7.1.1-amd64.deb

No te hace falta Permite el módulo de nginx Beats porque dejaremos que logstash haga el análisis sintáctico.

Edita el archivo de configuración /etc/filebeat/filebeat:

te quieres cambiar están las secciones superior e inferior del archivo. A continuación mostramos eso en dos secciones separadas. Primero la parte superior:

Los puntos importantes son:

 habilitado: verdadero

Si no, no servirá de nada.

 - /var/log/nginx/*.log

te puedes listar qué carpetas vigilar aquí.  Pon cada una una línea por sí sola. En este caso solo listamos nginx.

    #=========================== Filebeat inputs =============================

filebeat.inputs:

# Each - is an input. Most options can be set at the input level, so
# you can use different inputs for various configurations.
# Below are the input specific configurations.

- type: log

  # Change to true to enable this input configuration.
  enabled: true

  # Paths that should be crawled and fetched. Glob based paths.
  paths:
    - /var/log/nginx/*.log

Aquí te queremos:

  • Rema la salida de ElasticSearch que utiliza logstash para escribir allí.
  • Desactiva las líneas de Logstash.
  • Dile a Beats dónde encontrar LogStash.
  • Haz seguro te también remar la línea ##output.elasticsearch.
    #-------------------------- Elasticsearch output ------------------------------
##output.elasticsearch:
  # Array of hosts to connect to.
  # hosts: ["localhost:9200"]

  # Enabled ilm (beta) to use index lifecycle management instead daily indices.
  #ilm.enabled: false

  # Optional protocol and basic auth credentials.
  #protocol: "https"
  #username: "elastic"
  #password: "changeme"

#----------------------------- Logstash output --------------------------------
output.logstash:
  # The Logstash hosts
  hosts: ["localhost:5044"]

Ahora Comienza beats. La -e le indica que escriba logs en stdout, así te puede Ve que funcione y comprobar si hay errores.

    sudo /usr/share/filebeat/bin/filebeat -e -c /etc/filebeat/filebeat.yml

Instala LogStash

    cd /usr/share
sudo mkdir logstash
sudo wget https://artifacts.elastic.co/downloads/logstash/logstash-7.1.1.tar.gz
sudo tar xvfz logstash-7.1.1.tar.gz

Ahora edita /usr/share/logstash/logstash-7.1.1/config/nginx.conf

Los puntos a destacar son:

Entrada dile a logstash que escuche a Beats en el puerto 5044

filter {

grok {

Para entender esto te tendrías que entender Grok. No lo intentes todavía. Es una herramienta de análisis de archivos. Básicamente entiende diferentes formatos de archivo, además de que se puede ampliar. utiliza el ejemplo de abajo, ya que ni siquiera los ejemplos de la documentación de ElasticSearch funcionan. En cambio, los redactores técnicos utiliza todos el mismo ejemplo funcional.

salida {

elasticsearch {

hosts => ["https://58571402f5464923883e7be42a037917.eu-central-1.aws.cloud.es.io:9243"]

usuario => "elástico"

contraseña => "xxxxxxxx"

index => "logstash-%{+YYYYY. MM.dd}"

}

stdout { codec => rubydebug }

}

Esta parte están decepcionante en ElasticSearch no permite te utiliza el cloud.id y cloud.auth conectarse a ElasticSearch, como sí lo hace Beats. Así que te tienes que darle la URL, el usuario y la contraseña. utiliza el mismo userid y contraseña con los que te inicias sesión en cloud.elastic.com.

Tú también podrías Crea otro usuario, pero entonces te tendrías que darle a ese usuario la autoridad para Crea índices. Así que usar el usuario elástico está usando al superusuario como un registro corto.

La línea del índice permite te Haz al índice una combinación de las palabras logstash y la fecha. El objetivo están darle un nombre significativo. Quizá nginx* sería mejor como te utiliza Logstash para trabajar con todo tipo de logs y aplicaciones.

Codec = Rubydebug escribe la salida en STDOUT para que te pueda Ve que están funcione.

    input {
  beats {
    port => 5044
    host => "0.0.0.0"
  }
}

filter {
 grok {
   match => [ "message" , "%{COMBINEDAPACHELOG}+%{GREEDYDATA:extra_fields}"]
   overwrite => [ "message" ]
 }
 mutate {
   convert => ["response", "integer"]
   convert => ["bytes", "integer"]
   convert => ["responsetime", "float"]
 }
 geoip {
   source => "clientip"
   target => "geoip"
   add_tag => [ "nginx-geoip" ]
 }
 date {
   match => [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss Z" ]
   remove_field => [ "timestamp" ]
 }
 useragent {
   source => "agent"
 }
}

output {
  elasticsearch {
    hosts => ["https://58571402f5464923883e7be42a037917.eu-central-1.aws.cloud.es.io:9243"]
    user => "elastic"
    password => "xxxxxxxx"
    index => "logstash-%{+YYYY.MM.dd}"
  }
 stdout { codec => rubydebug }
}

Ahora Comienza Logstash en primer plano para que te pueda Ve lo que están pasando.

    sudo /usr/share/logstash/logstash-7.1.1/bin/logstash -f /usr/share/logstash/logstash-7.1.1/config/nginx.conf

Suponiendo que te tenga parte del servidor web nginx y algunos logs que se escriban en /var/log/nginx tras un minuto o así, debería Comienza escribiendo logs en ElasticSearch. O te puede descargar https://raw.githubusercontent.com/respondcreate/nginx-access-log-frequency/master/example-access.log para darle algunas entradas de muestra.

Exporta tu contraseña y el usuario de ElasticSearch a la variable de entorno:

    export pwd="elastic:xxxxx"

Luego consulta ElasticSearch y te deberías Ve que el índice logstash* ha sido creado.

    curl --user $pwd -XGET https://58571402f5464923883e7be42a037917.eu-central-1.aws.cloud.es.io:9243/logstash-2019.06.19-000001/_search?pretty

Ahora tú puedes consultar ese índice de ElasticSearch y ver un registro. A continuación hemos acortado el registro para que te Ve que ha analizado la entrada del registro del mensaje en campos individuales, que tú podrías consultar, como request (la URL) y verbo (Obtén, PUT, etc.).

    curl --user $pwd -X GET 'https://58571402f5464923883e7be42a037917.eu-central-1.aws.cloud.es.io:9243/logstash-2019.06.19-000001?pretty'
    {
        "_index" : "logstash-2019.06.19-000001",
        "_type" : "_doc",
        "_id" : "9RZDcWsBDzKZEQI4C4Qu",
        
…

          "verb" : "GET",
          "input" : {
            "type" : "log"
          },
          "auth" : "-",
          "source" : "/var/log/nginx/another.log",
          "device" : "Other",
        

….

          "geoip" : {
            "timezone" : "Europe/Moscow",
            "latitude" : 55.7386,
            "location" : {
              "lon" : 37.6068,
              "lat" : 55.7386
            },
            "longitude" : 37.6068,
            "country_code2" : "RU",
            "ip" : "46.160.190.178",
            "continent_code" : "EU",
            "country_code3" : "RU",
            "country_name" : "Russia"
          },
          


…


          "response" : 200,
          "os_name" : "Windows",
          "major" : "52",
          "agent" : "\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36\"",
          "build" : "",
          "clientip" : "46.160.190.178",
          "@version" : "1",
          "message" : "46.160.190.178 - - [19/Jun/2019:12:39:52 +0000] \"GET / HTTP/1.1\" 200 481 \"-\" \"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36\"",
          

…

          "request" : "/",

En Kibana se verá así:

Y así, cuando se expande:

Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.

Más de ITOps y DevOps

Suscríbete al Informe

Al registrarse para esta oferta te son confirmar que te leído y aceptado la Política de Privacidad de BMC.

Gracias te

Tú te has suscrito a The Brief
El Brief abarca la orquestación de mainframe y empresa—BMC AMI y Control-M—y la investigación de analistas, despliegues de clientes y eventos en ambas áreas.