Zabbix

Parny | Zabbix Entegrasyon Kılavuzu

Parny, Zabbix uyarıları ile doğrudan entegrasyonu destekler. Zabbix, potansiyel sorunları tespit etmek ve önlemek için alarmlar oluşturabilen bir ağ ve sistem izleme aracıdır. Bu belge, Zabbix'de oluşturulan alarmları Parny kullanarak bir webhook'a nasıl yönlendireceğinizi açıklar.


Parny Ayarları


  1. Parny arayüzüne gidin.

  2. Kuruluşunuzun "Hizmetler" bölümüne gidin.

  3. Üst sağ köşedeki "Yeni Hizmetler" seçeneğine tıklayın.

  4. İlgili hizmet adını girin.

Hizmet Adı Kullanımı: Buradaki hizmet adı yapıya bağımlı değildir ve kuruluşun tercihlerine göre seçilebilir.


  1. Entegrasyonlar listesinden Zabbix'i seçin.

  2. "Ekle"ye tıklayın.

  3. Hizmet oluşturulduktan sonra aşağıdaki ekran görünecektir.


parny_zabbix_1_22_01_2025


  • Artık hizmetinizin token bölümüne tıklayabilir ve Zabbix Webhook URL'nizi kopyalayabilirsiniz.


Zabbix Yapılandırması


  1. Webhook Medya Türü Ekle:

  • Zabbix sürümünüze göre soldaki yan çubukta UyarılarMedya türleri veya YönetimMedya türleri kısmına gidin.

  • Medya türü oluşturya tıklayın.

  • Aşağıdaki yapılandırmayı yapın:

    • Ad: Parny (veya tercih ettiğiniz başka bir ad)

    • Tür: Webhook

    • Parametreler:

      • Aşağıda sağlanan parametreler listesini girin.

    • Script:

      • Aşağıda sağlanan JavaScript kodunu girin, Zabbix sürüm 6.2 ve sonrası için gerekli gereksinimlere uyduğundan emin olun.

  • Değişiklikleri kaydedin.



parny_zabbix_4_v2



Parametreler Listesi:

  • alert_message: {ALERT.MESSAGE}

  • eventack: {EVENT.ACK.STATUS}

  • eventdate: {EVENT.DATE}

  • eventname: {ALERT.SUBJECT}

  • eventupdate: {EVENT.UPDATE.STATUS}

  • eventvalue: {EVENT.VALUE}

  • event_source: {EVENT.SOURCE}

  • hostip: {HOST.IP}

  • hostname: {HOST.NAME}

  • parnyUrl: https://zabbix.parny.io/alert/<your-parny-service-token-here>

  • severity: {EVENT.NSEVERITY}

  • triggerdesc: {TRIGGER.DESCRIPTION}

  • triggerid: {TRIGGER.ID}

  • url: {$ZABBIX.URL}



JavaScript Kodu Zabbix sürüm 6.2 ve sonrası için:

try {
  var params = JSON.parse(value),
      req = new HttpRequest(),
      fields = {},
      resp = "";

  // Correspondence between the Parny and Zabbix severity level
  var severityMapping = [
    "info",    // Not classified
    "info",    // Information
    "warning", // Warning
    "warning", // Average
    "error",   // High
    "critical" // Disaster
  ];

  if (!severityMapping[params.severity]) {
    params.severity = "0";
  }

  if (params.eventname.length < 1) {
    throw 'incorrect value for variable "eventname". The value must be a non-empty string.';
  }
  if (isNaN(parseInt(params.severity)) || params.severity < 0 || params.severity > 5) {
    throw 'incorrect value for variable "severity". The value must be a number 0..5.';
  }

  req.addHeader('Content-Type: application/json');

  // Determine the event action and payload
  fields.payload = {
    summary: params.eventname,
    source: params.event_source === "1" ? "Discovery" : params.hostname + " : " + params.hostip,
    severity: severityMapping[params.severity]
  };

  fields.payload.custom_details = {
    "Alert message": params.alert_message
  };

  fields.client = "Zabbix";
  fields.client_url = params.url;

  // Set the event action based on eventvalue
  if ((params.eventvalue == 1 && params.eventupdate == 0) || params.event_source !== "0") {
    fields.event_action = "trigger";
  } else if (params.eventvalue == 1 && params.eventupdate == 1 && params.eventack == "Yes") {
    fields.event_action = "acknowledge";
  } else if (params.eventvalue == 0) {
    fields.event_action = "resolve";
  } else {
    throw "incorrect values. Update message without ack will not be sent.";
  }

  Zabbix.Log(4, "[Parny Webhook] Sending request:" + JSON.stringify(fields));
  resp = req.post(params.parnyUrl, JSON.stringify(fields));
  Zabbix.Log(4, "[Parny Webhook] Receiving response:" + resp);

  try {
    resp = JSON.parse(resp);
  } catch (error) {
    throw "incorrect response. Parny returned a non-JSON object.";
  }

  if (req.getStatus() != 200) {
    if (typeof resp === "object" && typeof resp.errors === "object" && typeof resp.errors[0] === "string") {
      throw resp.errors[0];
    } else {
      throw "Unknown error.";
    }
  }

  return "OK";
} catch (error) {
  Zabbix.Log(3, "[Parny Webhook] Notification failed: " + error);
  throw "Parny notification failed: " + error;
}



