Instalación Elasticsearch en Windows

 Fuentes:

https://www.ulyaoth.net/tutorials/install-logstash-and-kibana-on-a-windows-server.html

https://www.elastic.co/guide/en/elasticsearch/reference/current/settings.html

https://github.com/beshu-tech/readonlyrest-docs/blob/master/elasticsearch.md 


Esta guía busca dar un buen ejemplo de cómo instalar y configurar en un entorno Windows las herramientas Elasticsearch y Kibana.

1. Es necesario descargar los siguientes insumos (Los enlaces tienen la versión a la fecha, estaría bien descargar la última versión que podamos encontrar):

Elasticsearch: https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.3.zip

Kibana:  https://artifacts.elastic.co/downloads/kibana/kibana-6.2.3-windows-x86_64.zip

NSSM (Administrador de servicios ): https://nssm.cc/release/nssm-2.24.zip

(NSSM es necesario para que "Kibana" pueda ejecutarse como servicios de Windows.)

ReadonlyRest (Plugin de elasticsearch para autenticación básica): https://readonlyrest.com/download.html  


2. Es necesario crear la estructura de carpetas donde tendremos ubicados los archivos preparados para la instalación. Se propone la siguiente estructura para la presente guía:

  • C:\Loghost\elasticsearch-6.2.3
  • C:\Loghost\kibana-6.2.3
  • C:\Loghost\nssm
  • C:\Loghost\nssm

3. Debemos tener instalada la última versión del JDK de JAVA o instalarla en caso de no tenerla   ( http://www.oracle.com/technetwork/java/javase/downloads/index.html )


4. Agregaremos la variable de entorno JAVA_HOME apuntando al JDK que recién hemos instalado. Debemos ver algo como:

5. En el Administrador de IIS, crearemos un nuevo sitio web para Kibana apuntando a la ruta física donde hemos ubicado previamente el paquete de kibana ( C:\Loghost\kibana-6.2.3 )

6. Kibana usa el puerto 5601, por defecto. Éste debe tener salida a internet (si así se desea). En el archivo de configuración de kibana ( C:\Loghost\kibana-6.2.3\ ) podremos modificar este puerto (recomendable por seguridad) con la propiedad:

  • server.port: 5601

Adicional, en caso de que usemos kibana en internet, debemos configurar el host puesto que por defecto llega configurado localhost. La propiedad debe quedar así:

  • server.host: "0.0.0.0"

Con esta propiedad configurada de esta manera, podremos acceder a kibana directamente con el dominio de acceso al servidor y el puerto correspondiente. por ejemplo, para nuestro servidor de DEV   http://ifacturacolombia.cloudapp.net  :5601/ 


7. Debemos adicionar un path físico para guardar los logs de kibana y poder realizar auditoría o análisis de errores cuando se requiera. En el archivo de configuración de kibana (C:\Loghost\kibana-6.2.3\) podremos modificar ruta con la propiedad:

  • logging.dest: c:/Loghost/kibana-logs

8. Pasamos ahora a la instalación de Elasticsearch. Para ello es necesario abrir una consola de powershell y ubicarnos en la carpeta bin que hay dentro del paquete de elasticsearch que hemos descargado en los primeros pasos de esta guía. Realizaremos la instalación dentro de esta carpeta ejecutando los siguientes comandos:

  • .\elasticsearch-service install

Veremos algo así:

9. Ahora realizaremos la configuración del servicio instalado ejecutando en el mismo powershell (y ubicados en la misma carpeta bin) el siguiente comando:

  • .\elasticsearch-service manager

Con este comando se nos abrirá una ventana de administración del servicio como la siguiente:

Debemos verificar:

  • Que en el tipo de inicio (Startup type) este como Automático (Automatic). Para que, independientemente de que se reinicie el servidor, el servicio esté siempre ejecutándose.
  • La cantidad de memoria que reservará y usará Elasticsearch. Esto lo veremos en la pestaña "Java". Es indispensable que estos parámetros de memoria estén sincronizados con la configuración que hay en el archivo jvm.options ( C:\Loghost\elasticsearch-6.2.2\config\jvm.options ) y así evitar errores en el levantamiento del servicio. Es recomendable ser generoso al momento de asignar memoria pues de esto dependerá la capacidad de procesamiento tanto en la entrada como en la salida de información de elasticsearch y kibana. Para el ejemplo, hemos configurado 512MB debido a saturación de memoria en el servidor DEV (no se recomienda esta configuración).



9. Las propiedades de configuración que están ubicadas en el archivo C:\Loghost\elasticsearch-6.2.2\config\elasticsearch.yml

- Almacenamiento de información interna de la aplicación: 

  • path.data: C:/Loghost/elasticsearch-data

- Ruta de logs para elasticsearch

  • path.logs: C:/Loghost/elasticsearch-logs

- Dirección del host (si tiene sa lida a internet)

  • network.host: 0.0.0.0

- Listado de host permitidos

  • discovery.zen.ping.unicast.hosts: ["0.0.0.0"]


10. Ahora instalaremos el plugin encargado de asignar autenticación básica a nuestro elasticsearch. Para ello, descargamos el plugin en https://readonlyrest.com/download.html    y lo  ubicamos en el directorio que se indicó al inicio de la guía ( C:\Loghost)


11. En la consola powershell ejecutamos el siguiente comando ubicados en la carpeta bin del elasticsearch:

  • C:\Loghost\elasticsearch-6.2.2\bin> .\elasticsearch-plugin install file:///C:/Loghost/readonlyrest-1.16.17_es6.2.2.zip


12. En la carpeta config del paquete de elasticsearch, crearemos un archivo nuevo llamado readonlyrest.yml (C:\Loghost\elasticsearch-6.2.2\config\readonlyrest.yml) y adicionaremos la siguiente configuración con las credenciales correspondientes (para el ejemplo, tenemos las palabras  userpassword):

readonlyrest:

 access_control_rules:


 # We trust Kibana's server side process, full access granted via HTTP authentication

 - name: "::KIBANA-SRV::"

   # auth_key is good for testing, but replace it with `auth_key_sha256`!

   auth_key: admin:!QAZxsw2

   type: allow

   verbosity: error # don't log successful request


 - name: "::RO log access::"

   kibana_access: rw

   groups: [ "ro-users" ]

   indices: [ ".kibana", "*" ]


 - name: "::RW log access::"

   kibana_access: rw

   type: allow

   groups: [ "rw-users" ]

   indices: [ ".kibana", "*", "logstash-*" ]


 - name: "workaround"

   actions: [ "indices:data/read/field_caps*" ]


 users:


 - username: logs

   auth_key: logs:logs

   groups: [ "ro-users" ]


 - username: admin

   auth_key: admin:s3cr3t

   groups: [ "rw-users" ] 


13. Para tener una mejor administración de los logs de este plugin, debemos adicionar la siguiente configuración en el archivo log4j2.properties ubicado en la carpeta config del elasticsearch (C:\Loghost\elasticsearch-6.2.2\config\log4j2.properties).

#Plugin readonly rest separate access logging file definition

appender.access_log_rolling.type = RollingFile

appender.access_log_rolling.name = access_log_rolling

appender.access_log_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_access.log

appender.access_log_rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c] %marker%.-10000m%n

