Como faço para me conectar ao Amazon OpenSearch Service usando o Filebeat e o Logstash no Amazon Linux?

Data da última atualização: 02/02/2022

Estou tentando me conectar a um cluster do Amazon OpenSearch Service usando o Logstash no Amazon Linux. No entanto, continuo recebendo um erro. Como resolvo isso?

Breve descrição

Para se conectar ao Amazon OpenSearch Service usando o Logstash, execute as seguintes etapas:

1.    Configure suas portas de segurança (como a porta 443) para encaminhar logs para o Amazon OpenSearch Service.

2.    Atualize as configurações do Filebeat, Logstash e OpenSearch Service

3.    Instale o Filebeat na instância de origem do Amazon Elastic Compute Cloud (Amazon EC2). Verifique se você instalou e configurou corretamente o arquivo de configuração YAML.

4.    Instale o Logstash em uma instância separada do Amazon EC2 da qual os logs serão enviados.

Se você não instalou ou configurou corretamente o Logstash, receberá um destes erros: Erro 401 Authorization (401 Autorização), erro 403 Forbidden (403 Proibido) ou erro de instalação do x-pack.

Resolução

Configure suas portas de segurança

Certifique-se de configurar suas portas de segurança para que sua instância do Amazon Elastic Compute Cloud (Amazon EC2) possa encaminhar logs para o Amazon OpenSearch Service.

Para configurar suas portas de segurança para encaminhar logs do Logstash, execute as seguintes etapas:

1.    Crie uma instância do Amazon EC2 em que você instalou o Apache e o Filebeat. A instância do Amazon EC2 deve ser capaz de encaminhar logs do Logstash para o Amazon OpenSearch Service.

2.    Certifique-se de que as instâncias do EC2 residam no mesmo grupo de segurança que o virtual private cloud (VPC) para o OpenSearch Service.

3.    Certifique-se de que as seguintes portas estejam abertas no grupo de segurança: 80, 443 e 5044. Essas portas devem estar abertas para que você possa enviar dados entre o Logstash e o OpenSearch Service.

Atualize as configurações do FileBeat, Logstash e OpenSearch Service

O OpenSearch Service funciona melhor quando você usa as mesmas versões do OSS. Portanto, tente usar versões compatíveis com o seguinte:

  • FileBeat versão x.x OSS
  • Logstash versão x.x OSS (v7.16.2 e v6.8.22 para patch de segurança Log4j)
  • OpenSearch Service versão x.x

Para garantir que o software baixado permaneça sincronizado, baixe os RPMs para cada instância do EC2 (separada). Para evitar um único ponto de falha no pipeline, é importante evitar a execução dos serviços Filebeat e Logstash na mesma instância do EC2.

Observação: se você estiver usando o Amazon OpenSearch Service versões 1.0 ou superior, certifique-se de que o modo de compatibilidade esteja ativado quando você iniciar seu domínio pela primeira vez. Esteja ciente de que você só pode ativar o modo de compatibilidade por meio do Console de Gerenciamento da AWS.

Instale o Filebeat na instância do Amazon EC2 de origem

1.    Baixe o RPM para a versão desejada do Filebeat:

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

2.    Instale o arquivo RPM do Filebeat:

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

Instale o Logstash em uma instância separada do Amazon EC2 da qual os logs serão enviados

1.    Baixe o arquivo RPM da versão desejada do Logstash:

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

Este exemplo usa a versão 6.7 para corresponder ao número da versão do Amazon OpenSearch Service e do Filebeat.

2.    Instale o Java ou o OpenJDK em sua instância do Amazon EC2 antes de instalar o arquivo RPM do Logstash:

yum install java-1.8.0-*

3.    Depois de instalar o Java, instale o arquivo RPM que você baixou para o Logstash usando o comando rpm:

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

Observação: o Logstash requer que o Java seja executado. Neste exemplo, usamos o Java versão 8 (Open JDK 1.8), que é compatível com todas as versões do Logstash. Para obter mais informações sobre as versões compatíveis do Java e do Logstash, consulte a matriz de suporte no site do Elasticsearch.

