Typy mediów

Przegląd

Typy mediów są eksportowane wraz ze wszystkimi powiązanymi obiektami i relacjami między obiektami.

Eksportowanie

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

  1. Przejdź do Alerts > Media types.
  2. Zaznacz pola wyboru przy typach mediów, które chcesz wyeksportować.
  3. Kliknij Export poniżej listy.

W zależności od wybranego formatu typy mediów są eksportowane do lokalnego pliku o domyślnej nazwie:

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

Importowanie

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

  1. Przejdź do Alerts > Media 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.

W frontend zostanie wyświetlony komunikat o powodzeniu lub niepowodzeniu importu.

Format eksportu

Eksport do YAML:

zabbix_export:
  version: '8.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 ] Sending request: ' + params.endpoint + '\n' + data);

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

            Zabbix.log(4, '[ Pushover Webhook ] Received response with status code ' + request.getStatus() + '\n' + response);

            if (response !== null) {
                try {
                    response = JSON.parse(response);
                }
                catch (error) {
                    Zabbix.log(4, '[ Pushover Webhook ] Failed to parse response received from 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 'Unknown error. Check debug log for more information.';
                }
            }

            return 'OK';
        }
        catch (error) {
            Zabbix.log(4, '[ Pushover Webhook ] Pushover notification failed: ' + error);
            throw 'Pushover notification failed: ' + 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 media 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}
            ID oryginalnego 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}
            ID oryginalnego 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 stan problemu to {EVENT.STATUS}, wiek: {EVENT.AGE}, potwierdzony: {EVENT.ACK.STATUS}.
        - event_source: DISCOVERY
          operation_mode: PROBLEM
          subject: 'Odkrywanie: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}'
          message: |
            Reguła odkrywania: {DISCOVERY.RULE.NAME}

            Adres IP urządzenia: {DISCOVERY.DEVICE.IPADDRESS}
            DNS urządzenia: {DISCOVERY.DEVICE.DNS}
            Stan 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}
            Stan 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 agenta: {HOST.PORT}

Wyeksportowane elementy

Wyeksportowane elementy są opisane w poniższej tabeli.

Element Type Opis
name string (wymagane) Nazwa typu mediów.
type string (wymagane) Transport 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ślnie), DISABLED (1)
max_sessions integer Maksymalna liczba alertów, które mogą być przetwarzane równolegle.
Możliwe wartości dla 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 Odstęp (w sekundach lub z użyciem sufiksu czasu) między kolejnymi próbami ponowienia.
Możliwe wartości:1 0-60s (domyślnie: 10s).
description string Opis typu mediów.
message_templates Element główny dla szablonów wiadomości 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 operacji.
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 (odwołaj 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), OAUTH (2).
username string Nazwa użytkownika.
password string Hasło uwierzytelniania.
redirection_url string URL frontend Zabbixa, na który następuje przekierowanie po autoryzacji OAuth.
client_id string Identyfikator klienta zarejestrowany w serwerze autoryzacji OAuth.
authorization_url string URL OAuth z parametrami do uzyskania tokenów dostępu i odświeżania.
token_url string URL OAuth do wymiany tokenu autoryzacji na tokeny dostępu i odświeżania.
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 Type Description
gsm_modem string (required) Nazwa urządzenia szeregowego modemu GSM.

Zobacz także: Media type object (odwołaj się do odpowiedniej właściwości o pasującej nazwie).

Skrypt

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

Element Type Description
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ń.
value string Wartość parametru skryptu.

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

Webhook

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

Element Type Description
script string Skrypt.
timeout string Limit czasu żądania HTTP skryptu Javascript.
Possible values:1 1-60s (default: 30s).
process_tags string Czy przetwarzać zwrócone tagi.
Possible values:1 NO (0, default), YES (1).
show_event_menu string Wskazuje obecność wpisu w menu zdarzenia, jeśli makro {EVENT.TAGS.*} zostało pomyślnie rozwiązane w polach event_menu_url i event_menu_name.
Possible values:1 NO (0, default), YES (1).
event_menu_url string Adres URL wpisu menu zdarzenia. Obsługuje makro {EVENT.TAGS.*}.
event_menu_name string Nazwa wpisu menu zdarzenia. Obsługuje makro {EVENT.TAGS.*}.
parameters Element nadrzędny dla parametrów typu mediów webhook.
name string (required) Nazwa parametru webhook.
value string Wartość parametru webhook.

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

Przypisy

1 Wartości całkowite API w nawiasach, na przykład ENABLED (0), są podane wyłącznie jako informacja pomocnicza. Więcej informacji można znaleźć na powiązanej stronie obiektu API w pozycji tabeli lub na końcu każdej sekcji.