Estoy interesado en hacer una centralización de logs para facilitar el análisis de los problemas de infraestructura, monitorear y mantener un histórico de servicio.
Para entender lo básico de logstash me puse un servidor pequeño para hacer pruebas, inicialmente con los logs de apache.
Dado que no tengo $$$$ para pagar algo con soporte y todas las utilidades, usaré todas las versiones oss (Open Source Software) de estos productos:
- Apache HTTP Server: A descargar según distribución
- Logstash: Centraliza los logs | Descargar Logstash
- Filebeat: Envía la información de archivos (logs) a Elastic Search | Descargar Filebeat
- ElasticSearch: Guarda la información obtenida de los logs | Descargar ElasticSearch
- Grok: Filtra el log de apache y lo convierte en campos con nombre, al estilo JSON | Plugin ya incluido con Elastice
- Kibana: Visualiza y permite jugar con los datos en vez de hacer queries por CURL | Descargar Kibana
Orden de instalación y configuración
Asumiendo que ya tenemos algún sitio publicado en el apache usaremos alguno de los logs generados por default. En mi distro usaré:
/var/log/apache2/access.log
Instalamos Logstash:
#dpkg -i logstash-oss.deb Selecting previously unselected package logstash-oss. (Reading database ... 54254 files and directories currently installed.) Preparing to unpack logstash-oss-7.3.1.deb ... Unpacking logstash-oss (1:7.3.1-1) ... Setting up logstash-oss (1:7.3.1-1) ... Using provided startup.options file: /etc/logstash/startup.options /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/pleaserun-0.0.30/lib/pleaserun/platform/base.rb:112: warning: constant ::Fixnum is deprecated Successfully created system startup script for Logstash root@myserver:~#
Configuramos logstash /etc/logstash/conf.d/logstash.conf
# The # character at the beginning of a line indicates a comment. Use # comments to describe your configuration. input { beats { port => "5044" } } filter { grok { match => { "message" => "%{COMBINEDAPACHELOG}"} } } output { elasticsearch { hosts => ["http://localhost:9200"] index => "apache-myproject-%{+YYYY.MM.dd}" } }
Instalamos Filebeat
dpkg -i filebeat-oss.deb
Configuramos filebeat /etc/filebeat/filebeat.yml
filebeat.inputs: - type: log paths: - /var/log/apache2/access.log output.logstash: hosts: ["localhost:5044"]
Instalamos Elastic Search
root@myserver:~# dpkg -i elasticsearch-oss-7.3.1-amd64.deb Selecting previously unselected package elasticsearch-oss. (Reading database ... 70128 files and directories currently installed.) Preparing to unpack elasticsearch-oss-7.3.1-amd64.deb ... Unpacking elasticsearch-oss (7.3.1) ... Setting up elasticsearch-oss (7.3.1) ... Installing new version of config file /etc/elasticsearch/elasticsearch.yml ... Installing new version of config file /etc/elasticsearch/jvm.options ... Installing new version of config file /etc/elasticsearch/log4j2.properties ... Installing new version of config file /etc/default/elasticsearch ... Installing new version of config file /etc/init.d/elasticsearch ... Created elasticsearch keystore in /etc/elasticsearch Processing triggers for systemd (232-25+deb9u4) ...
Instalamos Kibana
dpkg -i kibana-oss.deb
Configuramos Kibana para acceder desde cualquier equipo /etc/kibana/kibana.yml
# Kibana is served by a back end server. This setting specifies the port to use. server.port: 5601 # Specifies the address to which the Kibana server will bind. IP addresses and host names are both valid values. # The default is 'localhost', which usually means remote machines will not be able to connect. # To allow connections from remote users, set this parameter to a non-loopback address. #server.host: "localhost" server.host: "0.0.0.0"
Iniciar los servicios
# En Debian service kibana start service elasticsearch start # Iniciamos la exploración del log con filebeat /usr/share/filebeat/bin/filebeat -e -c filebeat.yml -d "publish" # Iniciamos el pipeline de logstash para que reciba los datos y se los pase a Elastic /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/logstash.conf --config.reload.automatic
Finalmente cuando ingresemos en la URL de Kibana podremos agregar el filtro:
apache-myproject-<DATE>
Como configuramos previamente. De esta forma en Kibana aparece cada parte del log con un nombre de campo al que se le pueden aplicar queries fácilmente: