Instalar ELK 5.0 en CentOS/RHEL/SL 7

Instalar ELK 5.0 en CentOS 7

Instalar pre-requisitos

Antes de comenzar debemos asegurarnos de tener instalados todos los paquetes necesarios:

yum install -y wget

Instalar java

Es necesario instalar la version 8 de java de Oracle, lo que lo podemos hacer con los siguientes comandos:

wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u73-b02/jdk-8u73-linux-x64.rpm"
yum -y localinstall jdk-8u73-linux-x64.rpm

Configurar los repositorios necesarios

Cada producto tiene su propio repositorio, podemos configurar dichos repositorios con el siguiente comando:

cat <<EOF > /etc/yum.repos.d/elk-5.0.repo
[elasticsearch-5.x]
name=Elasticsearch repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
 
[logstash-5.x]
name=Elastic repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
 
[kibana-5.x]
name=Kibana repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF

Instalar elasticsearch

yum install -y elasticsearch

Una vez que instalamos elasticsearch debemos iniciar y habilitar el servicio

systemctl start elasticsearch
systemctl enable elasticsearch

Instalar logstash

yum install -y logstash

Luego debemos iniciar y habilitar el servicio

systemctl start logstash
systemctl enable logstash

Instalar kibana

yum install -y kibana

Procedemos a iniciar y habilitar el servicio

systemctl start kibana
systemctl enable kibana

Teniendo en cuenta que utilizaremos SystemD podemos eliminar el script de SysV para evitar conflictos:

rm /etc/init.d/kibana

Instalacion de plugins de logstash

Debemos instalar los plugins basicos que vamos a necesitar en nuestro logstash

/usr/share/logstash/bin/logstash-plugin install logstash-output-elasticsearch logstash-input-file logstash-input-beats

En caso de querer configurar el "autoreload" para el logstash debemos editar el archivo /etc/systemd/system/logstash.service

vi /etc/systemd/system/logstash.service

y agregamos --config.reload.automatic a la linea que inicia cono ExecStart
quedando de la siguiente manera:

ExecStart=/usr/share/logstash/bin/logstash "--path.settings" "/etc/logstash" --config.reload.automatic

Guardamos el archivo y reiniciamos el logstash para que tome los cambios

systemctl daemon-reload
systemctl restart logstash

Configurar X-PACK para elasticsearch y kibana

x-pack es el nuevo complemento que trae el stack elk en la version 5.0, basicamente lo que hace este plugin es "segurizar" el nuestro elasticsearch utilizando usuarios para acceder y roles para permitir el acceso a los distintos documentos

Debemos descargar el plugin x-pack:

cd /tmp
wget https://artifacts.elastic.co/downloads/packs/x-pack/x-pack-5.0.0.zip

Instalamos el plugin a nuestro elasticsearch y le otorgamos todos los permisos que solicita el mismo

[root@elk ~]# /usr/share/elasticsearch/bin/elasticsearch-plugin install file:///tmp/x-pack-5.0.0.zip
-> Downloading file:///tmp/x-pack-5.0.0.zip
[=================================================] 100%  
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@     WARNING: plugin requires additional permissions     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
* java.lang.RuntimePermission accessClassInPackage.com.sun.activation.registries
* java.lang.RuntimePermission getClassLoader
* java.lang.RuntimePermission setContextClassLoader
* java.lang.RuntimePermission setFactory
* java.security.SecurityPermission createPolicy.JavaPolicy
* java.security.SecurityPermission getPolicy
* java.security.SecurityPermission putProviderProperty.BC
* java.security.SecurityPermission setPolicy
* java.util.PropertyPermission * read,write
* java.util.PropertyPermission sun.nio.ch.bugLevel write
* javax.net.ssl.SSLPermission setHostnameVerifier
See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
for descriptions of what these permissions allow and the associated risks.
 
Continue with installation? [y/N]y
-> Installed x-pack

Luego instalamos el plugin a nuestro kibana

[root@elk ~]# /usr/share/kibana/bin/kibana-plugin install file:///tmp/x-pack-5.0.0.zip
Attempting to transfer from file:///tmp/x-pack-5.0.0.zip
Transferring 72364732 bytes....................
Transfer complete
Retrieving metadata from plugin archive
Extracting plugin archive
Extraction complete
Optimizing and caching browser bundles...
Plugin installation complete

Luego reiniciamos los dos servicios para que tomen los cambios

systemctl restart elasticsearch logstash

Con esto tenemos instalado ELK en nuestro servidor, solo debemos comenzar a crear los filtros de logstash y recibir datos

Configurar Logstash

Debido a que instalamos x-pack debemos crear un usuario para que logstash inserte los datos a elasticsearch
Primero debemos crear el role logstash_writer el cual tendra permisos de escritura en cualquier indice

curl -XPOST "http://elastic:changeme@localhost:9200/_xpack/security/role/logstash_writer" -d '
{
  "cluster": ["manage_index_templates", "monitor"],
  "indices": [
    {
      "names": [ "*" ],
      "privileges": ["write","delete","create_index"]
    }
  ]
}'

Luego creamos el usuario y le asignamos el role recien creado

curl -XPOST "http://elastic:changeme@localhost:9200/_xpack/security/user/logstash" -d '
{ "password" : "pass_para_logstash",
  "roles" : [ "logstash_writer" ]}'

Con el comando anterior creamos el usuario logstash con el password "pass_para_logstash" con el role superuser que es el role por defecto con todos los privilegios

Agregamos un input y output basico para que nuestro logstash capture datos de rsyslog

Primero debemos agregar el input que se encargaria de leer y parsear los archivos, para esto creamos el archivo /etc/logstash/conf.d/01-rsyslog.conf

vi /etc/logstash/conf.d/01-rsyslog.conf

Y agregamos lo siguiente:

input {
  file {
    path => "/var/log/*.log"
    start_position => "beginning"
    type => "logs"
  }
}
 
filter {
 if [type] == "logs" {
   grok {
     match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
   }
   syslog_pri { }
   date {
     match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
     target => "@timestamp"
   }
 }
}

Luego agregamos el output para insertar a elasticsearch

vi /etc/logstash/conf.d/99-elastic-output.conf

y agregamos

output {
  elasticsearch {
    hosts => [ "localhost:9200" ]
    sniffing => true
    manage_template => false
    index => "%{indice}-%{+YYYY.MM.dd}"
    document_type => "%{[@metadata][type]}"
        user    => logstash
        password => password_del_logstash
  }
}

Donde se debe cambiar password_del_logstash por el password que le asignamos al usuario logstash

Finalmente configuramos el kibana para que escuche en todas las IPs del equipo
Editamos el archivo /etc/kibana/kibana.yml

vi /etc/kibana/kibana.yml

y editamos la linea

server.host: "localhost"

dejandolo de la siguiente manera:

server.host: "0.0.0.0"

Reiniciamos kibana:

systemctl restart kibana

Con esto en unos minutos podemos comenzar a ver los logs accediendo a nuestro kibana:
http://ipdenuestoserver:5601
Las credenciales por defecto son:
user: elastic
password: changeme

Deja un comentario