Graylog al igual que ELK o splunk es un colector de logs es decir, indicas a varios host que manden sus logs a esta máquina para luego poder gestionarlos (filtrarlos, indexarlos, monitorizarlos…). Se pueden crear alertas, streams, dashboards personalizados, conectarse con LDAP… También hay plugins en el market para poder añadir nuevas funcionalidades.
Instalación
Para la instalación se van a usar los siguientes paquetes sobre un Debian Stretch
Elasticsearch (5.6.3)
Mongodb (3.2.11)
OpenJDK (8)
Graylog-server (2.3.1)
Server
Prerequisitos
Instalar todos los paquetes necesarios
apt -y install apt-transport-https uuid-runtime pwgen curl libdigest-sha-perl
OpenJDK
Instalar la versión 8 de OpenJDK
apt -y install openjdk-8-jdk-headless
Memoria core
Subir la memoria del core para evitar problemas de buffer
vim /etc/sysctl.conf
Añadir:
net.core.rmem_max=1048576
NTP
apt -y install ntp
Elasticsearch
Para empezar, hay que instalar elasticsearch. Se puede instalar tanto de repositorios, añadiéndolos previamente o descargando el .deb o .tar.gz desde su página web. Si se actualiza la versión cambiar el repositorio.
Añadir los repositorios
echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | tee -a /etc/apt/sources.list.d/elastic-5.x.list
Añadir la clave pública
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add -
Actualizar repositorios
apt update
Instalar elasticsearch
apt -y install elasticsearch
Una vez instalado hay que configurarlo
vim /etc/elasticsearch/elasticsearch.yml
Descomentar modificar
cluster.name: graylog
Si se quiere cambiar el máximo de memoria de Java de elasticsearch, hay que editar el siguiente fichero:
vim /etc/elasticsearch/jvm.options
-Xms2g -Xmx2g
Agregar elasticsearch a init.d
systemctl daemon-reload systemctl enable elasticsearch.service systemctl start elasticsearch.service
Comprobar que todo está correcto. El status tiene que estar en green, sino es que algo falla (puede tardar un poco en inciciar elasticsearch)
curl -XGET 'http://127.0.0.1:9200/_cluster/health?pretty=true'
{ "cluster_name" : "graylog", "status" : "green", "timed_out" : false, "number_of_nodes" : 1, "number_of_data_nodes" : 1, "active_primary_shards" : 0, "active_shards" : 0, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 0, "delayed_unassigned_shards" : 0, "number_of_pending_tasks" : 0, "number_of_in_flight_fetch" : 0, "task_max_waiting_in_queue_millis" : 0, "active_shards_percent_as_number" : 100.0 }
MongoDB
Instalar MongoDB
apt -y install mongodb-server
Cambiar los ulimit
vim /etc/security/limits.d/90-nproc.conf
mongod soft nproc 524288
Reiniciar
reboot
Graylog
Descargar el instalador de repositorios
cd /tmp && wget https://packages.graylog2.org/repo/packages/graylog-2.3-repository_latest.deb
Ejecutar el instalado
dpkg -i graylog-2.3-repository_latest.deb
Actualizar los repositorios
apt update
Instalar graylog
apt -y install graylog-server
Editar el archivo de configuración
vim /etc/graylog/server/server.conf
password_secret = <-- Instalar pwgen y crear la contraseña con el comando: pwgen -N 1 -s 96 y pegar el resultado seguido root_password_sha2 <-- hacer: echo -n <contraseña> | shasum -a 256 y pegar el resultado seguido (sin el último guión) rest_listen_uri = http://0.0.0.0:9000/api/ rest_transport_uri = http://<IP_del_host>:9000/api/ --> Ej: http://192.168.1.50:9000/api/ web_listen_uri = http://0.0.0.0:9000/ root_timezone = Europe/Madrid
Si se quiere cambiar el máximo de memoria de Java de graylog, hay que editar el siguiente fichero:
vim /etc/sysconfig/graylog-server
GRAYLOG_SERVER_JAVA_OPTS="-Xms1g -Xmx1g -XX:NewRatio=1 -server -XX:+ResizeTLAB -XX:+UseConcMarkSweepGC -XX:+CMSConcurrentMTEnabled -XX:+CMSClassUnloadingEnabled -XX:+UseParNewGC -XX:-OmitStackTraceInFastThrow"
Para que graylog se inicie automáticamente ejecutar los siguientes comandos:
systemctl daemon-reload systemctl enable graylog-server.service systemctl start graylog-server.service
Server
Ir al navegador y escribir en la barra de direcciones
http://HOST_IP:9000
Host
Hay varias formas de mandar logs desde un host al server. La mas recomendable es con el agente, explicado aquí. La otra es con rsyslog que sería del siguiente modo:
En el host instalar rsyslog si no estuviera instalado
apt -y install rsyslog
Y editar el archivo
vim /etc/rsyslog.conf
#Mandar logs por UDP $template GRAYLOGRFC5424,"<%pri%>%protocol-version% %timestamp:::date-rfc3339% %HOSTNAME% %app-name% %procid% %msg%n" *.* @Graylog-server_IP:puerto_definido;GRAYLOGRFC5424
#Mandar logs por TCP $template GRAYLOGRFC5424,"<%pri%>%protocol-version% %timestamp:::date-rfc3339% %HOSTNAME% %app-name% %procid% %msg%n" *.* @@Graylog-server_IP:puerto_definido;GRAYLOGRFC5424
Por último, reiniciar el servicio
/etc/init.d/rsyslog restart
Amigo Ismael.
Muy agradecido por el aporte, fue de muchísima utilidad.
Gracias a ti por leer y comentar 🙂