0x0i.elasticsearch

Rol de Ansible :mag_right: :high_brightness: Elasticsearch
Contenido
- Plataformas soportadas
 - Requisitos
 - Variables del Rol
 - Dependencias
 - Ejemplo de Playbook
 - Licencia
 - Información del Autor
 
Rol de Ansible que instala y configura Elasticsearch, un motor de búsqueda y análisis distribuido en tiempo real.
Plataformas Soportadas:
* Debian
* Redhat (CentOS/Fedora)
* Ubuntu
Requisitos
Se requiere que la utilidad unzip/gtar esté instalada en el host de destino. Consulta las notas del módulo unarchive de Ansible para más detalles.
Variables del Rol
Las variables están disponibles y organizadas según las siguientes etapas de aprovisionamiento de software y máquina:
- instalación
 - configuración
 - lanzamiento
 - desinstalación
 
Instalación
elasticsearch puede ser instalado utilizando sistemas de gestión de paquetes del SO (por ejemplo apt, yum) o archivos comprimidos (.tar, .zip) descargados y extraídos de varias fuentes.
Las siguientes variables se pueden personalizar para controlar varios aspectos de este proceso de instalación, desde la versión del software y la ubicación de las binarios hasta el directorio de instalación donde se almacenan:
elasticsearch_user: <nombre-de-usuario-del-servicio> (predeterminado: elasticsearch)
- usuario y grupo de servicio dedicados utilizados por 
elasticsearchpara separación de privilegios (consulta aquí para más detalles) 
install_type: <package | archive> (predeterminado: archive)
- package: soportado por distribuciones Debian y Redhat, la instalación de paquetes de Elasticsearch obtiene el paquete especificado del respectivo repositorio de gestión de paquetes.
- Ten en cuenta que el directorio de instalación es determinado por el sistema de gestión de paquetes y actualmente se predetermina a 
/usr/sharepara ambas distribuciones. Intentar establecer y ejecutar una instalación de paquete en otras distribuciones de Linux fallará debido a la falta de soporte. 
 - Ten en cuenta que el directorio de instalación es determinado por el sistema de gestión de paquetes y actualmente se predetermina a 
 - archive: compatible con formatos tar y zip, los binarios de instalación archivados pueden obtenerse de archivos comprimidos locales y remotos, ya sea del sitio oficial de descargas/releases o de aquellos generados de fuentes de desarrollo/personales.
 
install_dir: </ruta/al/directorio/de/instalación> (predeterminado: /opt/elasticsearch)
- ruta en el host de destino donde se deben extraer los binarios de 
elasticsearch. 
archive_url: <ruta-o-url-al-archivo-archivado> (predeterminado: ver defaults/main.yml)
- dirección de un archivo comprimido tar o zip que contiene los binarios de 
elasticsearch. Este método soporta técnicamente la instalación de cualquier versión disponible deelasticsearch. Los enlaces a versiones oficiales se pueden encontrar aquí. 
archive_checksum: <ruta-o-url-al-checksum> (predeterminado: ver defaults/main.yml)
- dirección de un archivo de checksum para verificar la integridad de los datos del archivo comprimido especificado. Aunque se recomienda y generalmente se considera una buena práctica, especificar un checksum no es obligatorio y puede desactivarse proporcionando una cadena vacía (
'') para su valor. 
package_url: <ruta-o-url-al-paquete> (predeterminado: ver defaults/main.yml)
- dirección de un paquete Debian o RPM que contiene la fuente y los binarios de 
elasticsearch. Ten en cuenta que la disposición de la instalación es determinada por los sistemas de gestión de paquetes. Consulta la documentación oficial de Elastic para los detalles de instalación tanto de RPM como de Debian. 
package_checksum: <ruta-o-url-al-checksum> (predeterminado: ver vars/...)
- dirección de un archivo de checksum para verificar la integridad de los datos del paquete especificado. Aunque se recomienda y generalmente se considera una buena práctica, especificar un checksum no es obligatorio y puede desactivarse proporcionando una cadena vacía (
'') para su valor. 
checksum_format: <string> (predeterminado: ver sha512)
- algoritmo de hash usado para la verificación de archivos asociado al checksum del archivo comprimido o paquete especificado. Consulta aquí para más información sobre checksums y hashes criptográficos.
 
