Cómo instalar y configurar Graylog en Ubuntu 16.04. 1era Parte.

Siempre en nuestra red tendremos servidores y servicios generando logs (eventos de sistema), los cuales nos informan de errores y estadísticas de los mismos. En los entornos corporativos actuales, la localización de un error obliga a abrir ficheros de logs de gran tamaño, dificultando su manejo. Para ello, se crean softwares para recolectar, filtrar, ordenar y explotar los eventos generados por tu infraestructura.

Hoy les mostraremos uno de ellos, Graylog (anteriormente conocido como Graylog2) es una plataforma de administración de syslog de código abierto que le ayuda a recopilar, indexar y analizar syslog en una ubicación centralizada. El mismo proporciona un sistema unificado y centralizado de mensajes procedentes de diferentes fuentes: sistema operativo, servidores de aplicación, sistemas de información, etc. Dispone de un sistema de alertas y de búsqueda de histórico de logs usando ElasticSearch como base de datos de índices. Veamos cómo funciona:

En este tutorial no solo les mostrare como instalar un server Graylog sino que además como extra les mostrare como graficar sus resultados. Usaremos para ello a Grafana. Un software para visualización de datos y monitoreo con soporte para Graphite, InfluxDB, Prometheus, Elasticsearch y muchas más bases de datos. Debido al alto consumo de recursos de java para su uso con elasctic, decidí entonces separar los servicios con los que el Graylog funciona. Logrando así balancear la carga de nuestros proxmox.  Quedando una estructura como esta:

Como se observa en la figura, creare 3 contenedores:

  • Graylog
  • ElasticSearch
  • Grafana

De ser posible, ubicar el contenedor de elasticsearch en un proxmox diferente al del GrayLog y Grafana. Como consejo para no afectar el rendimiento y la carga, de las demás máquinas virtuales que están corriendo en el proxmox donde se encuentra el contenedor de elasticsearch. Recomiendo la inserción de un disco duro aparte en su proxmox que contendría al elasticsearch. Ahora que nos queda claro la estructura que usaremos procedemos a crearlas. Usare como plataforma de virtualización Proxmox por su fácil manejo y efectividad.

GRAFANA.

Creamos un contenedor (CT) en nuestro Proxmox con Ubuntu 16.04 como OS.

CPU: 2 Cores

RAM: 1 GB

SWAP: 2 GB

HDD: 8 GB

Seguido lo actualizaremos.

apt update
apt upgrade

Ahora instalaremos herramientas necesarias

apt install mc
apt install curl
apt install htop

Este proceso será el mismo para los 3 contenedores por lo tanto solo lo mostrare una sola vez. Configuramos nuestro CT para poder acceder por SSH. Editamos el file sshd_config:

nano /etc/ssh/sshd_config

Comentamos y agregamos:

# Authentication:
LoginGraceTime 120
#PermitRootLogin prohibit-password  (comentamos esto)
PermitRootLogin yes                 (agregamos esto)
StrictModes yes

Reiniciamos el CT y ya tendremos acceso por SSH .


Ahora les mostrare 2 métodos de instalar grafana:

a) Este método funciona en cuba que tenemos bloqueo de muchos sitios de internet. Nos bajamos de su sitio la última versión para Debian/Ubuntu (en la fecha de confección del tutorial era la versión 5.0.1)

root@grafana:~# wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana_4.6.3_amd64.deb
--2018-02-24 04:52:44--  https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana_4.6.3_amd64.deb
Connecting to 192.168.1.65:81... connected.
Proxy request sent, awaiting response... 200 OK
Length: 47314032 (45M) [application/x-debian-package]
Saving to: 'grafana_4.6.3_amd64.deb'

grafana_4.6.3_amd64.deb                    100%[======================================================================================>]  45.12M   216KB/s    in 3m 40s

2018-02-24 04:56:25 (210 KB/s) - 'grafana_4.6.3_amd64.deb' saved [47314032/47314032]

Instalamos dependencias:

