PagerDuty ve Php ile Kullanımı.

Mustafa YALÇIN
FLO Teknoloji
Published in
2 min readJun 15, 2023
PagerDuty

PagerDuty bir alarm yönetim platformudur. PagerDuty ile 700+ farklı sistemde veya entegrasyon ile kod içerisinde meydana gelen herhangi bir durumda PagerDuty’de tanımladığınız servislere Alert(Alarm/Bildirim), Ack(İlgileniyorum), Resolved(Çözüldü) tipinde istek gönderebilirsiniz.

Gönderdiğiniz bildirimler CRITICAL, ERROR, WARNING ve INFO tipinde olabilir.

Servislerden gelen bildirimler için ekip oluşturabilir ve gelen bildirimleri zamanlayarak belirli aralıklarda farklı ekip üyelerine bildirim gelecek şekilde ayarlama yapabilirsiniz.

Gelen bildirimler Sms, E-Mail, Sesli Arama, PagerDuty Uygulama Bildirimi, Microsoft Teams Mesaj/Sesli Arama veya entegre ettiğiniz farklı bir uygulama ile olabilir.

Servisler için kademeli bir hiyerarşi ile bildirim gönderebilirsiniz. İlk kademedeki ekip üyesi bildirimi Ack veya Resolved durumuna getirmez ise belirlediğiniz süre sonunda ikinci kademedeki ekip üyesine bildirim gider ve bu son kademedeki ekip üyesine kadar veya Alert üreten uygulamadan Resolved isteği gelene kadar devam eder.

Php uygulamasındaki hata durumunda PagerDuty Alert üretecek basit bir örnek yapalım. Örneğimizde bir mail gönderme metodu mail gönderiminde hata alırsa Alert üretsin.

Composer.json dosyamıza PagerDuty kütüphanesini dahil edelim ve Php kodumuzu ekleyelim.

....
"require": {
"adilbaig/pagerduty": "^3.2"
}
...

require 'vendor/autoload.php';

use PagerDuty\PagerDuty;

// PagerDuty alert gönderimi
function sendPDAlert($message, $source, $severity = TriggerEvent::ERROR)
{
try {
$event = new TriggerEvent(
'YOUR_API_KEY', // PagerDuty Api Key
$message,
$source, // Hata alan ip/url
$severity,
false
);

$responseCode = $event->send();

if($responseCode == 200 || $responseCode == 202) {
return 'Bildirim Gönderildi';
}
elseif($responseCode == 429) {
return 'Bildirim Limiti Aşıldı';
}
else {
return 'Bildirim Gönderilemedi';
}
}
catch(PagerDutyException $exception) {
return $exception->getMessage();
}
catch (\Exception $e) {
return $e->getMessage();
}
}

// E-postayı gönderimi
if (mail($to, $subject, $message, $headers)) {
echo "E-posta başarıyla gönderildi.";
} else {

$alert = sendPDAlert(
"E-posta gönderimi başarısız oldu." ,
"denememailserver.com.tr",
TriggerEvent::CRITICAL
);

echo "E-posta gönderimi başarısız oldu. ".$alert;

}
$event = new TriggerEvent(
'YOUR_API_KEY', // PagerDuty Api Key
$message,
$source, // Hata alan ip/url
$severity, // Bildirim tipi
false
);
$responseCode = $event->send();

Yukarıdaki kod bloğunda PagerDuty kütüphanesini kullanarak istediğimiz tipde bildirim gönderebiliriz.

if($responseCode == 200 || $responseCode == 202) {
return 'Bildirim Gönderildi';
}
elseif($responseCode == 429) {
return 'Bildirim Limiti Aşıldı';
}
else {
return 'Bildirim Gönderilemedi';
}

Yukarıdaki kod bloğunda PagerDuty den gelen statulere bakarak geri bildirim veriyoruz. 200 ve 202 bildirim gönderimi başarılı 429 bildirim limitine ulaşıldı anlamına gelir.

$alert = sendPDAlert(
"E-posta gönderimi başarısız oldu." ,
"denememailserver.com.tr",
TriggerEvent::CRITICAL
);

echo "E-posta gönderimi başarısız oldu. ".$alert;

Yukarıdaki kod bloğunda yazdığımız bildirim gönderme metodu çağırıp gelen mesajı echo ile ekrana basıyoruz.

Daha fazla bilgi ve farklı kullanım örnekleri için aşağıdaki kaynakçaları inceleyebilirsiniz.

Kaynakça:
https://github.com/adilbaig/pagerduty
https://developer.pagerduty.com/docs/ZG9jOjExMDI5NTg2-api-client-libraries

--

--