Config
La configuración de elasticsearch se expresa en 3 archivos:
elasticsearch.ymlpara configurar Elasticsearchjvm.optionspara configurar los ajustes de JVM de Elasticsearchlog4j2.propertiespara configurar el registro de Elasticsearch
Estos archivos se encuentran en el directorio de configuración, que como se mencionó anteriormente, depende de si la instalación es de una distribución de archivo comprimido (tar.gz o zip) o de una distribución de paquete (paquetes Debian o RPM).
Para más detalles y para tener una idea de cómo debería lucir cada config, consulta la documentación de configuración oficial de Elastic.
Las siguientes variables se pueden personalizar para gestionar la ubicación y el contenido de estos archivos de configuración:
config_dir: </ruta/al/directorio/de/configuración> (predeterminado: /opt/elasticsearch/config)
- ruta en el host de destino donde se deben almacenar los archivos de configuración mencionados anteriormente
 
managed_configs: <lista de configuraciones a gestionar> (predeterminado: ver defaults/main.yml)
lista de archivos de configuración a gestionar con este rol de Ansible
Los valores permitidos son cualquier combinación de:
elasticsearch_configjvm_optionslog4j_properties
config: <hash-de-ajustes-de-elasticsearch> predeterminado: {}
- El archivo de configuración debe contener ajustes que sean específicos del nodo (como node.name y paths), o ajustes que un nodo requiere para poder unirse a un clúster.
 
Cualquier par clave-valor de ajuste soportado por elasticsearch debería poder expresarse dentro del hash y generarse correctamente dentro del config YAML asociado. Los valores pueden expresarse en la típica forma yaml/ansible (por ejemplo, cadenas, números y valores verdadero/falso deberían escribirse tal como están y sin comillas).
Las claves del hash config pueden ser anidadas o delimitadas por un '.':
config:
  node.name: ejemplo-nodo
  path:
    logs: /var/log/elasticsearch
Una lista de ajustes configurables se puede encontrar aquí.
jvm_options: <lista-de-diccionarios> predeterminado: []
- El método preferido para configurar las opciones JVM (incluidos los parámetros del sistema y las banderas JVM) es a través del archivo de configuración jvm.options. El archivo consiste en una lista delimitada por líneas de argumentos que se usan para modificar el comportamiento de la JVM de Elasticsearch.
 
Aunque rara vez deberías necesitar cambiar las opciones de la Máquina Virtual de Java (JVM); hay situaciones (por ejemplo, asignación insuficiente de tamaño de pila) en las que pueden ser necesarios ajustes. Cada línea a generarse en el archivo puede expresarse como una entrada dentro de una lista de diccionarios, contenida dentro de jvm_options, que consiste en un hash compuesto de un campo comment opcional y una lista de argumentos asociados para configurar:
jvm_options:
  - comment: establecer el tamaño mínimo y máximo de la pila de JVM (al mismo valor)
    arguments:
      - '-Xms1g'
      - '-Xmx1g'
Una lista de argumentos disponibles se puede encontrar aquí.
log4j_properties: <lista-de-diccionarios> predeterminado: []
- Elasticsearch utiliza el sistema de registro Apache log4j 2 para organizar y gestionar cada una de sus instalaciones de registro y subcomponentes. Por lo tanto, se pueden aplicar configuraciones individuales a nivel global o por componente definiendo ajustes de configuración asociados con varios aspectos del proceso de registro. Por defecto, log4j 2 carga un archivo 
log4j2.propertiesque consiste en propiedades delimitadas por líneas que expresan un par clave-valor representando una configuración deseada. 
3 propiedades ${sys:es.logs.base_path}, ${sys:es.logs.cluster_name}, y ${sys:es.logs.node_name} son expuestas por Elasticsearch y pueden referenciarse en el archivo de configuración para determinar la ubicación de este archivo de registro y otros potenciales. La propiedad ${sys:es.logs.base_path} se resolverá en el directorio de registro, ${sys:es.logs.cluster_name} se resolverá en el nombre del clúster (usado como prefijo de los nombres de archivos de registro en la configuración predeterminada), y ${sys:es.logs.node_name} se resolverá en el nombre del nodo (si se establece explícitamente el nombre del nodo).
Cada línea a generarse en el archivo puede expresarse como una entrada dentro de una lista de diccionarios, contenida dentro de log4j_properties, que consiste en un hash que contiene un campo comment opcional y una lista de pares clave-valor asociados:
log4j2_properties:
  - comment: registrar errores de ejecución de acciones para facilitar la depuración
    settings:
      - logger.action.name: org.elasticsearch.action
        logger.action.level: debug
