Monitoraggio dei log OpenSearch con Amazon CloudWatch Logs - Amazon OpenSearch Service

Monitoraggio dei log OpenSearch con Amazon CloudWatch Logs

Amazon OpenSearch Service utilizza i seguenti log OpenSearch tramite Amazon CloudWatch Logs:

  • Log di errore

  • Log di ricerca lenti

  • Log di indicizzazione lenti

  • Log di verifica

I log di ricerca lenti, i log di indicizzazione lenti e i log di errore sono utili per la risoluzione dei problemi relativi alle prestazioni e alla stabilità. I log di verifica tengono traccia dell'attività degli utenti a fini di conformità Tutti i log sono disabilitati per impostazione predefinita. Se abilitato, si applicano i prezzi standard di CloudWatch.

Nota

I log di errore sono disponibili solo per le versioni OpenSearch ed Elasticsearch 5.1 e successive. I log lenti sono disponibili per tutte le versioni di OpenSearch ed Elasticsearch.

Per i log, OpenSearch utilizza Apache Log4j 2 e i relativi livelli di log integrati (dal meno grave al più grave) di TRACE, DEBUG, INFO, WARN, ERROR e FATAL.

Se si abilitano i log di errore, OpenSearch Service pubblica righe di log di WARN, ERROR e FATAL su CloudWatch. OpenSearch Service pubblica inoltre diverse eccezioni dal livello DEBUG, tra cui:

  • org.opensearch.index.mapper.MapperParsingException

  • org.opensearch.index.query.QueryShardException

  • org.opensearch.action.search.SearchPhaseExecutionException

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

  • java.lang.IllegalArgumentException

I log di errore possono aiutarti con la risoluzione dei problemi in molti casi, tra cui i seguenti:

  • Problemi di compilazione di script Painless

  • Query non valide

  • Problemi di indicizzazione

  • Snapshot non riuscite

Abilitazione della pubblicazione di log (console)

La console OpenSearch Service è il modo più semplice per abilitare la pubblicazione di log su CloudWatch.

Come abilitare la pubblicazione di log su CloudWatch (console)

  1. Andare all'indirizzo https://aws.amazon.com e quindi scegliere Sign In to the Console (Accedi alla console).

  2. In Analisi, scegliere Amazon OpenSearch Service.

  3. Selezionare il dominio da aggiornare.

  4. Nella scheda Log, seleziona un tipo di log e scegli Abilita.

  5. Crea un gruppo di log CloudWatch oppure scegline uno esistente.

    Nota

    Se si pianifica di abilitare molteplici log, consigliamo di pubblicarli ognuno sul proprio gruppo di log. Questa separazione rende più semplice analizzare i log.

  6. Scegliere una policy d'accesso che contiene le autorizzazioni appropriate oppure creare una policy utilizzando il formato JSON che la console offre:

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

    Si consiglia di aggiungere le chiavi di condizione aws:SourceAccount e aws:SourceArn alla policy per proteggersi dal problema del "confused deputy". L'account fonte è il proprietario del flusso di log e l'ARN fonte è l'ARN del dominio. Per aggiungere queste chiavi di condizione, il dominio deve trovarsi sul software di servizio R20211203 o versioni successive.

    Ad esempio, è possibile aggiungere il seguente blocco di condizione alla policy:

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

    CloudWatch Logs supporta 10 policy delle risorse per regione. Se si prevede di abilitare i log per vari domini OpenSearch Service, è necessario creare e riutilizzare una policy più ampia che include diversi gruppi di log per evitare di raggiungere questo limite. Per le fasi dell'aggiornamento della policy, consulta Abilitazione della pubblicazione di log (AWS CLI).

  7. Scegli Enable (Abilita).

    Lo stato del dominio cambia da Attivo a Elaborazione. Lo stato deve tornare su Attivo prima che venga abilitata la pubblicazione dei log. Questa modifica richiede in genere 30 minuti, ma può richiedere più tempo a seconda della configurazione del dominio.

Se è stato abilitato uno dei log lenti vedere Impostazione delle soglie di registrazione di OpenSearch per i log lenti. Se sono stati abilitati i log di verifica, consultare Passaggio 2: attivare i registri di verifica in OpenSearch Dashboards. Se sono stati abilitati solo i log di errore, non è necessario eseguire operazioni di configurazione aggiuntive.

Abilitazione della pubblicazione di log (AWS CLI)

Prima di poter abilitare la pubblicazione dei log, è necessario disporre di un gruppo di log CloudWatch. Se non se ne dispone già di uno, è possibile crearlo utilizzando il comando seguente:

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

Immettere il comando successivo per individuare l'ARN del gruppo di log e quindi annotarlo:

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

Adesso è possibile assegnare le autorizzazioni di OpenSearch Service per scrivere nel gruppo di log: È necessario indicare l'ARN del gruppo di log vicino al termine del 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:PutLogEventsBatch","logs:CreateLogStream"],"Resource": "cw_log_group_arn:*"}]}'
Importante

CloudWatch Logs supporta 10 policy delle risorse per regione. Se si prevede di abilitare i log lenti per vari domini OpenSearch Service, è necessario creare e riutilizzare una policy più ampia che include diversi gruppi di log per evitare di raggiungere questo limite.

Se è necessario rivedere questa policy in un secondo momento, utilizza il comando aws logs describe-resource-policies. Per aggiornare la policy, esegui lo stesso comando aws logs put-resource-policy con un nuovo documento di policy.

Infine, è possibile utilizzare l'opzione --log-publishing-options per abilitare la pubblicazione. La sintassi dell'opzione è identica per entrambi i comandi create-domain e update-domain-config.

