Superare le barriere linguistiche tradurre i log dell’applicazione con Amazon Translate per un supporto senza soluzione di continuità

Amazon Translate per tradurre i log dell'applicazione e superare le barriere linguistiche

I log dell’applicazione sono un elemento essenziale che fornisce informazioni cruciali sulle modalità di funzionamento di un’applicazione. Questo include informazioni preziose come eventi, errori e interazioni degli utenti che aiuterebbero uno sviluppatore di applicazioni o un ingegnere di supporto operativo a debuggare e fornire supporto. Tuttavia, quando questi log sono presentati in lingue diverse dall’inglese, crea un ostacolo significativo per gli sviluppatori che non possono leggere il contenuto e ostacola la capacità del team di supporto di identificare e risolvere prontamente i problemi.

In questo post, esploreremo una soluzione su come superare le barriere linguistiche utilizzando Amazon Translate, un servizio di traduzione di testo completamente gestito basato su reti neurali per tradurre testi da e verso l’inglese in una vasta gamma di lingue supportate. La soluzione completerà i tuoi flussi di lavoro di logging esistenti traducendo automaticamente tutti i log delle tue applicazioni in Amazon CloudWatch in tempo reale, il che può alleviare le sfide poste dai log delle applicazioni non in inglese.

Panoramica della soluzione

Questa soluzione illustra come puoi utilizzare tre servizi chiave per automatizzare la traduzione dei log delle tue applicazioni in modo basato sugli eventi:

  • CloudWatch Logs viene utilizzato per monitorare, archiviare e accedere ai file di log generati da varie fonti come servizi AWS e le tue applicazioni
  • Amazon Translate viene utilizzato per eseguire la traduzione di testi da e verso l’inglese
  • AWS Lambda è un servizio di calcolo che consente di eseguire codici per recuperare i log delle applicazioni e tradurli tramite l’uso del SDK di Amazon Translate

Il diagramma seguente illustra l’architettura della soluzione.

Il flusso di lavoro consiste nei seguenti passaggi:

  1. Un’applicazione personalizzata o di terze parti è ospitata su un’istanza Amazon Elastic Compute Cloud (Amazon EC2) e i log dell’applicazione generati vengono caricati in CloudWatch Logs tramite l’agente CloudWatch Logs.
  2. Ogni voce di log scritta in CloudWatch Logs attiva la funzione Lambda sottoscritta al gruppo di log di CloudWatch.
  3. La funzione elabora i contenuti della voce di log e utilizza il metodo translate_text del SDK di Amazon Translate per tradurre il contenuto del log.
  4. Il contenuto del log tradotto viene restituito alla funzione.
  5. La funzione scrive il contenuto del log tradotto in CloudWatch Logs in un diverso gruppo di log.

L’intero processo avviene automaticamente in tempo reale e i tuoi sviluppatori saranno in grado di accedere ai log delle applicazioni tradotti dai gruppi di log di CloudWatch senza alcuna modifica nel modo in cui la tua applicazione esistente scrive i log in CloudWatch.

Prerequisiti

Per seguire le istruzioni di questa soluzione, è necessario disporre di un account AWS con un utente AWS Identity and Access Management (IAM) che abbia autorizzazioni per AWS CloudFormation, Amazon Translate, CloudWatch, Lambda e IAM.

Deploy della soluzione

Per iniziare, avvia il seguente template di CloudFormation per creare una funzione Lambda, due gruppi di log di CloudWatch e un ruolo IAM. Procedi con il deploy utilizzando le impostazioni predefinite. Questo template richiede circa 1 minuto per essere completato.

Dopo che lo stack è stato creato con successo, puoi esaminare la funzione Lambda navigando nella console di Lambda e individuando la funzione translate-application-logs.

Puoi osservare che è stato aggiunto un trigger di CloudWatch Logs alla funzione.

Puoi visualizzare i dettagli della configurazione del trigger navigando nella scheda Configurazione e selezionando Trigger nel riquadro di navigazione.

Puoi verificare che il trigger sia stato configurato per sottoscriversi agli eventi di log dal gruppo di log /applicationlogs. Qui verranno scritti i tuoi log delle applicazioni non in inglese.

Successivamente, seleziona Variabili di ambiente nel riquadro di navigazione.

Sono fornite due variabili di ambiente qui:

  • source_language – La lingua originale in cui si trova il registro dell’applicazione (ad esempio, ja per il giapponese)
  • target_language – La lingua di destinazione in cui tradurre il registro dell’applicazione (ad esempio, en per l’inglese)

Per un elenco delle lingue supportate, fare riferimento a Lingue supportate e codici di lingua.

Successivamente, passare alla scheda Code e esaminare la logica della funzione:

import json, boto3, gzip, base64, os

translate = boto3.client(service_name='translate', region_name=os.environ['AWS_REGION'], use_ssl=True)
logs = boto3.client('logs')
    
def lambda_handler(event, context):
    # recuperare i messaggi di registro
    encoded_zipped_data = event['awslogs']['data']
    zipped_data = base64.b64decode(encoded_zipped_data)
    data = gzip.decompress(zipped_data)
    json_log = json.loads(data)
    logGroup = json_log['logGroup']+'-'+os.environ['target_language']
    logStream = json_log['logStream']
    
    # verificare se il gruppo di log esiste, crearlo se non esiste    
    dlg = logs.describe_log_groups(logGroupNamePrefix=logGroup)
    if len(dlg['logGroups']) == 0:
        logs.create_log_group(logGroupName=logGroup)

    # verificare se lo stream di log esiste, crearlo se non esiste    
    dls = logs.describe_log_streams(logGroupName=logGroup, logStreamNamePrefix=logStream)
    if len(dls['logStreams']) == 0:
        logs.create_log_stream(logGroupName=logGroup, logStreamName=logStream)

    # tradurre i messaggi degli eventi di log dalla lingua di origine alla lingua di destinazione
    for logevent in json_log['logEvents']:
        logevent['message'] = translate.translate_text(Text=logevent['message'], SourceLanguageCode=os.environ['source_language'], TargetLanguageCode=os.environ['target_language']).get('TranslatedText')
        del logevent['id']

    # scrivere nuovamente gli eventi di log tradotti in un diverso gruppo di log in CloudWatch
    logs.put_log_events(
        logGroupName = logGroup,
        logStreamName = logStream,
        logEvents = json_log['logEvents']
    )
    
    # restituire il successo
    return {
        'statusCode': 200,
        'body': 'Traduzione riuscita!'
    }

Testare la soluzione

Infine, per testare la soluzione, è possibile creare un messaggio di log tramite la console di CloudWatch e scegliere il gruppo di log e lo stream di log creati.

Dopo aver creato i messaggi di log, sarà possibile vederli tradotti immediatamente.

Pulizia

Per eliminare le risorse create in questo post, eliminare lo stack di CloudFormation tramite la console di CloudFormation.

Conclusioni

Questo post ha affrontato la sfida che i developer e i team di supporto devono affrontare quando i log dell’applicazione sono presentati in lingue diverse dall’inglese, rendendo loro difficile il debug e la fornitura di supporto. La soluzione proposta utilizza Amazon Translate per tradurre automaticamente i log non in inglese in CloudWatch e fornisce una guida passo-passo sulla distribuzione della soluzione nel proprio ambiente. Attraverso questa implementazione, i developer possono ora superare senza problemi la barriera linguistica, consentendo loro di affrontare rapidamente ed efficacemente i problemi.

Provate questa implementazione e fateci sapere le vostre opinioni nei commenti.