SlideShare a Scribd company logo
1 of 36
#vsucjp
.NET Core Generic Host のログを
Azure Application Insights で見てみよう!
2020/07/04 VSUC #5
@tsubakimoto_s
#vsucjp
松村 優大 (Yuta Matsumura)
Chief Technical Architect (C#, PHP, Azure)
Microsoft MVP (Development Technologies)
Fukuoka.NET Organizer
@tsubakimoto_s
Currently working for
#vsucjp
今日のテーマ
1. .NET Core の2つのホスト形式の紹介
2. アプリのログを Application Insights に集める
3. 汎用ホストのアプリケーションを ACI で動かす
4. まとめ
#vsucjp
Webホスト と 汎用ホスト
.NET Core には 2つのホスト形式があります。
1. Web ホスト ... HTTP サーバーを起動するための構成
2. 汎用ホスト ... 上記以外のアプリを起動するための構成
→コンソールアプリ、バックグラウンドアプリ など
#vsucjp
Webホスト と 汎用ホスト
.NET Core には 2つのホスト形式があります。
1. Web ホスト ... HTTP サーバーを起動するための構成
2. 汎用ホスト ... 上記以外のアプリを起動するための構成
→コンソールアプリ、バックグラウンドアプリ など
#vsucjp
コンソールアプリのコードを比較 (Program.cs)
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
class Program
{
static void Main(string[] args) =>
CreateHostBuilder(args).Build().Run();
static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
});
}
素のコンソールアプリ 汎用ホストのコンソールアプリ
#vsucjp
コンソールアプリのコードを比較 (Program.cs)
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
class Program
{
static void Main(string[] args) =>
CreateHostBuilder(args).Build().Run();
static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
});
}
素のコンソールアプリ 汎用ホストのコンソールアプリ
#vsucjp
CreateDefaultBuilder で行われること
• ルートパスの設定 (Directory.GetCurrentDirectory)
• 設定の読込 (環境変数、appsettings.json、シークレット等)
• ログプロバイダーの追加
• Console, Debug, EventSource, EventLog (windows only)
• スコープの検証と依存関係の検証の有効化 (開発環境のみ)
#vsucjp
コンソールアプリのコードを比較 (Program.cs)
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
class Program
{
static void Main(string[] args) =>
CreateHostBuilder(args).Build().Run();
static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
});
}
素のコンソールアプリ 汎用ホストのコンソールアプリ
#vsucjp
ConfigureServices で行われること
• 依存性注入 (Dependency Injection)
• ASP.NET Core で提供されている機能と同等
• 以下は自動的に登録される
• IHostApplicationLifetime
• IHostLifetime
• IWebHostEnvironment
#vsucjp
IHostApplicationLifetime
• 3つのイベントに処理を登録できる
• アプリケーション起動後
• アプリケーション終了時
• アプリケーション終了後
グレースフルシャットダウン
(正常なシャットダウン)
#vsucjp
Ctrl + C で停止
#vsucjp
汎用ホストアプリケーションに
Azure Application Insights を使用する
https://github.com/tsubakimoto/vscommunity-sample
#vsucjp
セットアップ
1. .NET Core コンソールアプリケーションの作成
2. NuGet パッケージのインストール
Microsoft.ApplicationInsights.WorkerService
3. 汎用ホストの構成に変更
4. appsettings.json の追加
+インストゥルメンテーションキーの追加
+プロジェクト設定
5. テレメトリクライアントを DI に登録
#vsucjp
$ dotnet new console -n VsCommuunitySample
$ cd VsCommuunitySample
$ dotnet add package Microsoft.ApplicationInsights.WorkerService
$ dotnet add package Microsoft.Extensions.Hosting
$ touch appsettings.json
#vsucjp
#vsucjp
インストゥルメンテーションキー
デフォルトのログレベル (標準出力)
Application Insights のログレベル
#vsucjp
ビルド時に appsettings.json を出力フォルダにコピー
#vsucjp
テレメトリ収集のための実装
1. テレメトリクライアントを DI から取り出す
2. “操作”の作成 (StartOperation メソッド)
3. ILogger でログを記述
4. 最終的にテレメトリを送信する (Flush メソッド)
5. アプリケーション終了前に数秒待機
#vsucjp
テレメトリクライアントの取り出し
操作の作成、ログの出力
#vsucjp
起動後の処理
終了時の処理
終了後の処理
#vsucjp
インメモリのテレメトリを送信
送信後からプロセス終了までに数秒待機が必要
#vsucjp
#vsucjp
Azure で汎用ホストアプリを動かすには
つまりコンソールアプリケーションを動かすには
• Web Apps (WebJobs)
• Web App for Containers
• Azure Container Instances (ACI)
• Azure Kubernetes Service (AKS)
#vsucjp
Q. バッチなら Azure Functions でいいのでは?
• コンテナー+汎用ホストアプリケーション
• 可搬性を保ちたい
• ファイル等のリソースを扱う (コンテナー実行後に破棄)
• Azure Functions でのバッチ
• 上記以外の場合
• トリガーが必要な場合
#vsucjp
Q. バッチなら Azure Functions でいいのでは?
• コンテナー+汎用ホストアプリケーション
• 可搬性を保ちたい
• ファイル等のリソースを扱う (コンテナー実行後に破棄)
• Azure Functions でのバッチ
• 上記以外の場合
• トリガーが必要な場合
#vsucjp
https://github.com/tsubakimoto/vscommunity-sample
#vsucjp
#vsucjp※ Azure Cloud Shell で以下のコマンドを実行する
$ git clone https://github.com/tsubakimoto/vscommunity-sample.git
$ cd vscommunity-sample/VsCommuunitySample
$ az acr build --image generichostsample:v1 ¥
--registry {your-azure-container-registry-name} ¥
--file Dockerfile .
ACR Tasks
ソースコード及び Dockerfile を使って、
コンテナーイメージのビルドを自動化する機能
#vsucjp
#vsucjp
#vsucjp
#vsucjp
アプリ内の操作および ILogger のログ
#vsucjp
Azure Container Instances で実行した
#vsucjp
リンク集
• https://github.com/tsubakimoto/vscommunity-sample
• https://docs.microsoft.com/ja-jp/azure/azure-monitor/app/worker-service
• https://github.com/microsoft/ApplicationInsights-dotnet/issues/407
• https://docs.microsoft.com/ja-jp/aspnet/core/fundamentals/host/generic-
host?view=aspnetcore-3.1
• https://docs.microsoft.com/ja-jp/azure/container-registry/container-registry-
tasks-overview
• https://docs.microsoft.com/ja-jp/azure/container-instances/container-instances-
environment-variables
#vsucjp
まとめ
• .NET Core の汎用ホストには、コンソールアプリケーション
やバックグラウンドアプリケーションの用途で使える
• Application Insights でのテレメトリ収集には
Microsoft.ApplicationInsights.WorkerService を使う
• アプリケーション終了時に Task.Delay(n).Wait() が必要
• コンテナーイメージを作るパイプラインに ACR Tasks 便利
※ Azure Pipelines もオススメ