Consulta la documentación de registro oficial de Elastic para más detalles sobre una lista de configuraciones disponibles y ejemplos de cómo debería lucir esta configuración.
data_dir: </ruta/al/directorio/de/datos> (predeterminado: /var/data/elasticsearch)
- ruta en el host de destino donde se deben almacenar los datos generados por el servicio Elasticsearch (por ejemplo, registros indexados)
 
logs_dir: </ruta/al/directorio/de/logs> (predeterminado: /var/log/elasticsearch)
- ruta en el host de destino donde se deben almacenar los registros generados por el servicio Elasticsearch
 
Lanzamiento
Ejecutar el servicio de búsqueda y análisis elasticsearch junto con su servidor API se lleva a cabo utilizando la herramienta de gestión de servicios systemd tanto para instalaciones de paquete como de archivo. Lanzado como procesos en segundo plano o demonios, sujeto a la configuración y potencial de ejecución proporcionada por el marco de gestión subyacente, el lanzamiento de elasticsearch puede estar diseñado para adherirse a las políticas administrativas del sistema adecuadas para tu entorno y organización.
Las siguientes variables se pueden personalizar para gestionar la definición de unidad de servicio del servicio systemd y su perfil/política de ejecución:
extra_run_args: <opciones-de-elasticsearch-cli> (predeterminado: [])
- lista de argumentos de línea de comandos de 
elasticsearchque se pasan al binario en tiempo de ejecución para personalizar el lanzamiento. Soporta la expresión completa del cli deelasticsearch, esta variable permite que el lanzamiento se personalice de acuerdo a las especificaciones del usuario. 
custom_unit_properties: <hash-de-ajustes-del-servicio-systemd> (predeterminado: [])
- hash de ajustes usados para personalizar la configuración de la unidad [Service] y el entorno de ejecución del servicio systemd de Elasticsearch.
 
custom_unit_properties:
  Environment: "ES_HOME={{ install_dir }}"
  LimitNOFILE: infinity
Consulta la página man de systemd.service para una visión general y referencia de configuración.
Desinstalación
El soporte para desinstalar y eliminar artefactos necesarios para el aprovisionamiento permite a los usuarios/operadores devolver un host de destino a su estado configurado antes de la aplicación de este rol. Esto puede ser útil para reciclar nodos y roles y tal vez proporcionar transiciones más suaves/controladas entre actualizaciones de herramientas.
Las siguientes variable(s) se pueden personalizar para gestionar este proceso de desinstalación:
perform_uninstall: <true | false> (predeterminado: false)
- si desinstalar y eliminar todos los artefactos y restos de esta instalación de 
elasticsearchen un host de destino (ver:handlers/main.ymlpara detalles) 
Dependencias
- 0x0i.systemd
 
Ejemplo de Playbook
ejemplo por defecto:
- hosts: all
  roles:
  - role: 0x0I.elasticsearch
instalar una versión específica del paquete nativo de distribución del SO con valores predeterminados predefinidos:
- hosts: legacy-ES-cluster
  roles:
  - role: 0x0I.elasticsearch
    vars:
        managed_configs: []
        install_type: package
        package_url: https://download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/rpm/elasticsearch/2.0.0/elasticsearch-2.0.0.rpm
        package_checksum: https://download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/rpm/elasticsearch/2.0.0/elasticsearch-2.0.0.rpm.sha1
        checksum_format: sha1
aprovisionar un nodo híbrido maestro/dato con directorios de datos y registro personalizados:
- hosts: test-elasticsearch
  roles:
    - role: 0x0I.elasticsearch
      vars:
        managed_configs: ['elasticsearch_config']
        config:
          cluster.name: ejemplo-cluster
          node.master: true
          node.data: true
          path:
            data: /mnt/data/elasticsearch
            logs: /mnt/logs/elasticsearch
ajustar la configuración de la pila JVM y habilitar el registro detallado para depuración/problemas del clúster:
- hosts: elasticsearch
  roles:
    - role: 0x0I.elasticsearch
      vars:
        managed_configs: ['jvm_options', 'log4j2_properties']
        jvm_options:
          - comment: ajustar el tamaño mínimo y máximo de la pila JVM para manejar una salida incrementada
            arguments:
              - '-Xms16g'
              - '-Xmx16g'
        log4j2_properties:
          - comment: registrar errores de ejecución de acciones para facilitar la depuración
            settings:
              - logger.action.name: org.elasticsearch.action
                logger.action.level: debug
        extra_run_args:
          - '--verbose'
Licencia
MIT
Información del Autor
Este rol fue creado en 2019 por O1.IO.
Elasticsearch, a real-time distributed search and analytics engine
ansible-galaxy install 0x0i.elasticsearch