LogWatch로 서버 로그를 모니터링하자-(1) (sysstat을 활용하자)

Alex·2025년 2월 13일
0

Plaything

목록 보기
108/118

Linux 운영체제는 여러 작동 이벤트를 기록하기 위해서 로그 파일들을 만든다. 다만, 이 파일을 읽기는 쉽지 않다. 그래서 원시 로그 파일을 보다 사용자 친화적인 로그 다이제스트로 변환할 수 있는 유틸리티가 활용된다.

logwatch는 Perl로 작성된 오픈 소스 로그 파서 및 분석기로 원시 로그 파일을 구문 분석하고 구조화된 형식으로 변환한다. 실시간 로그 처리 및 모니러팅보다는 쉽게 사용할 수 있는 로그 요약에 좀더 중점을 둔 도구다.

문서를 보면서 이를 활용해보자.

우선 Logwatch를 설치해보자.

Sudo apt install logwatch
sudo vi /etc/logwatch/conf/logwatch.conf

Detail = Med //보고서의 자세한 정도를 정한다. 매일 보는 거라서 중간정도로 지정했다.
Range = yesterday //
Output = mail
Format = text
MailTo = your-email@domain.com //보고서를 받을 이메이릉 맂정한다. 

Service = sudo
Service = iptables
Service = sshd

ls /usr/share/logwatch/scripts/services/이걸 통해서 사용가능한 서비스들을 확인할 수 있다.
근데 logwatch 설정 파일이 계속 작동을 안해서

그냥 스크립트를 짜서 로그 파일 보고서를 남기기로 했다.

이렇게 보내려고 하는데 25번 아웃바운드 포트가 막혀서 계속 error가 떴다.
디스코드 웹훅으로 보내기로 했다.

근데 sshd같은 경우는 키로 접속한 내역이 보여서 보안 상 좋지 않을듯했다.

그냥 서버에 매일 보고서를 만드는 스크립트를 짜기로 했다.

# 로그 디렉토리 설정 및 생성
LOG_DIR="/var/log/daily-reports"

# 로그 디렉토리 권한 설정


# logwatch 실행 및 리포트 저장
sudo logwatch --detail MED --range today --service cron --service http --service iptables --service sshd --output stdout | sudo tee "$LOG_DIR/report-$DATE.>

이제 이걸 cron으로 돌려서 매일 6시에 작동하게 했다.

sudo crontab -e
0 18 * * * /usr/local/

서버 자원 리소스를 모니터링하자

#!/bin/bash

WEBHOOK_URL="디스코드_웹훅_URL"
DATE=$(date '+%Y-%m-%d %H:%M')

# 시스템 리소스 데이터 수집 (최근 3개 + 평균)
REPORT=$(
{
  echo "=== 시스템 상태 보고 ($DATE) ==="
    echo
    echo "=== CPU 사용량 (평균) ==="
    sar -u | grep Average
    echo
    echo "=== 메모리 사용량 (평균) ==="
    sar -r | grep Average
})

# Discord로 전송
JSON_DATA=$(jq -n \
    --arg username "Server Monitor" \
    --arg content "$(echo -e "\`\`\`\n$REPORT\n\`\`\`")" \
    '{"username": $username, "content": $content}')

curl -H "Content-Type: application/json" \
     -d "$JSON_DATA" \
     "$WEBHOOK_URL"
     

이렇게 sysstat을 활용하면 cpu, 메모리 사용량을 볼 수 있는데
그걸 평균 내서 디스코드 웹훅으로 3시간마다 전송하기로 했다.

그럼 이제 이런 메시지가 날라온다.

profile
답을 찾기 위해서 노력하는 사람

0개의 댓글