root@grafana:~# sudo apt-get install -y adduser libfontconfig
Reading package lists... Done
Building dependency tree
Reading state information... Done
Note, selecting 'libfontconfig1' instead of 'libfontconfig'
adduser is already the newest version (3.113+nmu3ubuntu4).
libfontconfig1 is already the newest version (2.11.94-0ubuntu1.1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Puede que nos diga que ya las teníamos y que están actualizadas, pero son obligatorio tenerlas así que no está demás comprobar. Y ahora por ultimo instalamos grafana:

root@grafana:~# sudo dpkg -i grafana_4.6.3_amd64.deb
Selecting previously unselected package grafana.
(Reading database ... 16252 files and directories currently installed.)
Preparing to unpack grafana_4.6.3_amd64.deb ...
Unpacking grafana (4.6.3) ...
Setting up grafana (4.6.3) ...
Adding system user `grafana' (UID 110) ...
Adding new user `grafana' (UID 110) with group `grafana' ...
Not creating home directory `/usr/share/grafana'.
### NOT starting on installation, please execute the following statements to configure grafana to start automatically using systemd
 sudo /bin/systemctl daemon-reload
 sudo /bin/systemctl enable grafana-server
### You can start grafana-server by executing
 sudo /bin/systemctl start grafana-server
Processing triggers for systemd (229-4ubuntu21.1) ...
Processing triggers for ureadahead (0.100.0-19) ...
root@grafana:~#

b) Este método no funciona en cuba. Se basa en agregar el repositorio oficial de grafana.

Agregamos la siguiente línea al fichero /etc/apt/sources.list .

deb https://packagecloud.io/grafana/stable/debian/ jessie main

Ahora agregamos la llave del sitio Package Cloud . Que nos permitirá instalar paquetes firmados.

curl https://packagecloud.io/gpg.key | sudo apt-key add -      (sin proxy)

curl -x http://user:pass@ip_proxy:port -s https://packagecloud.io/gpg.key | sudo apt-key add -  (con proxy)

Actualizamos los repositorios con el source de grafana agregado y seguido instalamos.

sudo apt update
sudo apt install grafana

Ya tenemos nuestro grafana instalado ahora procedemos a ejecutarlo

a)Iniciar el servidor usando (init.d)

sudo service grafana-server start

Configuramos el grafana para inciar en el arranque del CT

sudo update-rc.d grafana-server defaults

b)Inciar el servidor usando (systemd)

systemctl daemon-reload
systemctl start grafana-server

Configuramos el grafana para inciar en el arranque del CT

sudo systemctl enable grafana-server.service

Una vez iniciado el server podremos acceder mediante el siguiente link

http://ip_del _server_Grafana:3000

Como credenciales usaremos admin tanto para el usuario como para su clave. En este punto salvaremos nuestro CT.

ELASTICSEARCH.

Creamos un contenedor (CT) en nuestro Proxmox con Ubuntu 16.04 como OS.

CPU: 2 Cores

RAM: 4 GB

SWAP: 8 GB (Si el tamaño de la swap no es suficiente se deberá modificar)

HDD: 40 GB (Se almacenarán sus índices aquí por lo que su tamaño deberá ser grande y a gusto del usuario)

Seguido lo actualizaremos.

apt update
apt upgrade

Ahora instalaremos herramientas necesarias

apt install mc
apt install curl
apt install htop

ElasticSearch usa java para su correcto funcionamiento, lo mismo podemos usar OpenJDK que Oracle Java. Les mostrare como instalar ambos y ustedes decidirán cual usar.

a)Version OpenJDK

root@elastic:~# apt install default-jre

root@elastic:~# java -version
openjdk version "1.8.0_151"
OpenJDK Runtime Environment (build 1.8.0_151-8u151-b12-0ubuntu0.16.04.2-b12)
OpenJDK 64-Bit Server VM (build 25.151-b12, mixed mode)

Simple y sencillo ya que es la versión libre de Linux de java.

b) Versión Oracle java

Nos bajamos el JRE 8 de ORACLE de cualquier otro sitio al que si le podamos llegar. Como, por ejemplo:

http://ftp.osuosl.org/pub/funtoo/distfiles/oracle-java/

Hasta la fecha de creación de este tutorial la versión mas actual es jre-8u162-linux-x64.tar.gz

tar -zxf jre-8u162-linux-x64.tar.gz -C /opt/

Debido a que hay muchas versiones del jre 8 y puede que ustedes consigan otra diferente a la que use, para hacer este tutorial más universal entonces renombraremos la carpeta creada.

De /opt/jre1.8.0_u162 a /opt/jre1.8.0

Procederemos ahora a instalar nuestro java:

update-alternatives --install /usr/bin/java java /opt/jre1.8.0/bin/java 100

update-alternatives --display java

Aquí vemos como quedarían estos comandos

root@elastic:~# tar -zxf jre-8u162-linux-x64.tar.gz -C /opt/
root@elastic:~# update-alternatives --install /usr/bin/java java /opt/jre1.8.0/bin/java 100
update-alternatives: using /opt/jre1.8.0/bin/java to provide /usr/bin/java (java) in auto mode
root@elastic:~# update-alternatives --display java
java - auto mode
  link best version is /opt/jre1.8.0/bin/java
  link currently points to /opt/jre1.8.0/bin/java
  link java is /usr/bin/java
/opt/jre1.8.0/bin/java - priority 100
root@elastic:~#

root@elastic:~# java -version
java version "1.8.0_162"
Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)
root@elastic:~#

Debido a que graylog 2.4.x no trabaja aun con la versión Elasticsearch 6.x. nos descargamos la última versión Elasticsearch 5.x que encontremos en su sitio. Por lo tanto, nos descargamos la versión Elasticsearch 5.6.8 de aquí. Una vez descargado (para cuba necesitaremos de un tor o tunnel) lo instalamos.

root@elastic:~# dpkg -i elasticsearch-5.6.8.deb
Selecting previously unselected package elasticsearch.
(Reading database ... 18428 files and directories currently installed.)
Preparing to unpack elasticsearch-5.6.8.deb ...
Creating elasticsearch group... OK
Creating elasticsearch user... OK
Unpacking elasticsearch (5.6.8) ...
Setting up elasticsearch (5.6.8) ...
Processing triggers for systemd (229-4ubuntu21.1) ...
Processing triggers for ureadahead (0.100.0-19) ...
root@elastic:~#

Nuestro ElasticSearch se instalara en /usr/share/elasticsearch/ su configuración estará en /etc/elasticsearch y su script de inicio en /etc/init.d/elasticsearch. Ahora nos aseguramos que elasticsearch inicie junto con nuestro ct.

root@elastic:~# sudo systemctl enable elasticsearch.service
Synchronizing state of elasticsearch.service with SysV init with /lib/systemd/systemd-sysv-install...
Executing /lib/systemd/systemd-sysv-install enable elasticsearch
Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.
root@elastic:~#

Inciamos el servcio y comprobamos si esta corriendo

root@elastic:~# service elasticsearch start
root@elastic:~# service elasticsearch status
* elasticsearch.service - Elasticsearch
   Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2018-02-25 18:23:38 UTC; 6s ago
     Docs: http://www.elastic.co
  Process: 554 ExecStartPre=/usr/share/elasticsearch/bin/elasticsearch-systemd-pre-exec (code=exited, status=0/SUCCESS)
 Main PID: 555 (java)
   CGroup: /system.slice/elasticsearch.service
           `-555 /usr/bin/java -Xms2g -Xmx2g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+AlwaysPreTouch -server

Feb 25 18:23:38 elastic systemd[1]: Starting Elasticsearch...
Feb 25 18:23:38 elastic systemd[1]: Started Elasticsearch.
lines 1-11/11 (END)

Para comprobar que todo este bien corremos esto:

root@elastic:~# curl -i -XGET 'localhost:9200/'
HTTP/1.1 200 OK
content-type: application/json; charset=UTF-8
content-length: 327

{
  "name" : "Vy7CwYj",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "j0VVxgmSTDmTNPeXKsBnRw",
  "version" : {
    "number" : "5.6.8",
    "build_hash" : "688ecce",
    "build_date" : "2018-02-16T16:46:30.010Z",
    "build_snapshot" : false,
    "lucene_version" : "6.6.1"
  },
  "tagline" : "You Know, for Search"
}
root@elastic:~#

Podemos ver el estado del nodo:

root@elastic:~# curl http://localhost:9200/_nodes/process?pretty
{
  "_nodes" : {
    "total" : 1,
    "successful" : 1,
    "failed" : 0
  },
  "cluster_name" : "elasticsearch",
  "nodes" : {
    "hR1Bz3p-T7iecVxWPlBoTA" : {
      "name" : "Graylog",
      "transport_address" : "127.0.0.1:9300",
      "host" : "127.0.0.1",
      "ip" : "127.0.0.1",
      "version" : "5.6.8",
      "build_hash" : "688ecce",
      "roles" : [
        "master",
        "data",
        "ingest"
      ],
      "process" : {
        "refresh_interval_in_millis" : 1000,
        "id" : 29245,
        "mlockall" : false
      }
    }
  }
}

Ahora configuraremos el elasticsearch . Primero optimizaremos el uso de la RAM del servicio elasticsearch.

nano /etc/default/elasticsearch 

y descomentar:

MAX_LOCKED_MEMORY=unlimited

Abrimos el fichero de configuracion de elasticsearch

nano /etc/elasticsearch/elasticsearch.yml

Activar mlockall quitando el #

    bootstrap.memory_lock: true

Como estamos usando distros de Linux modernas (Ubuntu 16 o Debian 9) las mismas usan systemd, por lo que las limitaciones del sistema deben ser especificadas vía systemd.

El fichero (/usr/lib/systemd/system/elasticsearch.service) contiene el limite que se aplica por defecto. Algunos lo editan agregandole esta linea

LimitMEMLOCK=infinity

En lo personal, no me gusto usar esa vía porque no me fue muy efectiva, ustedes pueden probarla si desean y ver si les da el resultado deseado. Yo prefiero anular el límite de memoria, creando un fichero llamado /etc/systemd/system/elasticsearch.service.d/override.conf para ello usaremos este comando que nos creara automáticamente el override.conf.

 sudo systemctl edit elasticsearch

Nos abrira automáticamente el editor y dentro agregamos esto:

[Service] 
LimitMEMLOCK=infinity

Una vez terminado, recargamos el demonio:

sudo systemctl daemon-reload
service elasticsearch restart

Comprobamos otra vez el nodo.

root@elastic:~# curl http://localhost:9200/_nodes/process?pretty
{
  "_nodes" : {
    "total" : 1,
    "successful" : 1,
    "failed" : 0
  },
  "cluster_name" : "elasticsearch",
  "nodes" : {
    "hR1Bz3p-T7iecVxWPlBoTA" : {
      "name" : "Graylog",
      "transport_address" : "127.0.0.1:9300",
      "host" : "127.0.0.1",
      "ip" : "127.0.0.1",
      "version" : "5.6.8",
      "build_hash" : "688ecce",
      "roles" : [
        "master",
        "data",
        "ingest"
      ],
      "process" : {
        "refresh_interval_in_millis" : 1000,
        "id" : 29380,
        "mlockall" : true
      }
    }
  }
}

Se aprecia ahora el cambio de la variable mlockall que ahora paso su estado a TRUE esto implica un menor consumo por parte del JVM en RAM. Volvemos a editar el fichero de configuración de elasticsearch para dejarlo listo y pueda recibir información del Graylog.

nano /etc/elasticsearch/elasticsearch.yml

# Use a descriptive name for the node:
#
node.name: Graylog

Y agregamos al final de todo lo siguiente

http.host: 0.0.0.0
http.cors.allow-origin: "*"
http.cors.enabled: true

Reinciamos el servicio.

systemctl daemon-reload
service elasticsearch restart

Ahora vamos a hacer amigable nuestra interacción con elasticsearch a través de Cerebro. Cerebro es una herramienta web de administración para elasticsearch usando Scala, Play Framework, AngularJS y Bootstrap. Vamos a su web nos fijamos en la última versión y la descargamos.

wget -t0 -c https://github.com/lmenezes/cerebro/releases/download/v0.7.2/cerebro-0.7.2.tgz

y extraemos el archivo descargado en /opt

#tar -zxf cerebro-0.7.2.tgz -C /opt

Si queremos ejecutarlo vamos directamente a la carpeta bin

#cd /opt/cerebro-0.7.2/bin
#./cerebro

Para acceder a cerebro solo debemos ingresar en nuestro navegador el siguiente link http://ip_del_elastic:9000

Donde dice Node Address poner nuestro elastic http://localhost:9200

Hagamos ahora que cerebro inicie al principio. Crearemos un servicio.

nano /etc/systemd/system/cerebro.service
#Dentro pondremos esto:

[Unit]
Description=Cerebro

[Service]
Type=simple
User=root
Group=root
ExecStart=/opt/cerebro-0.7.2/bin/cerebro "-Dpidfile.path=/var/run/cerebro.pid"
Restart=always
WorkingDirectory=/

[Install]
WantedBy=multi-user.target

Si tienen otro camino o version de cerebro cambiarlo. Entonces reiniciaremos el demonio y activamos el servicio.

root@elastic:~# systemctl daemon-reload
root@elastic:~# systemctl enable cerebro
Created symlink from /etc/systemd/system/multi-user.target.wants/cerebro.service to /etc/systemd/system/cerebro.service.
root@elastic:~# systemctl start cerebro

En este punto salvaremos nuestro CT.

GRAYLOG.

Creamos un contenedor (CT) en nuestro Proxmox con Ubuntu 16.04 como OS.

CPU: 2 Cores

RAM: 2 GB

SWAP: 4 GB

HDD: 8 GB

Seguido lo actualizaremos.

apt update
apt upgrade

Ahora instalaremos herramientas y dependencias necesarias

apt install apt-transport-https openjdk-8-jre-headless uuid-runtime pwgen mc htop libdigest-sha-perl

Como Graylog usa MongoDB como base de datos, procedemos a instalarlo de primero. Agregaremos la llave publica de su repositorio para instalar paquetes firmados.

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5 (sin proxy)

sudo apt-key adv --keyserver-options http-proxy=http://ip_proxy:port/ --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5  (con proxy)

Agregamos el repositorio de MongoDB a los nuestros

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list

Actualizamos:

root@graylog:~# apt update
Hit:1 http://archive.ubuntu.com/ubuntu xenial InRelease
Get:2 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [102 kB]
Get:3 http://archive.ubuntu.com/ubuntu xenial-security InRelease [102 kB]
Ign:4 https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 InRelease
Get:5 https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 Release [3457 B]
Get:6 https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 Release.gpg [801 B]
Get:7 https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6/multiverse amd64 Packages [4058 B]
Get:8 https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6/multiverse arm64 Packages [4044 B]
Fetched 217 kB in 3s (69.7 kB/s)
Reading package lists... Done
Building dependency tree
Reading state information... Done
All packages are up to date.
root@graylog:~#

Y procedemos a instalar MongoDB

apt install -y mongodb-org

Iniciamos nuestro servicio:

sudo systemctl start mongod

Hacemos autoarrancable el servicio

root@graylog:~# sudo systemctl enable mongod
Created symlink from /etc/systemd/system/multi-user.target.wants/mongod.service to /lib/systemd/system/mongod.service.
root@graylog:~#

Continuamos con la instalacion de GrayLog y lo hacemos agregando su repositorio a nuesto listado de fuentes.

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

Instalamos:

sudo dpkg -i graylog-2.4-repository_latest.deb

Actualizamos e instalamos finalmente Graylog:

sudo apt update 
sudo apt install graylog-server

Haremos una salva en este punto de nuestro contenedor.

Ahora configuraremos la clave de admin(root) y la clave secreta, ambas seran usadas para levantar nuestro servidor GrayLog.

root@graylog:~# SECRET=$(pwgen -s 96 1)
root@graylog:~# cp /etc/graylog/server/server.conf /etc/graylog/server/server.conf.orig
root@graylog:~# sudo -E sed -i -e 's/password_secret =.*/password_secret = '$SECRET'/' /etc/graylog/server/server.conf

Nuestra llave secreta quedara directamente registrada en la configuracion del servidor de GrayLog. Ahora le pasaremos la clave de admin.

root@graylog:~# PASSWORD=$(echo -n password | shasum -a 256 | awk '{print $1}')
root@graylog:~# sudo -E sed -i -e 's/root_password_sha2 =.*/root_password_sha2 = '$PASSWORD'/' /etc/graylog/server/server.conf
root@graylog:~#

Donde password es la clave que le asignaremos al usuario admin del Graylog, y quedara directamente reflejado en su configuración.

Editamos la configuración del servidor y nos aseguramos de ver si ambas claves se insertaron bien

nano /etc/graylog/server/server.conf

Como se aprecia en la figura ambas claves estan bien establecidas.

Configuramos otros aspectos de interes:

# The time zone setting of the root user. See http://www.joda.org/joda-time/timezones.html for a list of valid time zones.
# Default is UTC
root_timezone = America/Havana

# REST API listen URI. Must be reachable by other Graylog server nodes if you run a cluster.
# When using Graylog Collectors, this URI will be used to receive heartbeat messages and must be accessible for all collectors.
rest_listen_uri = http://0.0.0.0:9000/api/

# Web interface listen URI.
# Configuring a path for the URI here effectively prefixes all URIs in the web interface. This is a replacement
# for the application.context configuration parameter in pre-2.0 versions of the Graylog web interface.
web_listen_uri = http://0.0.0.0:9000/

# List of Elasticsearch hosts Graylog should connect to.
# Need to be specified as a comma-separated list of valid URIs for the http ports of your elasticsearch nodes.
# If one or more of your elasticsearch hosts require authentication, include the credentials in each node URI that
# requires authentication.
#
# Default: http://127.0.0.1:9200
elasticsearch_hosts = http://ip_elasticsearch:9200/

# How many Elasticsearch shards and replicas should be used per index? Note that this only applies to newly created indices.
# ATTENTION: These settings have been moved to the database in Graylog 2.2.0. When you upgrade, make sure to set these
# to your previous settings so they will be migrated to the database!
elasticsearch_shards = 1
elasticsearch_replicas = 0

# The email address of the root user.
# Default is empty
root_email = [email protected]

# REST API transport address. Defaults to the value of rest_listen_uri. Exception: If rest_listen_uri
# is set to a wildcard IP address (0.0.0.0) the first non-loopback IPv4 system address is used.
# If set, this will be promoted in the cluster discovery APIs, so other nodes may try to connect on
# this address and it is used to generate URLs addressing entities in the REST API. (see rest_listen_uri)
# You will need to define this, if your Graylog server is running behind a HTTP proxy that is rewriting
# the scheme, host name or URI.
# This must not contain a wildcard address (0.0.0.0).
rest_transport_uri = http://ip_graylog:9000/api/

Hacemos autoarrancable nuestro servicio:

sudo systemctl enable graylog-server.service

Inciamos el servicio:

sudo systemctl start graylog-server.service

Ya podemos acceder a nuestra web http://ip_graylog:9000 y usaremos de credenciales admin y la password que definimos anteriormente.

 De forma predeterminada, la interfaz web de Graylog escucha a localhost por el puerto 9000 y la API escucha por el puerto 9000 con URL / api. Como un extra, les mostrare como configurar Nginx como proxy inverso para que la aplicación pueda tener acceso a través del puerto HTTP estándar y agregarle seguridad con certificados. Comenzamos instalando Nginx:

apt install nginx

Crearemos una carpeta en /etc/ssl/ llamada gray donde alojaremos nuestros certificados. Luego editamos nuestra configuracion de Nginx.

nano /etc/nginx/sites-available/default

Borraremos su contenido y pegamos este:

server
{
    listen      443 ssl spdy;
    server_name graylog.midominio.cu;
    # <- your SSL Settings here!
    ssl_certificate /etc/ssl/gray/gray.crt;
    ssl_certificate_key /etc/ssl/gray/gray.key;
    ssl_trusted_certificate /etc/ssl/gray/gray.crt;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;

    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 https://$server_name/api;
      proxy_pass       http://127.0.0.1:9000;
    }
}

