
こんにちは。クラウド事業部の遠見です。
前回に続いて、Microsoft Learn(以下、MS Learn)のラーニングコースでオブザーバビリティを学習しています。
今回は、以下のコースで実際に環境を構築してAzure Application InsightsやGrafana、Prometheus、Zipkinを動かしました。
英語版
Implement observability in a cloud-native .NET 8 application with OpenTelemetry
日本語版
OpenTelemetry を使用してクラウドネイティブの .NET 8 アプリケーションで可観測性を実装する
この記事では、コース通りに進めても「あれ、動かない?」となるポイントがいくつかあったので、そのトラブルシューティングを中心にまとめたいと思います。
目次
この記事の対象者
- Azureでオブザーバビリティを簡単に触れてみたい人
- オブザーバビリティを学習中で、手っ取り早く色んなツールを試してみたい人
あくまで、オブザーバビリティの学習の中で手っ取り早く色んなツールを試したい、というところに焦点を当てています。
サービスやツールの用語、構築や実装に関する説明は必要最低限に留めています。
検証日時
2026年3月4日の情報となります。
環境構築のトラブルシューティング
ハンズオン手順は英語版をメインで使おう
まず、ハンズオン手順の日本語版は一部で機械翻訳機能やAI翻訳機能が使われている場合があります。

今回に限らず、ハンズオンではこういったところでタイポしがちです(私だけかもしれません)。
無駄な時間を割かないためにも、英語版の手順を参照することをお勧めします。
GitHub Codespacesの作成ができない
ハンズオン用のリポジトリ(eShopLite - dotnet-observability)からCodespaceを作成する際、ハンズオン手順通りの構成で作成するとリカバリモードで立ち上がってしまいました。

ターミナルに表示されている通りCreation Logを見てみると、install.shの中でcommand not foundのエラーが出ていました。
... 0.226 ./install.sh: line 118: err: command not found 0.226 ERROR: Feature "Docker (docker-outside-of-docker)" (ghcr.io/devcontainers/features/docker-from-docker) failed to install! ... ...
このスクリプト自体は見つけることができませんでした。
Visual Studio Code(以下、VS Code)で構築する方法もハンズオン手順に載っていますが、個人的にはCodespaceの方が簡単でした。
あくまで目的は「オブザーバビリティの学習」なので、深堀せず「Default project configuration」を選択してCodespaceを立ち上げることでこの事象を回避しました。

.NETバージョンの不一致を解消する
ハンズオンの環境は.NET 8ベースで作られているようです。
しかし、検証時点のCodespaceでは、デフォルトで.NET 10がインストールされています。
@user ➜ /workspaces/mslearn-dotnet-cloudnative (main) $ dotnet --version 10.0.100
このまま進めていくと、ハンズオンの途中で.NETバージョンの不整合に出会いました。
そして、ハンズオンが正しく動作しなくなっていきました。
そこで、Codespaceに.NET 8をインストールすることにしました。
sudo apt-get update sudo apt-get install -y dotnet-sdk-8.0
インストールしただけだと、Codespaceはまだ.NET10を参照してしまいます。
これは、システムが標準で参照している場所(/usr/share/dotnet/sdk)とインストール先が異なるためです。
以下のコマンドで場所を確認し、シンボリックリンクを作成します。
# SDKの場所を確認(バージョン番号 8.0.xxx は環境に合わせて適宜読み替え) find /usr/lib/dotnet -name "8.0.*" # シンボリックリンクの作成 sudo ln -s /usr/lib/dotnet/sdk/8.0.xxx /usr/share/dotnet/sdk/ # 共有ライブラリのシンボリックリンクも作成(念のため) sudo ln -s /usr/lib/dotnet/shared/Microsoft.NETCore.App/8.0.xxx /usr/share/dotnet/shared/Microsoft.NETCore.App/ sudo ln -s /usr/lib/dotnet/shared/Microsoft.AspNetCore.App/8.0.xxx /usr/share/dotnet/shared/Microsoft.AspNetCore.App/
最後に、プロジェクトのルートで「この場所では8を使ってね」という指示書(global.json)を作成します。
# (バージョン番号 8.0.xxx は環境に合わせて適宜読み替え) dotnet new globaljson --sdk-version 8.0.xxx --force
これで dotnet --version が 8.0.xxx と表示されればOKです。
@user ➜ /workspaces/mslearn-dotnet-cloudnative (main) $ dotnet --version 8.0.124
VS Codeの拡張機能が動かない
ハンズオンには、VS Codeの「ソリューション エクスプローラー」パネルからプロジェクト参照を追加する操作があります。
これには、拡張機能「C# Dev Kit」のインストールが必要です。
拡張機能は正常にインストールできますが、.NETを完全に認識できていないのか、ハンズオン手順の中のメニューが出ませんでした。
その場合、ターミナルからコマンドを実行することで同等の作業が可能です。
dotnet-observability/eShopLiteディレクトリで、以下のようにコマンドから実行することでハンズオンを進めることができました。
# クラスライブラリ作成とソリューションへの追加 dotnet new classlib -o Diagnostics dotnet sln eShopLite.sln add Diagnostics/Diagnostics.csproj # プロジェクト参照の追加(ProductsからDiagnosticsへ) cd /workspaces/mslearn-dotnet-cloudnative/dotnet-observability/eShopLite/Products dotnet add reference ../Diagnostics/Diagnostics.csproj # プロジェクト参照の追加(StoreからDiagnosticsへ) cd /workspaces/mslearn-dotnet-cloudnative/dotnet-observability/eShopLite/Store dotnet add reference ../Diagnostics/Diagnostics.csproj
以下のように、ソリューションエクスプローラーにも反映されています。

Azure CLIがインストールできない
Azureのリソース操作に az コマンドが必要ですが、インストールスクリプトが失敗しました。
原因は、Codespaceに最初から入っているYarnのリポジトリ鍵が古くなっていることでした。
無関係なYarnのエラーに巻き込まれて apt-get update が止まってしまうようです。
今回はAzure CLIを優先するため、一旦Yarnのリポジトリをリストから外して対処しました。
Azure CLIのインストール方法は、公式ドキュメントを参照ください。
# エラーの原因(Yarn)を無効化 sudo rm /etc/apt/sources.list.d/yarn.list # Azure CLIをインストール curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
バージョンが確認できればインストールできています。
@user ➜ /workspaces/mslearn-dotnet-cloudnative/dotnet-observability (main) $ az --version azure-cli 2.84.0 ...
観測データが確認できない:Grafana(Prometheusデータソース)とZipkin
環境が整い、コンテナを立ち上げたら各ツールを確認します。
その中で、以下の部分で不具合がありました。
個人的な環境要因の可能性が高いですが、念のため記載します。
- Grafana: 自動でPrometheusデータソースが設定されない
- PrometheusのURLを手動でGrafanaのData Sourcesに追加しました。

- Zipkin: 何も表示されない
- ブラウザでeShopの在庫を適当にいじって通信を発生させたらグラフが表示されました。
環境構築のトラブルシューティングは、以上で終了です。
Tips
コンテナのリンク
起動したコンテナリンクのブラウザ表示は、Codespaceのターミナルのポートタブから地球マークをクリックすると、ポートフォワーディングされたURLをブラウザで開くことができます。
ハンズオン手順では、VS Codeのポップアップからリンクをクリックするようにと記載がありましたが、私の場合、なかなかうまくブラウザ表示してくれませんでした。

クリーンアップについて
ハンズオン手順では、Codespaceの削除のみの記載でしたが、Azure Application Insightsまで実施する場合、Azure側のリソース削除が必要です。
今回作られたリソースグループを削除するだけでOKです。

ちなみに、このハンズオンにおけるAzureの料金は、執筆時点では何もかかっていないように見えています。
ハンズオンで構築した各ツールを確認してみる
実際にハンズオン環境で確認した各ツール画面を少し見ていこうと思います。
Prometheus
Prometheusは、システムの「メトリクス(数値データ)」を収集して蓄積するためのツールです。
具体的には、CPUの使用率やメモリの空き状況、時系列の数値を定期的に取得(プル)して保存してくれます。
以下は、ハンズオン手順にあった「注文ボタンが何回押されたか」という時系列グラフです。

Grafana
Grafanaは、Prometheusなどが集めたデータを「美しく見える化」するためのダッシュボードツールです。
今回のハンズオンでは、ブラウザ上でリアルタイムに折れ線グラフやゲージを表示させ、システムの動きを視覚的に体験できます。

Zipkin
Zipkinは、分散トレーシング(処理の追跡)を行うためのツールです。
今回は、Dependenciesを見るだけに留まりましたが、通信の動きが見られる面白いツールです。

Application Insightsにある「アプリケーションダッシュボード」ボタン
Azure Application Insightsは、Azureが提供するアプリケーションパフォーマンス管理(APM)サービスです。
今回のハンズオンでは、クラウド側での集中管理とOpenTelemetryデータの集約先として利用されています。
アプリケーションダッシュボードは、Application Insightsのグラフやサーバーの状態など、複数のリソース1つの画面にまとめて配置することができます。
運用監視の現場では、このダッシュボードを大きなモニターに映し出しておくことで、システム全体に異常がないかをチーム全員で常時見守ることができます。
以下の画像は、Azure Application insightsにある「アプリケーションダッシュボード」ボタンをクリックして表示させた共有ダッシュボードです。

まとめ
今回は「Azureとオブザーバビリティ」をテーマに、一連のハンズオンに取り組んでみました。
Azure Application Insightsだけでなく、業界のデファクトスタンダードであるオープンソースツール群をセットで動かすことで、概念としての「オブザーバビリティ」が具体的にどう実装されるのか、より解像度を高めて理解することができました。
もちろん、ハンズオンだけで全てを網羅できるわけではありませんが、まだ使ったことのないツールに触れ、実際に「動く状態」を作るプロセスには、座学だけでは得られない楽しさと発見がありました。
今回の経験を足掛かりに、さらに深掘りしていきたいと思います。
お知らせ
当社では、お客様と共にDX実現と内製化を推進する「クラウドネイティブ内製化支援サービス for Microsoft Azure」を提供しています。
www.ap-com.co.jp
また、Datadogの導入支援から運用サポートまでをトータルでご支援するサービスを提供しています。
初期設計・エージェント展開・モニタリング設定・ダッシュボード構築まで、お客様のニーズに合わせた支援が可能です。
「自社だけでの導入が不安」「もっと効率的に監視環境を整えたい」という方は、ぜひお気軽にご相談ください。
www.ap-com.co.jp
一緒に働いていただける仲間も募集中です!
今年もまだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。
www.ap-com.co.jp