[Linux] rsyslog 서버에서 slack으로 메세지 전송하기

이전 글에서 rsyslog 서버를 구축하는 방법을 알아보았는데요, 로그의 severity level이 “3(error)” 이하인 경우 Slack으로 로그 메세지를 전송하는 방법을 알아보겠습니다. 이번 글에서는 RainerScript 형식을 사용하겠습니다.

  1. slack webhook url을 준비합니다.
    (slack api > Your apps > Features > Incoming Webhooks)
    Sample curl request to post to a channel을 복사하여 프롬프트에서 실행해 봅니다. “Hello, World!”라는 메세지가 전송됩니다.
    slack webhook
    ※ Slack webhook에 대해 더 많은 것을 알고 싶으신 분은 여기를 방문하세요: https://api.slack.com/messaging/webhooks
  2. rsyslog server의 main config 파일을 아래와 같이 설정합니다.
    # vi /etc/rsyslog.conf
    module(load="omprog") # send message to slack webhook # Provides UDP syslog reception # for parameters see http://www.rsyslog.com/doc/imudp.html module(load="imudp") # needs to be done just once #input(type="imudp" port="514") # look /etc/rsyslog.d/00-remote.conf
  3. remote host의 rsyslog를 수집하고 slack webhook으로 전송하기 위한 설정파일을 작성합니다.
    # vi /etc/rsyslog.d/00-remote.conf
    # Define a template for the log file name template(name="RemoteLogFile" type="string" string="/var/log/remote/%fromhost-ip%/%$YEAR%-%$MONTH%-%$DAY%.log") # Define a template for the log format of log file template(name="CustomRemoteLogFormat" type="string" string="%timegenerated% %HOSTNAME% %fromhost-ip% %programname%[%syslogfacility-text%(%syslogfacility%).%syslogseverity-text%(%syslogseverity%)] %msg%\n") # Define a template for the log format of slack message template(name="jsonFormatTemplate" type="string" string="\n{\"text\":\"[%timegenerated%] %HOSTNAME%(%fromhost-ip%) <%PRI%>%syslogfacility-text%(%syslogfacility%).%syslogseverity-text%(%syslogseverity%) %programname% %syslogtag% %msg%\"}") # Define a ruleset for ruleset(name="remoteSyslog") { action(type="omfile" dynaFile="RemoteLogFile" template="CustomRemoteLogFormat") if ($fromhost-ip != "58.54.160.102" and $fromhost-ip != "58.54.160.103" and $fromhost-ip != "58.54.160.104" and $syslogseverity <= 3) then { action(type="omfile" file="/var/log/remote/slack_message.log" template="jsonFormatTemplate") action(type="omprog" binary="/root/send_to_slack_webhook.sh" template="jsonFormatTemplate") } stop } # Provides UDP syslog reception input(type="imudp" port="514" ruleset="remoteSyslog")
  4. rsyslog 설정 파일이 제대로 설정되었는지 유효성을 검증한 후, rsyslog 데몬을 재시작합니다.
    # rsyslogd -N1
    # systemctl restart rsyslog
    
  5. slack 메세지 전송을 위한 쉘 스크립트 파일을 작성합니다.
    # vi /root/send_to_slack_webhook.sh
    #!/bin/bash WEBHOOK_URL="your_slack_webhook_url" message=$(tail -n 1 /var/log/remote/slack_message.log) if echo "$message" | jq . >/dev/null 2>&1; then echo -e "${message}" >> /var/log/remote/slack_message_output.log CMD="curl -X POST -H 'Content-type: application/json' --data '${message}' ${WEBHOOK_URL}" eval "$CMD" else echo -e "${message}" >> /var/log/remote/slack_message_error.log fi

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다