Разрушение языковых барьеров перевод журналов приложений с помощью Amazon Translate для беспрепятственной поддержки

Overcoming language barriers with Amazon Translate for seamless journal application support.

Журналы приложений – это важная информация, которая предоставляет ключевые понимания о внутренней работе приложения. Это включает ценную информацию, такую как события, ошибки и взаимодействие с пользователем, которая помогает разработчику приложения или инженеру поддержки операций отлаживать и предоставлять поддержку. Однако, когда эти журналы представлены на других языках, отличных от английского, это создает значительные проблемы для разработчиков, которые не могут прочитать содержимое, и затрудняет возможность команды поддержки идентифицировать и решать проблемы вовремя.

В этом посте мы рассмотрим решение, показывающее, как вы можете преодолеть языковые барьеры с помощью Amazon Translate, полностью управляемого сервиса нейронного машинного перевода для перевода текста на английский и с английского на широкий спектр поддерживаемых языков. Решение будет дополнять ваши существующие рабочие процессы по журналированию, автоматически переводя все журналы ваших приложений в реальном времени в Amazon CloudWatch, что может помочь преодолеть проблемы, вызванные неанглоязычными журналами приложений.

Обзор решения

Это решение показывает, как вы можете использовать три ключевых сервиса для автоматизации перевода журналов вашего приложения в событийном режиме:

  • CloudWatch Logs используется для мониторинга, хранения и доступа к журналам, создаваемым из различных источников, таких как сервисы AWS и ваши приложения
  • Amazon Translate используется для выполнения перевода текста на английский и с английского
  • AWS Lambda – это вычислительный сервис, который позволяет запускать коды для получения журналов приложений и их перевода с помощью SDK Amazon Translate

На следующей диаграмме показана архитектура решения.

Рабочий процесс состоит из следующих шагов:

  1. Пользовательское или стороннее приложение размещается на экземпляре Amazon Elastic Compute Cloud (Amazon EC2), и сгенерированные журналы приложений загружаются в CloudWatch Logs с помощью агента CloudWatch Logs.
  2. Каждая запись журнала, написанная в CloudWatch Logs, вызывает функцию Lambda, подписанную на группу журналов CloudWatch.
  3. Функция обрабатывает содержимое записи журнала и использует Amazon Translate SDK для перевода содержимого журнала.
  4. Переведенное содержимое журнала возвращается в функцию.
  5. Функция записывает переведенное содержимое журнала обратно в CloudWatch Logs в другую группу журналов.

Весь процесс происходит автоматически в режиме реального времени, и ваши разработчики смогут получать доступ к переведенным журналам приложений из групп журналов CloudWatch без изменения способа записи журналов вашего существующего приложения в CloudWatch.

Необходимые условия

Для выполнения инструкций в этом решении вам понадобится учетная запись AWS с пользователем AWS Identity and Access Management (IAM), который имеет разрешения на использование AWS CloudFormation, Amazon Translate, CloudWatch, Lambda и IAM.

Развернуть решение

Для начала запустите следующий шаблон CloudFormation для создания функции Lambda, двух групп журналов CloudWatch и роли IAM. Продолжайте развертывание с настройками по умолчанию. Этот шаблон занимает около 1 минуты для завершения.

После успешного создания стека вы можете ознакомиться с функцией Lambda, перейдя в консоль Lambda и найдя функцию translate-application-logs.

Вы можете видеть, что к функции добавлен триггер CloudWatch Logs.

Вы можете просмотреть подробности конфигурации триггера, перейдя на вкладку Configuration и выбрав Triggers в панели навигации.

Вы можете убедиться, что триггер настроен на подписку на события журнала из группы журналов /applicationlogs. Именно туда будут записываться ваши неанглоязычные журналы приложений.

Затем выберите Переменные среды в панели навигации.

Здесь предоставляются две переменные окружения:

  • source_language – Оригинальный язык, на котором находится журнал приложения (например, ja для японского)
  • target_language – Язык, на который нужно перевести журнал приложения (например, en для английского)

Для списка поддерживаемых языков см. Supported languages and language codes.

Затем перейдите на вкладку Code и ознакомьтесь с логикой функции:

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):
    # извлечение сообщений из журнала
    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']
    
    # проверка существования группы журналов, создание при ее отсутствии    
    dlg = logs.describe_log_groups(logGroupNamePrefix=logGroup)
    if len(dlg['logGroups']) == 0:
        logs.create_log_group(logGroupName=logGroup)

    # проверка существования потока журнала, создание при его отсутствии    
    dls = logs.describe_log_streams(logGroupName=logGroup, logStreamNamePrefix=logStream)
    if len(dls['logStreams']) == 0:
        logs.create_log_stream(logGroupName=logGroup, logStreamName=logStream)

    # перевод сообщений событий журнала с исходного языка на целевой язык
    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']

    # запись переведенных событий журнала в другую группу журналов в CloudWatch
    logs.put_log_events(
        logGroupName = logGroup,
        logStreamName = logStream,
        logEvents = json_log['logEvents']
    )
    
    # возврат успешного выполнения
    return {
        'statusCode': 200,
        'body': 'Translation success!'
    }

Проверка решения

Наконец, чтобы проверить решение, вы можете создать сообщение журнала через консоль CloudWatch и выбрать созданную группу журналов и поток журнала.

После создания сообщений журнала вы сможете сразу видеть их перевод.

Очистка

Чтобы удалить созданные ресурсы в этой статье, удалите стек CloudFormation через консоль CloudFormation.

Заключение

В этой статье рассматривается проблема, с которой сталкиваются разработчики и службы поддержки, когда журналы приложений представлены на языках, отличных от английского, что затрудняет их отладку и предоставление поддержки. Предложенное решение использует Amazon Translate для автоматического перевода неанглийских журналов в CloudWatch и предоставляет пошаговое руководство по развертыванию решения в вашей среде. Благодаря этой реализации разработчики теперь могут без проблем преодолевать языковой барьер, что позволяет им оперативно и эффективно решать проблемы.

Попробуйте использовать это решение и поделитесь своими мыслями в комментариях.