본문 바로가기

시스템 멈춤을 잡아내는 커널의 눈, Linux Watchdog 탐지·모니터링·대응

728x90

Watchdog가 뭔가요?

  1. 커널 내장 감시자
    • 각 CPU 코어가 정기적으로 “살아있다(heartbeat)” 신호를 내야 합니다.
    • 일정 시간 동안 응답이 없으면 락업(lockup) 으로 판단하고 커널 로그에 경고를 남깁니다.
  2. 종류 요약
    • Soft lockup: 커널/프로세스가 오랫동안 스케줄러에서 빠져나오지 못함
      (예: 무한 루프, 긴 비마스킹 구간, 드라이버 버그, 과도한 busy-wait)
    • Hard lockup: NMI(Non-Maskable Interrupt) 수준에서도 CPU가 완전 멈춤 (하드웨어/커널 심각 문제)
    • Hung task: 커널이 보기에 태스크가 너무 오래 깨어있지 못함(대기/블로킹) — 별도 감지기
  3. 패키지와의 차이
    • 커널 감지기(지금 로그의 주인공): 기본 내장, 로그 남김/패닉 유도
    • watchdog 데몬(패키지): /dev/watchdog 장치에 주기적 “핑” → 응답 없으면 자동 재부팅 등 수행
      (원하면 sudo apt install watchdog 으로 별도 운영 가능)

탐지 기준(Threshold)과 핵심 파라미터

    1. 현재 값 확인
      # 락업 감지 on/off
      cat /proc/sys/kernel/watchdog
      
      # soft/hard lockup 감지 윈도(초) - 보통 10~20초 범위
      cat /proc/sys/kernel/watchdog_thresh
      
      # 헝 태스크(hung task) 타임아웃(초) - 기본 120초가 흔함
      cat /proc/sys/kernel/hung_task_timeout_secs
      
      # NMI 워치독 (하드 락업) on/off
      cat /proc/sys/kernel/nmi_watchdog
    2. 민감도 조정(예: VM에서 false positive 완화)
      # 일시 적용
      sudo sysctl -w kernel.watchdog=1
      sudo sysctl -w kernel.watchdog_thresh=60           # soft/hard lockup 감지 윈도 확대
      sudo sysctl -w kernel.hung_task_timeout_secs=300   # 헝 태스크 감지 여유
      
      # 영구 적용 (예: /etc/sysctl.d/99-watchdog.conf)
      sudo tee /etc/sysctl.d/99-watchdog.conf <<'EOF'
      kernel.watchdog=1
      kernel.watchdog_thresh=60
      kernel.hung_task_timeout_secs=300
      kernel.nmi_watchdog=1
      EOF
      sudo sysctl --system
    3. 패닉/재부팅 정책(고가용/어플라이언스에 유용)
      • 커널 부트 파라미터(예: GRUB): softlockup_panic=1, hardlockup_panic=1, hung_task_panic=1
      • 재부팅 통해 빠른 자가복구가 필요한 장비에만 신중히 사용하세요.

예시 로그 메시지 읽는 법(해석)

  • watchdog: BUG: soft lockup - CPU#0 stuck for 487s! [dockerd:1813]
    CPU#0에서 dockerd(PID=1813)487초간 스케줄러에 돌아오지 못함(사실상 바쁜 무한 루프/긴 블로킹).
  • watchdog: BUG: soft lockup - CPU#1 stuck for 487s! [packetbeat:2791]
    packetbeat 가 원인 축으로 의심.
  • kworker/1:3
    → 커널 워커 스레드. 드라이버/블록/네트워크/파일시스템 경로 문제일 수 있음.

