Xəbərdarlıqları e-poçt və webhook ilə göndərin

Layihəyə e-poçt və webhook bildiriş kanalları əlavə edin, e-poçt ünvanlarını təsdiqləyin, webhook imzalarını yoxlayın, kanalları sınayın və ya rotasiya edin.

Bildiriş kanalı (notification channel) xəbərdarlıq qaydalarının (alert rule) bildirişlərini göndərdiyi e-poçt ünvanı və ya webhook URL-idir. Kanallar layihəyə (project) aiddir və layihənin hər qaydası onlardan istifadə edə bilər.

Başlamazdan əvvəl

  • Kanalları əlavə etmək, sınamaq, rotasiya etmək və ya silmək üçün layihədə və ya onun abunəliyində (subscription) Owner və ya Contributor rolu, yaxud Observability üzrə Manage girişi olan fərdi rol (custom role) lazımdır. Read girişi ilə, məsələn, Reader rolu ilə kanallara baxa bilərsiniz; bu zaman webhook URL-ləri sxem və host hissəsinə qədər qısaldılır.
  • Konsolda xəbərdarlıqlarını (alert) göndərmək istədiyiniz layihəni seçin. Kanallar səhifəsi həmin layihənin kanallarını göstərir.

Kanallar səhifəsini açın

Konsolda SettingsNotifications bölməsinə keçin.

Delivery channels bölməsini seçin.

Notification channels səhifəsi hər kanalı təyinat yeri və statusu ilə sadalayır.

E-poçt kanalı əlavə edin

Kanallar səhifəsində Add channel düyməsini seçin.

Email seçimini seçin.

Name və Email address sahələrini doldurun.

Add channel düyməsini seçin.

E-poçt ünvanını təsdiqləyin

Təşkilatınızın aktiv istifadəçisinə aid ünvan əlavə edildiyi anda təsdiqlənmiş sayılır. Hər hansı digər ünvana təsdiq məktubu göndərilir və qəbuledən ünvanı təsdiq edənə qədər kanal heç bir xəbərdarlıq almır.

Qəbuledən təsdiq məktubundakı keçidi açır. Onun daxil olmasına ehtiyac yoxdur.

Confirm alert notifications səhifəsində qəbuledən Confirm address düyməsini seçir.

Kanalın statusu onun hansı mərhələdə olduğunu göstərir:

StatusMənası
VerifiedKanal bildirişləri alır.
Awaiting confirmationTəsdiq keçidi göndərilib, lakin istifadə olunmayıb. Keçid 7 gün etibarlıdır və bir dəfə işləyir.
Link expiredKeçid 7 gün ərzində istifadə olunmayıb.

Yeni keçid göndərmək üçün kanalın Row actions menyusunu (⋯) açın və Resend confirmation əməliyyatını seçin. Yeni keçid əvvəlkini əvəz edir.

Təsdiqlənməmiş ünvana gedən bildirişlər növbədə saxlanılmır, sadəcə göndərilmir: ünvan təsdiqləndikdən sonra onları almır.

Webhook kanalı əlavə edin

Kanallar səhifəsində Add channel düyməsini seçin.

Webhook seçimini seçin.

Name və Webhook URL sahələrini doldurun.

Add channel düyməsini seçin.

İmzalama sirrini (signing secret) Copy düyməsi ilə köçürün və onu qəbuledicinizdə saxlayın.

Sirr bir dəfə göstərilir

Konsol webhook-un imzalama sirrini yalnız kanalı əlavə etdikdən və ya onun sirrini rotasiya etdikdən sonra göstərir. Sirri itirsəniz, onu rotasiya edin. İmzalama sirrini rotasiya edin bölməsinə baxın.

Webhook kanalı əlavə edildiyi anda təsdiqlənmiş sayılır. Onun URL-i bu qaydalara cavab verməlidir:

  • https:// sxemindən istifadə edir və uzunluğu ən çox 2.048 simvoldur.
  • İstifadəçi adı və ya parol ehtiva etmir.
  • Onun hostu yalnız ictimai IP ünvanlarına çevrilir. Özəl, loopback, link-local və digər qeyri-ictimai diapazonlar rədd edilir. Platforma hostu hər göndərişdə yoxlayır və kanalı əlavə etdiyiniz zaman URL-də yazılmış qeyri-ictimai IP ünvanını rədd edir.

Platforma yönləndirmələri izləmir.

Webhook sorğularını yoxlayın

Platforma hər bildirişi JSON gövdəsi və bu başlıqlarla HTTPS POST sorğusu kimi göndərir:

BaşlıqDəyər
Content-Typeapplication/json
User-Agentpubliccloud-alerting/1
X-Publiccloud-Eventalerting.state_changed, test üçün isə alerting.test
X-Publiccloud-DeliveryBildirişin eventId dəyəri. Testdə bu başlıq olmur.
X-Publiccloud-Signaturet=<timestamp>,v1=<signature>

