¿Está buscando un sistema que pueda interpretar sus archivos de registro, almacenarlos en un entorno seguro y recopilar datos bien organizados para su análisis? Bueno, centralizar la administración de registros con Graylog usando Docker podría ser lo que está buscando.
En este tutorial, aprenderá a usar Graylog y Docker para construir un sistema de registro centralizado para recopilar datos Syslog de su máquina Ubuntu.
¡Siga leyendo y empiece a centralizar la gestión de registros!
Requisitos
Esta publicación será un tutorial paso a paso. Para seguir, asegúrese de tener lo siguiente:
- Dos máquinas Ubuntu (un host y un cliente):este tutorial usa Ubuntu 20.04, pero otras distribuciones de Linux funcionarán.
- Rsyslog en la máquina cliente.
- Docker instalado en la máquina host. La versión de Docker utilizada para este tutorial es 20.10.7
- Docker-compose instalado en la máquina host.
- La utilidad Pwgen debe instalarse en la máquina host para generar una contraseña secreta aleatoria.
Implementación de Graylog mediante Docker Compose
¿Qué es Graylog de todos modos? Graylog es una plataforma de gestión de registros de código abierto. Graylog puede recopilar, indexar y analizar datos estructurados y no estructurados de fuentes. Una de estas fuentes son los sistemas operativos en tiempo real.
Antes de implementar Graylog, primero deberá instalar Graylog en su máquina host mediante Docker Compose.
Suponga que está usando una computadora Ubuntu 20.04 basada en la nube. En ese caso, deberá modificar su grupo de seguridad o las reglas del cortafuegos para permitir los siguientes puertos:
1514
y12201
para conexiones TCP y UDP y9000
solo para conexiones TCP.
1. Abra su cliente SSH favorito y conéctese a su máquina.
2. A continuación, ejecute los siguientes comandos para crear un nuevo directorio en su directorio de inicio y cambie a ese directorio. Puede nombrar el directorio como prefiera. Pero para esta demostración, el directorio se llama ~/graylog.
mkdir graylog
cd graylog
3. Cree un archivo YAML llamado docker-compose.yml en tu ~/graylog directorio, luego complete el archivo con la configuración a continuación. Pero no guardes los cambios todavía. Para proteger el inicio de sesión de Graylog y restringir el acceso a sus datos, deberá generar una contraseña secreta.
En el archivo recién creado, encontrará la configuración para configurar los componentes Graylog, MongoDB y ElasticSearch. Graylog requiere que todos estos componentes se configuren y ejecuten simultáneamente para que Graylog funcione de manera efectiva.
version: '2'
services:
# MongoDB: https://hub.docker.com/_/mongo/
MongoDB: # Mongodb service
image: mongo:4.2 # Version of Mongodb docker image
volumes:
- mongo_data:/data/db # Persisted mongodb data
# Elasticsearch: https://www.elastic.co/guide/en/elasticsearch/reference/7.10/docker.html
elasticsearch: # ElasticSearch service
image: docker.elastic.co/elasticsearch/elasticsearch-oss:7.10.2 # Version of elasticsearch image
volumes:
- es_data:/usr/share/elasticsearch/data # Persisted elasticsearch data
environment:
- http.host=0.0.0.0
- transport.host=localhost
- network.host=0.0.0.0
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
# Unlimited amount of memory set for elasticsearch container
memlock:
soft: -1
hard: -1
# Resource limit for elasticsearch set to 1 gigabyte
mem_limit: 1g
# Graylog: https://hub.docker.com/r/graylog/graylog/
graylog:
image: graylog/graylog:4.2 # Version of Graylog docker image
volumes:
- graylog_data:/usr/share/graylog/data # Persisted Graylog data
environment:
# CHANGE ME (must be at least 16 characters)!
- GRAYLOG_PASSWORD_SECRET=somepasswordpepper
# Password: admin
- GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
- GRAYLOG_HTTP_EXTERNAL_URI=http://127.0.0.1:9000/
- GRAYLOG_WEB_ENDPOINT_URI=http://127.0.0.1:9000/api
# Command to run as soon as components are started
entrypoint: /usr/bin/tini -- wait-for-it elasticsearch:9200 -- /docker-entrypoint.sh
# Containers that Graylog depends on
links:
- mongodb:mongo
- elasticsearch
restart: always # Graylog container set to always restart when stopped
depends_on:
- mongodb
- elasticsearch
ports:
# Graylog web interface and REST API
- 9000:9000
# Syslog TCP
- 1514:1514
# Syslog UDP
- 1514:1514/udp
# GELF TCP
- 12201:12201
# GELF UDP
- 12201:12201/udp
# Volumes for persisting data, see https://docs.docker.com/engine/admin/volumes/volumes/
volumes:
mongo_data:
driver: local
es_data:
driver: local
graylog_data:
driver: local
4. Ahora, ejecuta pwgen
comando a continuación para generar una única contraseña aleatoria (-N
) con 96 (-s 96
) caracteres.
pwgen -N 1 -s 96
5. Su contraseña secreta generada será similar a la siguiente. Tenga en cuenta su contraseña secreta, ya que la establecerá en docker-compose.yml archivo (paso seis).
6. Vuelva a docker-compose.yml archivo y reemplace somepasswordpepper
en GRAYLOG_PASSWORD_SECRET
con su contraseña secreta recién generada (paso cinco). Utilizará esta contraseña para el cifrado y la salazón de contraseñas. Sin esta contraseña secreta, el contenedor Graylog no se iniciará.
7. Ejecute el siguiente comando para generar un hash SHA2 de una contraseña de su elección. Esta contraseña es necesaria para el inicio de sesión inicial en Graylog.
echo -n "Enter Password: " && head -1 </dev/stdin | tr -d '\n' | sha256sum | cut -d" " -f1
Ingrese una contraseña de administrador de su elección cuando se le solicite, como se muestra a continuación, y presione ENTER. Una vez que haya ingresado una contraseña, se genera su contraseña hash.
Tenga en cuenta su contraseña cifrada, ya que la configurará en docker-compose.yml archivo (paso ocho).
8. Reemplace el valor de GRAYLOG_ROOT_PASSWORD_SHA2
variable de entorno en docker-compose.yml archivo con la contraseña hash SHA2 que generó anteriormente (paso siete). Guarde los cambios en docker-compose.yml archivo y salga del editor.
9. Finalmente, ejecute docker-compose up
Comando a continuación para implementar contenedores ElasticSearch, MongoDB y Graylog Docker en modo separado (-d
). Este comando los extrae del centro de Docker y los inicia como contenedores para que Graylog funcione correctamente.
# Starting up MongoDB, ElasticSearch, and Graylog containers in detached mode
sudo docker-compose up -d
La siguiente imagen muestra que las imágenes de Docker de MongoDB, ElasticSearch y Graylog se extrajeron del centro de Docker y se iniciaron como contenedores.
Cambio de valor de fragmentos de índice para ElasticSearch
Acaba de implementar Graylog y ese es un gran paso adelante en la centralización de la administración de registros. Pero ahora, es hora de configurar Graylog. Cambiará el valor de los fragmentos de ElasticSearch según la cantidad de nodos/contenedores de ElasticSearch que esté ejecutando.
Un fragmento es una unidad en la que Elasticsearch distribuye datos en varios nodos. El número óptimo de fragmentos por nodo es uno.
1. Abra su navegador web favorito y vaya a https://
Introduzca administrador como nombre de usuario e ingrese la contraseña de administrador que creó en la sección "Implementación de Graylog mediante Docker Compose" (paso siete). Para este tutorial, la contraseña es adamtheautomator.
Después de iniciar sesión, verá la página de inicio de Graylog, como se muestra a continuación.
2. A continuación, haga clic en Sistema menú —> Índices , como se muestra a continuación, para acceder a los índices e índice página (paso tres), donde puede elegir editar el conjunto de índice predeterminado.
3. Haga clic en Editar para administrar el conjunto de índices predeterminado de Graylog y cambiar el valor del fragmento de ElasticSearch. El valor predeterminado para los fragmentos de ElasticSearch es cuatro, y deberá cambiarlo (paso cuatro).
4. Finalmente, cambie la cantidad de fragmentos de ElasticSearch a uno (1 ) ya que está ejecutando un único nodo/contenedor de ElasticSearch y haga clic en Guardar al final de la página.
Configuración de Graylog para recopilar registros de Syslog
Acaba de configurar Graylog cambiando el valor de los fragmentos de índice para ElasticSearch. Pero también deberá configurar Graylog para recopilar datos de registro de Syslog en la máquina cliente. ¿Cómo? Configurará entradas de Graylog para recibir datos de registro enviados desde su máquina cliente a través de Syslog para analizarlos en la máquina host.
Con Syslog como protocolo estándar de registro basado en la red, puede transportar los mensajes de eventos de su máquina cliente o registrar datos a Graylog.
1. Haga clic en Sistema menú —> Entradas para acceder a las Entradas página, donde configurará una entrada Syslog UDP.
2. Busque y seleccione Syslog UDP en el cuadro de búsqueda, como se muestra a continuación, luego haga clic en Iniciar nueva entrada .
3. Por último, configure la nueva entrada Syslog UDP con lo siguiente y haga clic en Guardar en la parte inferior de la ventana emergente para mantener y aplicar los cambios:
- Seleccione su nodo del Nodo cuadro desplegable.
- Establecer el Título a cualquier palabra que desee. Para esta demostración, el título es syslog .
- Establecer la dirección de enlace a 0.0.0.0, para que Graylog pueda escuchar los eventos entrantes en cualquier lugar.
- Establecer el Puerto al puerto Syslog UDP
1514
como se define en docker-compose.yml archivo bajoSyslog UDP
.
A continuación, verá que la entrada UDP de Syslog se está ejecutando como parte de las entradas locales después de la configuración.
Configuración de Rsyslog para enviar datos de Syslog a Graylog
Configuró una entrada Syslog UDP para recibir datos enviados desde su máquina cliente, pero ¿cómo envía los datos a Graylog? ¡Rsyslog hará el truco!
Creará un archivo de configuración para que Rsyslog envíe sus datos de Syslog desde su máquina cliente a Graylog ejecutándose en su máquina host.
1. Cree un archivo de configuración en /etc/rsyslog.d directorio en su máquina cliente. Puede nombrar el archivo como prefiera, pero el archivo se llama 90-graylog.conf para esta demostración.
2. Luego, agregue la siguiente línea a 90-graylog.conf archivo, guarde los cambios y cierre el editor. Reemplazar 34.76.103.44
con la dirección IP de su máquina host donde se ejecuta Graylog.
La siguiente configuración envía datos Syslog (RSYSLOG_SyslogProtocol23Format
) desde la máquina host (@34.76.103.44
) a Graylog.
*.* @34.76.103.44:1514;RSYSLOG_SyslogProtocol23Format
3. Ejecute el siguiente comando para reiniciar rsyslog
para que los cambios surtan efecto.
sudo systemctl restart rsyslog
4. Vuelva a la interfaz web de Graylog y haga clic en Buscar menú para ver sus datos de Syslog recopilados cuidadosamente analizados de manera similar a la siguiente.
Conclusión
En este tutorial, aprendió a crear su propio sistema de gestión de registros centralizado con Graylog utilizando Docker y verificó correctamente los datos de Syslog recopilados de su máquina cliente.
En este punto, se ha dado cuenta de que recopilar y almacenar datos bien organizados en un entorno seguro para su análisis ya no será una molestia.
¿Qué otros registros puede recopilar con Graylog? ¿Quizás configurar un servidor web para enviar registros de NGINX a Graylog para su posterior análisis y análisis?