보안·운영 관점 모니터링 설계(Elastic/Wazuh/시스템 공통)

  1. 수집 포인트
    • dmesg, /var/log/kern.log, /var/log/syslog(Ubuntu는 journald 통합인 경우 journalctl -k)
    • 패턴
      • watchdog: BUG: soft lockup - CPU#
      • NMI watchdog: Watchdog detected hard LOCKUP
      • INFO: task ... blocked for more than ... seconds (hung task)
  2. 운영 대시보드/알림
    • Kibana KQL 예시
      message : ("watchdog: BUG: soft lockup*" or "NMI watchdog: Watchdog detected hard LOCKUP*" or "INFO: task * blocked for more than * seconds*")
    • 심각도 등급 예시
      • hard lockup ≥ 1회 → Critical
      • soft lockup 연속 3회/1시간 또는 stuck > 120sMajor
      • hung task 5회/1시간 → Minor~Major(환경별 조정)
  3. Wazuh 규칙(간단 예시)
    • Filebeat/Journalbeat 또는 Wazuh agent로 커널 로그 수집 → SIEM 경고/Slack 연동
    <!-- /var/ossec/etc/rules/local_rules.xml -->
    <rule id="920100" level="8">
      <if_log_contains>watchdog: BUG: soft lockup</if_log_contains>
      <description>Linux soft lockup detected</description>
      <group>system,availability,watchdog,</group>
    </rule>
    <rule id="920101" level="12">
      <if_log_contains>NMI watchdog: Watchdog detected hard LOCKUP</if_log_contains>
      <description>Linux hard lockup detected</description>
      <group>system,availability,watchdog,</group>
    </rule>
    <rule id="920102" level="7">
      <if_log_contains>INFO: task</if_log_contains>
      <if_log_contains>blocked for more than</if_log_contains>
      <description>Linux hung task detected</description>
      <group>system,availability,watchdog,</group>
    </rule>

VirtualBox + Ubuntu 환경 최적화(재발 방지)

  1. 호스트/게스트 리소스
    • CPU 코어 2개 이상 할당, Execution cap 100%
    • 메모리 여유(스왑 포함) 확보
    • 호스트 절전/절전모드 중단(게스트 시간이 멈추면 false positive↑)
  2. VirtualBox VM 설정 권장
    • System → Motherboard: I/O APIC 활성화
    • System → Processor: PAE/NX 활성화, 코어 수 2+
    • Acceleration: VT-x/AMD-V & Nested Paging 활성화
    • Paravirtualization Interface: KVM (리눅스 게스트에 보편적)
  3. 게스트 커널 파라미터
    • 과도 경고 시 kernel.watchdog_thresh=60처럼 여유 확대
    • I/O 병목(디스크/네트워크) 튜닝: 디스크 캐시/호스트 I/O 스케줄러 확인

실무 트러블슈팅 체크리스트(명령/절차)

  1. 증상 캡처
    dmesg -T | egrep -i "watchdog|lockup|hung task|nmi"
    journalctl -k -S -2h | egrep -i "watchdog|lockup|hung task|nmi"
  2. 가해자 프로세스 파악
    # 예: dockerd PID=1813라면
    top -H -p 1813
    ps -Tp 1813
    sudo strace -p 1813 -f -tt -o /tmp/dockerd.strace & sleep 10; sudo kill %1
    sudo cat /proc/1813/stack   # 커널 스택 힌트(커널 진입 경로 파악)
  3. 시스템 전체 관찰
    vmstat 1 10
    pidstat -u -r -d 1 10
    iostat -xz 1 5
    mpstat -P ALL 1 5
  4. 핫스팟 분석(perf)
    sudo apt-get install -y linux-tools-$(uname -r)
    sudo perf top         # 실시간 핫함수
    sudo perf record -g -- sleep 10 && sudo perf report
  5. 커널 SysRq 덤프(매우 유용)
    # SysRq 활성화
    echo 1 | sudo tee /proc/sys/kernel/sysrq
    # 잠긴 태스크 스택 덤프
    echo w | sudo tee /proc/sysrq-trigger
    # 모든 태스크 백트레이스
    echo t | sudo tee /proc/sysrq-trigger
  6. Docker/컨테이너 각론
    • 컨테이너에 CPU 제한(quota) 걸려 과도 스로틀?
      docker inspect <container> | jq '.[0].HostConfig.NanoCpus, .[0].HostConfig.CpuQuota'
    • cgroup 사용률
      systemd-cgtop
    • 커널/네트워크 경로 이슈(예: packetbeat): 버전 업데이트, pcap 모드/af_packet 설정 점검, 드롭/리트라이나 DNS 역조회 끄기 등 튜닝
