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