본문 바로가기

리눅스

Zabbix 알림을 Slack과 연동하는 방법

반응형

Zabbix 알림을 Slack과 연동하는 방법

Slack Webhook을 사용하여 Slack 채널로 알림을 보낼 수 있습니다.

1. Slack에서 Webhook 설정

Webhook URL 복사

https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX

cURL 요청

curl -X POST -H 'Content-type: application/json' \
--data '{"text":"Test message from Zabbix"}' \
https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
curl -X POST \
--data-urlencode \
"payload={\"channel\": \"#my-channel-here\", \"username\": \"webhookbot\", \"text\": \"이 항목은 #개의 my-channel-here에 포스트되며 webhookbot이라는 봇에서 제공됩니다.\", \"icon_emoji\": \":ghost:\"}" \
https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX

2. Zabbix Media Type 생성

Webhook 스크립트 파일 생성

cd /usr/lib/zabbix/alertscripts
vim /usr/lib/zabbix/alertscripts/slack_webhook.sh
#!/bin/bash

# Exit on any error
set -e

# Validate input arguments
if [ "$#" -ne 4 ]; then
            echo "Usage: $0 <webhook_url> <send_to> <subject> <message>"
                exit 1
fi

WEBHOOK_URL=$1
SEND_TO=$2
SUBJECT=$3
MESSAGE=$4

# Construct JSON payload
PAYLOAD=$(cat <<EOF
{
    "username": "Zabbix Alert",
    "text": "$SEND_TO\n$SUBJECT\n$MESSAGE"
}
EOF
)

# Send the payload to the webhook URL
curl -k -X POST -H "Content-Type: application/json" -d "${PAYLOAD}" "${WEBHOOK_URL}"

# Output success message
echo "Alert sent to Slack successfully."
더보기

---

vim slack_webhook.sh
#!/bin/bash

# Exit on any error
set -e

# Validate input arguments
if [ "$#" -ne 4 ]; then
    echo "Usage: $0 <webhook_url> <send_to> <subject> <message>"
    exit 1
fi

WEBHOOK_URL=$1
SEND_TO=$2
SUBJECT=$3
MESSAGE=$4

# Determine emoji and color based on subject content
if echo "$SUBJECT" | grep -Eq '^RECOVER(Y|ED)?$|^OK$|^Resolved.*'; then
    EMOJI=":smile:"
    COLOR="#0C7BDC"
elif echo "$SUBJECT" | grep -Eq '^PROBLEM.*|^Problem.*'; then
    EMOJI=":frowning:"
    COLOR="#FFC20A"
else
    EMOJI=":question:"
    COLOR="#CCCCCC"
fi

# Construct JSON payload
PAYLOAD=$(cat <<EOF
{
    "username": "Zabbix Alert",
    "text": "*$SEND_TO*\n",
    "attachments": [
        {
            "fallback": "$SUBJECT",
            "title": "$SUBJECT",
            "text": "$MESSAGE",
            "color": "$COLOR"
        }
    ],
    "icon_emoji": "$EMOJI"
}
EOF
)

# Debug: Print payload for validation
echo "Debug: Sending the following payload to Slack:"
echo "$PAYLOAD"

# Send the payload to the webhook URL
RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" -X POST -H "Content-Type: application/json" -d "$PAYLOAD" "$WEBHOOK_URL")

# Check Slack API response
if [ "$RESPONSE" -ne 200 ]; then
    echo "Error: Failed to send alert to Slack. HTTP status code: $RESPONSE" >&2
    exit 1
fi

# Output success message
echo "Alert sent to Slack successfully."

---

chmod +x /usr/lib/zabbix/alertscripts/slack_webhook.sh

Zabbix Media Type 설정

경고 > 미디어 타입 > 연락 방법 생성

  • 이름 : Slack Webhook
  • 종류 : 스크립트
  • 스크립트 이름 : slack_webhook.sh
  • 스크립트 파라미터
    • https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
    • {ALERT.SENDTO}
    • {ALERT.SUBJECT}
    • {ALERT.MESSAGE}

zabbix_slack

3. 그룹 및 사용자 생성

그룹 생성

유저 > 유저 그룹 > 유저 그룹 생성

  • 그룹 이름 : Slack Notification Group

slack

사용자 생성

유저 > 유저 > 유저 생성

  • 유저 이름 : slack
  • 이름 : Slack Notification User
  • 그룹 : Slack Notification Group

slack

4. 사용자 미디어 추가

유저 > 유저 > 유저 이름(Admin) > 연락 방법 1

  • 종류 : Slack
  • 수신처 : Slack Alert
  • 심각도 선택 : 알림 받을 심각도

zabbix_slack
zabbix_slack

5. 액션(Action) 설정

경고 > 액션 > Trigger actions > 액션 생성

zabbix_slack
zabbix_slack

 

참고URL

- Zabbix Documentation : 1 Webhook script examples - Slack webhook (custom)

 

728x90
반응형