appender.access_log_rolling.layout.type = PatternLayout

appender.access_log_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_access-%d{yyyy-MM-dd}.log

appender.access_log_rolling.policies.type = Policies

appender.access_log_rolling.policies.time.type = TimeBasedTriggeringPolicy

appender.access_log_rolling.policies.time.interval = 1

appender.access_log_rolling.policies.time.modulate = true


logger.access_log_rolling.name = org.elasticsearch.plugin.readonlyrest.acl

logger.access_log_rolling.level = info

logger.access_log_rolling.appenderRef.access_log_rolling.ref = access_log_rolling

logger.access_log_rolling.additivity = false


# exclude kibana, beat and logstash users as they generate too much noise

logger.access_log_rolling.filter.regex.type = RegexFilter

logger.access_log_rolling.filter.regex.regex = .*USR:(kibana|beat|logstash),.*

logger.access_log_rolling.filter.regex.onMatch = DENY

logger.access_log_rolling.filter.regex.onMisMatch = ACCEPT 

14. Ahora debemos iniciar el servicio de elasticsearch en el Botón  Start  de la ventana de configuración del servicio y posteriormente confirmar con  OK las modificaciones. En caso de que hayamos cerrado la ventana de configuración, tan sólo es volver a ejecutar el comando  .\elasticsearch-service manager en nuestra consola powershell.

1 5. En este momento ya podemos verificar la conexión al abrir el navegador y entrar al puerto 5601

16. Ahora usaremos el NSSM descargado al inicio de la guía para la creación del servicio de kibana. Debemos abrir una consola de powershell y ejecutar el siguiente comando:

  • C:\Loghost\nssm-2.24\win64\nssm install Kibana


17. En la ventana que se nos ha abierto, en la pestaña  Application , debemos configurar algunos campos para la creación del servicio:

  • Ruta:  C:\Loghost\kibana-6.2.3\bin\kibana.bat 
  • Directorio de inicio:  C:\Loghost\kibana-6.2.3\bin 


18. Ahora, en la pestaña  Details, configuraremos los siguientes campos:

  • Display name: Kibana
  • Description: Kibana lets you visualize your Elasticsearch data and navigate the Elastic Stack
  • Startup type: Automatic
  • Service name: Kibana


19. Ahora, en la pestaña Dependencies, agregaremos la dependencia con elasticsearch:

  • elasticsearch-service-x64


20. Antes de confirmar la intalación de kibana, debemos ir al archivo de configuración y asignar el enlace del elasticsearch con la URL final con la que ha quedado y las credenciales asignadas en el punto 12 para el archivoreadonlyrest.yml. Para ello nos dirijimos al archivo C:\Loghost\kibana-6.2.2\config\kibana.ymly asignamos la siguiente propiedad con su respectivo valor:

21. Por último, click al botón  Install service 

22. Fin de la instalación. Para comenzar a utilizar elasticsearch, nos debemos dirigir a los apartados de  Uso de Log4Net y ElasticSearch  Uso de ElasticSearch