Elasticsearch 8.0 y 9.0

Elasticsearch es un servidor de búsqueda de código abierto basado en la biblioteca de búsqueda de Lucene. Se ejecuta en una máquina virtual Java sobre un número de sistemas operativos. El receptor elasticsearch recopila telemetría a nivel de clúster y de nodo de tus instancias de Elasticsearch.

Para obtener más información sobre Elasticsearch, consulta la documentación de Elasticsearch 8.0 y versiones posteriores, y 9.0 y versiones posteriores.

Requisitos previos

Para recopilar la telemetría de Elasticsearch, debes instalar el agente de operaciones:

  • Para las métricas, instala la versión 2.60.0 o una posterior.
  • Para los registros, instala la versión 2.60.0 o una posterior.

Esta integración es compatible con las versiones 8.0 y 9.0 de Elasticsearch.

Configura tu instancia de Elasticsearch

Si habilitas las funciones de seguridad de Elasticsearch, debes configurar un usuario con el privilegio de clúster monitor o manage.

Configura el agente de operaciones de Elasticsearch

Sigue la guía para configurar el Agente de operaciones y agrega los elementos necesarios para recopilar la telemetría de tus instancias de Elasticsearch y reinicia el agente.

Configuración de ejemplo

Los siguientes comandos crean la configuración para recopilar y transferir la telemetría de Elasticsearch:

# Configures Ops Agent to collect telemetry from the app. You must restart the agent for the configuration to take effect.

set -e

# Check if the file exists
if [ ! -f /etc/google-cloud-ops-agent/config.yaml ]; then
  # Create the file if it doesn't exist.
  sudo mkdir -p /etc/google-cloud-ops-agent
  sudo touch /etc/google-cloud-ops-agent/config.yaml
fi

# Create a back up of the existing file so existing configurations are not lost.
sudo cp /etc/google-cloud-ops-agent/config.yaml /etc/google-cloud-ops-agent/config.yaml.bak

# Configure the Ops Agent.
sudo tee /etc/google-cloud-ops-agent/config.yaml > /dev/null << EOF
metrics:
  receivers:
    elasticsearch:
      type: elasticsearch
      endpoint: https://localhost:9200
      username: elastic
      password: elastic_test_password_123
      insecure_skip_verify: true
      insecure: false
  service:
    pipelines:
      elasticsearch:
        receivers:
          - elasticsearch

logging:
  receivers:
    elasticsearch_gc:
      type: elasticsearch_gc
    elasticsearch_json:
      type: elasticsearch_json
  service:
    pipelines:
      elasticsearch:
        receivers:
          - elasticsearch_gc
          - elasticsearch_json
EOF

Para que estos cambios se apliquen, debes reiniciar el Agente de operaciones:

Linux

  1. Para reiniciar el agente, ejecuta el siguiente comando en la instancia:
    sudo systemctl restart google-cloud-ops-agent
    
  2. Para confirmar que el agente se haya reiniciado, ejecuta el siguiente comando y verifica que los componentes “Agente de métricas” y “Agente de Logging” se hayan iniciado:
    sudo systemctl status "google-cloud-ops-agent*"
    

Windows

  1. Conéctate a la instancia a través de RDP o una herramienta similar y accede a Windows.
  2. Haz clic con el botón derecho en el ícono de PowerShell y selecciona Ejecutar como administrador para abrir una terminal de PowerShell con privilegios de administrador.
  3. Para reiniciar el agente, ejecuta el siguiente comando de PowerShell:
    Restart-Service google-cloud-ops-agent -Force
    
  4. Para confirmar que el agente se haya reiniciado, ejecuta el siguiente comando y verifica que los componentes “Agente de métricas” y “Agente de Logging” se hayan iniciado:
    Get-Service google-cloud-ops-agent*
    

Configura la recopilación de registros

Para transferir registros desde Elasticsearch, debes crear un receptor para los registros que produce Elasticsearch y, luego, crear una canalización destinada al receptor nuevo.

A fin de configurar un receptor para tus registros elasticsearch_json, especifica los siguientes campos:

Campo Predeterminado Descripción
exclude_paths Una lista de patrones de ruta de acceso del sistema de archivos que se excluirán del conjunto que coincide con include_paths.
include_paths [/var/log/elasticsearch/*_server.json, /var/log/elasticsearch/*_deprecation.json, /var/log/elasticsearch/*_index_search_slowlog.json, /var/log/elasticsearch/*_index_indexing_slowlog.json, /var/log/elasticsearch/*_audit.json] Una lista de rutas de acceso del sistema de archivos que se leerán a través de la visualización del final de cada archivo. Se puede usar un comodín (*) en las rutas.
record_log_file_path false Si se configura como true, la ruta al archivo específico desde el que se obtuvo el registro aparece en la entrada de registro de salida como el valor de la etiqueta agent.googleapis.com/log_file_path. Cuando se usa un comodín, solo se registra la ruta de acceso del archivo del que se obtuvo el registro.
type Este valor debe ser elasticsearch_json.
wildcard_refresh_interval 60s Es el intervalo en el que se actualizan las rutas de acceso a los archivos comodín en include_paths. Se proporciona como una duración, por ejemplo, 30s o 2m. Esta propiedad puede ser útil en el caso de una capacidad de procesamiento de registro alta en la que los archivos de registro se rotan más rápido que el intervalo predeterminado.

Para configurar un receptor para tus registros elasticsearch_gc, especifica los siguientes campos:

Campo Predeterminado Descripción
exclude_paths Una lista de patrones de ruta de acceso del sistema de archivos que se excluirán del conjunto que coincide con include_paths.
include_paths [/var/log/elasticsearch/gc.log] Una lista de rutas de acceso del sistema de archivos que se leerán a través de la visualización del final de cada archivo. Se puede usar un comodín (*) en las rutas.
record_log_file_path false Si se configura como true, la ruta al archivo específico desde el que se obtuvo el registro aparece en la entrada de registro de salida como el valor de la etiqueta agent.googleapis.com/log_file_path. Cuando se usa un comodín, solo se registra la ruta de acceso del archivo del que se obtuvo el registro.
type Este valor debe ser elasticsearch_gc.
wildcard_refresh_interval 60s Es el intervalo en el que se actualizan las rutas de acceso a los archivos comodín en include_paths. Se proporciona como una duración, por ejemplo, 30s o 2m. Esta propiedad puede ser útil en el caso de una capacidad de procesamiento de registro alta en la que los archivos de registro se rotan más rápido que el intervalo predeterminado.

¿Qué se registra?

El logName se deriva de los IDs del receptor especificados en la configuración. Los campos detallados en LogEntry son los siguientes.

Los registros elasticsearch_json contienen los siguientes campos en LogEntry:

Campo Tipo Descripción
jsonPayload.ecs.version cadena Versión de ECS
jsonPayload.elasticsearch.cluster.name cadena El nombre del clúster que emite el registro en formato de ECS
jsonPayload.elasticsearch.cluster.uuid cadena El UUID del clúster que emite el registro en formato de ECS
jsonPayload.elasticsearch.node.name cadena El nombre del nodo que emite el registro en formato ECS
jsonPayload.event cadena Información del evento en formato ECS
jsonPayload.log cadena Detalles del registro en formato ECS
jsonPayload.log.level cadena Nivel de entrada de registro en formato ECS
jsonPayload.log.logger cadena El componente de registro que emitió el registro en formato ECS
jsonPayload.message cadena Mensaje de registro
jsonPayload.process.thread.name cadena El nombre del subproceso que emitió el registro en formato ECS
jsonPayload.service.name cadena Nombre del servicio que emite el registro en formato ECS
severity cadena (LogSeverity) Nivel de gravedad de la entrada de registro

Los registros elasticsearch_gc contienen los siguientes campos en LogEntry:

Campo Tipo Descripción
jsonPayload.gc_run número La ejecución del recolector de elementos no utilizados
jsonPayload.message string Mensaje de registro
jsonPayload.type string El tipo de registro
severity string (LogSeverity) Es el nivel de entrada de registro (traducido).

Configura la recopilación de métricas

Para transferir métricas desde Elasticsearch, debes crear un receptor para las métricas que produce Elasticsearch y, luego, crear una canalización para el receptor nuevo.

Este receptor no admite el uso de varias instancias en la configuración, por ejemplo, para supervisar varios extremos. Todas estas instancias escriben en las mismas series temporales, y Cloud Monitoring no tiene forma de distinguirlas.

Para configurar un receptor destinado a las métricas de elasticsearch, especifica los siguientes campos:

Campo Predeterminado Descripción
ca_file Es la ruta de acceso al certificado de la AC. Como cliente, esto verifica el certificado del servidor. Si está vacío, el receptor usa la AC raíz del sistema.
cert_file Es la ruta de acceso al certificado TLS que se usará para las conexiones que requiere mTLS.
collection_interval 60s Un valor de duración de tiempo, como 30s o 5m.
endpoint https://localhost:9200 La URL base de la API de REST de Elasticsearch. Elasticsearch 9.0 y versiones posteriores usan HTTPS de forma predeterminada.
insecure false Determina si se debe usar o no una conexión TLS segura. Elasticsearch 9.0 y versiones posteriores usan HTTPS de forma predeterminada.
insecure_skip_verify true Determina si se debe omitir o no la verificación del certificado. Se establece en true para los certificados autofirmados (comunes en los entornos de prueba).
key_file Es la ruta de acceso a la clave TLS que se usará para las conexiones que requiere mTLS.
password Contraseña para la autenticación con Elasticsearch. Se requiere para Elasticsearch 9.0 y versiones posteriores.
type Este valor debe ser elasticsearch.
username elastic Nombre de usuario para la autenticación con Elasticsearch. Se requiere para Elasticsearch 9.0 y versiones posteriores.

Qué se supervisa

En la siguiente tabla, se proporciona una lista de métricas que el agente de operaciones recopila de la instancia de Elasticsearch.

Tipo de métrica 
Categoría, tipo
Recursos supervisados
Etiquetas
workload.googleapis.com/elasticsearch.breaker.memory.estimated
GAUGEINT64
gce_instance
instrumentation_source
name
workload.googleapis.com/elasticsearch.breaker.memory.limit
GAUGEINT64
gce_instance
instrumentation_source
name
workload.googleapis.com/elasticsearch.breaker.tripped
CUMULATIVEINT64
gce_instance
instrumentation_source
name
workload.googleapis.com/elasticsearch.cluster.data_nodes
GAUGEINT64
gce_instance
instrumentation_source
workload.googleapis.com/elasticsearch.cluster.health
GAUGEINT64
gce_instance
instrumentation_source
status
workload.googleapis.com/elasticsearch.cluster.in_flight_fetch
GAUGEINT64
gce_instance
instrumentation_source
workload.googleapis.com/elasticsearch.cluster.nodes
GAUGEINT64
gce_instance
instrumentation_source
workload.googleapis.com/elasticsearch.cluster.pending_tasks
GAUGEINT64
gce_instance
instrumentation_source
workload.googleapis.com/elasticsearch.cluster.published_states.differences
GAUGEINT64
gce_instance
instrumentation_source
state
workload.googleapis.com/elasticsearch.cluster.published_states.full
GAUGEINT64
gce_instance
instrumentation_source
workload.googleapis.com/elasticsearch.cluster.shards
GAUGEINT64
gce_instance
instrumentation_source
state
workload.googleapis.com/elasticsearch.cluster.state_queue
GAUGEINT64
gce_instance
instrumentation_source
state
workload.googleapis.com/elasticsearch.cluster.state_update.count
CUMULATIVEINT64
gce_instance
instrumentation_source
state
workload.googleapis.com/elasticsearch.cluster.state_update.time
CUMULATIVEINT64
gce_instance
instrumentation_source
state
type
workload.googleapis.com/elasticsearch.indexing_pressure.memory.limit
GAUGEINT64
gce_instance
instrumentation_source
workload.googleapis.com/elasticsearch.indexing_pressure.memory.total.primary_rejections
CUMULATIVEINT64
gce_instance
instrumentation_source
workload.googleapis.com/elasticsearch.indexing_pressure.memory.total.replica_rejections
CUMULATIVEINT64
gce_instance
instrumentation_source
workload.googleapis.com/elasticsearch.memory.indexing_pressure
GAUGEINT64
gce_instance
instrumentation_source
stage
workload.googleapis.com/elasticsearch.node.cache.count
GAUGEINT64
gce_instance
instrumentation_source
type
workload.googleapis.com/elasticsearch.node.cache.evictions
CUMULATIVEINT64
gce_instance
cache_name
instrumentation_source
workload.googleapis.com/elasticsearch.node.cache.memory.usage
GAUGEINT64
gce_instance
cache_name
instrumentation_source
workload.googleapis.com/elasticsearch.node.cluster.connections
GAUGEINT64
gce_instance
instrumentation_source
workload.googleapis.com/elasticsearch.node.cluster.io
CUMULATIVEINT64
gce_instance
direction
instrumentation_source
workload.googleapis.com/elasticsearch.node.disk.io.read
GAUGEINT64
gce_instance
instrumentation_source
workload.googleapis.com/elasticsearch.node.disk.io.write
GAUGEINT64
gce_instance
instrumentation_source
workload.googleapis.com/elasticsearch.node.documents
GAUGEINT64
gce_instance
instrumentation_source
state
workload.googleapis.com/elasticsearch.node.fs.disk.available
GAUGEINT64
gce_instance
instrumentation_source
workload.googleapis.com/elasticsearch.node.fs.disk.free
GAUGEINT64
gce_instance
instrumentation_source
workload.googleapis.com/elasticsearch.node.fs.disk.total
GAUGEINT64
gce_instance
instrumentation_source
workload.googleapis.com/elasticsearch.node.http.connections
GAUGEINT64
gce_instance
instrumentation_source
workload.googleapis.com/elasticsearch.node.ingest.documents
CUMULATIVEINT64
gce_instance
instrumentation_source
workload.googleapis.com/elasticsearch.node.ingest.documents.current
GAUGEINT64
gce_instance
instrumentation_source
workload.googleapis.com/elasticsearch.node.ingest.operations.failed
CUMULATIVEINT64
gce_instance
instrumentation_source
workload.googleapis.com/elasticsearch.node.open_files
GAUGEINT64
gce_instance
instrumentation_source
workload.googleapis.com/elasticsearch.node.operations.completed
CUMULATIVEINT64
gce_instance
instrumentation_source
operation
workload.googleapis.com/elasticsearch.node.operations.time
CUMULATIVEINT64
gce_instance
instrumentation_source
operation
workload.googleapis.com/elasticsearch.node.pipeline.ingest.documents.current
GAUGEINT64
gce_instance
instrumentation_source
name
workload.googleapis.com/elasticsearch.node.pipeline.ingest.documents.preprocessed
GAUGEINT64
gce_instance
instrumentation_source
name
workload.googleapis.com/elasticsearch.node.pipeline.ingest.operations.failed
CUMULATIVEINT64
gce_instance
instrumentation_source
name
workload.googleapis.com/elasticsearch.node.script.cache_evictions
CUMULATIVEINT64
gce_instance
instrumentation_source
workload.googleapis.com/elasticsearch.node.script.compilation_limit_triggered
CUMULATIVEINT64
gce_instance
instrumentation_source
workload.googleapis.com/elasticsearch.node.script.compilations
GAUGEINT64
gce_instance
instrumentation_source
workload.googleapis.com/elasticsearch.node.shards.data_set.size
GAUGEINT64
gce_instance
instrumentation_source
workload.googleapis.com/elasticsearch.node.shards.reserved.size
GAUGEINT64
gce_instance
instrumentation_source
workload.googleapis.com/elasticsearch.node.shards.size
GAUGEINT64
gce_instance
instrumentation_source
workload.googleapis.com/elasticsearch.node.thread_pool.tasks.finished
CUMULATIVEINT64
gce_instance
instrumentation_source
state
thread_pool_name
workload.googleapis.com/elasticsearch.node.thread_pool.tasks.queued
GAUGEINT64
gce_instance
instrumentation_source
thread_pool_name
workload.googleapis.com/elasticsearch.node.thread_pool.threads
GAUGEINT64
gce_instance
instrumentation_source
state
thread_pool_name
workload.googleapis.com/elasticsearch.node.translog.operations
CUMULATIVEINT64
gce_instance
instrumentation_source
workload.googleapis.com/elasticsearch.node.translog.size
GAUGEINT64
gce_instance
instrumentation_source
workload.googleapis.com/elasticsearch.node.translog.uncommitted.size
GAUGEINT64
gce_instance
instrumentation_source
workload.googleapis.com/elasticsearch.os.cpu.load_avg.15m
GAUGEDOUBLE
gce_instance
instrumentation_source
workload.googleapis.com/elasticsearch.os.cpu.load_avg.1m
GAUGEDOUBLE
gce_instance
instrumentation_source
workload.googleapis.com/elasticsearch.os.cpu.load_avg.5m
GAUGEDOUBLE
gce_instance
instrumentation_source
workload.googleapis.com/elasticsearch.os.cpu.usage
GAUGEINT64
gce_instance
instrumentation_source
workload.googleapis.com/elasticsearch.os.memory
GAUGEINT64
gce_instance
instrumentation_source
state

Verifica la configuración

En esta sección, se describe cómo verificar que hayas configurado de forma correcta el receptor de Elasticsearch. El agente de operaciones puede tardar uno o dos minutos en comenzar a recopilar telemetría.

Para verificar que los registros de Elasticsearch se envíen a Cloud Logging, haz lo siguiente:

  1. En la consola de Google Cloud , accede a la página Explorador de registros:

    Acceder al Explorador de registros

    Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuyo subtítulo es Logging.

  2. Ingresa la siguiente consulta en el editor y, luego, haz clic en Ejecutar consulta:
    resource.type="gce_instance"
    (log_id("elasticsearch_json") OR log_id("elasticsearch_gc"))
    

Para verificar que las métricas de Elasticsearch se envíen a Cloud Monitoring, haz lo siguiente:

  1. En la consola de Google Cloud , accede a la página  Explorador de métricas:

    Acceder al Explorador de métricas

    Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuyo subtítulo es Monitoring.

  2. En la barra de herramientas del panel del compilador de consultas, selecciona el botón cuyo nombre es  MQL o  PromQL.
  3. Verifica que PromQL esté seleccionado en el botón de activación Lenguaje. El botón de activación de lenguaje se encuentra en la misma barra de herramientas que permite dar formato a la consulta.
  4. Ingresa la siguiente consulta en el editor y, luego, haz clic en Ejecutar consulta:
    {"workload.googleapis.com/elasticsearch.node.open_files", monitored_resource="gce_instance"}
    

Ver panel

Para ver tus métricas de Elasticsearch, debes tener configurado un gráfico o un panel. La integración de Elasticsearch incluye uno o más paneles. Cualquier panel se instala de forma automática después de que configuras la integración y de que el agente de operaciones comienza a recopilar datos de métricas.

También puedes obtener vistas previas estáticas de los paneles sin instalar la integración.

Para ver un panel instalado, haz lo siguiente:

  1. En la consola de Google Cloud , accede a la página Paneles :

    Acceder a Paneles

    Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuyo subtítulo es Monitoring.

  2. Selecciona la pestaña Lista de paneles y, luego, la categoría Integraciones.
  3. Haz clic en el nombre del panel que quieras ver.

Si configuraste una integración, pero el panel no se instaló, comprueba que el Agente de operaciones se esté ejecutando. Cuando no hay datos de métricas para un gráfico en el panel, la instalación del panel falla. Una vez que el Agente de operaciones empieza a recopilar métricas, el panel se instalará por ti.

Para obtener una vista previa estática del panel, haz lo siguiente:

  1. En la consola de Google Cloud , accede a la página Integraciones :

    Acceder a Integraciones

    Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuyo subtítulo es Monitoring.

  2. Haz clic en el filtro de la plataforma de implementación Compute Engine.
  3. Ubica la entrada para Elasticsearch y haz clic en Ver detalles.
  4. Selecciona la pestaña Paneles para ver una vista previa estática. Si el panel está instalado, haz clic en Ver panel para acceder a este.

Para obtener más información sobre los paneles de Cloud Monitoring, consulta Paneles y gráficos.

Para obtener más información sobre el uso de la página Integraciones, consulta Administra integraciones.

Instala políticas de alertas

Las políticas de alertas le indican a Cloud Monitoring que te notifique cuando ocurren condiciones especificadas. La integración de Elasticsearch incluye una o más políticas de alertas para que uses. Puedes ver y también instalar estas políticas de alertas desde la página Integraciones en Monitoring.

Para ver las descripciones de las políticas de alertas disponibles y, luego, instalarlas, haz lo siguiente:

  1. En la consola de Google Cloud , accede a la página Integraciones :

    Acceder a Integraciones

    Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuyo subtítulo es Monitoring.

  2. Ubica la entrada para Elasticsearch y haz clic en Ver detalles.
  3. Selecciona la pestaña Alertas. En esta pestaña, se proporcionan descripciones de las políticas de alertas disponibles y una interfaz para instalarlas.
  4. Instala las políticas de alertas. Las políticas de alertas deben saber a dónde deben enviar notificaciones acerca de la activación de la alerta, por lo que requieren que proporciones información para la instalación. Para instalar políticas de alertas, haz lo siguiente:
    1. En la lista de políticas de alertas disponibles, elige las que quieras instalar.
    2. En la sección Configurar notificaciones, elige uno o más canales de notificaciones. Tienes la opción de inhabilitar el uso de los canales de notificaciones, pero si lo haces, las políticas de alertas se activarán de forma silenciosa. Puedes comprobar su estado en Monitoring, pero no recibirás notificaciones.

      Para obtener más información sobre los canales de notificaciones, consulta Administra canales de notificaciones.

    3. Haz clic en Crear políticas.

Para obtener más información sobre las políticas de alertas en Cloud Monitoring, consulta Introducción a las alertas.

Para obtener más información sobre el uso de la página Integraciones, consulta Administra integraciones.

¿Qué sigue?

Para obtener una explicación sobre cómo usar Ansible con el objetivo de instalar el Agente de operaciones, configurar una aplicación de terceros y, luego, instalar un panel de muestra, mira el video Instala el Agente de operaciones para solucionar problemas de aplicaciones de terceros.