ELK (Elasticksearch, Logstash, Kibana) centralización y monitorización de logs

ELK, es un conjunto de aplicaciones  (Elasticksearch, Logstash, Kibana) que recopilan los logs de un cliente (Apache, pfsense, proxmox…) y luego los muestra de una forma limpia y ordenada. Además cuenta con con diferentes paneles configurables para poder mostrar lo que se quiera. Para monitorizar logs hay muchas herramientas, una de mis favoritas y una alternativa a esta es graylog2.

 


Server

Editar el archivo sources.list para añadir repositorios
# vim /etc/apt/sources.list

Añadir las siguientes líneas
  deb http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main
deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main
  deb http://packages.elasticsearch.org/elasticsearch/1.3/debian stable main
  deb http://packages.elasticsearch.org/logstash/1.4/debian stable main

Agregar las claves de los repositorios
# apt-key adv –keyserver keyserver.ubuntu.com –recv-keys EEA14886
  # wget qO http://packages.elasticsearch.org/GPGKEYelasticsearch |  aptkey add
Actualizar repositorios
  # aptitude update
JAVA
Instalar java8
  # aptitude install oracle-java8-installer 

 

RSYSLOG

Instalar rsyslog
# aptitude install rsyslog

Editar el archivo de configuración
# vim /etc/rsyslog.conf

#################
#### MODULES ####
#################

$ModLoad imuxsock # provides support for local system logging

$ModLoad imklog   # provides kernel logging support
#$ModLoad immark  # provides –MARK– message capability

# provides UDP syslog reception

$ModLoad imudp
$UDPServerRun 514

# provides TCP syslog reception

#$ModLoad imtcp
#$InputTCPServerRun 514

# Send to logstash

*.*                             @127.0.0.1:5000

### By program ###

$template ByProgram,”/var/log/ektcentrex/%HOSTNAME%/by-program/%programname%.log”
*.*                             -?ByProgram

Reiniciar el servicio
  # service rsyslog restart
ELASTICSEARCH
Instalar elasticsearch
  # aptitude install elasticsearch
Editar el archivo de configuración de elasticsearch

  # vim /etc/elasticsearch/elasticsearch.yml
Añadir
script.disable_dynamic: true

   Descomentar / Modificar
network.host: localhost
Reiniciar el servicio
# service elasticsearch restart

Hacer que el programa inicie al cargar sistema
# update-rc.d elasticsearch defaults 95 10

 

KIBANA

Descargar paquete
  # wget https://download.elasticsearch.org/kibana/kibana/kibana-3.1.1.tar.gz

Descomprimir el paquete
  # tar xvf kibana-3.1.1.tar.gz

Editar el archivo de configuración
# vim kibana-3.1.1/config.js

Modificar
  elasticsearch: “http://”+window.location.hostname+”:80“,

Crear la carpeta kibana3
  # mkdir -p /var/www/kibana3

Copiar los archivos descomprimidos a la carpeta creada
  # cp -r kibana-3.1.1/* /var/www/kibana3/

 

NGINX

Instalar nginx
# aptitude install nginx
Hacer una copia de seguridad del archivo default
# mv /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak

Crear el archivo default y editarlo
  # vim /etc/nginx/sites-available/default