Reinciamos el servicio de Nginx y lo hacemos autoarrancable al inicio:

sudo systemctl restart nginx
sudo systemctl enable nginx

Ahora podemos acceder a la web de una forma mas sencilla y segura.

En este punto salvaremos nuestro CT.

Bueno como podemos ver en esta 1era parte armamos nuestro servidor Graylog y lo dejamos listo para empezar a configurarlo. En los siguientes tutoriales les mostrare como recolectar los logs más importantes de nuestra red para su análisis y su grafiado, para un mejor entendimiento de nuestra infraestructura.

alex out

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuar!

Promedio de puntuación 4.2 / 5. Recuento de votos: 5

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Sobre Alexander Rivas Alpizar 61 artículos
Administrador de Redes IDEAR Cienfuegos

9 comentarios

  1. Google Chrome 87.0.4280.66 Google Chrome 87.0.4280.66 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36

    Me pregunto si existe alguna forma de aumentar el Límite de tráfico diario de los 5 con que viene limitado?

  2. Firefox 60.0 Firefox 60.0 Windows 8.1 Windows 8.1
    Mozilla/5.0 (Windows NT 6.3; rv:60.0) Gecko/20100101 Firefox/60.0

    Excelente tutorial que funciono a las mil maravillas, ahora yo hice un upgrade de estos contenedores de Debian 10 y repase las configuraciones y comandos y me fijo que con el comando curl http://localhost:9200/_nodes/process?pretty me devuelve el «mlockall» : false

    Esta respuesta es a pesar de tener identicamente los ficheros nano /etc/default/elasticsearch con MAX_LOCKED_MEMORY=unlimited , nano /etc/elasticsearch/elasticsearch.yml con bootstrap.memory_lock: true y /etc/systemd/system/elasticsearch.service.d/override.conf con LimitMEMLOCK=infinity

    Queria saber si hay alguna solucion para que me salga «mlockall» : true como estaba antes?

  3. Google Chrome 71.0.3578.98 Google Chrome 71.0.3578.98 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/71.0.3578.98 Safari/537.36

    Hi,

    I was just dropping in a quick line to know, if I could send some great article ideas your way for a guest post at your website ?

    If you like my suggested ideas, I can then provide you high-quality FREE CONTENT/ARTICLE. In return, I would expect just a favor of a backlink from within the main body of the article.

    Do let me know if I can interest you with some great topic ideas?

    Best Regards,

    Junaid Ali Qureshi

  4. Google Chrome 71.0.3578.98 Google Chrome 71.0.3578.98 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36

    Alexander Rivas, can you please share your email address. I am desperately trying to reach you.

    • Firefox 64.0 Firefox 64.0 Windows 10 x64 Edition Windows 10 x64 Edition
      Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0

      Hi john, give me ur email n ill contact with u. Thanx 4 reading my tutorial.

  5. Firefox 61.0 Firefox 61.0 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0

    Hola,
    Tengo una duda sobre como cambiar el directorio donde se almacenan los logs. Resulta que yo tengo un VM con Centos donde está funcionando tanto Graylog como Elasticsearch y me estoy quedando sin espacio. Me gustaría cambiar el emplazamiento de los logs por los de una carpeta compartida de la máquina.
    ¿Esto es posible?
    Gracias y buen trabajo.
    I


  6. Warning: Undefined array key 1 in /var/www/html/sysadminsdecuba/wp-content/plugins/wp-useragent/wp-useragent-detect-os.php on line 668
    Firefox 59.0 Firefox 59.0 Ubuntu x64 Ubuntu x64
    Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:59.0) Gecko/20100101 Firefox/59.0

    Muy bueno, pero aclarame los pros y contras de este párrafo:

    «De ser posible, ubicar el contenedor de elasticsearch en un proxmox diferente al del GrayLog y Grafana. Como consejo para no afectar el rendimiento y la carga, de las demás máquinas virtuales que están corriendo en el proxmox donde se encuentra el contenedor de elasticsearch. Recomiendo la inserción de un disco duro aparte en su proxmox que contendría al elasticsearch. »

    Saludos…

    • Firefox 60.0 Firefox 60.0 Windows 10 x64 Edition Windows 10 x64 Edition
      Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0

      Es muy sencillo, elasticsearch y graylog ambos requieren de java, entonces el consumo seria muy elevado eso sin contar de que el IO delay del HDD seria elevado, ya que estaria recopilando sin parar y parseando logs. Ya hemos comprobado que al separarlos y sobretodo aislar el elastic a un HDD distinto cae drasticamente l acarga en el proxmox, si quieres compruebalo tu mismo en un lab o en tus server veras el cambio
      alex out

  7. Firefox 59.0 Firefox 59.0 Windows 8.1 x64 Edition Windows 8.1 x64 Edition
    Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0

    Saludos.

    Hasta que por fin los publicaste. Muy buenos, felicidades, hermano.

    Un detalle: En el caso del inciso b del epígrafe dedicado a la instalación de Grafana, se puede lograr si, y sólo si, tienes una réplica local del repositorio de Grafana en tu red, que es mi caso. 🙂

    No obstante, muchísimas gracias, Chamaco.

1 Trackback / Pingback

  1. Nextcloud sobre nginx y postgreSQL + fulltextsearch + paquetes ofimáticos collabora o onlyoffice-ds sobre docker – Blackhold

Dejar una contestacion

Tu dirección de correo electrónico no será publicada.


*