JavaScript Kodu Zabbix sürüm 6.2 öncesi için:

try {
  var params = JSON.parse(value),
      req = new CurlHttpRequest(),
      fields = {},
      resp = "";

  // Correspondence between the Parny and Zabbix severity level
  var severityMapping = [
    "info",    // Not classified
    "info",    // Information
    "warning", // Warning
    "warning", // Average
    "error",   // High
    "critical" // Disaster
  ];

  if (!severityMapping[params.severity]) {
    params.severity = "0";
  }

  if (params.eventname.length < 1) {
    throw 'incorrect value for variable "eventname". The value must be a non-empty string.';
  }
  if (isNaN(parseInt(params.severity)) || params.severity < 0 || params.severity > 5) {
    throw 'incorrect value for variable "severity". The value must be a number 0..5.';
  }

  req.AddHeader("Content-Type: application/json");

  // Determine the event action and payload
  fields.payload = {
    summary: params.eventname,
    source: params.event_source === "1" ? "Discovery" : params.hostname + " : " + params.hostip,
    severity: severityMapping[params.severity]
  };

  fields.payload.custom_details = {
    "Alert message": params.alert_message
  };

  fields.client = "Zabbix";
  fields.client_url = params.url;

  // Set the event action based on eventvalue
  if ((params.eventvalue == 1 && params.eventupdate == 0) || params.event_source !== "0") {
    fields.event_action = "trigger";
  } else if (params.eventvalue == 1 && params.eventupdate == 1 && params.eventack == "Yes") {
    fields.event_action = "acknowledge";
  } else if (params.eventvalue == 0) {
    fields.event_action = "resolve";
  } else {
    throw "incorrect values. Update message without ack will not be sent.";
  }

  Zabbix.Log(4, "[Parny Webhook] Sending request:" + JSON.stringify(fields));
  resp = req.Post(params.parnyUrl, JSON.stringify(fields));
  Zabbix.Log(4, "[Parny Webhook] Receiving response:" + resp);

  try {
    resp = JSON.parse(resp);
  } catch (error) {
    throw "incorrect response. Parny returned a non-JSON object.";
  }

  if (req.Status() != 200) {
    if (typeof resp === "object" && typeof resp.errors === "object" && typeof resp.errors[0] === "string") {
      throw resp.errors[0];
    } else {
      throw "Unknown error.";
    }
  }

  if (resp.status != "success") {
    throw "Unknown error.";
  }

  return "OK";
} catch (error) {
  Zabbix.Log(3, "[Parny Webhook] Notification failed: " + error);
  throw "Parny notification failed: " + error;
}



  1. Alarmları Yönlendirme:

  • Eylem Oluştur:

    • Uyarılar → Eylemler veya Yönetim → Eylemler'e Zabbix sürümünüze göre gidin.

    • Eylem oluşturya tıklayın.

    • "Eylem" alanına bir ad girin ve "Etkin" seçeneğini seçin.

  • Koşullar:

    • "Koşullar" sekmesinde, alarmların tetikleneceği koşulları belirtin.

    • Örneğin, bir sunucu çevrimdışı olduğunda bir uyarı almak istiyorsanız, "Host grubunu" seçerek ilgili sunucu grubunu seçin.

  • İşlemler:

    • "Webhook" seçeneğini seçin. "Kullanıcılara mesaj gönderme" seçeneğini seçin ve "Webhook" seçeneğini seçin.

    • Webhook'u daha önce oluşturduğunuz Parny medya türüne yönlendirin ve gerekli ayarları yapın. İşlemi kaydetmek için "Kaydet" butonuna tıklayın.



  1. Problem Kurtarma (Otomatik Çözüm Uyarıları)

  • "Medya Türü" → "Mesaj Şablonları" bölümünde, aşağıdaki resme atıf yaparak, "Problem" ve "Problem Kurtarma" şablonlarının aynı olduğundan emin olun. Bu ayarla, Zabbix'teki sorun düzeltildiğinde, sorun Parny'de otomatik olarak çözülecektir.



parny_zabbix_5



Bu ayarlarla, Zabbix alarmlarınız Parny'ye entegre edilecek ve bunları kuruluşunuzun Parny portalında diğer uyarılarınızla birlikte yönetmenize olanak tanıyacaktır.

Herhangi bir sorunuz için lütfen bizimle iletişime geçin: support@parny.io