İmza başlığında <timestamp> Unix saniyələri ilə göndərilmə vaxtı, <signature> isə kanalın imzalama sirri açar kimi istifadə olunmaqla <timestamp>.<body> üzərində hesablanmış, onaltılıq kodlaşdırılmış HMAC-SHA256 dəyəridir. Sorğunu yoxlamaq üçün eyni HMAC dəyərini sorğunun alındığı kimi xam gövdəsi üzərində hesablayın və onu v1 ilə müqayisə edin. Təkrar göndərilmiş sorğuları rədd etmək üçün vaxt göstəricisi seçdiyiniz icazə verilən fərqdən köhnə olan sorğuları da rədd edin.

Webhook imzasını yoxlayın
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 imzalama sirrinin whsec_ prefiksi də daxil olmaqla tam dəyəridir. header X-Publiccloud-Signature başlığının dəyəri, body isə sorğunun xam gövdəsidir.

Gövdədə bu sahələr var:

SahəMənası
typealerting.state_changed, test üçün isə alerting.test.
eventIdVəziyyət dəyişikliyinin ID-si. Təkrar cəhddə eyni ID olur, ona görə dublikatları atmaq üçün ondan istifadə edin.
projectIdQaydanın layihəsi.
subscriptionIdBütün abunəlik üzrə büdcənin (budget) xəbərdarlıqlarında projectId əvəzinə təyin olunur.
ruleId, ruleNameVəziyyəti dəyişən qayda.
instanceId, instanceNameBildirişin aid olduğu virtual maşın (instance). Büdcə xəbərdarlığı üçün null.
fromStateDəyişiklikdən əvvəlki vəziyyət: OK, FIRING və ya INSUFFICIENT_DATA.
toStateXəbərdarlıq işə düşdükdə FIRING, xəbərdarlığı həll edən hər bildiriş üçün isə OK.
ruleStateVirtual maşının keçdiyi vəziyyət. O, toState dəyərindən yalnız xəbərdarlıq ölçmə olmadan bağlandıqda fərqlənir, məsələn, monitorinq qeyri-aktiv edildikdən sonra INSUFFICIENT_DATA.
resolvedBildiriş xəbərdarlığı həll etdikdə true.
valueÖlçülmüş dəyər, göstəricinin vahidində. ERROR vəziyyəti qaydası üçün ERROR olduqda 1, əks halda 0. Ölçmə olmadıqda null.
occurredAtDəyişikliyin vaxtı, UTC üzrə, ISO 8601 formatında.
reasonXəbərdarlığın ölçmədən başqa bir səbəblə bağlanmasının səbəbi: rule_disabled, rule_deleted, target_deleted, monitoring_disabled və ya büdcənin yeni dövrü başladıqda period_reset. Əks halda null.

Bildirişlər necə çatdırılır

10 saniyə ərzində 2xx status kodu ilə cavab verin. Platforma cəmi 15 saniyədən sonra sorğudan imtina edir.

NəticəNə baş verir
2xx cavabıÇatdırılıb.
5xx, 408 və ya 429 cavabı, gözləmə müddətinin bitməsi, bağlantı xətası və ya IP ünvanına çevrilməyən host1 dəqiqə, 5 dəqiqə, 15 dəqiqə və 1 saat sonra təkrar cəhd edilir. Beşinci uğursuz cəhddən sonra bildiriş atılır.
İstənilən digər cavab, məsələn, yönləndirmə və ya 4xx statusu, yaxud yuxarıdakı qaydaların rədd etdiyi URLTəkrar cəhd edilmir.

Bildiriş təkrar cəhdi gözlədiyi müddətdə eyni qaydanın eyni kanala sonrakı bildirişləri onun arxasında gözləyir, buna görə onlar sıra ilə çatır. Poçt relesi uğursuz olduqda e-poçtlar da eyni təkrar cəhdlərlə göndərilir.

E-poçt bildirişləri. Standart olaraq mövzu kvadrat mötərizədəki yeni vəziyyətdən, [FIRING] və ya [RESOLVED], ardınca isə qaydanın adından və virtual maşından ibarət olur. Testdə [TEST] olur. Bu işarələr tərcümə olunmur, ona görə Daxilolanlar qovluğunuzu onlara görə süzgəcdən keçirə bilərsiniz. Məktubun mətni dəyişikliyi, dəyəri, virtual maşını, layihəni və vaxtı göstərir. Məktubun dili kanal əlavə edilərkən onu əlavə edən brauzerin dil seçiminə görə təyin olunur; ehtiyat dil ingilis dilidir.

Test bildirişi göndərin

Kanallar səhifəsində kanalın Row actions menyusunu (⋯) açın.