Parametro Valori validi
--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 si pianifica di abilitare molteplici log, consigliamo di pubblicarli ognuno sul proprio gruppo di log. Questa separazione rende più semplice analizzare i log.

Esempio

L'esempio seguente abilita la pubblicazione dei log di query lente di ricerca e indice per il dominio specificato:

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

Per disabilitare la pubblicazione su CloudWatch, eseguire lo stesso comando con Enabled=false.

Se è stato abilitato uno dei log lenti vedere Impostazione delle soglie di registrazione di OpenSearch per i log lenti. Se sono stati abilitati i log di verifica, consultare Passaggio 2: attivare i registri di verifica in OpenSearch Dashboards. Se sono stati abilitati solo i log di errore, non è necessario eseguire operazioni di configurazione aggiuntive.

Abilitazione della pubblicazione di log (SDK AWS)

Prima di poter abilitare la pubblicazione di log, è necessario creare un gruppo di log CloudWatch, ottenere il relativo ARN e fornire a OpenSearch Service le autorizzazioni di scrittura. Le operazioni rilevanti sono riportate nella Documentazione di riferimento dell'API Amazon CloudWatch Logs:

  • CreateLogGroup

  • DescribeLogGroup

  • PutResourcePolicy

È possibile accedere a tali operazioni utilizzando gli SDK AWS.

Gli SDK AWS (ad eccezione degli SDK per Android e iOS) supportano tutte le operazioni definite in Riferimento dell'API di configurazione per Amazon OpenSearch Service, inclusa l'opzione --log-publishing-options per CreateDomain e UpdateDomainConfig.

Se è stato abilitato uno dei log lenti vedere Impostazione delle soglie di registrazione di OpenSearch per i log lenti. Se sono stati abilitati solo i log di errore, non è necessario eseguire operazioni di configurazione aggiuntive.

Abilitazione della pubblicazione dei log (CloudFormation)

In questo esempio, viene utilizzato CloudFormation per creare un gruppo di registro denominato opensearch-logs, sono assegnate le autorizzazioni appropriate e quindi viene creato un dominio con la pubblicazione dei registri abilitata per registri di applicazioni, registri di ricerca lenti e registri di indicizzazione lenti.

Prima di poter abilitare la pubblicazione dei registri, è necessario creare un gruppo di registro CloudWatch:

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

Il modello emette l'ARN del gruppo di registro. In questo caso, l'ARN è arn:aws:logs:us-east-1:123456789012:log-group:opensearch-logs.

Utilizzando l'ARN, creare una policy delle risorse che conceda le autorizzazioni di OpenSearch Service per scrivere nel gruppo di registro:

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:PutLogEventsBatch\",\"logs:CreateLogStream\"],\"Resource\": \"arn:aws:logs:us-east-1:123456789012:log-group:opensearch-logs:*\"}]}"

Infine, creare il seguente stack CloudFormation che genera un dominio OpenSearch Service con la pubblicazione dei log abilitata. La policy di accesso consente all'utente root dell'Account AWS di effettuare tutte le richieste HTTP al dominio:

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

Per informazioni dettagliate sulla sintassi, consultare Opzioni di pubblicazione dei log nella Guida per l'utente di AWS CloudFormation

Impostazione delle soglie di registrazione di OpenSearch per i log lenti

OpenSearch disabilita i log lenti per impostazione predefinita. Dopo aver abilitato la pubblicazione di log lenti in CloudWatch, è comunque necessario specificare le soglie di registrazione per ogni indice OpenSearch. Queste soglie definiscono esattamente cosa deve essere registrato e a quale livello di log.

Queste impostazioni vengono specificate tramite l'API REST di OpenSearch:

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

Per controllare che i log lenti siano pubblicati correttamente, partire da valori molto bassi per verificare che i log appaiano in CloudWatch e poi aumentare man mano le soglie a livelli più utili.

Se i log non vengono visualizzati, verificare quanto segue:

  • Il gruppo di log di CloudWatch esiste? Controllare la console CloudWatch.

  • OpenSearch Service dispone delle autorizzazioni per scrivere nel gruppo di log? Controllare la console OpenSearch Service.

  • Il dominio OpenSearch Service è configurato per pubblicare nel gruppo di log? Controllare la console OpenSearch Service, utilizzare l'opzione AWS CLI describe-domain-config o chiamare DescribeDomainConfig utilizzando uno degli SDK.

  • Le soglie di registrazione di OpenSearch sono sufficientemente basse da essere superate dalle richieste? Per esaminare le soglie per un indice, utilizzare il comando seguente:

    GET domain-endpoint/index/_settings?pretty

Se desideri disattivare i log di query lente per un indice, ripristinare le soglie modificate sul valore predefinito di -1.

La disabilitazione della pubblicazione su CloudWatch utilizzando la console OpenSearch Service o AWS CLI non impedisce a OpenSearch di generare log, ma ne interrompe solo la pubblicazione. Assicurarsi di verificare le impostazioni dell'indice se non si ha più necessità dei log di query lente.

Visualizzazione dei log

La visualizzazione dei log lenti e dei log dell'applicazione in CloudWatch è identica alla visualizzazione di qualsiasi altro log CloudWatch. Per ulteriori informazioni, consultare Visualizzazione dei dati di log nella Guida per l'utente di Amazon CloudWatch Logs.

Di seguito sono elencate alcune considerazioni per la visualizzazione dei log:

  • OpenSearch Service pubblica solo i primi 255.000 caratteri di ciascuna riga in CloudWatch. Il contenuto rimanente viene troncato. Per i log di verifica, sono possibili 10.000 caratteri per messaggio.

  • In CloudWatch, i nomi dei flussi di log hanno suffissi -index-slow-logs, -search-slow-logs, -application-logs e -audit-logs per facilitare l'identificazione dei loro contenuti.