안녕하세요. 서비스 운영하다보면 간혹 서버 대 서버 간 통신을 체크가 필요할 경우가 생기게 됩니다.
거래가 매우 많은 경우에는 그 거래 자체가 일종의 테스트 역할을 해 주기 때문에 별도로 체크를 할 필요성이 생기지는 않는데 간혹 거래가 생각보다 많지는 않고, 그렇다고 운용인력도 많지 않고, 돈도 없는 경우에는 종종 간단하게 체크를 할 수 있는 방법을 고민하게 됩니다.
최근 버전의 윈도우에서는 특히 powershell 이 꽤나 강력한 기능을 가지고 있는데요. 그 기능을 이용해서 매우 싼 비용(0원) 으로 간단한 테스트를 돌릴 수 있습니다.
특히, 한 번 파워쉘 스크립트를 작성해두고 나면 취향에 따라서 윈도우 작업 스케줄러에 스크립트를 등록해서 사람이 손으로 체크하지 않으면서도 지속적으로 서버 대 서버 사이의 통신도 체크가 가능합니다. 또한, 나름대로 회사/개인이 사용하시는 문자 혹은 알람 API가 따로 있다고 하신다면 매우 손쉽게 적용해볼 수 있다는 점도 장점입니다.
다음 스크립트는 정상 서비스 상태인지를 체크한다기보다는, 현재 서비스가 일단 약속한 포트에 제대로 떠 있어서 정상적인 접근은 가능한 상태인지를 체크하는 스크립트입니다.
서버 리스트 및 정상 상태를 체크할 timeout 을 지정하고, powershell 을 이용해서 직접 서버에서 TCP Client 를 실행하고 커넥트 시도를 하는 스크립트입니다. 연결이 성공했을 경우에는 바로 연결을 끊고 성공이라고 로그를 남기고, 연결이 실패했을 경우에는 알람API 에 GET 요청을 보내고, 연결 실패 정보를 전달합니다. 마지막으로 TCP Client 를 종료합니다.
$servers = @(
"서버IP 서버port 서버명",
"서버IP 서버port 서버명"
)
$timeout = 5000
$alarm_send_url = ""
# 필요에 따라 맞는 방식으로 인코딩
function UrlEncodeEucKr($text) {
$encodedText = [System.Uri]::EscapeDatastring($text)
return $encodedText
}
foreach ($server in $servers){
$parts = $server -split " "
$hostname = $parts[0]
$port = [int]$parts[1]
$company = $parts[2]
$tcpClient = New-Object System.Net.Sockets.TcpClient
$asyncResult = $tcpClient.BeginConnect($hostname, $port, $null, $null)
# tcp 연결 타임아웃 체크
if($asyncResult.AsyncWaitHandle.WaitOne($timeout, $false)){
Write-Host "$hostname $port $company - 연결성공" -ForegroundColor Green
$tcpClient.EndConnect($asyncResult)
}
else {
Write-Host "$hostname $port $company - 연결실패" -ForegroundColor Red
Invoke-WebRequest -Uri $alarm_send_url -Method Get
}
$tcpClient.Close()
}
이 방법으로 약간만 관리를 하면서, 문제가 생겼을 때 알람을 바로 받을 수 있습니다. 다만, 너무 많은 연락을 받을 수도 있는점은 단점이겠네요. 더 좋은 방식이 있다면 자유롭게 수정해서 쓰면 될 것 같습니다.
'기타Tip' 카테고리의 다른 글
nodejs 설치 후 윈도우 powershell 에서 npm 이 안되는 문제 (0) | 2025.02.19 |
---|---|
폐쇄망 환경에서 Nuget Repository (2) Baget (0) | 2024.12.26 |
폐쇄망 환경에서 Nuget Repository (1) Local Repo (1) | 2024.12.25 |
윈도우 폐쇄망 환경에서 Visual Studio 설치하기 (0) | 2024.12.25 |
윈도우 폐쇄망 환경에서 VSCODE Extension 설치하기 (0) | 2024.12.19 |
댓글