إرسال تنبيهات صحة خدمة Azure باستخدام ServiceNow باستخدام خطافات الويب

توضح هذه المقالة كيفية دمج تنبيهات صحة خدمة Azure مع ServiceNow باستخدام إخطار على الويب. بعد إعداد تكامل webhook مع مثيل ServiceNow الخاص بك، تحصل على تنبيهات من خلال البنية الأساسية الحالية للإعلام عندما تؤثر مشكلات خدمة Azure عليك. في كل مرة يتم فيها تشغيل تنبيه Azure Service Health، فإنه يستدعي إخطار على الويب من خلال واجهة برمجة تطبيقات Rest النصية ServiceNow.

إنشاء واجهة برمجة تطبيقات REST مبرمجة في ServiceNow

  1. تأكد من تسجيل الدخول وتسجيل الدخول إلى حساب ServiceNow الخاص بك.

  2. انتقل إلى قسم System Web Services في ServiceNow وحدد Scripted REST APIs.

    قسم

  3. حدد جديد لإنشاء خدمة REST مبرمجة برمجيا جديدة.

    الزر

  4. أضف اسما إلى واجهة برمجة تطبيقات REST وضبط معرف واجهة برمجة التطبيقات على azureservicehealth.

  5. حدد إرسال.

  6. حدد واجهة برمجة تطبيقات REST التي أنشأتها، وضمن علامة التبويب الموارد حدد جديد.

  7. قم بتسمية المورد event الجديد وتغيير أسلوب HTTP إلى POST.

  8. في قسم البرنامج النصي ، أضف التعليمات البرمجية JavaScript التالية:

    إشعار

    تحتاج إلى تحديث ، والقيمة <secret><group><email> في البرنامج النصي أدناه.

    • <secret> يجب أن تكون سلسلة عشوائية، مثل GUID
    • <group> يجب أن تكون مجموعة ServiceNow التي تريد تعيين الحدث إليها
    • <email> يجب أن يكون الشخص المحدد الذي تريد تعيين الحدث له (اختياري)
    (function process( /*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
        var apiKey = request.queryParams['apiKey'];
        var secret = '<secret>';
        if (apiKey == secret) {
            var event = request.body.data;
            var responseBody = {};
            if (event.data.context.activityLog.operationName == 'Microsoft.ServiceHealth/incident/action') {
                var inc = new GlideRecord('incident');
                var incidentExists = false;
                inc.addQuery('number', event.data.context.activityLog.properties.trackingId);
                inc.query();
                if (inc.hasNext()) {
                    incidentExists = true;
                    inc.next();
                } else {
                    inc.initialize();
                }
                var short_description = "Azure Service Health";
                if (event.data.context.activityLog.properties.incidentType == "Incident") {
                    short_description += " - Service Issue - ";
                } else if (event.data.context.activityLog.properties.incidentType == "Maintenance") {
                    short_description += " - Planned Maintenance - ";
                } else if (event.data.context.activityLog.properties.incidentType == "Informational" || event.data.context.activityLog.properties.incidentType == "ActionRequired") {
                    short_description += " - Health Advisory - ";
                }
                short_description += event.data.context.activityLog.properties.title;
                inc.short_description = short_description;
                inc.description = event.data.context.activityLog.properties.communication;
                inc.work_notes = "Impacted subscription: " + event.data.context.activityLog.subscriptionId;
                if (incidentExists) {
                    if (event.data.context.activityLog.properties.stage == 'Active') {
                        inc.state = 2;
                    } else if (event.data.context.activityLog.properties.stage == 'Resolved') {
                        inc.state = 6;
                    } else if (event.data.context.activityLog.properties.stage == 'Closed') {
                        inc.state = 7;
                    }
                    inc.update();
                    responseBody.message = "Incident updated.";
                } else {
                    inc.number = event.data.context.activityLog.properties.trackingId;
                    inc.state = 1;
                    inc.impact = 2;
                    inc.urgency = 2;
                    inc.priority = 2;
                    inc.assigned_to = '<email>';
                    inc.assignment_group.setDisplayValue('<group>');
                    var subscriptionId = event.data.context.activityLog.subscriptionId;
                    var comments = "Azure portal Link: https://app.azure.com/h";
                    comments += "/" + event.data.context.activityLog.properties.trackingId;
                    comments += "/" + subscriptionId.substring(0, 3) + subscriptionId.slice(-3);
                    var impactedServices = JSON.parse(event.data.context.activityLog.properties.impactedServices);
                    var impactedServicesFormatted = "";
                    for (var i = 0; i < impactedServices.length; i++) {
                        impactedServicesFormatted += impactedServices[i].ServiceName + ": ";
                        for (var j = 0; j < impactedServices[i].ImpactedRegions.length; j++) {
                            if (j != 0) {
                                impactedServicesFormatted += ", ";
                            }
                            impactedServicesFormatted += impactedServices[i].ImpactedRegions[j].RegionName;
                        }
    
                        impactedServicesFormatted += "\n";
    
                    }
                    comments += "\n\nImpacted Services:\n" + impactedServicesFormatted;
                    inc.comments = comments;
                    inc.insert();
                    responseBody.message = "Incident created.";
                }
            } else {
                responseBody.message = "Hello from the other side!";
            }
            response.setBody(responseBody);
        } else {
            var unauthorized = new sn_ws_err.ServiceError();
            unauthorized.setStatus(401);
            unauthorized.setMessage('Invalid apiKey');
            response.setError(unauthorized);
        }
    })(request, response);
    
  9. في علامة تبويب الأمان، قم بإلغاء تحديد يتطلب المصادقة وحدد إرسال. <secret> يحمي الإعداد الذي قمت بتعيينه واجهة برمجة التطبيقات هذه بدلا من ذلك.

    خانة الاختيار

  10. مرة أخرى في قسم Scripted REST APIs، يجب أن تجد مسار واجهة برمجة التطبيقات الأساسية لواجهة برمجة تطبيقات REST الجديدة:

  11. يبدو عنوان URL الكامل للتكامل الخاص بك كما يلي:

    https://<yourInstanceName>.service-now.com/<baseApiPath>?apiKey=<secret>
    

إنشاء تنبيه باستخدام ServiceNow في مدخل Microsoft Azure

لمجموعة إجراءات جديدة:

  1. اتبع الخطوات من 1 إلى 8 في هذه المقالة لإنشاء تنبيه باستخدام مجموعة إجراءات جديدة.

  2. حدد في قائمة الإجراءات:

    أ. نوع الإجراء: إخطار على الويب

    ب. التفاصيل: عنوان URL للتكامل ServiceNow الذي قمت بحفظه مسبقا.

    جـ. الاسم: اسم Webhook أو الاسم المستعار أو المعرف.

  3. حدد حفظ عند الانتهاء لإنشاء التنبيه.

بالنسبة لمجموعة إجراءات موجودة:

  1. في مدخل Azure، حدد مراقبة.

  2. في قسم الإعدادات ، حدد مجموعات الإجراءات.

  3. ابحث عن مجموعة الإجراءات التي تريد تحريرها وحددها.

  4. أضف إلى قائمة الإجراءات:

    أ. نوع الإجراء: إخطار على الويب

    ب. التفاصيل: عنوان URL للتكامل ServiceNow الذي قمت بحفظه مسبقا.

    جـ. الاسم: اسم Webhook أو الاسم المستعار أو المعرف.

  5. حدد حفظ عند الانتهاء لتحديث مجموعة الإجراءات.

اختبار تكامل خطاف الويب الخاص بك عبر طلب HTTP POST

  1. إنشاء البيانات الأساسية لصحة الخدمة التي تريد إرسالها. يمكنك العثور على مثال على حمولة إخطار على الويب لصحة الخدمة في Webhooks لتنبيهات سجل نشاط Azure.

  2. إنشاء طلب HTTP POST كما يلي:

    POST        https://<yourInstanceName>.service-now.com/<baseApiPath>?apiKey=<secret>
    
    HEADERS     Content-Type: application/json
    
    BODY        <service health payload>
    
  3. يجب أن تتلقى استجابة 200 OK مع الرسالة "تم إنشاء الحدث".

  4. انتقل إلى ServiceNow للتأكد من إعداد التكامل بنجاح.

الخطوات التالية