6 Typy mediów

Przegląd

Typy mediów są eksportowane ze wszystkimi powiązanymi obiektami i relacjami obiektów.

Eksportowanie

Aby wyeksportować typy mediów, wykonaj następujące czynności:

  1. Przejdź do AlertyTypy mediów.
  2. Zaznacz pola wyboru typów mediów, które chcesz wyeksportować.
  3. Kliknij Eksportuj poniżej listy.

W zależności od wybranego formatu typy mediów są eksportowane do pliku lokalnego, który posiada domyślną nazwię:

  • zabbix_export_mediatypes.yaml - przy eksporcie do YAML (domyślna opcja eksportu);
  • zabbix_export_mediatypes.xml - przy eksporcie do XML;
  • zabbix_export_mediatypes.json - przy eksporcie do JSON.

Importowanie

Aby zaimportować typy mediów, wykonaj następujące czynności:

  1. Przejdź do AlertsMedia types.
  2. Kliknij Import w prawym górnym rogu.
  3. Wybierz plik importu.
  4. Zaznacz wymagane opcje w regułach importu.
  5. Kliknij Import w prawym dolnym rogu formularza konfiguracji.

Reguły importu:

Rule Description
Update existing Istniejące elementy zostaną zaktualizowane na podstawie danych z pliku importu. W przeciwnym razie nie zostaną zaktualizowane.
Create new Nowe elementy zostaną utworzone na podstawie danych z pliku importu. W przeciwnym razie nie zostaną utworzone.

Komunikat o powodzeniu lub niepowodzeniu importu zostanie wyświetlony w frontend.

Format eksportu

Eksport do YAML:

