# ロググループ・ストリーム・リージョン設定
$logGroup = "/Metrics/Instance"
$logStream = "taitaPC"
$region = "ap-northeast-1"
# 実ディスク使用率取得
$drives = Get-CimInstance Win32_LogicalDisk -Filter "DriveType=3"
$usage = @{}
foreach ($drive in $drives) {
$letter = $drive.DeviceID.TrimEnd(':')
$total = $drive.Size
$free = $drive.FreeSpace
if ($total -gt 0) {
$percentUsed = [math]::Round((($total - $free) / $total) * 100)
$usage[$letter] = $percentUsed
}
}
# タイムスタンプ(ミリ秒)
$timestamp = [int64]((Get-Date).ToUniversalTime() - [datetime]'1970-01-01').TotalMilliseconds
# メッセージJSONを生成し、CloudWatch用にエスケープ
$messageJson = $usage | ConvertTo-Json -Compress
$escapedMessage = $messageJson -replace '\\', '\\\\\\\\' -replace '"', '\\\"'
# 完全一致形式の文字列を構築
$finalJson = '"[{\"timestamp\":' + $timestamp + ',\"message\":\"' + $escapedMessage + '\"}]"'
# sequenceToken を取得
$response = aws logs describe-log-streams `
--log-group-name $logGroup `
--log-stream-name-prefix $logStream `
--region $region | ConvertFrom-Json
$sequenceToken = $response.logStreams[0].uploadSequenceToken
# CloudWatch Logs に送信
aws logs put-log-events `
--log-group-name $logGroup `
--log-stream-name $logStream `
--log-events $finalJson `
--sequence-token $sequenceToken `
--region $region