¿Cómo se establece la conexión con Amazon OpenSearch Service mediante Filebeat y Logstash en Amazon Linux?

Última actualización: 02/02/2022

Intento conectarme a un clúster de Amazon OpenSearch Service mediante Logstash en Amazon Linux. Sin embargo, sigo recibiendo un error. ¿Cómo puedo solucionarlo?

Descripción breve

Para conectarse a Amazon OpenSearch Service mediante Logstash, lleve a cabo los siguientes pasos:

1.    Configure los puertos de seguridad (como el puerto 443) para reenviar los registros a Amazon OpenSearch Service.

2.    Actualice las configuraciones de Filebeat, Logstash y OpenSearch Service.

3.    Instale Filebeat en la instancia de origen de Amazon Elastic Compute Cloud (Amazon EC2). Asegúrese de que ha instalado y configurado correctamente el archivo de configuración YAML.

4.    Instale Logstash en una instancia separada de Amazon EC2 desde donde se enviarán los logs.

Si no ha configurado correctamente Logstash, recibirá uno de los siguientes errores: 401 Error de autorización, 403 Error de prohibición o error de instalación de x-pack.

Resolución

Configure los puertos de seguridad

Asegúrese de configurar los puertos de seguridad de modo que su instancia de Amazon Elastic Compute Cloud (Amazon EC2) pueda reenviar los registros a Amazon OpenSearch Service.

Para configurar los puertos de seguridad para el reenvío de registros desde Logstash, siga los siguientes pasos:

1.    Cree una instancia de Amazon EC2 donde haya instalado Apache y Filebeat. La instancia de Amazon EC2 debe ser capaz de reenviar los registros de Logstash a Amazon OpenSearch Service.

2.    Asegúrese de que las instancias EC2 residan en el mismo grupo de seguridad que su Virtual Private Cloud (VPC) para OpenSearch Service.

3.    Asegúrese de que los siguientes puertos estén abiertos en el grupo de seguridad: 80, 443 y 5044. Estos puertos deben estar abiertos para poder enviar datos entre Logstash y OpenSearch Service.

Actualice las configuraciones de FileBeat, Logstash y OpenSearch Service

OpenSearch Service se ejecuta mejor cuando se utilizan las mismas versiones de OSS. Por lo tanto, intente utilizar versiones compatibles para lo siguiente:

  • Versión de FileBeat x.x OSS
  • Versión de Logstash x.x OSS (v7.16.2 y v6.8.22 para la revisión de seguridad de Log4j)
  • Versión x.x de OpenSearch Service

Para asegurarse de que el software descargado se mantiene sincronizado, descargue los RPM en cada instancia EC2 (independiente). Para evitar un único punto de fallo en la canalización, es importante evitar ejecutar el servicio Filebeat y Logstash en la misma instancia de EC2.

Nota: Si utiliza las versiones 1.0 o superiores de Amazon OpenSearch Service, asegúrese de que el modo de compatibilidad está habilitado al lanzar el dominio por primera vez. Tenga en cuenta que únicamente puede habilitar el modo de compatibilidad a través de la consola de administración de AWS.

Instale Filebeat en la instancia de origen de Amazon EC2

1.    Descargue el RPM de la versión deseada de Filebeat:

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-oss-7.16.2-x86_64.rpm

2.    Instale el archivo RPM de Filebeat:

rpm -ivh filebeat-oss-7.16.2-x86_64.rpm

Instale Logstash en una instancia separada de Amazon EC2 desde la que se enviarán los registros

1.    Descargue el archivo RPM de la versión de Logstash deseada:

wget https://artifacts.elastic.co/downloads/logstash/logstash-oss-7.16.2-x86_64.rpm

En este ejemplo, se utiliza la versión 6.7 para que coincida con el número de versión de Amazon OpenSearch Service y Filebeat.

2.    Instale Java u OpenJDK en la instancia de Amazon EC2 antes de instalar el archivo RPM de Logstash:

yum install java-1.8.0-*

3.    Después de instalar Java, instale el archivo RPM que descargó para Logstash mediante el comando rpm:

rpm -ivh logstash-oss-7.16.2-x86_64.rpm

Nota: Se necesita Java para que Logstash se ejecute. En este ejemplo, se utiliza la versión 8 de Java (Open JDK 1.8), que es compatible con todas las versiones de Logstash. Para obtener más información sobre las versiones compatibles de Java y Logstash, consulte la matriz de compatibilidad en el sitio web de Elasticsearch.

4.    Compruebe los archivos de configuración mediante la verificación de los directorios “/etc/filebeat” y “/etc/logstash”.

5.    Para Filebeat, actualice la salida a Logstash u OpenSearch Service y especifique que los registros deben enviarse. Luego, inicie el servicio.

Nota: Si intenta cargar plantillas en los paneles de OpenSearch con Filebeat, la carga no se podrá realizar. Filebeat supone que su clúster es compatible con el complemento x-pack.

6.    Actualice el archivo de configuración de YAML de Filebeat para enviar los registros de acceso de Apache a Logstash.

