Cómo instalar Graylog 4 en Ubuntu 22.04

Graylog es una herramienta de monitorización de registros gratuita y de código abierto que sirve para capturar, almacenar y permitir el análisis en tiempo real de terabytes de datos de máquinas. Está diseñada para el análisis moderno de registros que permite a los usuarios encontrar rápida y fácilmente el significado de los datos y tomar medidas más rápidamente. También proporciona sistemas de búsqueda de alertas y del historial de registros utilizando ElasticSearch como base de datos de índice principal y MongoDB para almacenar la meta información. Te ayuda a controlar, buscar y analizar una gran cantidad de datos en un formato sencillo y legible.

En este tutorial, te mostraremos cómo instalar Graylog en un servidor Ubuntu 22.04.

Requisitos previos

  • Un servidor que ejecute Ubuntu 22.04 con un mínimo de 4GB de RAM
  • Una contraseña de root configurada en el servidor.

Cómo empezar

En primer lugar, tendrás que actualizar los paquetes de tu sistema a la última versión. Puedes actualizarlos todos con el siguiente comando:

apt update -y
apt upgrade

Después de actualizar todos los paquetes, también tendrás que instalar algunas dependencias en tu servidor. Puedes instalarlas todas con el siguiente comando:

apt install apt-transport-https gnupg2 uuid-runtime pwgen curl dirmngr -y

Una vez instaladas todas las dependencias necesarias, puedes pasar al siguiente paso.

Instalar el JDK de Java

Graylog requiere que Java esté instalado en tu servidor. Si no está instalado, puedes instalarlo con el siguiente comando:

apt install openjdk-11-jre-headless -y

Una vez instalado Java, puedes verificar la versión instalada de Java ejecutando el siguiente comando:

java -version

Deberías obtener la siguiente salida:

openjdk version "11.0.16" 2022-07-19
OpenJDK Runtime Environment (build 11.0.16+8-post-Ubuntu-0ubuntu122.04)
OpenJDK 64-Bit Server VM (build 11.0.16+8-post-Ubuntu-0ubuntu122.04, mixed mode, sharing)

Una vez que hayas terminado, puedes pasar al siguiente paso.

Instalar y configurar Elasticsearch

Graylog utiliza Elasticsearch para almacenar los registros procedentes de recursos externos. Por tanto, necesitarás instalar Elasticsearch en tu sistema.

Por defecto, el paquete Elasticsearch no está disponible en el repositorio por defecto de Ubuntu. Así que tendrás que añadir el repositorio de Elasticsearch a tu sistema.

Primero, descarga y añade la clave GPG de Elasticsearch con el siguiente comando:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add -

A continuación, añade el repositorio de Elasticsearch con el siguiente comando:

echo "deb https://artifacts.elastic.co/packages/oss-7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

A continuación, actualiza el repositorio e instala Elasticsearch con el siguiente comando

apt update -y
apt install elasticsearch-oss -y

Después de instalar Elasticsearch, tendrás que editar el archivo de configuración de Elasticsearch y definir el nombre del clúster. Puedes hacerlo con el siguiente comando:

nano /etc/elasticsearch/elasticsearch.yml

Define el nombre de tu cluster a Graylog y añade otra línea como se muestra a continuación:

cluster.name: graylog
action.auto_create_index: false

Guarda y cierra el archivo cuando hayas terminado. A continuación, inicia el servicio Elasticsearch y habilítalo para que se inicie en el arranque con el siguiente comando:

systemctl daemon-reload
systemctl start elasticsearch
systemctl enable elasticsearch

También puedes verificar el estado del servicio Elasticsearch con el siguiente comando:

systemctl status elasticsearch

Deberías obtener la siguiente salida:

? elasticsearch.service - Elasticsearch
     Loaded: loaded (/lib/systemd/system/elasticsearch.service; disabled; vendor preset: enabled)
     Active: active (running) since Sun 2022-09-25 07:05:27 UTC; 21s ago
       Docs: https://www.elastic.co
   Main PID: 74226 (java)
      Tasks: 48 (limit: 4579)
     Memory: 1.2G
        CPU: 22.739s
     CGroup: /system.slice/elasticsearch.service
             ??74226 /usr/share/elasticsearch/jdk/bin/java -Xshare:auto -Des.networkaddress.cache.ttl=60 -Des.networkaddress.cache.negative.t>

Sep 25 07:05:11 ubuntu2204 systemd[1]: Starting Elasticsearch...
Sep 25 07:05:27 ubuntu2204 systemd[1]: Started Elasticsearch.

Ahora, verifica la respuesta de Elasticcsearch con el siguiente comando:

curl -X GET http://localhost:9200

Deberías obtener la siguiente salida:

{
  "name" : "ubuntu2204",
  "cluster_name" : "graylog",
  "cluster_uuid" : "6IWBEBx_THa2Gzqb7a1LTQ",
  "version" : {
    "number" : "7.10.2",
    "build_flavor" : "oss",
    "build_type" : "deb",
    "build_hash" : "747e1cc71def077253878a59143c1f785afa92b9",
    "build_date" : "2021-01-13T00:42:12.435326Z",
    "build_snapshot" : false,
    "lucene_version" : "8.7.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

Instala el servidor MongoDB

Graylog utiliza MongoDB como base de datos. Así que tendrás que instalar la base de datos MongoDB en tu servidor. Por defecto, el paquete MongoDB no está incluido en el repositorio por defecto de Ubuntu. Así que tendrás que añadir el repositorio oficial de MongoDB a tu sistema:

Puedes añadirlo con el siguiente comando:

wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-4.4.list

Una vez añadido el repositorio, actualiza la caché del repositorio e instala el Graylog con el siguiente comando:

apt update -y
apt install -y mongodb-org

Una vez instalado el MongoDB, inicia el servicio MongoDB y permite que se inicie al reiniciar el sistema con el siguiente comando:

systemctl enable --now mongod

También puedes comprobar el estado de MongoDB con el siguiente comando:

systemctl status mongod

Deberías ver el estado de MongoDB en la siguiente salida:

? mongod.service - MongoDB Database Server
     Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2022-09-25 07:20:35 UTC; 8s ago
       Docs: https://docs.mongodb.org/manual
   Main PID: 77018 (mongod)
     Memory: 60.0M
        CPU: 936ms
     CGroup: /system.slice/mongod.service
             ??77018 /usr/bin/mongod --config /etc/mongod.conf

Sep 25 07:20:35 ubuntu2204 systemd[1]: Started MongoDB Database Server.

Una vez que hayas terminado, puedes pasar al siguiente paso.

Instalar y configurar Graylog

Por defecto, el paquete Graylog no está disponible en el repositorio por defecto de Ubuntu. Así que tendrás que instalar el repositorio de Graylog en tu servidor.

Puedes descargar el paquete del repositorio Graylog con el siguiente comando:

wget https://packages.graylog2.org/repo/packages/graylog-4.3-repository_latest.deb

Una vez completada la descarga, instala el paquete descargado con el siguiente comando:

dpkg -i graylog-4.3-repository_latest.deb

A continuación, actualiza el repositorio e instala el servidor Graylog con el siguiente comando:

apt update -y
apt install graylog-server -y

Después de instalar el servidor Graylog, tendrás que generar un secreto para asegurar las contraseñas de los usuarios. Puedes generarlo con el siguiente comando:

pwgen -N 1 -s 96

Deberías ver la siguiente salida:

d1fDH1NEOMgb3nxbFYY3eVpqzjOprwgPgFuGh2F0flDdZglJP2CxENV4WEeW8iqZXsjDEZgMob3oBvQYm62RXxoc33hKTPJa

A continuación, también tendrás que generar una contraseña segura para el usuario administrador de Graylog. Necesitarás esta contraseña para acceder a la interfaz web de Graylog. Puedes generarla con el siguiente comando:

echo -n "Enter Password: " && head -1

Deberías ver la siguiente salida:

Enter Password: yourpassword
e472e1436cbe87774c1bc75d0a646d67e506bea1dff8701fd41f34bca33e1419

Ahora, edita el archivo de configuración principal de Graylog y define ambas contraseñas:

nano /etc/graylog/server/server.conf

Pega las dos contraseñas que has generado anteriormente, como se muestra a continuación:

password_secret = Wv4VQWCAA9sRbL7pxPeY7tb9lSo50esEWgNXxXHypx0Og3CezMmQLdF2QzQdRSIXmNXKINjRvZpPTrvZv4k4NlJrFYTfOc3c
root_password_sha2 = e472e1436cbe87774c1bc75d0a646d67e506bea1dff8701fd41f34bca33e1419   

A continuación, tendrás que definir también una dirección bind para tu servidor, como se muestra a continuación:

http_bind_address = 127.0.0.1:9000

Guarda y cierra el archivo cuando hayas terminado, luego inicia el servicio Graylog y habilítalo para que se inicie al reiniciar el sistema con el siguiente comando:

systemctl daemon-reload
systemctl start graylog-server
systemctl enable graylog-server

A continuación, puedes verificar el estado del servidor Graylog con el siguiente comando:

systemctl status graylog-server

Deberías ver la siguiente salida:

? graylog-server.service - Graylog server
     Loaded: loaded (/lib/systemd/system/graylog-server.service; disabled; vendor preset: enabled)
     Active: active (running) since Sun 2022-09-25 07:25:13 UTC; 10s ago
       Docs: http://docs.graylog.org/
   Main PID: 78082 (graylog-server)
      Tasks: 44 (limit: 4579)
     Memory: 539.4M
        CPU: 18.488s
     CGroup: /system.slice/graylog-server.service
             ??78082 /bin/sh /usr/share/graylog-server/bin/graylog-server
             ??78119 /usr/bin/java -Xms1g -Xmx1g -XX:NewRatio=1 -server -XX:+ResizeTLAB -XX:-OmitStackTraceInFastThrow -Djdk.tls.acknowledgeC>

Sep 25 07:25:13 ubuntu2204 systemd[1]: Started Graylog server.
Sep 25 07:25:13 ubuntu2204 graylog-server[78119]: OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 a>
Sep 25 07:25:14 ubuntu2204 graylog-server[78119]: WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performan>
Sep 25 07:25:17 ubuntu2204 graylog-server[78119]: WARNING: An illegal reflective access operation has occurred
Sep 25 07:25:17 ubuntu2204 graylog-server[78119]: WARNING: Illegal reflective access by retrofit2.Platform (file:/usr/share/graylog-server/gr>
Sep 25 07:25:17 ubuntu2204 graylog-server[78119]: WARNING: Please consider reporting this to the maintainers of retrofit2.Platform
Sep 25 07:25:17 ubuntu2204 graylog-server[78119]: WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access >
Sep 25 07:25:17 ubuntu2204 graylog-server[78119]: WARNING: All illegal access operations will be denied in a future release

También puedes verificar el registro del servidor Graylog con el siguiente comando:

tail -f /var/log/graylog-server/server.log

Una vez que el servidor Graylog se haya iniciado con éxito, deberías obtener la siguiente salida:

2022-09-25T07:25:40.117Z INFO  [ServerBootstrap] Services started, startup times in ms: {FailureHandlingService [RUNNING]=73, GeoIpDbFileChangeMonitorService [RUNNING]=88, PrometheusExporter [RUNNING]=88, OutputSetupService [RUNNING]=89, JobSchedulerService [RUNNING]=89, InputSetupService [RUNNING]=90, BufferSynchronizerService [RUNNING]=91, LocalKafkaMessageQueueReader [RUNNING]=92, LocalKafkaMessageQueueWriter [RUNNING]=92, GracefulShutdownService [RUNNING]=93, MongoDBProcessingStatusRecorderService [RUNNING]=93, UserSessionTerminationService [RUNNING]=101, StreamCacheService [RUNNING]=133, LocalKafkaJournal [RUNNING]=134, UrlWhitelistService [RUNNING]=134, ConfigurationEtagService [RUNNING]=137, EtagService [RUNNING]=139, PeriodicalsService [RUNNING]=174, LookupTableService [RUNNING]=203, JerseyService [RUNNING]=4076}
2022-09-25T07:25:40.133Z INFO  [ServerBootstrap] Graylog server up and running.

En este punto, el servidor Graylog está iniciado y escuchando en el puerto 9000. Puedes comprobarlo con el siguiente comando:

ss -antpl | grep 9000

Deberías obtener la siguiente salida:

LISTEN            0                 4096                         [::ffff:127.0.0.1]:9000                                    *:*                users:(("java",pid=78119,fd=56))                                                                                                             

Configurar Nginx como proxy inverso para Graylog

A continuación, tendrás que instalar y configurar Nginx como proxy inverso para acceder al servidor Graylog en el puerto 80.

Primero, instala el servidor Nginx con el siguiente comando:

apt install nginx -y

Tras instalar el servidor Nginx, crea un nuevo archivo de configuración del host virtual Nginx con el siguiente comando:

nano /etc/nginx/sites-available/graylog.conf

Añade las siguientes líneas:

server {
    listen 80;
    server_name graylog.example.org;

location /
    {
      proxy_set_header Host $http_host;
      proxy_set_header X-Forwarded-Host $host;
      proxy_set_header X-Forwarded-Server $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Graylog-Server-URL http://$server_name/;
      proxy_pass       http://208.117.84.72:9000;
    }

}

Guarda y cierra el archivo cuando hayas terminado. A continuación, comprueba si el Nginx tiene algún error de sintaxis con el siguiente comando:

nginx -t

Deberías obtener la siguiente salida:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

A continuación, habilita el archivo de configuración del host virtual Nginx con el siguiente comando:

ln -s /etc/nginx/sites-available/graylog.conf /etc/nginx/sites-enabled/

A continuación, elimina el archivo de host virtual de Nginx por defecto:

rm -rf /etc/nginx/sites-enabled/default

Por último, reinicia el servicio Nginx para aplicar los cambios:

systemctl restart nginx

A continuación, verifica el estado del Graylog con el siguiente comando:

systemctl status nginx

Deberías obtener la siguiente salida:

? nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2022-09-25 07:30:45 UTC; 8s ago
       Docs: man:nginx(8)
    Process: 78980 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 78981 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 78982 (nginx)
      Tasks: 3 (limit: 4579)
     Memory: 3.3M
        CPU: 49ms
     CGroup: /system.slice/nginx.service
             ??78982 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
             ??78983 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
             ??78984 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""

Sep 25 07:30:45 ubuntu2204 systemd[1]: Starting A high performance web server and a reverse proxy server...
Sep 25 07:30:45 ubuntu2204 systemd[1]: Started A high performance web server and a reverse proxy server.

Accede a la interfaz web de Graylog

Ahora, abre tu navegador web y escribe la URL http://graylog.example.com. Serás redirigido a la página de inicio de sesión de Graylog como se muestra a continuación:

Inicio de sesión en Graylog

Proporciona tu nombre de usuario y contraseña de administrador y haz clic en el botón de inicio de sesión. Deberías ver el panel de control de Graylog en la siguiente página:

Panel de control de Graylog

Conclusión

Enhorabuena! has instalado y configurado con éxito el servidor Graylog con Nginx como proxy inverso en Ubuntu 22.04. Ahora puedes explorar el Graylog y crear una entrada para recibir registros Rsyslog de fuentes externas. No dudes en preguntarme si tienes alguna duda.

Scroll al inicio