Alarmları e-posta ve webhook ile gönderme
Projeye e-posta ve webhook bildirim kanalları ekleyin, e-posta adreslerini onaylayın, webhook imzalarını doğrulayın, kanalları test edin veya yenileyin.
Bildirim kanalı, alarm kurallarının bildirimlerini gönderdiği bir e-posta adresi veya webhook URL’sidir. Kanallar bir projeye aittir ve projenin tüm kuralları bunları kullanabilir.
Başlamadan önce
- Kanal eklemek, test etmek, yenilemek veya silmek için proje ya da projenin aboneliği üzerinde Sahip veya Katkıda bulunan rolüne ya da Observability için Yönet erişimi olan özel bir role ihtiyacınız vardır. Okuyucu rolünde olduğu gibi Oku erişimiyle kanalları görüntüleyebilirsiniz; webhook URL’leri şemaya ve ana bilgisayar adına kısaltılmış olarak gösterilir.
- Konsolda, alarmlarını göndermek istediğiniz projeyi seçin. Kanallar sayfası o projenin kanallarını gösterir.
Kanallar sayfasını açma
Konsolda AyarlarBildirimler sayfasına gidin.
Teslim kanalları öğesini seçin.
Bildirim kanalları sayfası her kanalı hedefi ve durumuyla listeler.
E-posta kanalı ekleme
Kanallar sayfasında Kanal ekle düğmesini seçin.
E-posta seçeneğini seçin.
Ad ve E-posta adresi alanlarını doldurun.
Kanal ekle düğmesini seçin.
E-posta adresini doğrulama
Kuruluşunuzun etkin bir kullanıcısına ait bir adres, eklediğiniz anda doğrulanır. Diğer tüm adreslere bir onay e-postası gönderilir ve alıcı onaylayana kadar kanal alarm almaz.
Alıcı, onay e-postasındaki bağlantıyı açar. Giriş yapması gerekmez.
Alıcı, Uyarı bildirimlerini onaylayın sayfasında Adresi onayla düğmesini seçer.
Kanalın durumu, onayın hangi aşamada olduğunu gösterir:
| Durum | Anlamı |
|---|---|
| Doğrulandı | Kanal bildirim alır. |
| Onay bekliyor | Onay bağlantısı gönderildi ve henüz kullanılmadı. Bağlantı 7 gün geçerlidir ve bir kez çalışır. |
| Bağlantının süresi doldu | Bağlantı 7 gün içinde kullanılmadı. |
Yeni bir bağlantı göndermek için kanalın Satır eylemleri menüsünü (⋯) açın ve Onayı yeniden gönder seçeneğini seçin. Yeni bağlantı öncekinin yerini alır.
Onaylanmamış bir adrese gidecek bildirimler bekletilmez, atlanır: adres onaylandıktan sonra bu bildirimleri almaz.
Webhook kanalı ekleme
Kanallar sayfasında Kanal ekle düğmesini seçin.
Webhook seçeneğini seçin.
Ad ve Webhook URL alanlarını doldurun.
Kanal ekle düğmesini seçin.
İmza anahtarını Kopyala düğmesiyle kopyalayın ve alıcı uygulamanızda saklayın.
Gizli anahtar yalnızca bir kez gösterilir
Konsol, bir webhook’un imza anahtarını yalnızca kanalı eklediğinizde ya da anahtarını yenilediğinizde gösterir. Anahtarı kaybederseniz yenileyin. Bkz. İmza anahtarını yenileme.
Webhook kanalı, eklediğiniz anda doğrulanır. URL’si şu kurallara uymalıdır:
https://kullanır ve en fazla 2.048 karakterdir.- Kullanıcı adı veya parola içermez.
- Ana bilgisayar adı yalnızca genel IP adreslerine çözümlenir. Özel, geri döngü, bağlantı yerel ve genel olmayan diğer aralıklar reddedilir. Platform ana bilgisayar adını her gönderimde denetler; kanalı eklediğinizde de URL’ye yazılmış genel olmayan bir IP adresini reddeder.
Platform yönlendirmeleri izlemez.
Webhook isteklerini doğrulama
Platform her bildirimi, JSON gövdeli ve şu başlıkları içeren bir HTTPS POST isteği olarak gönderir:
| Başlık | Değer |
|---|---|
Content-Type | application/json |
User-Agent | publiccloud-alerting/1 |
X-Publiccloud-Event | alerting.state_changed; test için alerting.test |
X-Publiccloud-Delivery | Bildirimin eventId değeri. Testte bu başlık yoktur. |
X-Publiccloud-Signature | t=<timestamp>,v1=<signature> |
İmza başlığında <timestamp>, Unix saniyesi cinsinden gönderim zamanıdır; <signature> ise <timestamp>.<body> değerinin, kanalın imza anahtarıyla hesaplanan onaltılık kodlanmış HMAC-SHA256 değeridir. Bir isteği doğrulamak için aynı HMAC değerini ham istek gövdesi üzerinden, alındığı şekliyle hesaplayın ve v1 ile karşılaştırın. Yeniden oynatılan istekleri reddetmek için zaman damgası seçtiğiniz bir tolerans süresinden eski olan istekleri de reddedin.
import hashlib
import hmac
import time
def verify(secret: str, header: str, body: bytes, tolerance: int = 300) -> bool:
fields = dict(item.split("=", 1) for item in header.split(","))
timestamp = int(fields["t"])
expected = hmac.new(
secret.encode(), f"{timestamp}.".encode() + body, hashlib.sha256
).hexdigest()
fresh = abs(time.time() - timestamp) <= tolerance
return fresh and hmac.compare_digest(expected, fields["v1"])secret, whsec_ önekiyle birlikte imza anahtarının tamamıdır. header, X-Publiccloud-Signature başlığının değeridir; body ise ham istek gövdesidir.
Gövdede şu alanlar bulunur:
| Alan | Anlamı |
|---|---|
type | alerting.state_changed; test için alerting.test. |
eventId | Durum değişikliğinin ID’si. Yeniden deneme aynı ID’yi taşır; yinelenenleri ayıklamak için bunu kullanın. |
projectId | Kuralın projesi. |
subscriptionId | Aboneliğin tamamı için tanımlanmış bir bütçenin alarmlarında projectId yerine ayarlanır. |
ruleId, ruleName | Durumu değişen kural. |
instanceId, instanceName | Bildirimin ilgili olduğu sanal makine. Bütçe alarmında null. |
fromState | Değişiklikten önceki durum: OK, FIRING veya INSUFFICIENT_DATA. |
toState | Bir alarm tetiklendiğinde FIRING; bir alarmı çözen her bildirimde OK. |
ruleState | Sanal makinenin geçtiği durum. Yalnızca bir alarm bir ölçüm olmadan kapandığında toState değerinden farklıdır; örneğin izleme kapatıldıktan sonra INSUFFICIENT_DATA. |
resolved | Bildirim bir alarmı çözüyorsa true. |
value | Metriğin biriminde ölçülen değer. ERROR durumu kuralında ERROR durumundayken 1, aksi hâlde 0. Ölçüm yoksa null. |
occurredAt | Değişikliğin zamanı; UTC olarak, ISO 8601 biçiminde. |
reason | Bir alarmın ölçüm dışındaki bir nedenle kapanmasının nedeni: rule_disabled, rule_deleted, target_deleted, monitoring_disabled ya da bir bütçenin yeni dönemi başladığında period_reset. Aksi hâlde null. |
Bildirimler nasıl teslim edilir
10 saniye içinde 2xx durum koduyla yanıt verin. Platform, toplam 15 saniyenin sonunda istekten vazgeçer.
| Sonuç | Ne olur |
|---|---|
2xx yanıtı | Teslim edildi. |
5xx, 408 veya 429 yanıtı, zaman aşımı, bağlantı hatası ya da çözümlenmeyen bir ana bilgisayar adı | 1 dakika, 5 dakika, 15 dakika ve 1 saat sonra yeniden denenir. Beşinci başarısız denemeden sonra bildirimden vazgeçilir. |
Yönlendirme veya 4xx durumu gibi diğer tüm yanıtlar ya da yukarıdaki kuralların reddettiği bir URL | Yeniden denenmez. |
Bir bildirim yeniden denenmeyi beklerken aynı kuralın aynı kanala giden sonraki bildirimleri onun arkasında bekler; böylece bildirimler sırayla ulaşır. E-posta aktarma sunucusu başarısız olduğunda e-postalar da aynı yeniden denemeleri izler.
E-posta bildirimleri. Varsayılan olarak konu satırı köşeli parantez içindeki yeni durumla ([FIRING] veya [RESOLVED]) başlar; ardından kural adı ve sanal makine gelir. Testte [TEST] bulunur. Bu etiketler çevrilmez; böylece gelen kutunuzu bunlara göre filtreleyebilirsiniz. Gövde; değişikliği, değeri, sanal makineyi, projeyi ve zamanı belirtir. E-postanın dili, kanal eklenirken kanalı ekleyen tarayıcının dil tercihine göre belirlenir; yedek dil İngilizcedir.
Test bildirimi gönderme
Kanallar sayfasında kanalın Satır eylemleri menüsünü (⋯) açın.
Test gönder seçeneğini seçin.
Platform testi yeniden deneme olmadan hemen gönderir:
- Test bildirimi iletildi. Hedef testi kabul etti.
- Gönderilmedi: adres henüz onaylanmadı. Önce adresi onaylayın.
- Başarısız olursa mesaj nedeni belirtir. Bkz. Sorun giderme.
Kanal başına 60 saniyede bir test gönderebilirsiniz.
İmza anahtarını yenileme
Kanallar sayfasında webhook kanalının Satır eylemleri menüsünü (⋯) açın ve İmza anahtarını yenile seçeneğini seçin.
Onay iletişim kutusunda İmza anahtarını yenile düğmesini seçin.
Yeni anahtarı kopyalayın ve alıcınızı güncelleyin.
Eski anahtar hemen imzalamayı bırakır; bu nedenle alıcınız yeni anahtarı alana kadar istekler alıcınızın denetiminden geçemez. Bir bütçenin oluşturduğu webhook kanalının anahtarını almak için anahtarı bütçenin Düzenle iletişim kutusunda yenileyin. Bkz. Bütçeyi düzenleme veya silme.
Kanalı silme
Kanallar sayfasında kanalın Satır eylemleri menüsünü (⋯) açın ve Sil seçeneğini seçin.
Sil düğmesiyle onaylayın.
Kanalı listeleyen her kural bu kanala bildirim göndermeyi bırakır ve kanalın adresi veya URL’si silinir. Silinen bir kanalı geri yükleyemezsiniz.
Bir bütçe tarafından yönetiliyor olarak işaretlenmiş bir kanal bir bütçenin alarm alıcısını izler ve burada silinemez. Bunun yerine bütçeyi değiştirin. Bkz. Bütçeler ve eşik alarmları oluşturma.
Sonuç
Kanal listede görünür. Durumu Doğrulandı olduğunda kanal, onu listeleyen her kuralın bildirimlerini alır. Bir kurala kanal eklemek için bkz. Alarm kuralları oluşturma.
Limitler
| Kaynak | Limit | Ayarlanabilir mi? | Notlar |
|---|---|---|---|
| Proje başına kanal | Platform operatörü belirler | Evet, operatör tarafından | Bütçelerin yönettiği kanallar sayılmaz. |
| Proje başına webhook kanalı | Platform operatörü belirler | Evet, operatör tarafından | Proje başına kanal sayısına dahildir. |
| Kanal adı | 1–255 karakter | Hayır | Projede benzersiz. |
| E-posta adresi | En fazla 254 karakter | Hayır | |
| Webhook URL’si | En fazla 2.048 karakter | Hayır | Yalnızca HTTPS. |
| Kural başına kanal | 10 | Hayır | |
| Test bildirimleri | Kanal başına 60 saniyede 1 | Hayır | |
| Onay e-postaları | Kanal başına 60 saniyede 1 | Hayır | |
| Onay bağlantısı | 7 gün geçerli, bir kez | Hayır |
Sorun giderme
| Mesaj | Neden | Çözüm |
|---|---|---|
| Kanal eklendi ancak onay e-postası gönderilemedi. Daha sonra yeniden gönderin. | Onay e-postası gönderilemedi. | Daha sonra Onayı yeniden gönder seçeneğini seçin. |
| Bu bağlantı geçersiz, kullanılmış veya süresi dolmuş. Proje sahibinden yeniden göndermesini isteyin. | Bağlantı yanlış, daha önce kullanılmış ya da 7 günden eski. | Bir proje sahibinden veya katkıda bulunandan onayı yeniden göndermesini isteyin. |
| Kanal eklenemedi. ya da platformdan gelen bir mesaj | Ad projede zaten kullanılıyor, adres veya URL reddedildi ya da proje kanal limitine ulaştı. | Başka bir ad veya hedef kullanın, bir kanalı silin ya da platform operatöründen limiti yükseltmesini isteyin. |
Bir test başarısız olduğunda mesaj şu nedenlerden birini belirtir:
| Neden | Açıklama |
|---|---|
webhook_http_<status> | Alıcı bu HTTP durum koduyla yanıt verdi. |
webhook_timeout | Alıcı zamanında yanıt vermedi. |
webhook_connection_error | Bağlantı veya TLS el sıkışması başarısız oldu. |
webhook_host_unresolvable | URL’nin ana bilgisayar adı çözümlenmiyor. |
webhook_target_blocked | Ana bilgisayar adı genel olmayan bir IP adresine çözümleniyor. |
webhook_scheme_not_allowed | URL geçerli bir HTTPS URL’si değil. |
smtp_not_configured | Platformda e-posta aktarma sunucusu yok. Platform operatörüne başvurun. |
smtp_delivery_error | E-posta aktarma sunucusu iletiyi reddetti veya iletemedi. |
İlgili içerik
- Alarm kuralları oluşturma
- Monitoring & Alerts nedir?
- Bütçeler ve eşik alarmları oluşturma
- Kanalları REST API üzerinden yönetmek için bkz. POST
/scopes/{scopeId}/observability/notification-channels.