AzureをInstanaで可視化してみた(初めの1歩：Azure 仮想マシン)

こんにちは、Instanaユーザー会の運営をお手伝いさせていただいております、カワノです！
この記事は[Instana Observability Advent Calendar 2023](https://qiita.com/advent-calendar/2023/instana) 11日目のエントリになります。

12月少し前になってAdvent Calendarの空き枠があったので、勢いで3日連続で枠いただいてしまいました。やっちまった。。。
そんなわけで3日もたせるために内容は薄めになっちゃってますが、よろしくお願いします。

## はじめに
さて。今回のネタについて。
みなさん、AzureのシステムをInstanaでモニタリングしてますか？
私の界隈では ホスト(Linux, Win)、K8s/OpenShift, AWSへの適用、という話はよく聞くのですが、Azureに関しては、あまり耳にしたことがないのです。
きっとたまたまなのですが、とはいえなかなかAzureを触る機会がないままなので、あえてここで導入可視化にチャレンジしてみようと思います。

というわけで、「AzureをInstanaで可視化してみた」シリーズ、いってみよー！

## Azureモニタリング対象 (2023/12/09 時点)
まずは、Azureのモニタリング対象を確認してみます。

Instanaに監視させたいテクノロジーがサポート対象かどうかは、以下のサイトから確認することができます。
サポートされるテクノロジーの構成およびモニター
https://www.ibm.com/docs/ja/instana-observability/current?topic=configuring-monitoring-supported-technologies
このページを`Azure`でブラウザ検索すればAzureのサポートテクノロジーを確認できますが、
Azureのアイコンをクリックすることで、モニター対象サービス一覧を見ることもできます。
https://www.ibm.com/docs/ja/instana-observability/current?topic=agents-microsoft-azure

モニタリング対象サービスとして、以下が記載されていますね。
* API Management
* App Service
* CosmosDB
* MySQL
* Redis Cache
* SQL Database
* SQL Elastic Pool
* SQL Server
* Storage
* Function (Instana日本語docだと`関数`、Azureポータルでは`関数アプリ`って表現してるのですが、個人的にしっくりこない…のでFunctionって書きました)

他にも、 **Azure 仮想マシン(VM)** や **AKS(Azure Kubernetes Service)** もサポートしています。仮想マシンは[ホストのページ](https://www.ibm.com/docs/ja/instana-observability/current?topic=agents-host)で、AKSは[Kubernetesのページ](https://www.ibm.com/docs/ja/instana-observability/current?topic=instana-monitoring-kubernetes#supported-managed-kubernetes)でそれぞれ内容を確認できます。

注) Instanaは日々進化しています！ 必ず最新ドキュメントをご確認ください。

## 初めの一歩：Azure仮想マシン上のWordPressの可視化
さて、まずはAzure仮想マシン上のアプリケーションをInstanaで監視してみましょう。
今回は、典型例としてWordpress一式を1つのVMに構築します。

### Wordpress導入 参考blog
今回は、以下のblogの記事を参考に構築させていただきました。ありがとうございます。
Azure IaaS環境にWordPressを構築してみる 1〜4
https://cloud.nissho-ele.co.jp/blog/azure-iaas-create-wordpress/
https://cloud.nissho-ele.co.jp/blog/azure-iaas-create-wordpress-2/
https://cloud.nissho-ele.co.jp/blog/azure-iaas-create-wordpress-3/
https://cloud.nissho-ele.co.jp/blog/azure-iaas-create-wordpress-4/

## VM作成、Wordpress導入
### OS選択
Azure仮想マシンをInstanaで監視する場合は、Azure仮想マシンにInstana Agentが導入可能なOSを選択していることが条件となります。
ドキュメントは以下です。
https://www.ibm.com/docs/ja/instana-observability/current?topic=agents-installing-host-agent-linux
今回は、私の好みで Ubuntu Linux 22.04 を選択します。

### VM作成
[Azure Portal](https://portal.azure.com) で VMを作成します。
詳細手順は参考blogを確認いただくとして、以下の内容でVMを作成しています。
![CreatedLinuxVM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/fe8cefac-8163-65ed-4721-315b79131519.png)
（VMのスペックは参考blogと同じです)

### Wordpressインストール
次に、Wordpressをインストールしてみましょう。
上記参考blogを参照しつつ、導入します。
この記事ではそのステップは省略しますが、以下に気を付ければ、大体15分くらいでインストールは完了しました。
* apacheの設定ファイルを編集する時は`sudo`を忘れずに
* mysqlのGRANTに使うユーザ名は、`'wordpressuser'@'localhost'`とlocalhostまで明記すること
* DB名は`T_WORDPRESS_SITEINFO`で統一

導入後 Webサイトにブラウザでアクセス、初期設定を行うと以下の画面が表示されます。
![2023-12-09 11.40.09 74.226.209.234 b6a4b2bb3fc4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/d2470529-54a8-465a-a394-467c4ebd8cfe.png)

これでWordpressのインストールは完了です。
ちなみに、Wordpressはざっくり **php(apache)** と **MySQL** で構成されています。これがInstanaでどう見えるか？楽しみですね。

## Instana Agent インストール
Azure仮想マシンをInstanaで監視する場合、他のLinuxホストと同様にVMにAgentをインストールします。
Instanaのホーム画面右上の「エージェントのデプロイ」ボタンをクリックし、「エージェントのインストール」画面を開きます。
![Deploy_Agent_Button.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/36c6748d-52e0-3eb4-9e14-7141d8aea958.png)

今回は、UbuntuをOSとして選択していますので、OS > Linuxを選択します。
選択肢はデフォルトのままで、「インストールしてサービスとして開始 (SystemD ベースのシステムでのみサポート)」をチェックします。(環境要件によって選択ください)

ワンライナー コマンドをコピーします。
![Install_Agent_on_LinuxVM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/a9b679e8-2806-6415-eade-36830206b10c.png)

VMにSSHログインし、管理者ユーザでコピーしたワンライナーを貼り付け、実行します。
![Install_Agent_Console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/137d03ed-538c-7455-1a84-7c57c1096040.png)

この時、何か問題が発生したらまずこちらをチェックしてみましょう。
https://www.ibm.com/docs/ja/instana-observability/current?topic=agents-installing-host-agent-linux#potential-problems-during-installation

導入後の動作確認は`<instana agent install dir>/bin/status`を実行します。`<instana agent install dir>`のデフォルト値は`/opt/instana/agent`です。
![agent_status.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/4881436b-dcb6-8d98-574c-59f29386e7eb.png)

…runningと出ていれば動作OKです。

以上でInstana Agentのインストールは完了です。


## Agent可視化確認
まずはAgentがInstanaにどのように認識されているか確認しましょう。
Instanaのメニューから「その他」>「エージェント」を選択します。
![Agent_Discover.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/edb01724-a4f3-5332-d160-4080b1bcf20b.png)

インストールしたAgentがリストに表示されています。FQDNリンクをクリックすると、詳細を見ることができます。
![Agent_Display.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/0461b020-f4ec-ed0d-afe7-0e823d62f92e.png)
Agentが導入されているホストのCPU負荷やメモリ、Agentの利用しているJVM(Instana AgentはJavaVM上で動作しています)の情報を見ることができます。

画面の一番下まで行くと、Instana Agentのログを見ることもできます。(このログは、ホストにインストールされたInstana Agentのログファイルの中身です)
![Agent_log1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/1a97eabf-2ee8-5b15-8425-ce5fda0c2f46.png)

これを見ると、MySQLの情報を取得しようとしてErrorになっていることがわかります。
`'root'@'localhost'`でアクセスしようとしてエラーになっています。

確かに、Instana AgentにMySQLの接続情報を何も書いていません。
Instanaは、デフォルトで`'root'@'localhost'`にパスワード無しで接続を試みるようです。
今回はパスワードを設定していますので、Instana Agentの設定ファイルを更新します。

設定ファイルは`<instana agent install dir>/etc/instana/configuration.yaml`です。
![instana_conf_dir.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/09957ccf-8034-cf50-d18b-87796b83dd00.png)
設定ファイルで`mysql`で検索し、コメントアウトを外し、接続情報(ユーザ名とパスワード)を入力します。(ここでは例としてrootを指定しています)
![instana_agent_mysql_edit.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/b7f54a57-5c43-1b76-daeb-244a693eb9d1.png)

編集が終わったら、再度InstanaのAgentログ画面を見てみましょう。
Agentは設定ファイルが更新されたら自動的に設定ファイルのreloadを行なってくれます。
ログにもそれは記載されています。
![Agent_log2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/9bd4bddc-48be-4be0-c64c-d56ab3be4f8a.png)

数分経過してもMySQLのエラーが出なくなりました。無事、MySQLに接続されているようです。
Agentの設定はOKのようです。
では、アプリケーション・ホストの可視化状況を見てみましょう。

## インフラストラクチャー・アプリケーション可視化確認
### インフラストラクチャー
では、Instanaのエージェント画面から「メニュー」>「インフラストラクチャー」を選択します。
そうすると、インフラストラクチャーマップが表示されますが、Instana Agentの情報は表示されたままになります。
![Agent_on_inframap.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/620797ce-7651-a0b4-67b6-aaf9c92746d3.png)

ここで、右上のペンギンマークをクリックしてみます。
![host_on_infra.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/3f9b3e61-cff1-1068-95e3-6f0bff1fc713.png)

そうすると、今回Instana AgentやWordpressをインストールしたホスト(VMのOS)の情報が表示されるようになります。
![HostDetail_on_Infra.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/837e5dea-7b8b-637d-8c2d-ae8c49b95c1a.png)

「ダッシュボードを開く」でホスト(VMのOS)情報の詳細を参照できます。
![HostDash_on_Infra.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/cb56fcd1-b7db-ac68-6b5a-764f3eaba310.png)

### アプリケーション
インフラが可視化できたことは確認できましたが、アプリはどうでしょう。
本当はダッシュボード左上の「スタック」からアプリケーションサービスを辿ることができるのですが、今回私が利用しているInstana環境は全世界のさまざまなエンジニアが検証に利用している環境であるため、非常に重くなってしまっています。(=待ちが長い…ので、待ってられない)

そのため、今回はVM名「instana-vm1」からサービスを絞り込み、アプリケーション「instana-vm1」を作ります。
「メニュー」>「アプリケーション」をクリックし、右下の「**+ADD**」から「新規アプリケーション・パースペクティブ」を選択します。

フィルタ条件`Host > Name = instana-vm1`を設定・作成します。
![appset1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/e1ba6520-fc3b-5659-0c5e-43dcb2d107e4.png)
![appset2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/6275d411-b556-d06b-609d-5c22667e0c4c.png)

数分後、以下の様にアプリケーション内にサービス一覧として**php**や**MySQL**を確認できるようになりました。
![app_on_app.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/f730c14d-316e-6ccc-ebf1-ca7abe9e6a2d.png)

ちゃんとゴールデンシグナルの状況を把握できます。
![php_on_app.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/bc7b484f-273b-f8c1-01c9-650d5a6a39b1.png)

MySQLは上位ステートメントを見れるのが便利ですよね。
![mysql_on_app.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/9937955b-e278-eeec-9e63-1c56f9781b1a.png)

依存関係もご覧の通り、ばっちりです。
![depend_map.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/25bd5577-1088-444e-5697-4ba71bdd1d7a.png)

こんな感じで、wordpress(php+mysql) on Azure仮想マシンも、簡単に可視化できることが確認できました。
こちら、Azure仮想マシン上で行いましたが、実はこの手順はクラウドと関係のないLinuxサーバでも全く同じ手順を辿ることができます。

(そういう意味だと、あんまりAzure感出せなかったですねw)

皆さんも、ぜひ可視化を試してみてはいかがでしょうか？