こんにちはますのです。
AzureのVirtual Machineから監視設定をいじっていたのですが、全然有効化が出来ない…。と1日頭を悩ませたのです。
他のサイトとかでは「有効化」押せばすぐやで!って書いてあるのにおかしいやないですかぁ。。。
何度有効化をやっても、拡張機能「DependencyAgentLinux」でエラーが出てしまい有効化が出来ないのです。
エラー内容に書かれているWebサイトを見ても解決の糸口は無く悲しい気持ちになりました。
Azure Monitor(モニター)の仮想マシンを「監視対象外」から「監視対象」にしたいのですが、そこも同じく有効化出来ないようでどうすれば良いやらと調べた結果と対応方法をメモします。
Azure Monitorエージェントの対応OS
Rhel8はどうやら対応していないようです。RhelとCentOSではエラー内容が異なりました。
Rhel8エラー内容 | [ExtensionOperationError] Non-zero exit code: 51, /var/lib/waagent/Microsoft.Azure.Monitoring.DependencyAgent.DependencyAgentLinux-9.10.6.11730/bin/time-limit 870 scripts/install.sh 2>&1 >/dev/null [stdout] Unsupported distribution: Red Hat Enterprise Linux release 8.3 (Ootpa) The Dependency Agent was not installed. See https://aka.ms/ServiceMapTroubleshooting (exit code = 0x00000033) for assistance. [stderr] |
CentOS8エラー内容 | [ExtensionOperationError] Non-zero exit code: 127, /var/lib/waagent/Microsoft.Azure.Monitoring.DependencyAgent.DependencyAgentLinux-9.10.6.11730/scripts/enableHandler.py 2>&1 [stdout] /usr/bin/env: ‘python’: No such file or directory [stderr] |
現在のところRHEL8用のDependect Agent(依存関係エージェント)はサポートされていないため、Azure Monitor for VMsをご利用いただくことはできません。
参考資料:Azure監視エージェントの概要:Linux項目より
拡張機能:DependencyAgentLinuxのエラー内容
今回わたしの環境「CentOS8.2」で試しています。「Rhel8系」は先述の通りサポート対象外となりました。
とりあえずAzureポータルから確認。
Virtual Machine>対象の仮想マシンを選択>左カラム:拡張機能>DependencyAgentLinuxを選択
項目 | 内容 |
種類 | Microsoft.Azure.Monitoring.DependencyAgent.DependencyAgentLinux |
バージョン | 9.10.6.11730 |
状態 | Transitioning |
状態のレベル | Info |
状態メッセージ | [ExtensionOperationError] Non-zero exit code: 127, /var/lib/waagent/Microsoft.Azure.Monitoring.DependencyAgent.DependencyAgentLinux-9.10.6.11730/scripts/enableHandler.py 2>&1 [stdout] /usr/bin/env: ‘python’: No such file or directory [stderr] |
ハンドラーの状態 | Not Ready |
ハンドラーの状態のレベル | Info |
原因:pythonのシンボリックリンクがAzureVMから削除されている
python3がインストールされてることは確認したのに、なぜログで「/usr/bin/env: ‘python’: No such file or directory」となるのだろう…。と不思議だったのです。色々と調べたら以下記事を発見です。
一部の Linux ディストリビューションは Python 3.8 に移行し、Python 用のレガシ /usr/bin/python エントリポイントは完全に削除されました。 この移行は、次の 2 つの条件で、特定の仮想マシン (VM) 拡張機能のすぐ使える自動デプロイに影響します。
・ython 3.x サポートにまだ移行中の拡張機能
・レガシ /usr/bin/python エントリポイントを使用する拡張機能
影響を受ける VM 拡張機能には、Azure Disk Encryption、Log Analytics、VM アクセス (パスワード リセットに使用)、ゲスト診断 (追加のパフォーマンス カウンターに使用) などがあります。
引用:Python 3 対応 Linux Azure Virtual Machines システムでの VM 拡張機能の使用に関する問題
最初は違うエラーが出ている状態だったので、完全にpythonのログは後回しにしてしまいました。
リソースグループのデプロイ用のjsonファイルに書かれていなかったり、適用されていないんじゃないか等をめちゃくちゃ調べたのは良い経験としましょう。
解決方法:link -sでpythonシンボリックリンクを作成する
ではどうやって有効化出来るようにするか?ですが、簡単です。
対象の仮想マシンにssh接続をして、「python」のコマンドを打てるようにシンボリックリンクを作成するだけなのです。
シンボリックリンク:pythonの有無を確認する
おそらくコマンドを打つと以下のような結果が出ると思います。
$ python -V
-bash: python: command not found$ python -V
$ python3 -V
Python 3.6.8
では実際に「/usr/bin」の設定状態を確認します。
$ ls /usr/bin | grep python
python3
python3.6
python3.6m
unversioned-python
筆者の環境ではこんな感じのコマンド結果が返ってきました。
見事に「python」のシンボリックリンクは削除されて「python3」に置き換わっていますね。Microsoftの陰謀です。
「/usr/bin/python」をシンボリックリンクで再作成する
それでは「python -V」で通るように再度シンボリックリンクを作成してみましょう。
作業は管理者権限を持ったユーザで実施ください。
# ln -s /usr/bin/python3.6 /usr/bin/python
はい。これで「python」のシンボリックリンクを再作成しました。
実際にコマンドが通るか見てみましょう。
$ python -V
Python 3.6.8
こんな感じで「python3」と同じ結果が返ってくるようになります。
これで設定は完了となります。
# unlink /usr/bin/python
動作確認
ではpythonコマンドが通るようになりましたのでエラーが解消するかAzureポータル上から確認してみましょう。
キャッシュが残っているか何かがあるためか、拡張機能「DependencyAgentLinux」をアンインストールしないとうまくいかないようです。
筆者はアンインストールする前に「分析情報>有効」をしましたが再度エラーとなりました。
以下の通りアンインストールを実施します。
- Azureポータル>Virtual Machines>対象の仮想マシン>左カラム:拡張機能>「DependencyAgentLinux」をアンインストール
- 左カラム:分析情報>「有効」をクリック
「python」が通ることでエラー無く正常終了することが確認出来ればOKです!
もし別エラーが出た場合は、再度エラー内容を調べて対応を進めていただければです。
本記事が誰かのお役に立てば幸いでございます。