はじめに
AzureでホストしているWindows VMに対してPowerShellのスクリプトを投げることはよくあります。その手段は以前こちらにまとめました。
その際、スクリプトの実行結果をログとしてAzureから収集・クエリ実行したい場合があるかと思います。この記事ではAzure Windows VMからイベントログとしてLog Analytics側にログを収集する方法をまとめます。
Log Analytics側の設定
「エージェント構成」→「Windowsイベントログ」→「イベントログの追加」を選択します。その際、"demo-script"などオリジナルのログ名を入力し、「適用」を選択します。これにより、demo-script
という名前のイベントをVM側から吸い上げることが可能になります。
PowerShellのスクリプトを流す
再掲
上記のような手段を使ってスクリプトを流します。その際、ログファイルも生成しておくとよいかと思います。
Windowsのイベントログを作成する
下記のようなスクリプトでWindowsのイベントログを生成します。スクリプトを投げた時にどこにログファイルを生成するか確認が必要です。
# LogAnalyticsで収集設定したログの名前
$LogName = "demo-script"
# イベントソース生成(スクリプトファイル名など)
$EventSource = "TestScript01"
# イベントソースが存在するか確認(管理者としてでPowershell実行必要)
if(-not [System.Diagnostics.EventLog]::SourceExists($EventSource)) {
# イベントソースが存在しないので登録
New-EventLog -LogName $LogName -Source $EventSource
}
# ログの内容
# EventSource内で作成したログファイルからデータをパースして$msgに代入する処理を記載
$msg = "<ログファイルの中身を記載>"
$EventID = 1001
$Category = 2
# イベントログへログの書き込み
Write-EventLog `
-Message $msg `
-LogName $LogName `
-Source $EventSource `
-EventID $EventID `
-EntryType Error `
-Category $Category
イベントビューワーにdemo-script
という名前のログが追加されていることが確認できます。
このdemo-script
内に格納されるログが随時Log Analytics側にSyncされます。
ログファイルの中身をイベントログに書き込むTips
Log Analytics側の確認
Log Analyticsからクエリをかけてみるとログの中身がきちんと取得できていることが確認できます。あとはこの内容をダッシュボード等に表示しておくことで状態の監視も可能になります。