server {
  listen                *:80 ;
 
  server_name           localhost;
  access_log            /var/log/nginx/kibana.myhost.org.access.log;
 
  location / {
    root  /var/www/kibana3;
    index  index.html  index.htm;
  }
 
  location ~ ^/_aliases$ {
    proxy_pass http://127.0.0.1:9200;
    proxy_read_timeout 90;
  }
  location ~ ^/.*/_aliases$ {
    proxy_pass http://127.0.0.1:9200;
    proxy_read_timeout 90;
  }
  location ~ ^/_nodes$ {
    proxy_pass http://127.0.0.1:9200;
    proxy_read_timeout 90;
  }
  location ~ ^/.*/_search$ {
    proxy_pass http://127.0.0.1:9200;
    proxy_read_timeout 90;
  }
  location ~ ^/.*/_mapping {
    proxy_pass http://127.0.0.1:9200;
    proxy_read_timeout 90;
  }
 
  # Password protected end points
  location ~ ^/kibana-int/dashboard/.*$ {
    proxy_pass http://127.0.0.1:9200;
    proxy_read_timeout 90;
    limit_except GET {
      proxy_pass http://127.0.0.1:9200;
      auth_basic “Restricted”;
      auth_basic_user_file /etc/nginx/conf.d/kibana.myhost.org.htpasswd;
    }
  }
  location ~ ^/kibana-int/temp.*$ {
    proxy_pass http://127.0.0.1:9200;
    proxy_read_timeout 90;
    limit_except GET {
      proxy_pass http://127.0.0.1:9200;
      auth_basic “Restricted”;
      auth_basic_user_file /etc/nginx/conf.d/kibana.myhost.org.htpasswd;
    }
  }
}

Instalar las utilidades de apache2
  # aptitude install apache2-utils
Añadir el usuario admin
  # htpasswd -c /etc/nginx/conf.d/kibana.myhost.org.htpasswd

Reiniciar el servicio ngix
  # service nginx restart


LOGTASH

Instalar logstash
  # aptitude install logstash

Crear el archivo 01-lumberjack-input.conf
  # vim /etc/logstash/conf.d/01-lumberjack-input.conf

Añadir:

input {
  udp {
    port => 5000
    type => syslog
  }

}

Crear el archivo 10-syslog.conf
  # vim /etc/logstash/conf.d/10-syslog.conf

Añadir:

filter {
  grok {
      type => "syslog"
      pattern => [ "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{PROG:syslog_program}(?:[%{POSINT:syslog_pid}])?: %{GREEDYDATA:syslog_message}" ]
      add_field => [ "received_at", "%{@timestamp}" ]
      add_field => [ "received_from", "%{@source_host}" ]
  }
  syslog_pri {
      type => "syslog"
  }
  date {
      type => "syslog"
      syslog_timestamp => [ "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
  }
  mutate {
      type => "syslog"
      exclude_tags => "_grokparsefailure"
      replace => [ "@source_host", "%{syslog_hostname}" ]
      replace => [ "@message", "%{syslog_message}" ]
  }
  mutate {
      type => "syslog"
      remove => [ "syslog_hostname", "syslog_message", "syslog_timestamp" ]
  }
}

Crear el archivo 30-lumberjack-output.conf
# vim /etc/logstash/conf.d/30-lumberjack-output.conf

Añadir
output {

elasticsearch { embedded => true }

}

Reinciar el servicio
# service logstash restart

 

CLIENTE

Editar el archivo sources.list
# vim /etc/apt/sources.list

Añadir el repositorio
  deb http://packages.elasticsearch.org/logstashforwarder/debian stable main

Añadir la clave
  # wget -O – http://packages.elasticsearch.org/GPG-KEY-elasticsearch | apt-key add –

Actualizar repositorios

  # aptitude update
Instalar logstash-forwarder
# aptitude install logstash-forwarder

Ir a la carpeta init.d
  # cd /etc/init.d/

Descargar el archivo logstash-forwarder.init
# wget https://raw.github.com/elasticsearch/logstash-forwarder/master/logstash-forwarder.init -O logstash-forwarder

Darle permisos de ejecución
# chmod +x logstash-forwarder

Hacer que se inicie junto con el sistema
# update-rc.d logstash-forwarder defaults
Crear la carpeta de certificados
# mkdir -p /etc/pki/tls/certs

Editar el archivo logstash-forwarder
# vim /etc/logstash-forwarder

Añadir
     { “network”: { “servers”: [ “:5000” ], “timeout”: 15, “ssl ca”: “/etc/pki/tls/certs/logstash-forwarder.crt” }, “files”: [ { “paths”: [ “/var/log/syslog”, “/var/log/auth.log” ], “fields”: { “type”: “syslog” } } ] }

Reiniciar el servicio
  # service logstash-forwarder restart

Para acceder a kibana escribir en el navegador la IP del servidor
  http://IP

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *