

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# NLog を使用して Amazon CloudWatch Logs 内の.NET アプリケーションのロギングを設定します
<a name="configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog"></a>

*Bibhuti Sahu and Rob Hill (AWS) (Amazon Web Services)*

## 概要
<a name="configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog-summary"></a>

このパターンでは、NLog オープンソースのロギングフレームワークを使用して、.NET アプリケーションの使用状況とイベントを「[Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html)」に記録する方法について説明します。CloudWatch コンソールでは、アプリケーションのログメッセージをほぼリアルタイムで見ることができます。メトリックスを設定し、「[メトリクス](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/MonitoringLogData.html)」のしきい値を超えた場合に通知するように「[アラーム](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ConsoleAlarms.html)」を設定することもできます。CloudWatch Application Insights を使用すると、監視対象アプリケーションの潜在的な問題を示す自動またはカスタムのダッシュボードを表示できます。CloudWatch Application Insights は、アプリケーションとインフラストラクチャに関する進行中の問題をすばやく切り分けることができるように設計されています。

CloudWatch Logs にログメッセージを書き込むには、`AWS.Logger.NLog` NuGet パッケージを.NET プロジェクトに追加します。次に、CloudWatch Logs をターゲットとして使用するように `NLog.config` ファイルを更新します。

## 前提条件と制限
<a name="configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog-prereqs"></a>

**前提条件**
+ アクティブな AWS アカウント。
+ .NET ウェブアプリケーションまたはコンソールアプリケーション:
  + サポートされている.NET Framework バージョンまたは.NET Core バージョンを使用します。詳細については、「*製品バージョン*」を参照してください。
  + NLog を使用してログデータをアプリケーションインサイトのに送信します。
