言語の壁を乗り越える シームレスなサポートのためにAmazon Translateでアプリケーションログを翻訳する
Amazon Translateでアプリケーションログを翻訳する
アプリケーションログは、アプリケーションの内部動作に関する重要な情報を提供する必要不可欠な情報です。これには、イベント、エラー、およびユーザーの操作など、アプリケーション開発者やオペレーションサポートエンジニアがデバッグやサポートを行うために役立つ貴重な情報が含まれます。しかし、これらのログが英語以外の言語で表示されると、コンテンツを読めない開発者にとっては大きな障害となり、サポートチームの問題の特定と解決能力を妨げます。
この記事では、サポートチームの能力を向上させるために、Amazon Translateを使用して言語の壁を取り除く方法について説明します。Amazon Translateは、サポートされているさまざまな言語間でテキストを翻訳するための完全に管理されたニューラル機械翻訳サービスです。このソリューションは、Amazon CloudWatchのすべてのアプリケーションログをリアルタイムで自動的に翻訳することで、英語以外のアプリケーションログによって引き起こされる課題を軽減します。
ソリューションの概要
このソリューションでは、次の3つの主要なサービスを使用して、イベント駆動型の方法でアプリケーションログの翻訳を自動化する方法を示します:
- CloudWatch Logsは、AWSサービスやアプリケーションなど、さまざまなソースから生成されたログファイルを監視、保存、アクセスするために使用されます。
- Amazon Translateは、テキストを英語と他の言語間で翻訳するために使用されます。
- AWS Lambdaは、アプリケーションログを取得し、Amazon Translate SDKを使用してそれらを翻訳するためのコードを実行するための計算サービスです。
次の図は、ソリューションアーキテクチャを示しています。
このワークフローは次の手順で行われます:
- カスタムまたはサードパーティのアプリケーションがAmazon Elastic Compute Cloud(Amazon EC2)インスタンスにホストされ、生成されたアプリケーションログがCloudWatch LogsにCloudWatch Logsエージェントを介してアップロードされます。
- CloudWatch Logsに書き込まれた各ログエントリは、CloudWatchロググループにサブスクライブされたLambda関数をトリガーします。
- 関数はログエントリのコンテンツを処理し、Amazon Translate SDKのtranslate_textを使用してログのコンテンツを翻訳します。
- 翻訳されたログのコンテンツが関数に返されます。
- 関数は翻訳されたログのコンテンツを別のロググループに書き込みます。
このプロセスはリアルタイムで自動的に行われ、既存のアプリケーションがCloudWatchにログを書き込む方法に変更はありません。
前提条件
このソリューションの手順に従うには、AWS CloudFormation、Amazon Translate、CloudWatch、Lambda、およびIAMの権限を持つAWSアカウントとAWS Identity and Access Management(IAM)ユーザーが必要です。
ソリューションのデプロイ
始めるには、次のCloudFormationテンプレートを起動してLambda関数、2つのCloudWatchロググループ、およびIAMロールを作成します。デフォルトの設定でデプロイを進めてください。このテンプレートは約1分で完了します。
スタックが正常に作成されたら、Lambdaコンソールに移動し、translate-application-logs
という関数を確認できます。
関数にCloudWatch Logsトリガーが追加されていることがわかります。
ナビゲーションペインでConfigurationタブを選択し、Triggersを選択することで、トリガーの構成の詳細を表示できます。
トリガーがロググループ/applicationlogs
からのログイベントにサブスクライブするように構成されていることを確認できます。ここには、非英語のアプリケーションログが書き込まれます。
次に、ナビゲーションペインでEnvironment variablesを選択します。
ここでは、2つの環境変数が提供されています:
- source_language – アプリケーションログが元々の言語です(例:jaは日本語)
- target_language – アプリケーションログを翻訳する対象言語です(例:enは英語)
サポートされている言語のリストについては、「サポートされている言語と言語コード」を参照してください。
次に、「コード」タブに移動し、関数のロジックを確認してください:
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の非英語ログを自動的に翻訳し、環境にソリューションを展開するためのステップバイステップのガイダンスを提供します。この実装により、開発者は言語の壁をスムーズに乗り越えることができ、問題を迅速かつ効果的に解決することができます。
この実装を試して、コメントでご意見をお聞かせください。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles