Monitoramento de logs do OpenSearch com o Amazon CloudWatch Logs - Amazon OpenSearch Service

Monitoramento de logs do OpenSearch com o Amazon CloudWatch Logs

O Amazon OpenSearch Service expõe os seguintes logs do OpenSearch via Amazon CloudWatch Logs:

Os logs lentos de pesquisa, logs lentos de indexação e logs de erros são úteis para solucionar problemas de performance e estabilidade. Os logs de auditoria rastreiam a atividade do usuário para fins de conformidade Por padrão, todos os logs são desabilitados. Se habilitados, os preços padrão do CloudWatch são aplicáveis.

nota

Os logs de erros estão disponíveis apenas para o OpenSearch e o Elasticsearch versões 5.1 e posteriores. Os logs lentos estão disponíveis para todas as versões do OpenSearch e do Elasticsearch.

Para os próprios logs, o OpenSearch usa o Apache Log4j 2 e seus níveis de log integrados (do menos para o mais severo) de TRACE, DEBUG, INFO, WARN, ERROR e FATAL.

Se você habilitar os logs de erros, o OpenSearch Service publicará as linhas de logs de WARN, ERROR e FATAL no CloudWatch. O OpenSearch Service também publica várias exceções do nível DEBUG, incluindo as seguintes:

  • org.opensearch.index.mapper.MapperParsingException

  • org.opensearch.index.query.QueryShardException

  • org.opensearch.action.search.SearchPhaseExecutionException

  • org.opensearch.common.util.concurrent.OpenSearchRejectedExecutionException

  • java.lang.IllegalArgumentException

Os logs de erros podem ajudar a solucionar problemas em muitas situações, incluindo:

  • Problemas de compilação de script Painless

  • Consultas inválidas

  • Indexação de problemas

  • Falhas de snapshots

  • Falhas de migração do Index State Management

Habilitação da publicação de logs (console)

O console do OpenSearch Service é a maneira mais simples de habilitar a publicação de logs no CloudWatch.

Para habilitar a publicação de logs no CloudWatch (console)

  1. Vá para https://aws.amazon.com e escolha Sign In to the Console (Fazer login no console)

  2. Em Analytics (Análise), escolha Amazon OpenSearch Service.

  3. Selecione o domínio que deseja atualizar.

  4. Na guia Logs, selecione um tipo de log e escolha Enable (Habilitar).

  5. Crie um novo grupo de logs do CloudWatch ou escolha um já existente.

    nota

    Se você planejar habilitar vários logs, recomendamos publicar cada um em seu próprio grupo de logs. Essa separação torna os logs mais fáceis de serem encontrados.

  6. Escolha uma política de acesso que contenha as permissões apropriadas ou crie uma política usando o JSON fornecido pelo console:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "es.amazonaws.com" }, "Action": [ "logs:PutLogEvents", "logs:CreateLogStream" ], "Resource": "cw_log_group_arn:*" } ] }

    Recomendamos que você adicione as chaves de condição aws:SourceAccount e aws:SourceArn na política para se proteger contra o problema confused deputy. A conta de origem é o proprietário do domínio e o ARN de origem é o ARN do domínio. Para adicionar essas chaves de condição, o seu domínio deve estar no software de serviço R20211203 ou superior.

    Por exemplo, você poderia adicionar o bloco de condições a seguir na política:

    "Condition": { "StringEquals": { "aws:SourceAccount": "account-id" }, "ArnLike": { "aws:SourceArn": "arn:aws:es:region:account-id:domain/domain-name" } }
    Importante

    O CloudWatch Logs oferece suporte a 10 políticas baseadas em recurso por região. Se você planejar habilitar os logs para vários domínios do OpenSearch Service, crie e reutilize uma política mais abrangente que inclua vários grupos de logs para evitar atingir esse limite. Para obter as etapas sobre como atualizar a política, consulte Habilitação da publicação de logs (AWS CLI).

  7. Escolha Habilitar.

    O status de seu domínio muda de Active para Processing. O status deve retornar para Ativo antes que a publicação de logs seja habilitada. Essa alteração geralmente leva 30 minutos, mas pode demorar mais, dependendo da configuração do domínio.

Se você tiver habilitado um dos logs lentos, consulte Configuração dos limites de logs do OpenSearch para logs lentos. Se você habilitou os logs de auditoria, consulte Etapa 2: ativar os logs de auditoria no OpenSearch Dashboards. Se tiver habilitado apenas logs de erros, você não precisará executar nenhuma etapa de configuração adicional.

Habilitação da publicação de logs (AWS CLI)

Antes de habilitar a publicação de logs, você precisa de um grupo de logs do CloudWatch. Se você ainda não tem, pode criar um usando o seguinte comando:

aws logs create-log-group --log-group-name my-log-group

Digite o comando seguinte para localizar o ARN do grupo de log e anote-o:

aws logs describe-log-groups --log-group-name my-log-group

Agora você pode conceder permissões ao OpenSearch Service para gravar o grupo de log. Você deve fornecer o ARN do grupo de log quase no final do comando:

aws logs put-resource-policy \ --policy-name my-policy \ --policy-document '{ "Version": "2012-10-17", "Statement": [{ "Sid": "", "Effect": "Allow", "Principal": { "Service": "es.amazonaws.com"}, "Action":[ "logs:PutLogEvents","logs:CreateLogStream"],"Resource": "cw_log_group_arn:*"}]}'
Importante

O CloudWatch Logs oferece suporte a 10 políticas baseadas em recurso por região. Se você planejar habilitar os logs lentos para vários domínios do OpenSearch Service, crie e reutilize uma política mais abrangente que inclua vários grupos de logs para evitar atingir esse limite.

Se você precisar revisar essa política posteriormente, use o comando aws logs describe-resource-policies. Para atualizar a política, emita o mesmo comando aws logs put-resource-policy com um novo documento de política.

Por fim, você pode usar a --log-publishing-options opção de habilitar a publicação. A sintaxe para essa opção é a mesma para os comandos create-domain e update-domain-config.

Parâmetro Valores válidos
--log-publishing-options SEARCH_SLOW_LOGS={CloudWatchLogsLogGroupArn=cw_log_group_arn,Enabled=true|false}
INDEX_SLOW_LOGS={CloudWatchLogsLogGroupArn=cw_log_group_arn,Enabled=true|false}
ES_APPLICATION_LOGS={CloudWatchLogsLogGroupArn=cw_log_group_arn,Enabled=true|false}
AUDIT_LOGS={CloudWatchLogsLogGroupArn=cw_log_group_arn,Enabled=true|false}
nota

Se você planejar habilitar vários logs, recomendamos publicar cada um em seu próprio grupo de logs. Essa separação torna os logs mais fáceis de serem encontrados.

Exemplo

O exemplo a seguir habilita a publicação de pesquisa e logs lentos de indexação no domínio especificado:

aws opensearch update-domain-config \ --domain-name my-domain \ --log-publishing-options "SEARCH_SLOW_LOGS={CloudWatchLogsLogGroupArn=arn:aws:logs:us-east-1:123456789012:log-group:my-log-group,Enabled=true},INDEX_SLOW_LOGS={CloudWatchLogsLogGroupArn=arn:aws:logs:us-east-1:123456789012:log-group:my-other-log-group,Enabled=true}"

Para desabilitar a publicação no CloudWatch, execute o mesmo comando com Enabled=false.

Se você tiver habilitado um dos logs lentos, consulte Configuração dos limites de logs do OpenSearch para logs lentos. Se você habilitou os logs de auditoria, consulte Etapa 2: ativar os logs de auditoria no OpenSearch Dashboards. Se tiver habilitado apenas logs de erros, você não precisará executar nenhuma etapa de configuração adicional.

Habilitação da publicação de logs (AWS SDKs)

Para poder habilitar a publicação de logs, você deve primeiro criar um grupo de logs do CloudWatch, obter seu ARN e fornecer ao OpenSearch Service permissões para gravar nele. As operações relevantes estão documentadas na Referência da API do Amazon CloudWatch Logs:

  • CreateLogGroup

  • DescribeLogGroup

  • PutResourcePolicy

Você pode acessar essas operações usando os AWS SDKs.

Os SDKs da AWS (exceto os SDKs para Android e iOS) são compatíveis com todas as operações definidas na Amazon OpenSearch Service API Reference (Referência da API do Amazon OpenSearch Service), incluindo a opção --log-publishing-options para CreateDomain e UpdateDomainConfig.

Se você tiver habilitado um dos logs lentos, consulte Configuração dos limites de logs do OpenSearch para logs lentos. Se tiver habilitado apenas logs de erros, você não precisará executar nenhuma etapa de configuração adicional.

Habilitação da publicação de logs (CloudFormation)

Neste exemplo, usamos o CloudFormation para criar um grupo de logs chamado opensearch-logs, atribuímos as permissões adequadas e criamos um domínio com a publicação de log habilitada para logs de aplicações, logs lentos de pesquisa e logs lentos de indexação.

Antes que você possa habilitar a publicação de logs, é necessário criar um grupo de logs do CloudWatch:

Resources: OpenSearchLogGroup: Type: AWS::Logs::LogGroup Properties: LogGroupName: opensearch-logs Outputs: Arn: Value: 'Fn::GetAtt': - OpenSearchLogGroup - Arn

O modelo gera o ARN do grupo de logs. Neste caso, o ARN é arn:aws:logs:us-east-1:123456789012:log-group:opensearch-logs.