300x250

대응 플레이북

  1. 즉각 조치
    • 동일 호스트에서 hard lockup 발생 → 장애 채널 알림 + 장애 선언
    • soft lockup 단발성 → 로그/지표 수집 후 관찰
    • 연속 발생/장시간(>120s) → 서비스 영향 평가 및 롤백/재시작/VM 재배치 고려
  2. 근본 원인(예시 분류)
    • 애플리케이션 루프/스핀락: 해당 버전 핫픽스/롤백
    • 드라이버/커널 버그: HWE 커널/업스트림 수정 적용
    • 가상화 스케줄링 지연: VM 리소스 상향, 호스트 부하 분산
    • I/O 병목: 디스크/네트워크 튜닝, 큐 사이즈/IRQ 밸런싱
  3. 재발 방지
    • VM/노드별 kernel.watchdog_thresh 환경 표준화(예: 베어메탈 20, VM 60)
    • 시나리오 모니터링 규칙(섹션 4의 KQL/Wazuh 룰) 운영
    • 장애 Postmortem에 perf/SysRq 덤프 첨부 의무화

systemd/하드웨어 Watchdog와의 관계

  1. systemd 서비스 Watchdog
    • 유닛 파일에 WatchdogSec=30s → 서비스가 systemd-notify WATCHDOG=1 주기 핑
      핑이 끊기면 systemd가 서비스 재시작.
    [Service]
    Type=notify
    WatchdogSec=30s
    ExecStart=/usr/local/bin/myservice
    • 애플리케이션에 sd_notify 통합 필요.
  2. 하드웨어 Watchdog(선택)
    • /dev/watchdog 드라이버(iTCO_wdt 등) + watchdog 데몬
    • 커널이 멈추면 하드웨어가 강제 재부팅 — 산업/어플라이언스에 유용.

내부 사용자 가이드(요약 배포용)

  1. 증상 신고 템플릿
    • 발생 시간 / 호스트명 / 게스트 종류(VM/베어메탈) / 메시지 전문 / 영향 범위
  2. 현장 점검 5분 루틴
    • journalctl -k -S -1h | egrep -i "watchdog|lockup|hung"
    • 문제 PID 상위 CPU 스레드: top -H -p <PID>
    • SysRq 덤프: echo w > /proc/sysrq-trigger; echo t > /proc/sysrq-trigger
    • perf top 30초 관찰 후 종료
  3. 시스템 튜닝 체크
    • VM: 코어≥2, Execution cap 100%, Paravirtualization=KVM
    • sysctl: kernel.watchdog_thresh=60(가상), hung_task_timeout_secs=300

질문 로그에 대한 즉시 권고

  1. 단기
    • VirtualBox VM에 코어 2+, Paravirt=KVM, VT-x/AMD-V & Nested Paging 켜기
    • 아래 적용 후 경과 관찰
      sudo sysctl -w kernel.watchdog_thresh=60
      sudo sysctl -w kernel.hung_task_timeout_secs=300
    • 문제 프로세스별 단기 조치
      systemctl restart docker
      (dockerd 영향 크면), packetbeat는 버전 업데이트/설정 확인 후 재시작
  2. 중기
    • 커널/가상화 드라이버 업데이트(게스트 확장팩 포함)
    • Kibana/Wazuh 룰 배포 → 재발 시 즉시 알림
  3. 장기
    • 반복 시 perf + SysRq 덤프로 근본원인 축적
    • 필요 시 하드웨어 watchdog + 자동 재부팅 정책 검토(중요 노드)
728x90
그리드형(광고전용)

댓글