ASP.NETなアプリをInstanaで可視化してみる

あっと言う間に12月も半分が過ぎてしまいました。早いですよね〜
でもまだAdvent Calendarエントリ続けますよ！カワノです！よろしくお願いします。

そんなわけで、この記事はInstana Observability Advent Calendar 2024 19日目のエントリになります。

# はじめに
皆さん、.NETなアプリケーションの可視化ってしてますか？
じつは私のお客様はJavaがほとんどで、たまにNode.jsやPythonがいる程度です。
私自信、2020年頃に前職で.NETを触っていたころを最後に情報アップデートをしておらず、ちょうどAdvent Calendarのネタ何にしよう？と考えていたところなので 久しぶりにちょっと触ってみようと思います。

## 環境
気軽に触りたかったので、Azureに最小限の環境を作りました。
* インスタンスタイプ：Standard_F2s_v2
* CPU：2Core
* メモリ：4GB
* Disk：130GB
* OS：Windows Server 2019 Datacenter

### IISセットアップ
役割と機能は以下の通り
![スクリーンショット 2024-12-17 10.17.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/bd882930-8a8d-2539-5e96-be5071d56467.png)

## テストアプリケーション作成、デプロイ
今回は .NET Framework と .NET Core それぞれのアプリケーションを作成してみます。
作成手順はdotnetな記事たくさんあるので、省きます。
_※) ちなみに、アプリケーションは業務外に個人スキルアップを目的として作成しています。_

### .NET Framework / ASP.NET MVC
伝統的なASP.NET MVCテンプレートアプリケーションを作成しました。
.NET Framework のバージョンは 4.7.2 です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/2aa4723c-d2bf-e7f9-8bc9-25bcb73a8d79.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/987fe800-0fc5-1a35-cf99-7f08fed5b72d.png)

### .NET Core / ASP.NET Core
最新の.NETって 9 までバージョンアップしてるんですね！ 
.NET 9は リリースされたばかりということなので、今回は.NET 8でアプリを構築しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/14785859-0f70-8e24-0d2f-5d8f0e06861c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/a8e48f09-a902-8caa-2ee4-e103ec5dc643.png)

### ポーリングスクリプト
Instanaで可視化するために、テストアプリケーションに定期的にアクセスするPowershellスクリプトを実行します。
あまり考えていません。ひたすらアクセスしているだけです。
```powershell
while ($true) {curl.exe -m 1 -s -o NUL -w "%{http_code}" http://localhost/webapp1;start-sleep 1}
```
```powershell
while ($true) {curl.exe -m 1 -s -o NUL -w "%{http_code}" http://localhost/webapp2;start-sleep 1}
```

## Instana Agentセットアップ
Windows インストーラを使いました。Linuxワンライナーも簡単ですが、こちらも簡単ですね。Configuration入力がちょっと手間ですけど。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/cd40a62c-a057-7dc9-c5bc-ae4b5f219d2e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/fb1f1efe-22ee-0dff-b939-915c78d574c0.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/cf6aed62-30ee-47a8-5deb-5a3e17230662.png)

導入後は instana-agent.exe と InstanaPCP.exe が稼動していることを確認できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/45629cb3-daeb-db3f-be17-bbf2426268b5.png)

## Instana 導入直後の状況
Instana Agentは導入されていますが、設定ファイル(Configuration.yaml)は設定変更していません。
その状態でどこまで参照できるでしょうか？

### インフラストラクチャ
以下の情報を見ることができます。
* ホスト(OS)
* IIS
* Instana Agent
* .Net Frameworkアプリ (DefaultAppPool)
* powershell (curlを定期実行しているコマンドプロンプト)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/e1a561fa-ff6d-09c9-76a6-7d92009bb12b.png)

![スクリーンショット 2024-12-17 11.13.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/a94c41be-08cc-8bec-885c-7fd48551a42c.png)

### アプリケーション
ASP.NET .Net Framework Webアプリケーションは可視化されていますが、
ASP.NET Core Webアプリケーションは可視化されていません。

ちなみに、デフォルトのサービス名は `{region}-{hostname}`ですね。
今回の環境は `region: japaneast`, `hostname: win-app1` なので `japaneast-win-app1` と表示されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/52048c78-cd95-ee6a-89a8-29a0f5e27a95.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/a8403f62-d715-012f-e3af-752bb7fdbb01.png)

サービス名規則と変更方法については、Instanaの下記ドキュメントを参照ください。

https://www.ibm.com/docs/ja/instana-observability/current?topic=applications-services

## IIS上の ASP.NET Core Webアプリケーションの可視化

IIS上の.NET Framework ASP.NET Webアプリは追加設定なしにすぐに可視化されますが、**.NET Core ASP.NET Coreアプリは設定が必要なため、可視化されていません。**

.NET Coreアプリも可視化しましょう。



### 準備
1. Instana Agentと Instana PCPプロセスが起動していることを確認します
これは一番最初に確認しているので、省略します。
2. nugetコマンドが事項できること
以下よりnugetをダウンロードします。インストーラとかじゃなくて、exe単体っていう潔さ...
https://dist.nuget.org/win-x86-commandline/latest/nuget.exe

### Instana パッケージのダウンロード と配置
#### アプリのリビルド、コンパイルができる方向け
アプリのリビルドができる方は、nugetで以下の2つのライブラリをアプリに導入しビルドしてください。
* Instana.Tracing.Core
* Instana.Tracing.Core.Rewriter.Windows
できない方は、以下の作業を実施ください。

#### Instana パッケージのダウンロード
以下のコマンドを実行して、Instanaパッケージをダウンロードします
```
nuget install Instana.Tracing.Core
nuget install Instana.Tracing.Core.Rewriter.Windows
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/9dcb95ba-d9d2-b0df-0b10-a67f857e437e.png)
(Core が COre になっちゃってますがご愛嬌ということで...)

#### Instanaパッケージを配置
※) この作業は必須ではありません。次のパス通しをちゃんと実施すればOKですがごちゃごちゃするので合わせます。
nuget installを実行したフォルダにて、以下を実行します(パスは変わるので適宜置き換えてご参照ください)
##### nuget installを実行したフォルダ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/5cc8705e-9eb9-b35a-4f42-3dd32467e764.png)

##### dllをアプリにコピー実行
```
copy Instana.Tracing.Core.1.286.3\lib\netstandard2.0\* C:\inetpub\wwroot\webapp2
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/0ffe36b1-094e-4a67-ecbe-e6833152ee0c.png)

```
mkdir C:\inetpub\wwroot\webapp2\instana_tracing
copy Instana.Tracing.Core.Rewriter.Windows.1.286.3\contentFiles\any\any\instana_tracing C:\inetpub\wwroot\webapp2\instana_tracing
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/411acffe-8503-0f4f-6676-0dd4fb80845c.png)

### アプリの設定にInstanaパッケージを追記
アプリのWeb.config に、環境変数として以下の設定を追記し、**アプリケーションを再起動**します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/b3c734cd-93f9-dfa2-a775-e1b462bd2d5c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/fb9dec5f-76da-5e4a-ed15-1ec36f343926.png)

注1) 相対パスではなく絶対パスで記載してください
注2) Web.configの編集が不可な場合、環境変数に同様の設定を行うことができます。

### 可視化確認
ASP.NET .NET Framework Webアプリだけではなく、ASP.NET Core Webアプリも可視化されました！
(パスの規則が.NET Frameworkとあっておらず微妙ですが)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/c5c054de-e86b-0315-6a70-e2439451c4b9.png)

また、インフラストラクチャでも.NET Frameworkアプリだけではなく、.NET Coreアプリも認識されていますね！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/d055b32c-4a1a-03cc-5546-94723a389297.png)

## 最後に
.NET Frameworkアプリは追加設定なしでInstanaで可視化可能ですが、.NET Coreアプリは追加設定が必要です。
最近のアプリケーションは.NET Coreが主流ですので、.NETアプリをInstanaで可視化する際は、nugetでInstanaライブラリを導入することを念頭に置いていただければ幸いです！

それでは！