intro
- windows 장비에서 CLOSE_WAIT 나 TIME_WAIT 인 소켓의 갯수를 모니터닝 할 일이 발생함
- https://docs.microsoft.com/ko-kr/powershell/ 파워쉘을 이용하여 해보기로함
- 이하 작업결과물을 샘플용도로 보관하기 위함
내용
전체 구조
└─작업폴더(C:\Script)
│ start.bat
│ netstat.ps1
├─Util
│ printmsg.ps1
│ webhook.ps1
└─Log
각 파일의 내용
@echo on
cd C:\Script
powershell "& { Set-ExecutionPolicy RemoteSigned } "
powershell .\netstat_test.ps1
powershell "& { Set-ExecutionPolicy Restricted } "
- netstat.ps1
- WAIT_MAX_COUNT 보다 큰 숫자일 경우 잘 잘 처리하기 위해서.
. .\Util\printmsg.ps1
. .\Util\sendmail.ps1
## -------------------------------------------------------------------------------------
PrintMsg "Script Start [netstat_check]"
## -------------------------------------------------------------------------------------
$WAIT_MAX_COUNT = 1000
$select_count = (netstat -an | Select-String "WAIT").count
if ($select_count -gt $WAIT_MAX_COUNT ) {
$msg = "ERROR netstat WAIT count[$select_count]"
$title = "[netstat] bigger than " + $WAIT_MAX_COUNT
PrintMsg $msg
WebHook $title $msg
} else {
PrintMsg "netstat WAIT. count[$select_count]"
}
PrintMsg "Script END"
exit
$log_folder = "C:\Script\Log"
$today = (Get-Date).AddDays(0).ToString("yyyyMMdd")
Function PrintMsg ([string] $msg) {
$now = Get-Date -Format "yyyy/MM/dd HH:mm:ss"
$message = "$now $msg"
Write-Host $message
$log_path = ${log_folder}+"\netstat_"+ ${today} + ".log"
if (-not (Test-Path $log_folder -PathType Container)) {
$temp = mkdir $log_folder
}
#
Write-Output $message | Out-File ${log_path} -Append -Encoding Default
}
- webhook.ps1
- 특정 url에 post방식으로 body에 특정 json 데이터를 보낸뒤 결과값을 출력하기 위한 용도
$hostname = HOSTNAME
$URL = "https://.....";
function WebHook ([string] $title, [string] $msg){
$params = @{
body = @{
botName = "MyBot"
text = "[" + $hostname + "] " + $title + " : " + $msg
} | ConvertTo-Json
uri = $URL
headers = @{ "Content-Type" = "application/json"}
method = "Post"
}
$response = Invoke-WebRequest @params
Write-Host $response
}
windows 작업 스케줄러
- 매일 10분마다 특정 작업을 실행시키기
- 실행방법 2가지
- 시작 > 모든프로그램 > 보조 프로그램 > 작업 스케줄러
- taskschd.msc
- step1
- step2
- step3
- step4
- step5
- step6