syslogd 이메일을 특정 로그 메시지로 만들려면 어떻게해야합니까? 이것이 BSD 호환 syslog 디먼이라고

syslogd가 err우선 순위 이상의 것을 기록 할 때마다 이메일 알림을 받고 싶습니다 . 이것이 BSD 호환 syslog 디먼이라고 가정하십시오.

  • 이것이 달성 될 수 있습니까?
  • 쉘 스크립트에 명명 된 파이프를 사용해야합니까?
  • 다른 가능한 해결책은 무엇입니까?


답변

명명 된 파이프를 사용 하는 솔루션 이 있습니다. 데비안 용으로 설정되었지만 BSD 용으로 수정할 수 있어야합니다.


답변

syslogd (8)를 통한 알림

OpenBSD 서버에서 local1 기능을 사용하는 웹 응용 프로그램에서 중요한 메시지를 기록하고 전자 메일로 보냅니다 . 내 /etc/syslog.conf 는 다음과 같습니다 .

local1.err    /var/log/example.com
local1.err    |while read log; do echo "$log" | /usr/bin/mail -s SYSLOG me@example.com; done

while 루프는 syslogd에서 각 줄을 무한정 읽은 다음 echo를 통해 메일로 파이프합니다. 이것은 중요하다. echo가 라인을 출력하면 파이프를 종료하고 EOF를 보내서 로그 메시지를 이메일로 보낼 수 있습니다.

즉, syslogd를 통해 메일로 직접 파이프 할 수 없습니다.

local1.err    |/usr/bin/mail -s SYSLOG me@example.com

syslogd는 파이프 자체가 종료되거나 HUP 신호를 보낼 때까지 파이프에 계속 기록하기 때문에 메일은 전체 로그 메시지 세트를 하나의 큰 이메일로 보냅니다.

newsyslog (8)를 통한 알림

cron에서 newsyslog를 예약하는 것은 메시지를 느리게 또는 대량으로 얻는 또 다른 방법입니다.

예를 들어, 매일 로그 메시지를 이메일로 요약하려면 /etc/newsyslog.conf 에서 M 플래그를 설정하고 모니터 이메일 주소를 지정하십시오 .

# logfile_name        owner:group  mode  count  size  when  flags  monitor
/var/log/example.com  root:wheel   640   7      *     24    M      me@example.com

그런 다음 crontab에서 newsyslog를 예약하십시오.

# minute hour  mday  month  wday  command
0        *     *     *      *     /usr/bin/newsyslog
1-59     *     *     *      *     /usr/bin/newsyslog -m

newsyslog (8)-m 옵션은 다음과 같습니다.

모니터링 모드; 플래그에 ‘M’으로 표시된 항목 만 처리됩니다. 모니터중인 각 로그 파일에 대해 -sys 플래그를 사용하여 newsyslog를 마지막으로 실행 한 이후의 모든 로그 출력이 모니터 통지 섹션에 나열된 사용자에게 우편으로 보내집니다.


답변

logcheck 또는 logwatch를 볼 수 있습니다. Logcheck는 일련의 패턴과 일치하지 않는 로그 라인을 이메일로 매시간 보내드립니다. 아마 더 자주 할 수있을 것 같아요. 나는 로그 파일을 보면서 그것을하는 도구를 모른다.하지만 거기에 무언가가 있다고 확신한다.


답변

OSSEC을 사용하겠습니다. 실시간으로 로그를 모니터링하고 특정 이벤트가 일치 할 때 이메일 (또는 다른 수단)로 쉽게 경고 할 수 있습니다. 사용하기 쉽고 확장 가능하며 오픈 소스입니다.

링크 : http://www.ossec.net


답변