본문 바로가기

리눅스

자빅스(Zabbix) 알람을 Mattermost와 연동하는 방법

반응형

자빅스(Zabbix) 알람을 Mattermost와 연동하는 방법

자빅스(Zabbix) 알람을 Mattermost와 연동하려면 Zabbix에서 Mattermost 웹훅(Webhook)을 설정해야 합니다. 이를 통해 Zabbix 알람 이벤트가 발생할 때 Mattermost로 메시지를 보낼 수 있습니다.

zabbix_server.conf 설정 확인

zabbix_server.conf 설정에 AlertScriptsPath 설정되어 있는지 확인합니다.

vim /etc/zabbix/zabbix_server.conf
ListenPort=10051
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_server.pid
SocketDir=/var/run/zabbix
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=password
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
StartSNMPTrapper=1
Timeout=4
AlertScriptsPath=/usr/lib/zabbix/alertscripts
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1

Mattermost 채널 및 웹훅 설정

1. Mattermost 웹훅 생성(Incoming WebHooks)

Mattermost에서 알람을 수신할 채널을 선택하고 해당 채널의 "Integrations" 또는 "웹훅" 설정으로 이동합니다.

 

2. 새 웹훅 생성

새 웹훅을 생성하고 해당 웹훅 URL을 복사합니다.

Zabbix 설정

1. Zabbix 웹 인터페이스로 로그인

Zabbix 서버에 로그인합니다.

 

2. Media 유형 추가(자빅스 웹 페이지에서 미디어 타입 설정)

  • "관리" > "미디어 타입"으로 이동합니다.
  • "연락 방법 작성"을 클릭하고 다음과 같이 설정합니다:
    • 이름: Mattermost (또는 원하는 이름)
    • 유형: 웹훅
    • 웹훅 URL: Mattermost 웹훅에서 복사한 URL
    • 보안: 필요한 경우 SSL/TLS를 사용하도록 설정
    • 기타 설정: 필요한 경우 추가 설정을 구성

Administration > Media types > Create media type

zabbix1

Mattermost.py 스크립트 작성

  • URL, ICON 변경
vim /usr/lib/zabbix/alertscripts/Mattermost.py
#!/bin/python3
#coding: utf8

import json
import os
import sys
import requests

# Mattermost incoming web-hook URL and user name
URL = "https://matt.sangchul.com/hooks/x8rzdcx56f8ztpiu5i5qq38cwh"
USERNAME = "Zabbix"
ICON = "http://zbx.sangchul.com/zabbix/zabbix-monitoring.png"
LEVELS = ["Warning", "High", "Disaster"]

def send_to_mattermost(webhook, channel, message, username="zabbix", color="#FF2A00", icon="", highlight=False):
        # Build our JSON payload and send it as a POST request to the Mattermost incoming web-hook URL
        payload = {"icon_url": icon, "attachments": [{"color": color, "text": message}], "channel": channel, "username": username, "icon_emoji": ""}
        if highlight:
                payload["message"] = ":warning: Cc <!here>"
        requests.post(webhook, data={"payload": json.dumps(payload)})

if __name__ == '__main__':
        if len(sys.argv) < 4:
                print("Usage: python "+sys.argv[0]+" <CHANNEL> <SUBJECT> <MESSAGE>")
                sys.exit(1)

        ## Values received by this script:
        # To = sys.argv[1] (Mattermost channel or user to send the message to, specified in the Zabbix web interface; "@username" or "#channel")
        # Subject = sys.argv[2] (usually containing either "Problem" or "Resolved")
        # Message = sys.argv[3] (whatever message the Zabbix action sends)

        # Get the Mattermost channel or user (sys.argv[1]) and Zabbix subject (sys.argv[2])
        channel = sys.argv[1]
        subject = sys.argv[2]
        if "{{OK}}" in subject:
                subject=subject.replace("{{OK}}",":white_check_mark:")
        elif "{{WARNING}}" in subject:
                subject=subject.replace("{{WARNING}}",":warning:")
        color = "#00FF13" if "Resolved" in subject else "#FF2A00"

        # The message that we want to send to Mattermost  is the "subject" value (sys.argv[2] / $subject - that we got earlier)
        #  followed by the message that Zabbix actually sent us (sys.argv[3])
        message = "### "+subject + "\n\n"+sys.argv[3]

        # Let's highlight every connected people if the level is serious
        highlight = False
        for level in LEVELS:
                if level in message:
                        highlight = True
                        break

        # Send notification
        send_to_mattermost(URL, channel, message, username=USERNAME, color=color, icon=ICON, highlight=highlight)

github - jirouette/zabbix-mattermost-alertscript : mattermost.py

zabbix2

  • 스크립트 파라미터
    • {ALERT.SENDTO}
    • {ALERT.SUBJECT}
    • {ALERT.MESSAGE}
728x90

3. 사용자 설정(자빅스 웹 페이지에서 사용자에 미디어 추가)

  • "관리" > "유저"로 이동합니다.
  • 알람을 받을 사용자를 선택하거나 새 사용자를 생성합니다.

Administration > Media types > Create media type

zabbix3
zabbix4
zabbix5

4. 미디어 설정(자빅스 웹 페이지에서 Message template 수정)

  • 사용자를 선택하고 "미디어" 탭을 엽니다.
  • "미디어 유형" 필드에서 "Mattermost" 또는 지정한 미디어 유형을 선택합니다.
  • "설정" 열에서 사용자에게 알람을 보낼 채널과 다른 옵션을 설정합니다.

Administration > Media tapes > Message template

zabbix6

5. 알람 설정(자빅스 웹 페이지에서 액션 생성/설정)

  • Zabbix에서 알람을 설정할 대상(호스트 또는 트리거)에 대한 알람 수신을 선택합니다.
  • "액션"에서 이벤트를 처리할 방법을 구성합니다.
  • 이벤트가 발생하면 Mattermost로 알람 메시지가 보내집니다.

Configuration > Actions > Create action

zabbix7

  • Mattermost 메세지

zabbix8

 

이러한 설정 후, Zabbix 알람 이벤트가 발생하면 Mattermost 채널로 메시지가 전송됩니다. 이를 통해 Zabbix 모니터링 시스템의 알람을 Mattermost로 직접 전달하여 관리자 및 팀원들이 신속하게 대응할 수 있습니다.

 

728x90
반응형