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 user
y password
):
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
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.yml
y asignamos la siguiente propiedad con su respectivo valor:
-
elasticsearch.url: "
http://ifacturacolombia.cloudapp.net
:9200"
-
elasticsearch.username: "user"
-
elasticsearch.password: "password"
22. Fin de la instalación. Para comenzar a utilizar elasticsearch, nos debemos dirigir a los apartados de Uso de Log4Net y ElasticSearch y Uso de ElasticSearch