En este segundo tutorial prepararemos las condiciones para procesar los logs de los servidores que queremos analizar y para ello nos centraremos en la instalación y configuración inicial de Logstash y porteriormente de Grafana.
Nuestra Configuración:
- Servidor Logstash. Se encargará de filtrar y generar los campos necesarios para generar nuestros dashboards porsteriormente.
- Servidor Grafana. Nos permitirá crear los dashboard para mostrar nuestros datos recopilados en Elasticsearch.
Estos son los requisitos previos para este tutorial:
- Debian 9: la versión más reciente
Logsasth:
- 2 GB de RAM
- Java 1.8.x
- Logstash 5.4.0
- curl
Grafana:
- 2 GB de RAM
- Grafana 4.6.3
Ejecute una actualización del sistema operativo para asegurarse de estar obteniendo las aplicaciones más recientes.
Nota: En nuestro caso usamos servidores virtuales LXC (linux containers) en Proxmox 5.1.
Escenario:
logstash.dominio.com ip: 192.168.1.166
grafana.dominio.com ip: 192.168.1.167
En caso que no tengamos server DNS que nos resuelva estos equipos o que falle nuestro servidor DNS siempre es mejor declarar estos equipos en /etc/hosts para que nuestro clúster no tenga fallas o simplemente usar números ips en nuestras configuraciones.
#nano /etc/hosts
Tanto en el servidor Logstash como en el Grafana agregamos los nodos del cluster elasticsearch.
192.168.1.160 es-master-01.dominio.com es-master-01
192.168.1.161 es-master-02.dominio.com es-master-02
192.168.1.162 es-master-03.dominio.com es-master-03
192.168.1.163 es-data-01.dominio.com es-data-01
192.168.1.164 es-data-02.dominio.com es-data-02
192.168.1.165 es-data-03.dominio.com es-data-03
Empecemos por configurar el servidor logstash.
Instalar Java 1.8.
Haremos la instalación de Java de forma manual. Nos descargamos del sitio de oracle el JDK o el JRE actual y procedemos de la siguente manera.
El directorio /opt está reservado para todos los paquetes de software y complementos que no forman parte de la instalación predeterminada. Crea un directorio para tu instalación JDK(JRE):
JRE:
#mkdir /opt/jre
y extrae java en el directorio:
#tar -zxf jre-8u131-linux-x64.tar.gz -C /opt/jre
Verifique que el archivo se haya extraído en el directorio /opt/jdk o /opt/jre.
#ls /opt/jre
Configuración de la JVM predeterminada. En nuestro caso, el ejecutable de Java se encuentra en /opt/jdk/jdk1.8.0_131/bin/java o en /opt/jre/jre1.8.0_131/bin/java dependiendo de lo que instalamos inicialmente. Para configurarlo como la JVM predeterminada en su máquina, ejecute:
#update-alternatives --install /usr/bin/java java /opt/jre/jre1.8.0_131/bin/java 100
JDK:
#mkdir /opt/jdk
#tar -zxf jdk-8u131-linux-x64.tar.gz -C /opt/jdk
#ls /opt/jdk
#update-alternatives --install /usr/bin/javac javac /opt/jdk/jdk1.8.0_131/bin/javac 100
Verificando tu instalación de java.
#java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
Nota: Sugerimos JRE en virtud de ahorrar recursos ya que JDK esta orientada para desarrollo.
Ya teniendo java instalado vamos a descargarnos el logstash
#wget -t0 -c https://artifacts.elastic.co/downloads/logstash/logstash-5.4.0.deb
Ya descargado procedemos a instalarlo.
#dpkg -i logstash-5.4.0.deb
Configuramos el servicio de logstash para que se inicie automáticamente.
#systemctl daemon-reload
#systemctl enable logstash.service
Parece que hay un pequeño bug que nos mostrará varios errores en los logs y que corregiremos antes de nada ejecutando este comando.
#touch /etc/logstash/conf.d/empty.conf
Logtash necesita un certificado SSL para poder ser verificado por los clientes que le envían información, podremos crear un certificado SSL de la siguiente manera:
#cd /etc/logstash/
#openssl req -subj /CN=dominio.com -x509 -days 3650 -batch -nodes -newkey rsa:4096 -keyout logstash.key -out logstash.crt
Donde /CN es nuestro duminio en cuestión.
La clave privada debe estar en formato PKCS8, así que la convertimos usando el siguiente comando.
#openssl pkcs8 -in logstash.key -topk8 -nocrypt -out logstash.key.pem
Reiniciamos el servicio de logstash
#service logstash restart
Vamos ahora a preparar logstash para que procese la geolocalización IP y para que en el proceso de filtrado almacene en Elasticsearch dicha geolocalización IP.
Creamos el directorio donde alojaremos la base datos
#mkdir /etc/logstash/geoip
y descargamos la base de datos
#wget -t0 -c http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz
Lo descompactamos
#tar -xf GeoLite2-City.tar.gz
Y movemos el fichero de la carpeta GeoLite2-City_(day) para /etc/logstash/geoip donde «day» es la fecha de la base en que se actualizo la base de datos.
#mv GeoLite2-City_(day)/GeoLite2-City.mmdb /etc/logstash/geoip
Ya tenemos la base de datos de geolocalización lista y logstash preparado, pero aún no esta filtrando nada y eso lo veremos en la próxima parte.
Ahora en el servidor de Grafana.
Nos descargamos la última version de grafana.
#wget -t0 -c https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana_4.6.3_amd64.deb
Y procedemos a instalarlo:
#dpkg -i grafana_4.6.3_amd64.deb
#systemctl daemon-reload
#systemctl enable grafana-server.service
Reiniciamos el servicio de grafana
#service grafana restart
Antes de iniciar Grafana por primera vez, configure el usuario administrador y la contraseña en /etc/grafana/grafana.ini. De lo contrario, la contraseña predeterminada será admin y abrimos en el navegador con la siguiente dirección http://grafana.dominio.com:3000
Nodos Master del Cluster Elasticsearch
Teniendo grafana ya funcional vamos a configurar el fichero de elasticsearch para que permita conexiones a los indices desde otra dirección ip y no solo desde localhost. Haremos lo siguiente en todos los nodos master.
#nano /etc/elasticsearch/elasticsearch.yml
Añadimos al final del fichero lo siguiente:
http.host: 0.0.0.0
http.cors.allow-origin: "*"
http.cors.enabled: true
Reiniciamos el servicio de elasticsearch.
#service elasticsearch restart
En los proximos artículos veremos como conectar grafana a elasticsearch.
Dejar una contestacion