+ AWS サービスの IAM ロールを作成するアクセス許可。詳細については、「[サービスロールのアクセス許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#id_roles_create_service-permissions)」を参照してください。
+ AWS サービスにロールを渡すためのアクセス許可。詳細については、[Granting a user permissions to pass a role to an AWS service](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html) を参照してください。

**製品バージョン**
+ .NET Framework バージョン 3.5 またはそれ以降
+ .NET Core バージョン 1.0.1、2.0.0、またはそれ以降

## アーキテクチャ
<a name="configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog-architecture"></a>

**ターゲットテクノロジースタック**
+ NLog
+ Amazon CloudWatch Logs

**ターゲットアーキテクチャ**

![.NET アプリケーションのログデータを Amazon CloudWatch ログに書き込む NLog のアーキテクチャ図](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/0ac9c3ad-2a28-415f-afc3-7fe3494b2b63/images/daea9f2f-7242-4ed2-843e-655d843dcfdf.png)


1. .NET アプリケーションは NLog ロギングフレームワークにログデータを書き込みます。

1. NLog は CloudWatch Logs にログデータを書き込みます。

1. CloudWatch アラームとカスタムダッシュボードを使用して .NET アプリケーションをモニタリングします。

## ツール
<a name="configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog-tools"></a>

**AWS サービス**
+ 「[Amazon CloudWatch Application Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html)」は、アプリケーションと、その基盤となる AWS のリソースに対するオブザーバビリティを実現します。
+ 「[Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html)」は、すべてのシステム、アプリケーション、 からのログを一元化するのに役立ちます。一元化により、ログを監視して安全にアーカイブできます。
+ 「[AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)」は、AWS リソースへのアクセスを安全に管理し、誰が認証され、使用する権限があるかを制御するのに役立ちます。
+ 「[AWS Tools for PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-welcome.html)」は PowerShell モジュールのセットで、PowerShell コマンドラインから AWS リソースに対するオペレーションのスクリプトを作成できます。

その他のツール
+ 「[Logger.nLog](https://www.nuget.org/packages/AWS.Logger.NLog)」は、ログデータを CloudWatch Logs に記録する NLog ターゲットです。
+ 「[NLog](https://nlog-project.org/)」は .NET プラットフォーム用のオープンソースのロギングフレームワークで、データベース、ログファイル、コンソールなどのターゲットにログデータを書き込むのに役立ちます。
+ 「[PowerShell](https://learn.microsoft.com/en-us/powershell/)」は Windows、Linux、および macOS で動作するMicrosoft の自動化および構成管理プログラムです。
+ 「[Visual Studio](https://docs.microsoft.com/en-us/visualstudio/get-started/visual-studio-ide?view=vs-2022)」は、コンパイラー、コード補完ツール、グラフィカルデザイナー、およびソフトウェア開発をサポートするその他の機能を含む統合開発環境 (IDE) です。

## ベストプラクティス
<a name="configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog-best-practices"></a>
+ ターゲットロググループの「[保存ポリシー](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html#SettingLogRetention)」を設定します。これは NLog 設定の外部で行う必要があります。デフォルトでは、ログデータは CloudWatch Logs に無期限に保存されます。
+ 「[AWS アクセスキーを管理するためのベストプラクティス](https://docs.aws.amazon.com/accounts/latest/reference/credentials-access-keys-best-practices.html)」を遵守します。

## エピック
<a name="configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog-epics"></a>

### アクセスとツールのセットアップ
<a name="set-up-access-and-tools"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| IAM ポリシーを作成します。 | IAM ドキュメントの「[JSON エディタを使ったポリシーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html#access_policies_create-json-editor)」の指示に従ってください。次の JSON ポリシーを入力します。このポリシーには、CloudWatch Logs にログの読み取りと書き込みを許可するのに必要な最小特権のアクセス権限があります。<pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Effect": "Allow",<br />            "Action": [<br />                "logs:CreateLogGroup",<br />                "logs:CreateLogStream",<br />                "logs:GetLogEvents",<br />                "logs:PutLogEvents",<br />                "logs:DescribeLogGroups",<br />                "logs:DescribeLogStreams",<br />                "logs:PutRetentionPolicy"<br />            ],<br />            "Resource": [<br />                "*"<br />            ]<br />        }<br />    ]<br />}</pre> | AWS 管理者、AWS DevOps | 
| IAM ロールを作成します。 | IAM ドキュメントの「[AWS のサービスにアクセス許可を委任するロールの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)」の手順に従ってください。前に作成したポリシーを選択します。これは、CloudWatch Logs がロギングアクションを実行するために引き受けるロールです。 | AWS 管理者、AWS DevOps | 
| AWS Tools for PowerShellのセットアップ。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog.html) | AWS 全般 | 

### NLog を設定
<a name="configure-nlog"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| NuGet パッケージをインストールします。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog.html) | アプリ開発者 | 
| ロギングターゲットを設定します。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog.html)設定ファイルのサンプルについては、このパターンの「[追加情報](#configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog-additional)」セクションを参照してください。アプリケーションを実行すると、NLog がログメッセージを書き込んで CloudWatch Logs に送信します。 | アプリ開発者 | 

### ログの検証とモニタリング
<a name="validate-and-monitor-logs"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| ロギングを検証する。 | CloudWatch Logs ドキュメントの「[CloudWatch Logs に送信されたログデータを表示する](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html#ViewingLogData)」の指示に従ってください。.NET アプリケーションのログイベントが記録されていることを確認します。ログイベントが記録されていない場合は、このパターンの「[トラブルシューティング](#configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog-troubleshooting)」セクションを参照してください。 | AWS 全般 | 
| .NET アプリケーションスタックを監視します。 | ユースケースの必要に応じて CloudWatch でモニタリングを設定します。「[CloudWatch ログインサイト](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html)」、「[CloudWatch メトリクスインサイト](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/query_with_cloudwatch-metrics-insights.html)」、および「[CloudWatch アプリケーションインサイト](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html)」を使用して、.NET ワークロードをモニタリングできます。アラートを受信できるように「[アラーム](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)」を設定したり、1 つのビューからワークロードを監視するためのカスタム「[ダッシュボード](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)」を作成したりすることもできます。 | AWS 全般 | 

## トラブルシューティング
<a name="configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog-troubleshooting"></a>


| 問題 | ソリューション | 
| --- | --- | 
| ログデータは CloudWatch Logs には表示されません。 | IAM ポリシーが CloudWatch Logs が引き受ける IAM ロールにアタッチされていることを確認します。手順については、「[エピック](#configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog-epics)」セクションの「*アクセスとツールのセットアップ*」セクションを参照してください。 | 

## 関連リソース
<a name="configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog-resources"></a>
+ 「[ロググループとログストリームの操作](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html)」(CloudWatch Logsドキュメント)
+ 「[Amazon CloudWatch Logs と.NET ロギングフレームワーク](https://aws.amazon.com/blogs/developer/amazon-cloudwatch-logs-and-net-logging-frameworks/)」(AWS ブログ記事)

## 追加情報
<a name="configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog-additional"></a>

次に、サンプル `NLog.config` ファイルを示します。

```
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog" />
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
  </startup>
  <nlog>
    <extensions>
      <add assembly="NLog.AWS.Logger" />
    </extensions>
    <targets>
      <target name="aws" type="AWSTarget" logGroup="NLog.TestGroup" region="us-east-1" profile="demo"/>
    </targets>
    <rules>
      <logger name="*" minlevel="Info" writeTo="aws" />
    </rules>    
  </nlog>
</configuration>
```