본문 바로가기

리눅스

Zabbix에서 Slack으로 Webhook 알림을 받는 방법

반응형

Zabbix에서 Slack으로 Webhook 알림을 받는 방법

Zabbix 7.0에서는 Webhook을 활용하여 Slack으로 장애 알림을 받을 수 있습니다.

1. Slack Webhook URL 생성

2. Slack 알림 스크립트 작성

Zabbix가 Slack으로 장애 메시지를 전송할 수 있도록 Bash 스크립트를 작성합니다.

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

# Zabbix에서 전달하는 파라미터
WEBHOOK_URL="$1"  # Slack Webhook URL
CHANNEL="$2"       # Slack 채널
SUBJECT="$3"       # Zabbix 메시지 제목 (PROBLEM / RESOLVED 등)
MESSAGE="$4"       # Zabbix 메시지 본문

USERNAME="Zabbix"
ICON_URL="http://zbx.scbyun.com/dl/icon/zabbix-monitoring.png"

LEVELS=("Warning" "High" "Disaster")

# 필수 파라미터 검증
if [[ -z "$WEBHOOK_URL" || -z "$CHANNEL" || -z "$SUBJECT" || -z "$MESSAGE" ]]; then
    echo "Usage: $0 <WEBHOOK_URL> <CHANNEL> <SUBJECT> <MESSAGE>"
    exit 1
fi

# 문제 해결 여부 및 색상 지정
COLOR="#CCCCCC"  # 기본 회색
if [[ "$SUBJECT" == *"Resolved"* ]]; then
    COLOR="#00FF13"
    SUBJECT=":white_check_mark: ${SUBJECT}"
elif [[ "$SUBJECT" == *"Problem"* ]]; then
    COLOR="#FF2A00"
    SUBJECT=":rotating_light: ${SUBJECT}"
fi

# 중요도 수준 강조 여부 확인
HIGHLIGHT=false
for LEVEL in "${LEVELS[@]}"; do
    if [[ "$MESSAGE" == *"$LEVEL"* ]]; then
        HIGHLIGHT=true
        break
    fi
done

PAYLOAD=$(jq -n \
    --arg username "$USERNAME" \
    --arg icon_url "$ICON_URL" \
    --arg channel "$CHANNEL" \
    --arg title "$SUBJECT" \
    --arg text "$MESSAGE" \
    --arg color "$COLOR" \
    --arg highlight_message ":warning: Cc <!here>" \
    '{
        username: $username,
        icon_url: $icon_url,
        channel: $channel,
        attachments: [{
            color: $color,
            title: $title,
            text: $text
        }]
    } | if $highlight_message and '"$HIGHLIGHT"' then .message = $highlight_message else . end')

RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" -X POST -H "Content-type: application/json" --data "$PAYLOAD" "$WEBHOOK_URL")

# 응답 확인
if [[ "$RESPONSE" -ne 200 ]]; then
    echo "Mattermost API Error: HTTP $RESPONSE" >&2
    exit 1
fi

스크립트 실행 권한 부여

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

3. Zabbix 미디어 유형(Media Type) 설정

Zabbix 웹 UI 로그인 → 관리(Administration) → 미디어 유형(Media types) 이동

연락 방법 생성

  • 일반 탭(General) 설정
  • 이름: Slack
  • 종류: 스크립트
  • 스크립트 이름: slack.sh
  • 스크립트 파라미터
    • https://hooks.slack.com/services/T017
    • #zbxalert
    • {ALERT.SUBJECT}
    • {ALERT.MESSAGE}

zabbix_slack

테스트

zabbix_slack

4. 사용자 미디어(User Media) 설정

Zabbix 웹 UI → 관리(Administration) → 사용자(Users) 이동

알림을 받을 사용자 선택 → 연락 방법 추가

  • 종류(Type): slack
  • 수신처: #zbxalert (Slack 채널)
  • 연락 허용 시간대
  • 심각도 선택
  • 활성(Enabled): 체크

zabbix_slack

5. Slack 메시지 출력

slack

Webhook URL이 유효한지 curl로 직접 테스트

curl -X POST \
-H "Content-type: application/json" \
--data '{"text":"Hello, World!"}' \
"https://hooks.slack.com/services/Txxxxxxxx/Bxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxx"

 

728x90
반응형