Come posso risolvere i problemi di CloudWatch Logs affinché trasmetta al mio dominio Amazon OpenSearch Service?

Ultimo aggiornamento: 22/11/2021

Non riesco a trasmettere Amazon CloudWatch Logs al mio dominio Amazon OpenSearch Service (successore di Amazon Elasticsearch Service). Come posso risolvere questo problema?

Risoluzione

Non riesco a trasmettere più gruppi di registri di CloudWatch allo stesso dominio OpenSearch Service

Per impostazione predefinita, Amazon CloudWatch crea una sola funzione AWS Lambda per ogni dominio OpenSearch Service. Se imposti più gruppi di registro per indicizzare i dati nel tuo dominio, tutti i diversi gruppi di registro invocano la stessa funzione Lambda. Quando il primo gruppo di registro invoca una funzione Lambda, l'invocazione crea un indice e un campo di tipo nel dominio.

Gli indici creati in Elasticsearch 6.0.0 o versioni successive possono contenere solo un singolo tipo di mappatura. Gli indici creati in 5.x con più tipi di mappatura continueranno a funzionare in Elasticsearch 6.x. Per ulteriori informazioni sulla deprecazione dei tipi di mappatura Elasticsearch, consulta Rimozione dei tipi di mappatura sul sito Web di Elasticsearch.

Quando altri gruppi di registro tentano di invocare la stessa funzione Lambda, l'invocazione ha esito negativo con il seguente messaggio di errore:

"reason": "Rejecting mapping update to [<index_name>] as the final mapping would have more than 1 type: [log-group-1, log-group-2]”

Per risolvere questo problema, aggiorna la funzione Lambda con la seguente sintassi:

var indexName = [
        'cwl-' + payload.logGroup.toLowerCase().split('/').join('-') + '-' + timestamp.getUTCFullYear(),
        ('0' + (timestamp.getUTCMonth() + 1)).slice(-2),
        ('0' + timestamp.getUTCDate()).slice(-2) 
        ].join('.');

Questa sintassi crea più indici per i diversi gruppi di registro che stanno eseguendo lo streaming nel dominio di OpenSearch Service.

Quindi, salva la funzione Lambda aggiornata per creare indici distinti per i diversi gruppi di registro che stanno eseguendo lo streaming nel tuo dominio.

Non riesco a eseguire lo streaming su un dominio OpenSearch Service basato su VPC nello stesso account AWS

Importante: prima di eseguire lo streaming dei gruppi di registro di CloudWatch al dominio OpenSearch Service basato su VPC, assicurati di aggiornare la policy del ruolo AWS Identity and Access Management (IAM). Al ruolo IAM associato alla funzione Lambda corrispondente, deve essere associata la policy AWSLambdaVPCAccessExecutionRole.

Ecco una policy AWSLambdaVPCAccessExecutionRole in formato JSON:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents",
                "ec2:CreateNetworkInterface",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
        }
    ]
}

Nota: questa policy gestita consente alla funzione Lambda di scrivere il gruppo di registro di CloudWatch nel cluster nel VPC.

Dopo avere collegato la policy alla funzione Lambda, puoi iniziare lo streaming dei registri al dominio OpenSearch Service nel VPC.

Non riesco ad eseguire lo streaming del mio gruppo di registri CloudWatch a un dominio OpenSearch Service quando è abilitato il controllo granulare degli accessi

Se esegui lo streaming di CloudWatch Logs a un dominio di OpenSearch Service con controllo di accesso granulare, potresti riscontrare il seguente errore di autorizzazione:

"{\"statusCode\":403,\"responseBody\":{\"error\":{\"root_cause\":[{\"type\":\"security_exception\",\"reason\":\"no permissions for [indices:data/write/bulk] and User [name=arn:aws:iam::123456789101:role/lambda_elasticsearch_execution, roles=[arn:aws:iam::123456789101:role/lambda_elasticsearch_execution], requestedTenant=null]\"}],\"type\":\"security_exception\",\"reason\":\"no permissions for [indices:data/write/bulk] and User [name=arn:aws:iam::123456789101:role/lambda_elasticsearch_execution, roles=[arn:aws:iam::123456789101:role/lambda_elasticsearch_execution], requestedTenant=null]\"},\"status\":403}}"

Se ricevi questo messaggio di errore dai registri delle funzioni Lambda, significa che la mappatura dei ruoli è incompleta.

Nota: per impostazione predefinita, OpenSearch Service crea una funzione AWS Lambda per te.

Per risolvere il messaggio di errore, attieniti alla seguente procedura:

1.    Apri il pannello di controllo di OpenSearch. Puoi trovare un link ai pannelli di controllo OpenSearch nel riepilogo del dominio della console di OpenSearch Service.

2.    Nel riquadro di navigazione a sinistra, scegli l'icona del lucchetto.

3.    Seleziona Mappature ruolo.

4.    Scegli all_access e security_manager come ruoli.

Nota: il ruolo all_access fornisce l'accesso unicamente al cluster. In base al tuo caso d'uso, puoi anche aggiungere un controllo degli accessi granulare al tuo cluster.

5.    Modifica la mappatura per all_access.

6.    Per Ruolo back-end, aggiungi il ruolo di esecuzione della funzione Lambda e scegli Invia. I tuoi registri dovrebbero ora eseguire lo streaming al tuo dominio OpenSearch Service.

Per ulteriori informazioni sulla mappatura dei ruoli, consulta Mappatura dei ruoli agli utenti.

I registri di CloudWatch non vengono consegnati al dominio OpenSearch Service

Se trasmetti CloudWatch Logs (utilizzando la funzione AWS Lambda predefinita) al tuo dominio OpenSearch Service, potresti riscontrare il seguente errore di indicizzazione:

"errorMessage": "{\"statusCode\":200,\"responseBody\":{\"took\":42,\"errors\":true}}",

Nota: per impostazione predefinita, gli errori di AWS Lambda vengono restituiti come risposte 200 OK.

Per risolvere questo messaggio di errore, segui la seguente procedura:

1.    Apri la funzione predefinita di AWS Lambda.

2.    Trova la seguente riga di codice:

"var logFailedResponses = true;"

3.    Aggiorna il valore var logFailedResponses su "true". Questo aggiornamento fornisce informazioni aggiuntive per eventuali nuove richieste di indicizzazione che utilizzano la funzione AWS Lambda. È possibile utilizzare le informazioni aggiuntive per identificare la causa del problema di indicizzazione.

Ricevo un errore cluster_block_exception

Le eccezioni dei blocchi cluster sono causate da quanto segue:

  • Mancanza di spazio di archiviazione gratuito
  • Eccessiva pressione sulla memoria JVM

Per ulteriori informazioni sulla risoluzione dei problemi relativi alle eccezioni dei blocchi cluster, consulta ClusterBlockException.


Questo articolo è stato utile?


Hai bisogno di supporto tecnico o per la fatturazione?