4.    Confira os arquivos de configuração conferindo os diretórios “/etc/filebeat” e “/etc/logstash”.

5.    Para o Filebeat, atualize a saída para Logstash ou OpenSearch Service e especifique que os logs devem ser enviados. Em seguida, inicie seu serviço.

Observação: se você tentar carregar de modelos para o OpenSearch Dashboards com o Filebeat, seu carregamento falhará. O Filebeat pressupõe que o cluster possui suporte a plugins x-pack.

6.    Atualize seu arquivo de configuração YAML do Filebeat para enviar logs de acesso do Apache para o Logstash.

Por exemplo:

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.    Certifique-se de que o arquivo de configuração do Logstash possa acessar o Filebeat na Porta 5044. Esse acesso à porta permite que o Logstash encaminhe solicitações para o endpoint da VPC do OpenSearch Service.

Por exemplo:

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 os serviços Filebeat e Logstash com os seguintes comandos em cada instância.

Filebeat:

systemctl start filebeat (service filebeat start)

Logstash:

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

9.    Execute uma chamada de API cat indices para o domínio do OpenSearch Service para confirmar se os logs do Filebeat estão sendo enviados. Se seus logs forem enviados com sucesso, você receberá a seguinte resposta:

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

Por padrão, os índices do Filebeat alternam diariamente. Aqui está um exemplo de saída de um índice 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

Se você configurar com êxito o Filebeat Service, o Logstash e o OpenSearch Dashboards (ELK) com o Amazon EC2 Linux, seu pipeline terá a seguinte aparência:

Filebeat > Logstash > Amazon OpenSearch Service/Dashboards

Erro 401 Unauthorized

Um erro 401 Unauthorized (401 Não autorizado) do Logstash indica que seu domínio do OpenSearch Service está protegido por controle de acesso refinado (FGAC) ou Amazon Cognito. O FGAC exige solicitações assinadas por um usuário ou função, que devem ser definidas na política de acesso do domínio. Se você receber um erro 401 Unauthorized (401 Não autorizado), verifique se você habilitou corretamente o FGAC no arquivo de configuração do Logstash.

Por exemplo:

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"
  }
}

Erro 403 - proibido

Quando você usa e configura o Logstash para enviar dados para o OpenSearch Service, você pode receber um erro 403 Forbidden (403 Proibido). Esse erro ocorre quando o Logstash não tem as permissões necessárias e não verifica sua identidade do AWS Identity Access Management (IAM). Para resolver esse problema, assine suas solicitações ao OpenSearch Service usando suas credenciais do IAM.

Para assinar solicitações do OpenSearch Service usando o Logstash, siga estas etapas:

1.    Instale o plugin Logstash para o OpenSearch Service:

bin/logstash-plugin install logstash-output-amazon_es

2.     Anexe uma função do IAM à instância do Amazon EC2, da seguinte maneira:

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

3.    Atualize as definições de configuração do Logstash para usar o plugin Logstash “amazon_es” como saída em seu pipeline:

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

Erro de instalação do Logstash x-pack

Se você encontrar erros com o x-pack ao iniciar o Logstash, desabilite manualmente o plugin x-pack do seu arquivo de registro.

Para desativar manualmente o plugin x-pack, siga estas etapas:

1.    Abra o seguinte arquivo:

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

2.    Encontre load_xpack e comente em linha:

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

Observação: você pode verificar seus arquivos de configuração para confirmar se as configurações do Index Life Management (ILM) (ilm.enabled e ilm_enabled) estão ambas definidas como “false”. Desabilitar essas configurações do ILM nos arquivos de configuração elimina os erros de startup do plugin x-pack.

O Amazon OpenSearch Service é o sucessor do Amazon Elasticsearch Service.


Este artigo ajudou?


Precisa de ajuda com faturamento ou suporte técnico?