CloudStack에서 VR(Virtual Router)을 점검하는 모니터링 스크립트
CloudStack Virtual Router 모니터링 스크립트입니다. cloudmonkey 목록 확인, ICMP/TCP 점검, 로그/메일 알림, redundant VR 복구 전 확인 기준을 정리했습니다.
CloudStack의 Virtual Router(VR)는 게스트 네트워크의 DHCP, DNS, NAT, 방화벽, 로드밸런싱 같은 기능에 직접 영향을 줍니다. 따라서 단순히 VR IP에 ping을 보내는 것보다 CloudStack API 상태, VR IP 도달성, SSH 포트, CloudStack 이벤트를 함께 확인하는 모니터링이 필요합니다.
점검 기준
운영에서 바로 쓰기 좋은 최소 기준은 다음과 같습니다.
- CloudStack API에서 router 상태가
Running인지 확인 - guest/link-local/public IP 중 모니터링 가능한 IP에 ICMP 또는 TCP 연결 확인
- 연속 실패 횟수를 기록해 일시적인 패킷 손실과 실제 장애를 구분
- CloudStack 문서의 lost virtual router 복구 절차처럼 redundant router 환경에서는 backup router 상태를 먼저 확인
cloudmonkey로 VR 목록 확인
CloudStack 관리 서버나 API 접근이 가능한 운영 노드에서 cloudmonkey를 쓸 수 있다면 먼저 VR 목록을 가져옵니다.
cloudmonkey list routers listall=true filter=id,name,state,linklocalip,publicip,guestipaddress,redundantstate
API 인증 설정이 없는 환경에서는 운영자가 모니터링할 VR IP 목록을 파일로 관리해도 됩니다.
sudo install -d -m 755 /etc/cloudstack-monitor
sudo tee /etc/cloudstack-monitor/vr-targets.conf >/dev/null <<'EOF'
# name ip tcp_port
vr-network-a 10.1.1.1 22
vr-network-b 10.2.1.1 22
EOF
VR 모니터링 스크립트
아래 스크립트는 대상별 ICMP와 TCP를 확인하고, 실패 시 로그와 종료 코드를 남깁니다. 메일 발송은 환경마다 다르므로 mailx가 있을 때만 실행하도록 분리했습니다.
#!/usr/bin/env bash
set -Eeuo pipefail
TARGET_FILE="${1:-/etc/cloudstack-monitor/vr-targets.conf}"
LOG_FILE="/var/log/cloudstack-vr-monitor.log"
PING_COUNT=2
PING_TIMEOUT=2
TCP_TIMEOUT=3
ALERT_TO="cloud-ops@example.com"
log() {
printf '%s %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$*" | tee -a "${LOG_FILE}"
}
alert() {
local subject="$1"
local body="$2"
log "ALERT ${subject} ${body}"
if command -v mailx >/dev/null 2>&1; then
printf '%s\n' "${body}" | mailx -s "${subject}" "${ALERT_TO}" || true
fi
}
check_target() {
local name="$1"
local ip="$2"
local port="$3"
local failed=0
if ping -c "${PING_COUNT}" -W "${PING_TIMEOUT}" "${ip}" >/dev/null 2>&1; then
log "OK icmp name=${name} ip=${ip}"
else
log "FAIL icmp name=${name} ip=${ip}"
failed=1
fi
if nc -z -w "${TCP_TIMEOUT}" "${ip}" "${port}" >/dev/null 2>&1; then
log "OK tcp name=${name} ip=${ip} port=${port}"
else
log "FAIL tcp name=${name} ip=${ip} port=${port}"
failed=1
fi
if [ "${failed}" -ne 0 ]; then
alert "CloudStack VR check failed: ${name}" "VR ${name} (${ip}) failed ICMP or TCP check."
fi
return "${failed}"
}
overall=0
while read -r name ip port; do
[ -z "${name:-}" ] && continue
[[ "${name}" =~ ^# ]] && continue
check_target "${name}" "${ip}" "${port}" || overall=1
done < "${TARGET_FILE}"
exit "${overall}"
cron 등록
sudo install -m 755 cloudstack-vr-monitor.sh /usr/local/sbin/cloudstack-vr-monitor.sh
sudo touch /var/log/cloudstack-vr-monitor.log
sudo chmod 640 /var/log/cloudstack-vr-monitor.log
sudo crontab -e
*/5 * * * * /usr/local/sbin/cloudstack-vr-monitor.sh >/dev/null 2>&1
장애가 잡혔을 때 확인할 것
VR 응답이 없으면 먼저 CloudStack API와 관리 서버 로그에서 router 상태를 봅니다.
cloudmonkey list routers listall=true state=Running filter=id,name,state,redundantstate,hostid
sudo tail -n 200 /var/log/cloudstack/management/management-server.log
Apache CloudStack troubleshooting 문서는 lost virtual router를 복구할 때 redundant router 구성에서는 backup router가 살아 있는지 먼저 확인하라고 안내합니다. 운영 환경에서 VR destroy/restartNetwork 같은 조치는 네트워크 영향이 크므로, 대상 네트워크와 redundancy 상태를 확인한 뒤 변경해야 합니다.