More Related Content

More from Yuta Matsumura

マイクロサービス開発が捗る Project Tye
マイクロサービス開発が捗る Project Tyeマイクロサービス開発が捗る Project Tye
マイクロサービス開発が捗る Project TyeYuta Matsumura
 
オンライン中心だから地方のコミュニティも見てみませんか? - Fukuoka.NETの紹介
オンライン中心だから地方のコミュニティも見てみませんか? - Fukuoka.NETの紹介オンライン中心だから地方のコミュニティも見てみませんか? - Fukuoka.NETの紹介
オンライン中心だから地方のコミュニティも見てみませんか? - Fukuoka.NETの紹介Yuta Matsumura
 
Azure の ID 管理サービスに LINE ログインを組み込もう
Azure の ID 管理サービスに LINE ログインを組み込もうAzure の ID 管理サービスに LINE ログインを組み込もう
Azure の ID 管理サービスに LINE ログインを組み込もうYuta Matsumura
 
Blazor Server テンプレート解説
Blazor Server テンプレート解説Blazor Server テンプレート解説
Blazor Server テンプレート解説Yuta Matsumura
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#Yuta Matsumura
 
改めて C# でできることを振り返る
改めて C# でできることを振り返る改めて C# でできることを振り返る
改めて C# でできることを振り返るYuta Matsumura
 
