로그 모니터링을 위해 쉘 스크립트 사용

로그 모니터링을 위해 쉘 스크립트 사용

로그 파일의 오류를 모니터링한 후 관리자에게 이메일을 보내고 싶습니다.

로그 파일에는 다음 데이터가 포함되어 있습니다.

11 Aug 02:30 Service1 restarted
11 Aug 05:35 Service1 restarted
11 Aug 08:43 Service2 restarted
11 Aug 11:20 Service1 restarted
11 Aug 14:53 Service2 restarted

5분마다 실행되고 마지막 서비스 재시작 발생을 확인하고 이메일을 보내는 스크립트를 만들고 싶습니다.

예: 스크립트가 02:35에 실행되면 Service1다시 시작이 표시되므로 이메일을 보냅니다 Service1 restarted at 02:30. 예를 들어 이제 스크립트가 5:45에 실행되면 Service105:35에 다시 시작 이메일만 보내야 합니다. (02:35 재시작을 포함하면 안 됨)

이 요구 사항을 충족할 수 있는 방법이 있나요? 저는 기본적으로 Linux와 쉘 스크립팅을 처음 접했습니다.

답변1

먼저 5분짜리 crontab을 만듭니다:

*/5 * * * * myscript.sh

myscript.sh를 실행합니다( $HOME디렉토리에서).

 #!/bin/bash
 tail -1 /path/to/file.log > /some/dir/after
 if cmp -s /some/dir/after /some/dire/before
 then
     cat /some/dir/after | mail -s "restart" [email protected]
     cp /some/dir/after /some/dir/before
 fi

(물론) 올바른 가치관을 가지세요.

이는 5분 이내에 두 번의 재부팅이 없다는 것을 의미합니다.

답변2

나는 02:35에 파일의 마지막 줄이 02:30 재시작이 될 것이라고 가정하고 있으므로 필요한 것은 아래와 같은 cron 항목뿐입니다.

*/5 * * * * tail -1 /path/to/file.log | mailx -s "Last restart" [email protected]

이 접근 방식의 단점은 관리자가 02:35, 02:40, 02:45,...에 동일한 이메일을 받게 된다는 것입니다.

답변3

이 시도:

예약 된 일들

*/5 * * * * /path/to/checklog.bash

스크립트

#!/bin/bash

service=$(tail -1 /path/to/logfile | awk '{print $4}')
logdate=$(tail -1 /path/to/logfile | awk '{print $1,$2,$3}')

if  test 'find "/path/to/logfile" -mmin -5'
then
    echo "$service was restarted on $logdate" | mail -s "Restart notification" [email protected]
fi

답변4

이를 처리하는 보다 안정적인 방법은 염두에 두고 있는 특정 시나리오에 맞게 구축된 도구를 사용하는 것입니다(예: 로그를 모니터링하고 새로 감지된 패턴을 기반으로 이메일 보내기).

이 도구를 다운로드하세요

압축을 풀고 실행하시면, 모방할 수 있는 실제 사례를 많이 보실 수 있습니다. 집중하고 싶은 한 가지 예는 하나 이상의 다른 로그에서 특정 패턴이 감지될 때마다 특정 이메일 주소로 이메일 알림을 보내는 작업을 해결하는 MODEL13입니다.

./logrobot localhost /var/tmp/logXray autonda /var/log 60m '.*error.*_P_.*fatal.*' '.'  1 1 errchk -ndshow [email protected]

위 명령에서 필요에 따라 변경해야 하는 매개변수는 다음과 같습니다.

  • '.*실수. *_P_.* 치명적입니다. *'- 여기서 /var/log 디렉터리의 모든 로그는 두 가지 패턴으로 검색됩니다.

  • /var/로그- 모니터링하려는 로그가 있는 디렉터리입니다. 특정 로그 파일을 모니터링하려면 이를 로그 파일의 절대 경로로 바꾸십시오.

  • 1 - 로그에서 항목이 1개 발견되면 경고 알림을 보냅니다.
  • 1 - 로그에서 항목이 1개 발견되면 중요한 경고를 보냅니다.
    • 경고와 위험이 동일한 경우 로그에서 모니터링된 패턴이 발견되면 검사에서 위험 경고가 발생합니다.
  • errchk - 이 특정 로그 검사에 대한 레이블입니다. 적절한 이름을 지정하십시오... 모니터링 중인 로그 유형과 일치하는 이름... 즉 tomcatLogCheck
  • 물론 이메일=. 적절한 이메일 주소로 변경하세요.

이는 모니터링되는 로그에 추가된 새 줄만 검색되도록 하는 데 필요한 논리를 포함하고 있기 때문에 더 나은 옵션입니다. 또한 훨씬 더 효율적입니다. 그리고 휴대성이 있어야 합니다.

물론 이메일을 보낼 수 있도록 호스트 컴퓨터에 postfix가 설치되어 있는지 확인하십시오. 여기서 뭔가를 잊어버렸을 수도 있지만 이것이 이 도구가 작동하는 방식의 핵심입니다.

관련 정보