Usando o ARN, crie uma política de recursos que conceda ao OpenSearch Service permissões para gravar no grupo de logs:

Resources: OpenSearchLogPolicy: Type: AWS::Logs::ResourcePolicy Properties: PolicyName: my-policy PolicyDocument: "{ \"Version\": \"2012-10-17\", \"Statement\": [{ \"Sid\": \"\", \"Effect\": \"Allow\", \"Principal\": { \"Service\": \"es.amazonaws.com\"}, \"Action\":[ \"logs:PutLogEvents\",\"logs:CreateLogStream\"],\"Resource\": \"arn:aws:logs:us-east-1:123456789012:log-group:opensearch-logs:*\"}]}"

Finalmente, crie a seguinte pilha do CloudFormation que gera um domínio do OpenSearch Service com publicação de logs habilitada. A política de acesso permite que o usuário root da Conta da AWS faça todas as solicitações HTTP ao domínio:

Resources: OpenSearchServiceDomain: Type: "AWS::OpenSearchService::Domain" Properties: DomainName: my-domain EngineVersion: "OpenSearch_1.0" ClusterConfig: InstanceCount: 2 InstanceType: "r6g.xlarge.search" DedicatedMasterEnabled: true DedicatedMasterCount: 3 DedicatedMasterType: "r6g.xlarge.search" EBSOptions: EBSEnabled: true VolumeSize: 10 VolumeType: "gp2" AccessPolicies: Version: "2012-10-17" Statement: Effect: "Allow" Principal: AWS: "arn:aws:iam::123456789012:user/es-user" Action: "es:*" Resource: "arn:aws:es:us-east-1:123456789012:domain/my-domain/*" LogPublishingOptions: ES_APPLICATION_LOGS: CloudWatchLogsLogGroupArn: "arn:aws:logs:us-east-1:123456789012:log-group:opensearch-logs" Enabled: true SEARCH_SLOW_LOGS: CloudWatchLogsLogGroupArn: "arn:aws:logs:us-east-1:123456789012:log-group:opensearch-logs" Enabled: true INDEX_SLOW_LOGS: CloudWatchLogsLogGroupArn: "arn:aws:logs:us-east-1:123456789012:log-group:opensearch-logs" Enabled: true

Para obter informações detalhadas sobre sintaxe, consulte as opções de publicação de logs no Manual do usuário do AWS CloudFormation.

Configuração dos limites de logs do OpenSearch para logs lentos

O OpenSearch desabilita os logs lentos por padrão. Depois de habilitar a publicação de logs lentos para o CloudWatch, você ainda deve especificar os limites de log para cada índice do OpenSearch. Esses limites definem exatamente o que deve ser registrado e em que nível de log.

Você especifica essas configurações por meio da API REST do OpenSearch:

PUT domain-endpoint/index/_settings { "index.search.slowlog.threshold.query.warn": "5s", "index.search.slowlog.threshold.query.info": "2s" }

Para testar se os logs lentos estão sendo publicados com êxito, comece com valores bem baixos para verificar se os logs aparecem no CloudWatch e, em seguida, aumente os limites para níveis mais úteis.

Se os logs não aparecerem, verifique o seguinte:

  • O grupo de log do CloudWatch existe? Verifique o console do CloudWatch.

  • O OpenSearch Service tem permissões para gravar no grupo de log? Verifique o console do OpenSearch Service.

  • O domínio do OpenSearch Service está configurado para publicar no grupo de logs? Verifique o console do OpenSearch Service use a opção describe-domain-config da AWS CLI ou chame DescribeDomainConfig usando um dos SDKs.

  • Os limites de log do OpenSearch são baixos a ponto de suas solicitações excedê-los? Para revisar seus limites para um índice, use o seguinte comando:

    GET domain-endpoint/index/_settings?pretty

Se você quer desabilitar logs lentos para um índice, redefina todos os limites que você mudou para os valores padrão de -1.

Desabilitar a publicação para o CloudWatch usando o console do OpenSearch Service ou a AWS CLI não impede que o OpenSearch Service gere logs, apenas interrompe a publicação desses logs. Verifique as configurações de índice se você não precisar mais de logs lentos.

Visualizar logs do

Visualizar a aplicação e os logs lentos no CloudWatch é igual a qualquer outra visualização de log do CloudWatch. Para obter mais informações, consulte Visualizar dados de log no Manual do usuário do Amazon CloudWatch Logs.

Algumas considerações sobre a visualização de logs:

  • O OpenSearch Service publica apenas os primeiros 255.000 caracteres de cada linha no CloudWatch. O conteúdo restante ficará truncado. Para logs de auditoria, o limite é de 10.000 caracteres por mensagem.

  • No CloudWatch, os nomes dos fluxos de log têm os sufixos -index-slow-logs, -search-slow-logs, -application-logs e -audit-logs para ajudar a identificar seu conteúdo.