スタートアップ企業が実践するクラウドネイティブアプリケーションの開発手法
スタートアップ企業が実践するクラウドネイティブアプリケーションの開発手法スタートアップ企業が実践するクラウドネイティブアプリケーションの開発手法
スタートアップ企業が実践するクラウドネイティブアプリケーションの開発手法Yuta Matsumura
 
忙しい人のための .NET Conf 2019 まとめ
忙しい人のための .NET Conf 2019 まとめ忙しい人のための .NET Conf 2019 まとめ
忙しい人のための .NET Conf 2019 まとめYuta Matsumura
 
.NET Conf の歩き方
.NET Conf の歩き方.NET Conf の歩き方
.NET Conf の歩き方Yuta Matsumura
 
PHPカンファレンス福岡2019 閉会式
PHPカンファレンス福岡2019 閉会式PHPカンファレンス福岡2019 閉会式
PHPカンファレンス福岡2019 閉会式Yuta Matsumura
 
PHPカンファレンス福岡2019 開会式
PHPカンファレンス福岡2019 開会式PHPカンファレンス福岡2019 開会式
PHPカンファレンス福岡2019 開会式Yuta Matsumura
 
これから始める Bot Builder 開発のコツと舞台裏
これから始める Bot Builder 開発のコツと舞台裏これから始める Bot Builder 開発のコツと舞台裏
これから始める Bot Builder 開発のコツと舞台裏Yuta Matsumura
 
ASP.NET Core 2.x Identityについて
ASP.NET Core 2.x IdentityについてASP.NET Core 2.x Identityについて
ASP.NET Core 2.x IdentityについてYuta Matsumura
 
C# runs anywhere, make anything
C# runs anywhere, make anythingC# runs anywhere, make anything
C# runs anywhere, make anythingYuta Matsumura
 
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方Yuta Matsumura
 
オルターブースが実践する .NET Core “ガチ” 開発
オルターブースが実践する .NET Core “ガチ” 開発オルターブースが実践する .NET Core “ガチ” 開発
オルターブースが実践する .NET Core “ガチ” 開発Yuta Matsumura
 
サーバーレスの常識を覆す Azure Durable Functionsを使い倒す
サーバーレスの常識を覆す Azure Durable Functionsを使い倒すサーバーレスの常識を覆す Azure Durable Functionsを使い倒す
サーバーレスの常識を覆す Azure Durable Functionsを使い倒すYuta Matsumura
 
未知との交信!?Project SignalR
未知との交信!?Project SignalR未知との交信!?Project SignalR
未知との交信!?Project SignalRYuta Matsumura
 
サーバーレスやマイクロサービスへの"チャレンジ"を後押ししてくれるセッションを紹介
サーバーレスやマイクロサービスへの"チャレンジ"を後押ししてくれるセッションを紹介サーバーレスやマイクロサービスへの"チャレンジ"を後押ししてくれるセッションを紹介
サーバーレスやマイクロサービスへの"チャレンジ"を後押ししてくれるセッションを紹介Yuta Matsumura
 

More from Yuta Matsumura (20)

マイクロサービス開発が捗る Project Tye
マイクロサービス開発が捗る Project Tyeマイクロサービス開発が捗る Project Tye
マイクロサービス開発が捗る Project Tye
 
