Come posso risolvere i problemi dei file di log Amazon CloudWatch in modo che vengano trasmessi al mio dominio del servizio OpenSearch di Amazon?

Ultimo aggiornamento: 13/12/2022

Non riesco a trasmettere i file di log Amazon CloudWatch al mio dominio del servizio OpenSearch di Amazon. 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 log invoca una funzione Lambda, l'invocazione crea un indice e un campo di tipo nel dominio.

Gli indici creati in Amazon OpenSearch Service 6.0.0 (o versioni successive) possono contenere un solo tipo di mappatura. Gli indici creati con la versione 5.x con più tipi di mappatura continuano a funzionare come prima in OpenSearch Service 6.x. Per ulteriori informazioni sulla deprecazione dei tipi di mappatura del servizio OpenSearch, consulta Removal of mapping types (Rimozione dei tipi di mappatura) sul sito Web di Elastic.

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

"motivo": "L'aggiornamento della mappatura a [ ] è stato rifiutato poiché la mappatura finale avrebbe più di un tipo: [log-group-1, log-group-2]"

Per risolvere questo problema è necessario dapprima aggiornare 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 log 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_opensearch_execution, roles=[arn:aws:iam::123456789101:role/lambda_opensearch_execution], requestedTenant=null]\"}],\"type\":\"security_exception\",\"reason\":\"no permissions for [indices:data/write/bulk] and User [name=arn:aws:iam::123456789101:role/lambda_opensearch_execution, roles=[arn:aws:iam::123456789101:role/lambda_opensearch_execution], requestedTenant=null]\"},\"status\":403}}"

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

Nota: di default, il servizio OpenSearch crea una funzione AWS Lambda per te.

Domini del servizio OpenSearch di Amazon con versione 7.9 e successive (inclusa la versione 1.x di OpenSearch)

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.    Dal pannello di navigazione, scegli Sicurezza.

3.    Scegli i Ruoli.

4.    Scegli il ruolo all_access.

5.    Scegli la scheda Utenti mappati.

6.    Nella pagina di dialogo Utenti mappati, scegli Gestisci mappatura.

7.    In Ruoli back-end, inserisci l'ARN del ruolo di esecuzione della funzione Lambda.

8.    Scegli Mappa. I tuoi registri dovrebbero ora trasmettere al tuo dominio OpenSearch Service.

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

Domini del servizio OpenSearch in esecuzione nella versione 7.8 e precedenti

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 granulare degli accessi 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 log dovrebbero ora trasmettere al tuo dominio del servizio OpenSearch.

I registri di CloudWatch non vengono consegnati al dominio OpenSearch Service

Se esegui lo streaming dei log di CloudWatch (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 = false;"

3.    Aggiorna il valore var logFailedResponses su "true" (vero). 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.

Il mio filtro di abbonamento CloudWatch non riesce a inviare dati al mio cluster tramite una funzione Lambda predefinita (OpenSearch Service 2.0 e versioni successive)

Se disponi di un filtro di abbonamento CloudWatch per inviare i log ad Amazon OpenSearch Service 2.x utilizzando la funzione Lambda predefinita, potresti ricevere un errore. Se il filtro di abbonamento non riesce a importare i log e viene visualizzato il seguente errore, l'errore è causato da un parametro disattivato:

"{\"statusCode\":400,\"responseBody\":{\"error\":{\"root_cause\":[{\"type\":\"illegal_argument_exception\",\"reason\":\"Action/metadata line [1] contains an unknown parameter [_type]\"}],\"type\":\"illegal_argument_exception\",\"reason\":\"Action/metadata line [1] contains an unknown parameter [_type]\"},\"status\":400}}"

Nelle versioni 2.0 e successive di OpenSearch Service, il parametro _type viene rimosso dagli endpoint API. Per risolvere questo errore, è necessario anche rimuovere il parametro dal codice della funzione Lambda.

1.    Apri la console AWS Lambda.

2.    Seleziona la funzione Lambda predefinita per il tuo filtro di abbonamento.

3.    Visualizza il codice della tua funzione in Code source (Fonte codice).

4.    Trova la funzione transform (trasformazione) definita nel codice. All'interno di questa funzione, i dati vengono convertiti nel formato di indicizzazione JSON per OpenSearch Service. Le prime righe di questo codice hanno il seguente aspetto:

function transform(payload) {
    if (payload.messageType === 'CONTROL_MESSAGE') {
        return null;
    }

    var bulkRequestBody = '';

    payload.logEvents.forEach(function(logEvent) {
                var timestamp = new Date(1 * logEvent.timestamp);

5.    Sotto la funzione transform (trasformazione), cerca il parametro _type. Nella maggior parte dei casi, si troverà alla riga 79. Rimuovi o commenta la riga di codice che aggiunge il parametro _type. Dopo la rimozione, il tuo codice avrà il seguente aspetto:

var action = {
    "index": {}
};
action.index._index = indexName;
//action.index._type = payload.logGroup;
action.index._id = logEvent.id;

bulkRequestBody += [

Ora puoi inviare richieste di indicizzazione correttamente.


Questo articolo è stato utile?


Hai bisogno della fattura o di supporto tecnico?