Send test əməliyyatını seçin.

Platforma testi dərhal, təkrar cəhdlər olmadan göndərir:

  • Test notification delivered. Təyinat yeri onu qəbul edib.
  • Not sent: the address is not confirmed yet. Əvvəlcə ünvanı təsdiq edin.
  • Uğursuzluq olduqda mesaj səbəbi göstərir. Nasazlığın həlli bölməsinə baxın.

Hər kanal üçün 60 saniyədə bir test göndərə bilərsiniz.

İmzalama sirrini rotasiya edin

Kanallar səhifəsində webhook kanalının Row actions menyusunu (⋯) açın və Rotate signing secret əməliyyatını seçin.

Təsdiq pəncərəsində Rotate signing secret düyməsini seçin.

Yeni sirri köçürün və qəbuledicinizi yeniləyin.

Köhnə sirr dərhal imzalamağı dayandırır, ona görə qəbuledicinizə yeni sirr verilənə qədər sorğular onun yoxlamasından keçmir. Büdcənin yaratdığı webhook kanalının sirrini almaq üçün onu büdcənin Edit dialoq pəncərəsində rotasiya edin. Büdcəni redaktə edin və ya silin bölməsinə baxın.

Kanalı silin

Kanallar səhifəsində kanalın Row actions menyusunu (⋯) açın və Delete əməliyyatını seçin.

Delete düyməsi ilə təsdiq edin.

Kanalı siyahısında saxlayan hər qayda ona bildiriş göndərməyi dayandırır və kanalın ünvanı və ya URL-i silinir. Silinmiş kanalı bərpa edə bilməzsiniz.

Managed by a budget nişanı ilə işarələnmiş kanal büdcənin xəbərdarlıq qəbuledənini izləyir və onu burada silə bilməzsiniz. Bunun əvəzinə büdcəni dəyişin. Büdcələr və hədd xəbərdarlıqları yaradın səhifəsinə baxın.

Nəticə

Kanal siyahıda görünür. Statusu Verified olduqdan sonra kanal onu siyahısında saxlayan hər qaydanın bildirişlərini alır. Kanalı qaydaya əlavə etmək üçün Xəbərdarlıq qaydaları yaradın səhifəsinə baxın.

Limitlər

ResursLimitDəyişdirilə bilər?Qeydlər
Layihə başına kanallarPlatforma operatoru təyin edirBəli, operator tərəfindənBüdcələrin idarə etdiyi kanallar sayılmır.
Layihə başına webhook kanallarıPlatforma operatoru təyin edirBəli, operator tərəfindənLayihə başına kanalların tərkibində sayılır.
Kanalın adı1–255 simvolXeyrLayihə daxilində unikaldır.
E-poçt ünvanı254 simvola qədərXeyr
Webhook URL-i2.048 simvola qədərXeyrYalnız HTTPS.
Qayda başına kanallar10Xeyr
Test bildirişləriHər kanal üçün 60 saniyədə 1Xeyr
Təsdiq məktublarıHər kanal üçün 60 saniyədə 1Xeyr
Təsdiq keçidi7 gün etibarlıdır, bir dəfəXeyr

Nasazlığın həlli

MesajSəbəbHəll
The channel was added, but the confirmation email could not be sent. Resend it later.Təsdiq məktubunu göndərmək mümkün olmayıb.Sonra Resend confirmation əməliyyatını seçin.
This link is invalid, already used or expired. Ask the project owner to resend it.Keçid yanlışdır, artıq istifadə olunub və ya 7 gündən köhnədir.Layihənin sahibindən və ya iştirakçısından təsdiqi yenidən göndərməsini xahiş edin.
The channel could not be added. və ya platformadan gələn mesajAd layihədə artıq istifadə olunur, ünvan və ya URL rədd edilib, yaxud layihə kanal limitinə çatıb.Başqa addan və ya təyinat yerindən istifadə edin, kanalı silin və ya platforma operatorundan limiti artırmağı xahiş edin.

Test uğursuz olduqda mesaj bu səbəblərdən birini göstərir:

Səbəb koduSəbəb
webhook_http_<status>Qəbuledici bu HTTP status kodu ilə cavab verib.
webhook_timeoutQəbuledici vaxtında cavab verməyib.
webhook_connection_errorBağlantı və ya TLS əl sıxması uğursuz olub.
webhook_host_unresolvableURL-in hostu IP ünvanına çevrilmir.
webhook_target_blockedHost qeyri-ictimai IP ünvanına çevrilir.
webhook_scheme_not_allowedURL etibarlı HTTPS URL-i deyil.
smtp_not_configuredPlatformada poçt relesi yoxdur. Platforma operatoru ilə əlaqə saxlayın.
smtp_delivery_errorPoçt relesi məktubu rədd edib və ya çatdıra bilməyib.

Bu səhifədə