Morning Girl

Web API, Windows, C#, .NET, Dynamics 365/CRM etc..

【Azure】【Storage】【NLog】Azure Table StorageにNLogを出力してみた

前回のSendGridでNlogを飛ばすのにつづいて、

Azure Table StorageにNlogを出力するライブラリがあったので、使ってみました。

github.com

(他にもhttps://github.com/harouny/NLog.Extensions.AzureTableStorageがありますね。一応違うものなのでご注意)

これでクラウドベースのログ管理が捗る!

WebJobだったら、Console.Writelineが結果として出力されますが、さすがに毎回それを見るのもナンセンスなので。

どんな感じになるの?

以下のような感じで、Azure StorageにLogが出力されます。

Azure Storage Explorerで結構見やすく表示できますね。CSVエクスポートなどにも対応しているのもいいですね。

f:id:sugimomoto:20170224235336p:plain

ここからPower BIなどと合わせて、エラー状況を分析することも手軽にいけるかなぁと思います。

Azure Storageの作成する

なにはともあれ、まずはAzure Storageを作ります。

azure.microsoft.com

f:id:sugimomoto:20170224235353p:plain

f:id:sugimomoto:20170224235357p:plain

設定パラメータに関しては、以下のBlogが詳しいです。ありがたい!!

azure-recipe.kc-cloud.jp

デプロイモデルがちょっとよくわからないですが、もうほとんどの地域では選べないっぽいので割愛。

docs.microsoft.com

アカウントの種類は汎用かBLOBストレージが選べますが、今回はTableを利用したいので、汎用一択かな?

パフォーマンスはPremiumにするとSSDになるので、レスポンスがよくなるっぽいですが、Log用だと不要かなと思います。

こんな感じでとりあえず作成します。

作成後、後ほど接続文字列構成のためにアクセスキーが必要になるので、以下の情報を控えておきます。

f:id:sugimomoto:20170224235405p:plain

出力プログラムの作成

Nugetから以下のパッケージをダウンロードします。

www.nuget.org

f:id:sugimomoto:20170224235411p:plain

インストールしたら、NLogのConfigファイルを設定します。

以下のような感じ。

各種パラメータの指定方法は以下の通り。

項目名 説明
name Target名。Ruleとの関連付けに使用
xsi:type Nlogの出力タイプ指定。このライブラリを使う場合はAzureTableStorageで固定
PartitionKey Logを分類するための項目フォーマット。例:${date}.${logger} YYYY/MM/DDとLogLevelなどを組み合わせておいておくのがベターかな? 別に自由に指定していいっぽいですね。
RowKey ログの一意指定をするため用の項目フォーマット。例:${ticks}.${guid} GUIDなどをおいておくのがベター? でも重複してもいいっぽい。
ConnectionString Azure Storage への接続文字列。DefaultEndpointsProtocol=https;AccountName=***;AccountKey=xxxxxxx==
tableName Azure Storage の対象となるテーブル名。なお、接続先のAzure Storageに無い場合は自動的に作成されるっぽいです。

あとは通常のNLogと同じように出力すればOK