ログの可視化から始めるスマートなサービス運用 ~Log AnalyticsでWindowsパフォーマンスカウンターの情報を収集してみよう~
こんにちは。 弥生のウシオです。
今回は先日ご紹介できなかった、
Cloud Services から Windowsパフォーマンスカウンターの情報を
収集するためのテクニックをご紹介したいと思います。
おさらい
先日のブログでご紹介させていただいた
Log Analytics と Cloud Services の連携方法ですが、
みなさま覚えていらっしゃいますでしょうか?
Cloud Services のログ出力先であるストレージを
Log Analytics のデータソースとして追加してあげるだけでしたね。
その際、収集するログの種類(データ型)を指定するのですが、
選択肢のなかにWindowsパフォーマンスカウンターが存在しません。
Why!?
VMの場合は問題なく収集されますし、
ストレージには WADPerformanceCountersTable も出力されているのですが。
嘆いていてもしょうがないので、Cloud Services でもなんとかして
Windowsパフォーマンスカウンターの情報を収集できるようにしよう、
というのが今回のお話です。
結論から先に
はい。結論から言いますと、
Log Analyticsエージェントをインストールすることで収集可能になります。
めでたし、めでたし。
とは、いきません。実はまだハードルがあります。
VMの場合、基本的には1回インストールして終わりですが、
Cloud Services の場合、デプロイ毎に環境が変わってしまうので
その都度インストールしてあげる必要があります。
「毎回手動でインストールを?出来らあ!!」
なんて気概のある方は極稀ですよね。私ならイヤです。
スタートアップタスクに登録しよう
Cloud Services には「スタートアップタスク」という
ロール開始前に実行するアクションが登録できるので、
今回はこの仕組みを使って、エージェントを自動インストールしたいと思います。
まずは、対象となるWebアプリケーションのプロジェクトに
下記の2つのファイルを追加しましょう。
- Log Analyticsエージェントのインストーラー
- 上記インストーラーを実行するためのバッチ
バッチのファイル名は「mma.cmd」とし、中身は以下の通りでOKです。*1
SETLOCAL EnableExtensions :: Bypass installing the agent if locally emulating IF "%EMULATED%" EQU "true" GOTO:EOF for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE 2^>NUL`) do if '.%%i.'=='.LocalDateTime.' set ldt=%%j set ldt=%ldt:~0,4%-%ldt:~4,2%-%ldt:~6,2% %ldt:~8,2%:%ldt:~10,2%:%ldt:~12,6% SET MMA_ERROR_LEVEL=0 CALL:INSTALL_MICROSOFT_MONITORING_AGENT IF %MMA_ERROR_LEVEL% EQU 0 ( EXIT /B 0 ) ELSE ( EXIT %MMA_ERROR_LEVEL% ) :: -------------- :: Functions :: -------------- :INSTALL_MICROSOFT_MONITORING_AGENT ECHO %ldt% : Begin installing the Microsoft Monitoring Agent >> "%RoleRoot%\mma.log" 2>&1 :: Current version of the installer SET MMA_INSTALLER_PATH="%RoleRoot%\approot\MMASetup-AMD64.exe" ECHO Installing the Microsoft Monitoring Agent >> "%RoleRoot%\mma.log" 2>&1 %MMA_INSTALLER_PATH% /C:"setup.exe /qn ADD_OPINSIGHTS_WORKSPACE=1 OPINSIGHTS_WORKSPACE_ID=%WORKSPACE_ID% OPINSIGHTS_WORKSPACE_KEY=%WORKSPACE_KEY% AcceptEndUserLicenseAgreement=1" ECHO Microsoft Monitoring Agent was installed successfully. >> "%RoleRoot%\mma.log" 2>&1 GOTO:EOF
つづいて、Azureクラウドサービスのプロジェクトにある
ServiceDefinition.csdef 内の[Startup]要素の
子要素として以下を追加します。
<Task commandLine="mma.cmd" executionContext="elevated" taskType="simple"> <Environment> <Variable name="EMULATED"> <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" /> </Variable> <Variable name="WORKSPACE_ID"> <RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/ConfigurationSettings/ConfigurationSetting[@name='MicrosoftOMS.WorkSpaceID']/@value" /> </Variable> <Variable name="WORKSPACE_KEY"> <RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/ConfigurationSettings/ConfigurationSetting[@name='MicrosoftOMS.WorkSpaceKey']/@value" /> </Variable> </Environment> </Task>
同じく、Azureクラウドサービスのプロジェクトにある
ServiceConfiguration.~.cscfg 内の[ConfigurationSettings]要素の
子要素として以下を追加します。
<Setting name="MicrosoftOMS.WorkSpaceID" value="{インストーラーをダウンロードした画面に表示されていた WORKSPACE ID}" /> <Setting name="MicrosoftOMS.WorkSpaceKey" value="{インストーラーをダウンロードした画面に表示されていた PRIMARY KEY}" />
お疲れ様でした。
あとはプロジェクトをデプロイしてロールが開始されれば
エージェントが自動的にインストールされます。
イヤなことばかりでもないさ
なんでこんな面倒くさいことをしないといけないんだ。
素直にストレージからログを拾ってくれれば済む話じゃないか。
そうですよね。
でも、この方式にもメリットはあるんです。
それは、再デプロイしないでも収集するWindowsパフォーマンスカウンターの種類を変更できること。
エージェントで収集するWindowsパフォーマンスカウンターの種類とインターバルは
「Log Analytics」ポータルで設定できるんです。*2
これはありがたいですね。
はい、許した。
今回のブログはいかがでしたでしょうか。
Cloud Services の Windowsパフォーマンスカウンターの情報を可視化したい方は
ぜひ今回ご紹介した内容を試してみてくださいね。*3