オンライン中心だから地方のコミュニティも見てみませんか? - Fukuoka.NETの紹介
オンライン中心だから地方のコミュニティも見てみませんか? - Fukuoka.NETの紹介オンライン中心だから地方のコミュニティも見てみませんか? - Fukuoka.NETの紹介
オンライン中心だから地方のコミュニティも見てみませんか? - Fukuoka.NETの紹介
 
Azure の ID 管理サービスに LINE ログインを組み込もう
Azure の ID 管理サービスに LINE ログインを組み込もうAzure の ID 管理サービスに LINE ログインを組み込もう
Azure の ID 管理サービスに LINE ログインを組み込もう
 
Blazor Server テンプレート解説
Blazor Server テンプレート解説Blazor Server テンプレート解説
Blazor Server テンプレート解説
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#
 
改めて C# でできることを振り返る
改めて C# でできることを振り返る改めて C# でできることを振り返る
改めて C# でできることを振り返る
 
スタートアップ企業が実践するクラウドネイティブアプリケーションの開発手法
スタートアップ企業が実践するクラウドネイティブアプリケーションの開発手法スタートアップ企業が実践するクラウドネイティブアプリケーションの開発手法
スタートアップ企業が実践するクラウドネイティブアプリケーションの開発手法
 
忙しい人のための .NET Conf 2019 まとめ
忙しい人のための .NET Conf 2019 まとめ忙しい人のための .NET Conf 2019 まとめ
忙しい人のための .NET Conf 2019 まとめ
 
.NET Conf の歩き方
.NET Conf の歩き方.NET Conf の歩き方
.NET Conf の歩き方
 
PHPカンファレンス福岡2019 閉会式
PHPカンファレンス福岡2019 閉会式PHPカンファレンス福岡2019 閉会式
PHPカンファレンス福岡2019 閉会式
 
PHPカンファレンス福岡2019 開会式
PHPカンファレンス福岡2019 開会式PHPカンファレンス福岡2019 開会式
PHPカンファレンス福岡2019 開会式
 
これから始める Bot Builder 開発のコツと舞台裏
これから始める Bot Builder 開発のコツと舞台裏これから始める Bot Builder 開発のコツと舞台裏
これから始める Bot Builder 開発のコツと舞台裏
 
ASP.NET Core 2.x Identityについて
ASP.NET Core 2.x IdentityについてASP.NET Core 2.x Identityについて
ASP.NET Core 2.x Identityについて
 
C# runs anywhere, make anything
C# runs anywhere, make anythingC# runs anywhere, make anything
C# runs anywhere, make anything
 
.NET Coreのいろは
.NET Coreのいろは.NET Coreのいろは
.NET Coreのいろは
 
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
 
オルターブースが実践する .NET Core “ガチ” 開発
オルターブースが実践する .NET Core “ガチ” 開発オルターブースが実践する .NET Core “ガチ” 開発
オルターブースが実践する .NET Core “ガチ” 開発
 
サーバーレスの常識を覆す Azure Durable Functionsを使い倒す
サーバーレスの常識を覆す Azure Durable Functionsを使い倒すサーバーレスの常識を覆す Azure Durable Functionsを使い倒す
サーバーレスの常識を覆す Azure Durable Functionsを使い倒す
 
未知との交信!?Project SignalR
未知との交信!?Project SignalR未知との交信!?Project SignalR
未知との交信!?Project SignalR
 
サーバーレスやマイクロサービスへの"チャレンジ"を後押ししてくれるセッションを紹介
サーバーレスやマイクロサービスへの"チャレンジ"を後押ししてくれるセッションを紹介サーバーレスやマイクロサービスへの"チャレンジ"を後押ししてくれるセッションを紹介
サーバーレスやマイクロサービスへの"チャレンジ"を後押ししてくれるセッションを紹介
 

Recently uploaded

新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価sugiuralab
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールsugiuralab
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 

Recently uploaded (7)

新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 

.NET Core Generic Host のログをAzure Application Insights で見てみよう!