C.W.K.
Stream
Lesson 10 of 14 · published

Fleet 모니터링

~18 min · monitoring, morning-check, cron

Level 0Pinger
0 XP0/101 lessons0/12 achievements
0/150 XP to next level150 XP to go0% complete

30 초 morning check

안 보이는 fleet 가 drift 하는 fleet. 가능한 가장 단순한 모니터링 — 모든 머신에 SSH 하고 한 줄 상태 (uptime, disk, 메모리, load) 출력하고 어느 머신 unreachable 인지 알려주는 스크립트. 매일 아침 수동 실행, 또는 cron/launchd 통해 결과 이메일 받기.

실제 체크할 것

  • 도달성 — SSH 자체 가능? (heartbeat 로 카운트)
  • Uptime — 뭐가 예상 외 재부팅 했어?
  • Disk — 누구 85% 위?
  • Load — CPU pinned?
  • 메모리 압박 — 누구 심하게 swap?

Code

morning-check.sh·bash
#!/bin/bash
# morning-check.sh — fleet health snapshot
set -u

HOSTS_FILE="${1:-$HOME/.fleet/all.txt}"
UNREACHABLE=0

echo "================================================"
echo " Fleet Health — $(date '+%Y-%m-%d %H:%M')"
echo "================================================"

while IFS= read -r host; do
    [[ -z "$host" || "$host" =~ ^# ]] && continue
    printf '\n--- %-12s ' "$host"

    if result=$(ssh -o ConnectTimeout=5 -o BatchMode=yes "$host" '
        echo OK
        uptime | sed "s/.*up/up/; s/, [0-9]* user.*//"
        df -h / | tail -1 | awk "{print \$5 \" used, \" \$4 \" free\"}"
        sysctl -n vm.loadavg 2>/dev/null | tr -d "{}"
    ' 2>/dev/null); then
        echo "$result" | tail -n +2
    else
        echo "UNREACHABLE"
        UNREACHABLE=$((UNREACHABLE + 1))
    fi
done < "$HOSTS_FILE"

echo ""
echo "================================================"
echo " Unreachable: $UNREACHABLE"
echo "================================================"
스케줄 (macOS launchd)·xml
<!-- ~/Library/LaunchAgents/com.user.fleet-check.plist -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>com.user.fleet-check</string>
  <key>ProgramArguments</key>
  <array>
    <string>/Users/you_username/dotfiles/scripts/morning-check.sh</string>
  </array>
  <key>StartCalendarInterval</key>
  <dict>
    <key>Hour</key><integer>8</integer>
    <key>Minute</key><integer>0</integer>
  </dict>
  <key>StandardOutPath</key>
  <string>/tmp/fleet-check.log</string>
  <key>StandardErrorPath</key>
  <string>/tmp/fleet-check.err</string>
</dict>
</plist>
Launchd job 로드·bash
launchctl load ~/Library/LaunchAgents/com.user.fleet-check.plist

# View the latest output
cat /tmp/fleet-check.log

# Unload
launchctl unload ~/Library/LaunchAgents/com.user.fleet-check.plist

External links

Exercise

morning-check 스크립트를 dotfiles 의 scripts/ 디렉토리에 저장. 한 번 수동 실행. 출력 맞아 보이면 매일 아침 8 시 launchd (또는 Linux cron) 통해 스케줄. 실제 읽을 곳 — 좋아하는 채널 (Telegram bot, 이메일, Slack webhook) — 으로 출력 pipe. 이제 fleet 레벨 모니터링 있어.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.