zabbix_export:
  version: '7.0'
  media_types:
    - name: Pushover
      type: WEBHOOK
      parameters:
        - name: endpoint
          value: 'https://api.pushover.net/1/messages.json'
        - name: eventid
          value: '{EVENT.ID}'
        - name: event_nseverity
          value: '{EVENT.NSEVERITY}'
        - name: event_source
          value: '{EVENT.SOURCE}'
        - name: event_value
          value: '{EVENT.VALUE}'
        - name: expire
          value: '1200'
        - name: message
          value: '{ALERT.MESSAGE}'
        - name: priority_average
          value: '0'
        - name: priority_default
          value: '0'
        - name: priority_disaster
          value: '0'
        - name: priority_high
          value: '0'
        - name: priority_information
          value: '0'
        - name: priority_not_classified
          value: '0'
        - name: priority_warning
          value: '0'
        - name: retry
          value: '60'
        - name: title
          value: '{ALERT.SUBJECT}'
        - name: token
          value: '<PUSHOVER TOKEN HERE>'
        - name: triggerid
          value: '{TRIGGER.ID}'
        - name: url
          value: '{$ZABBIX.URL}'
        - name: url_title
          value: Zabbix
        - name: user
          value: '{ALERT.SENDTO}'
      status: DISABLED
      max_sessions: '0'
      script: |
        try {
            var params = JSON.parse(value),
                request = new HttpRequest(),
                data,
                response,
                severities = [
                    {name: 'not_classified', color: '#97AAB3'},
                    {name: 'information', color: '#7499FF'},
                    {name: 'warning', color: '#FFC859'},
                    {name: 'average', color: '#FFA059'},
                    {name: 'high', color: '#E97659'},
                    {name: 'disaster', color: '#E45959'},
                    {name: 'resolved', color: '#009900'},
                    {name: 'default', color: '#000000'}
                ],
                priority;

            if (typeof params.HTTPProxy === 'string' && params.HTTPProxy.trim() !== '') {
                request.setProxy(params.HTTPProxy);
            }

            if ([0, 1, 2, 3].indexOf(parseInt(params.event_source)) === -1) {
                throw 'Nieprawidłowy parametr "event_source": "' + params.event_source + '".\nMusi mieć wartość 0-3.';
            }

            if (params.event_value !== '0' && params.event_value !== '1'
                && (params.event_source === '0' || params.event_source === '3')) {
                throw 'Nieprawidłowy parametr "event_value": ' + params.event_value + '\nMusi mieć wartość 0 lub 1.';
            }

            if ([0, 1, 2, 3, 4, 5].indexOf(parseInt(params.event_nseverity)) === -1) {
                params.event_nseverity = '7';
            }

            if (params.event_value === '0') {
                params.event_nseverity = '6';
            }

            priority = params['priority_' + severities[params.event_nseverity].name] || params.priority_default;

            if (isNaN(priority) || priority < -2 || priority > 2) {
                throw '"priority" powinno mieć wartość -2..2';
            }

            if (params.event_source === '0' && isNaN(params.triggerid)) {
                throw 'pole "triggerid" nie jest liczbą';
            }

            if (isNaN(params.eventid)) {
                throw 'pole "eventid" nie jest liczbą';
            }

            if (typeof params.message !== 'string' || params.message.trim() === '') {
                throw 'pole "message" nie może być puste';
            }

            data = {
                token: params.token,
                user: params.user,
                title: params.title,
                message: params.message,
                url: (params.event_source === '0') 
                    ? params.url + '/tr_events.php?triggerid=' + params.triggerid + '&eventid=' + params.eventid
                    : params.url,
                url_title: params.url_title,
                priority: priority
            };

            if (priority == 2) {
                if (isNaN(params.retry) || params.retry < 30) {
                    throw 'pole "retry" powinno być liczbą o wartości co najmniej 30, jeśli "priority" jest ustawione na 2';
                }

                if (isNaN(params.expire) || params.expire > 10800) {
                    throw 'pole "expire" powinno być liczbą o wartości co najwyżej 10800, jeśli "priority" jest ustawione na 2';
                }

                data.retry = params.retry;
                data.expire = params.expire;
            }

            data = JSON.stringify(data);
            Zabbix.log(4, '[ Pushover Webhook ] Wysyłanie żądania: ' + params.endpoint + '\n' + data);

            request.addHeader('Content-Type: application/json');
            response = request.post(params.endpoint, data);

            Zabbix.log(4, '[ Pushover Webhook ] Otrzymano odpowiedź z kodem statusu ' + request.getStatus() + '\n' + response);

            if (response !== null) {
                try {
                    response = JSON.parse(response);
                }
                catch (error) {
                    Zabbix.log(4, '[ Pushover Webhook ] Nie udało się przeanalizować odpowiedzi otrzymanej z Pushover');
                    response = null;
                }
            }

            if (request.getStatus() != 200 || response === null || typeof response !== 'object' || response.status !== 1) {
                if (response !== null && typeof response === 'object' && typeof response.errors === 'object'
                        && typeof response.errors[0] === 'string') {
                    throw response.errors[0];
                }
                else {
                    throw 'Nieznany błąd. Sprawdź dziennik debugowania, aby uzyskać więcej informacji.';
                }
            }

            return 'OK';
        }
        catch (error) {
            Zabbix.log(4, '[ Pushover Webhook ] Powiadomienie Pushover nie powiodło się: ' + error);
            throw 'Powiadomienie Pushover nie powiodło się: ' + error;
        }
      description: |
        Zapoznaj się z instrukcją konfiguracji tutaj: https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/pushover

        Ustaw parametr token na klucz aplikacji Pushover.
        Przypisując medium Pushover do użytkownika Zabbix - dodaj klucz użytkownika do pola wyślij do.
      message_templates:
        - event_source: TRIGGERS
          operation_mode: PROBLEM
          subject: 'Problem: {EVENT.NAME}'
          message: |
            Problem rozpoczął się o {EVENT.TIME} dnia {EVENT.DATE}
            Nazwa problemu: {EVENT.NAME}
            host: {HOST.NAME}
            Ważność: {EVENT.SEVERITY}
            Dane operacyjne: {EVENT.OPDATA}
            Oryginalny ID problemu: {EVENT.ID}
            {TRIGGER.URL}
        - event_source: TRIGGERS
          operation_mode: RECOVERY
          subject: 'Rozwiązano w {EVENT.DURATION}: {EVENT.NAME}'
          message: |
            Problem został rozwiązany o {EVENT.RECOVERY.TIME} dnia {EVENT.RECOVERY.DATE}
            Nazwa problemu: {EVENT.NAME}
            Czas trwania problemu: {EVENT.DURATION}
            host: {HOST.NAME}
            Ważność: {EVENT.SEVERITY}
            Oryginalny ID problemu: {EVENT.ID}
            {TRIGGER.URL}
        - event_source: TRIGGERS
          operation_mode: UPDATE
          subject: 'Zaktualizowany problem w {EVENT.AGE}: {EVENT.NAME}'
          message: |
            {USER.FULLNAME} {EVENT.UPDATE.ACTION} problem o {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.
            {EVENT.UPDATE.MESSAGE}

            Bieżący status problemu to {EVENT.STATUS}, wiek to {EVENT.AGE}, potwierdzony: {EVENT.ACK.STATUS}.
        - event_source: DISCOVERY
          operation_mode: PROBLEM
          subject: 'Wykrywanie: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}'
          message: |
            Reguła wykrywania: {DISCOVERY.RULE.NAME}

            Adres IP urządzenia: {DISCOVERY.DEVICE.IPADDRESS}
            DNS urządzenia: {DISCOVERY.DEVICE.DNS}
            Status urządzenia: {DISCOVERY.DEVICE.STATUS}
            Czas działania urządzenia: {DISCOVERY.DEVICE.UPTIME}

            Nazwa usługi urządzenia: {DISCOVERY.SERVICE.NAME}
            Port usługi urządzenia: {DISCOVERY.SERVICE.PORT}
            Status usługi urządzenia: {DISCOVERY.SERVICE.STATUS}
            Czas działania usługi urządzenia: {DISCOVERY.SERVICE.UPTIME}
        - event_source: AUTOREGISTRATION
          operation_mode: PROBLEM
          subject: 'Automatyczna rejestracja: {HOST.HOST}'
          message: |
            Nazwa hosta: {HOST.HOST}
            IP hosta: {HOST.IP}
            Port agent: {HOST.PORT}

Elementy eksportowane

Eksportowane elementy są wyjaśnione w poniższej tabeli.

Element Typ Opis
name string (wymagane) Nazwa typu mediów.
type string (wymagane) Typ komunikacji używany przez typ mediów.
Możliwe wartości:1 EMAIL (0), SMS (1), SCRIPT (2), WEBHOOK (4).
status string Czy typ mediów jest włączony.
Możliwe wartości:1 ENABLED (0, domyślne), DISABLED (1)
max_sessions integer Maksymalna liczba alertów, które można przetwarzać równolegle.
Możliwe wartości dla wiadomości SMS:1 1 (domyślnie).
Możliwe wartości dla innych typów mediów:1 0-100 (gdzie 0 — bez ograniczeń).
attempts integer Maksymalna liczba prób wysłania alertu.
Możliwe wartości:1 1-10 (domyślnie: 3).
attempt_interval string Interwał (z użyciem sekund lub przyrostka czasu) między kolejnymi próbami.
Możliwe wartości:1 0-60 s (domyślnie: 10 s).
description string Opis typu mediów.
message_templates Element główny szablonu wiadomości dla typu mediów.
event_source string (wymagane) Źródło zdarzenia.
Możliwe wartości:1 TRIGGERS (0), DISCOVERY (1), AUTOREGISTRATION (2), INTERNAL (3), SERVICE (4).
operation_mode string Tryb działania.
Możliwe wartości:1 PROBLEM (0), RECOVERY (1), UPDATE (2).
subject string Temat wiadomości.
message string Treść wiadomości.

Zobacz także: Obiekt typu mediów (odnieś się do odpowiedniej właściwości o pasującej nazwie).

Email

Poniższe dodatkowe elementy są eksportowane tylko dla typu mediów Email.

Element Type Description
provider string Dostawca poczty e-mail.
smtp_server string Serwer SMTP.
smtp_port integer Port serwera SMTP, z którym należy się połączyć.
Domyślnie: 25.
smtp_helo string SMTP helo.
smtp_email string Adres e-mail, z którego będą wysyłane powiadomienia.
smtp_security string Poziom zabezpieczeń połączenia SMTP do użycia.
Możliwe wartości:1 NONE (0, domyślnie), STARTTLS (1), SSL_OR_TLS (2).
smtp_verify_host string Weryfikacja hosta SSL dla SMTP.
Możliwe wartości:1 NO (0, domyślnie), YES (1).
smtp_verify_peer string Weryfikacja peer SSL dla SMTP.
Możliwe wartości:1 NO (0, domyślnie), YES (1).
smtp_authentication string Metoda uwierzytelniania SMTP do użycia.
Możliwe wartości:1 NONE (0, domyślnie), PASSWORD (1).
username string Nazwa użytkownika.
password string Hasło uwierzytelniające.
message_format string Format wiadomości.
Możliwe wartości:1 TEXT (0), HTML (1, domyślnie).

Zobacz także: Obiekt typu mediów (odwołaj się do odpowiedniej właściwości o pasującej nazwie).

SMS

Następujące dodatkowe elementy są eksportowane tylko dla typu mediów SMS.

Element Typ Opis
gsm_modem string (wymagane) Nazwa urządzenia szeregowego modemu GSM.

Zobacz także: Obiekt typu mediów (sprawdź odpowiednią właściwość z pasującą nazwą).

Skrypt

Następujące dodatkowe elementy są eksportowane tylko dla typu nośnika Skrypt.

Element Typ Opis
nazwa skryptu string (wymagane) Nazwa skryptu.
parametry Element główny dla parametrów skryptu.
sortorder string (wymagane) Kolejność parametrów skryptu przekazywanych do skryptu jako argumenty wiersza poleceń.
wartość string Wartość parametru skryptu.

Zobacz także: Obiekt typu nośnika (sprawdź odpowiednią właściwość o pasującej nazwie).

Webhook

Następujące dodatkowe elementy są eksportowane tylko dla typu mediów Webhook.

Element Typ Opis
script string Skrypt.
timeout string Limitu czasu żądania HTTP dla skryptu JavaScript.
Możliwe wartości:1 1-60s (domyślnie: 30s).
process_tags string Czy przetwarzać zwrócone tagi.
Możliwe wartości:1 NIE (0, domyślnie), TAK (1).
show_event_menu string Wskaż obecność wpisu w menu zdarzeń,, jeśli makro {EVENT.TAGS.*} zostało pomyślnie przetworzone w polach event_menu_url i event_menu_name.
Możliwe wartości:1 NIE (0, domyślnie), TAK (1).
event_menu_url string Adres URL wpisu menu zdarzeń. Obsługuje makro {EVENT.TAGS.*}.
event_menu_name string Nazwa wpisu menu zdarzeń. Obsługuje makro {EVENT.TAGS.*}.
parameters Element główny dla parametrów typu mediów webhook.
name string (wymagane) Nazwa parametru webhook.
value string Wartość parametru webhook.

Zobacz także: Obiekt typu media (odnieś się do odpowiedniej właściwości o pasującej nazwie).

Przypisy

1 Wartości liczb całkowitych API w nawiasach, na przykład ENABLED (0), są wymienione tylko w celach informacyjnych. Aby uzyskać więcej informacji, zobacz powiązaną stronę obiektu API w tabeli lub na końcu każdej sekcji.