Por ejemplo:

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/*.log
 
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
 
setup.template.settings:
 
index.number_of_shards: 1
  index.codec:
best_compression
 
#output.elasticsearch:
#hosts: ["vpc-examplestack-5crrfyysa2ratcl3ursmung33q.us-east-1.es.amazonaws.com:443"]
#protocol: "https"
 
output.logstash:
  # The Logstash hosts
  hosts: [“Logstash-EC2-InstanceIP:5044"]
 
setup.ilm.enabled: false 
ilm.enabled: false

7.    Asegúrese de que el archivo de configuración de Logstash puede acceder a Filebeat en el puerto 5044. Este acceso al puerto permite que Logstash reenvíe las solicitudes al punto de conexión de la VPC de OpenSearch Service.

Por ejemplo:

input {
  beats {
    port => 5044
  }
}

output {
  elasticsearch {
    hosts => ["https://domain-endpoint:443"]
    ssl => true
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
    user => "my-username"
    password => "my-password"
    ilm_enabled => false
  }
}

8.    Inicie los servicios de Filebeat y Logstash con los siguientes comandos en cada instancia.

Filebeat:

systemctl start filebeat (service filebeat start)

Logstash:

cp /etc/logstash/logstash.conf /etc/logstash/conf.d/
systemctl start logstash (service logstash start)

9.    Ejecute una llamada a la API cat indices al dominio de OpenSearch Service para confirmar que los registros de Filebeat se envían. Si los registros se envían correctamente, recibirá la siguiente respuesta:

curl -XGET https://vpc-examplestack-5crrfyysa2ratcl3ursmung33q.us-east-1.es.amazonaws.com/_cat/indices
green open filebeat-7.16.2-2022.01.27 f97c4WnuQ-CtsAJJaJHUlg
1 1 1511515 0 249.7mb 124.7mb
green open .kibana_1                 Ioco6fUoSCGkaOvHNCL39g 1
1       1 0   7.4kb  
3.7kb

De forma predeterminada, los índices de Filebeat rotan diariamente. El siguiente es un ejemplo de salida de un índice de Filebeat:

curl -XGET https://vpc-examplestack-5crrfyysa2ratcl3ursmung33q.us-east-1.es.amazonaws.com/_cat/indices
green open filebeat-7.16.2-2022.01.27 f97c4WnuQ-CtsAJJaJHUlg
1 1 1511515 0 249.7mb 124.7mb
green open .kibana_1                 Ioco6fUoSCGkaOvHNCL39g 1
1       1 0   7.4kb  
3.7kb
green open filebeat-7.16.2-2022.01.28 4i8W0smlRGGFcQOaDMxonA
1 1      89 0 207.1kb 118.1kb

Si se configura correctamente el servicio Filebeat, Logstash y OpenSearch Dashboards (ELK) con Amazon EC2 Linux, la canalización lucirá así:

Filebeat > Logstash > Amazon OpenSearch Service/Dashboards

401 Error de no autorización

Un error 401 no autorizado de Logstash indica que el dominio de OpenSearch Service está protegido por medio del control de acceso detallado (FGAC) o de Amazon Cognito. FGAC requiere solicitudes firmadas por un usuario o rol, que debe estar definido en la política de acceso del dominio. En caso de recibir un error 401 no autorizado, asegúrese de que ha habilitado correctamente FGAC en el archivo de configuración de Logstash.

Por ejemplo:

output {
  elasticsearch {
    hosts => ["https://vpc-examplestack-5crrfyysa2ratcl3ursmung33q.us-east-1.es.amazonaws.com:443"]
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
    ilm_enabled => false
   user => "elastic"
    password => "changeme"
  }
}

Error 403 ´Prohibido

Al utilizar y configurar Logstash para enviar datos a OpenSearch Service, es posible que reciba un error 403 Prohibido. Este error se produce cuando Logstash no tiene los permisos necesarios y no ha podido verificar la identidad de AWS Identity Access Management (IAM). Para resolver este problema, asegúrese de que las solicitudes a OpenSearch Service se firmen con las credenciales de IAM.

Para firmar las solicitudes de OpenSearch Service mediante Logstash, siga estos pasos:

1.    Instale el complemento Logstash para OpenSearch Service:

bin/logstash-plugin install logstash-output-amazon_es

2.     Adjunte un rol de IAM a la instancia de Amazon EC2 de la siguiente manera:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "es:ESHttp*"
            ],
            "Resource": "[Amazon-OpenSearch-Domain-ARN]"
        }
    ]
}

3.    Actualice los ajustes de configuración de Logstash para usar el complemento Logstash “amazon_es” como salida en la canalización:

output {
  amazon_es {
    hosts => ["domain-endpoint"]
    ssl => true
    region => "us-east-1"
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
  }
}

Error de instalación de x-pack de Logstash

Si aparecen errores con x-pack al iniciar Logstash, entonces desactive manualmente el complemento x-pack en el archivo de registro.

Para desactivar manualmente el complemento x-pack, siga estos pasos:

1.    Abra el siguiente archivo:

/usr/share/logstash/logstash-core/lib/logstash/plugins/registry.rb

2.    Encuentre load_xpack y comente en línea:

“load_xpack unless LogStash::OSS” >> “#load_xpack unless LogStash::OSS”

Nota: Puede verificar los archivos de configuración para confirmar si los ajustes de la administración de la vida útil del índice (ILM) (ilm.enabled e ilm_enabled) están configurados en “falso”. Al desactivar estos ajustes de ILM en los archivos de configuración, se eliminan los errores de inicio del complemento x-pack.

Amazon OpenSearch Service es el sucesor de Amazon Elasticsearch Service.


¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?