View a markdown version of this page

Menghubungkan ServiceNow - AWS DevOps Agen

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menghubungkan ServiceNow

Tutorial ini memandu Anda menghubungkan ServiceNow instance ke AWS DevOps Agen untuk memungkinkannya secara otomatis memulai penyelidikan respons insiden ketika tiket dibuat dan memposting temuan utamanya ke tiket asal. Ini juga berisi contoh cara mengonfigurasi ServiceNow instans Anda untuk mengirim hanya tiket tertentu ke Ruang DevOps Agen dan cara mengatur perutean tiket di beberapa Ruang DevOps Agen.

Pengaturan Awal

Langkah pertama adalah membuat di klien ServiceNow aplikasi OAuth yang AWS DevOps dapat digunakan untuk mengakses instance Anda ServiceNow .

Buat klien aplikasi ServiceNow OAuth

  1. Aktifkan properti sistem kredensia klien instans Anda

    1. Cari sys_properties.list di kotak pencarian filter dan kemudian tekan enter (itu tidak akan menampilkan opsi tetapi menekan enter berfungsi)

    2. Pilih Baru

    3. Tambahkan nama sebagai glide.oauth.inbound.client.credential.grant_type.enabled dan nilainya menjadi true dengan tipe sebagai true | false

Formulir Properti Sistem yang menunjukkan jenis pemberian kredensia klien masuk OAuth diaktifkan.
  1. Arahkan ke System OAuth> Registri Aplikasi dari kotak pencarian filter

  2. Pilih “Baru"> “Pengalaman Integrasi Masuk Baru” > “Integrasi Baru” > “OAuth - Pemberian KredenSIAL Klien”

  3. Pilih nama dan atur pengguna aplikasi OAuth ke “Administrator Masalah”, pilih “Simpan”

Formulir catatan baru untuk kredenSIAL klien OAuth dengan bidang untuk nama, ID klien, dan rahasia.

Hubungkan klien ServiceNow OAuth Anda ke AWS DevOps Agen

  1. Anda dapat memulai proses ini di dua tempat. Pertama, dengan menavigasi ke halaman Penye dia Kemampuan dan temukan ServiceNow di bawah Komunikasi, lalu pilih Daftar. Atau Anda dapat memilih Ruang DevOps Agen apa pun yang mungkin telah Anda buat dan navigasikan ke Kemampuan → Komunikasi → Tambah → ServiceNow dan pilih Daftar.

  2. Selanjutnya, otorisasi DevOps Agen untuk mengakses ServiceNow instance Anda menggunakan klien aplikasi OAuth yang baru saja Anda buat.

Setiap pendaftaran terhubung ke satu ServiceNow instance. Untuk menghubungkan instance tambahan, ulangi proses ini untuk masing-masing instans.

ServiceNow formulir pendaftaran dengan bidang untuk Nama Klien, ID Klien, dan URL Instance.
  • Ikuti langkah selanjutnya, dan simpan informasi yang dihasilkan tentang webhook

penting

Anda tidak akan melihat informasi ini lagi

Panel Konfigurasi Webhook menunjukkan status terhubung dan URL webhook.

Mengonfigurasi A ServiceNow turan Bisnis Anda

Setelah Anda menetapkan konektivitas, Anda harus mengonfigurasi aturan bisnis ServiceNow untuk mengirim tiket ke Ruang DevOps Agen Anda.

  1. Arahkan ke Langganan Aktivitas → Administrasi → Aturan Bisnis, dan pilih Baru.

  2. Atur bidang “Tabel” ke “Insiden [insiden]”, centang kotak “Advanced”, dan atur aturan untuk berjalan setelah Sisipkan, Perbarui, dan Hapus.

Formulir Aturan Bisnis untuk CloudSmith Integrasi pada tabel Insiden.
  1. Arahkan ke tab “Advanced” dan tambahkan skrip webhook berikut, masukkan rahasia webhook Anda dan URL di mana ditunjukkan, dan pilih Kirim.

(function executeRule(current, previous /*null when async*/ ) { var WEBHOOK_CONFIG = { webhookSecret: GlideStringUtil.base64Encode('<<< INSERT WEBHOOK SECRET HERE >>>'), webhookUrl: '<<< INSERT WEBHOOK URL HERE >>>' }; function generateHMACSignature(payloadString, secret) { try { var mac = new GlideCertificateEncryption(); var signature = mac.generateMac(secret, "HmacSHA256", payloadString); return signature; } catch (e) { gs.error('HMAC generation failed: ' + e); return null; } } function callWebhook(payload, config) { try { var timestamp = new Date().toISOString(); var payloadString = JSON.stringify(payload); var payloadWithTimestamp =`${timestamp}:${payloadString}`; var signature = generateHMACSignature(payloadWithTimestamp, config.webhookSecret); if (!signature) { gs.error('Failed to generate signature'); return false; } gs.info('Generated signature: ' + signature); var request = new sn_ws.RESTMessageV2(); request.setEndpoint(config.webhookUrl); request.setHttpMethod('POST'); request.setRequestHeader('Content-Type', 'application/json'); request.setRequestHeader('x-amzn-event-signature', signature); request.setRequestHeader('x-amzn-event-timestamp', timestamp); request.setRequestBody(payloadString); var response = request.execute(); var httpStatus = response.getStatusCode(); var responseBody = response.getBody(); if (httpStatus >= 200 && httpStatus < 300) { gs.info('Webhook sent successfully. Status: ' + httpStatus); return true; } else { gs.error('Webhook failed. Status: ' + httpStatus + ', Response: ' + responseBody); return false; } } catch (ex) { gs.error('Error sending webhook: ' + ex.getMessage()); return false; } } function createReference(field) { if (!field || field.nil()) { return null; } return { link: field.getLink(true), value: field.toString() }; } function getStringValue(field) { if (!field || field.nil()) { return null; } return field.toString(); } function getIntValue(field) { if (!field || field.nil()) { return null; } var val = parseInt(field.toString()); return isNaN(val) ? null : val; } var eventType = (current.operation() == 'insert') ? "create" : "update"; var incidentEvent = { eventType: eventType.toString(), sysId: current.sys_id.toString(), priority: getStringValue(current.priority), impact: getStringValue(current.impact), active: getStringValue(current.active), urgency: getStringValue(current.urgency), description: getStringValue(current.description), shortDescription: getStringValue(current.short_description), parent: getStringValue(current.parent), incidentState: getStringValue(current.incident_state), severity: getStringValue(current.severity), problem: createReference(current.problem), additionalContext: {} }; incidentEvent.additionalContext = { number: current.number.toString(), opened_at: getStringValue(current.opened_at), opened_by: current.opened_by.nil() ? null : current.opened_by.getDisplayValue(), assigned_to: current.assigned_to.nil() ? null : current.assigned_to.getDisplayValue(), category: getStringValue(current.category), subcategory: getStringValue(current.subcategory), knowledge: getStringValue(current.knowledge), made_sla: getStringValue(current.made_sla), major_incident: getStringValue(current.major_incident) }; for (var key in incidentEvent.additionalContext) { if (incidentEvent.additionalContext[key] === null) { delete incidentEvent.additionalContext[key]; } } gs.info(JSON.stringify(incidentEvent, null, 2)); // Pretty print for logging only if (WEBHOOK_CONFIG.webhookUrl && WEBHOOK_CONFIG.webhookSecret) { callWebhook(incidentEvent, WEBHOOK_CONFIG); } else { gs.info('Webhook not configured.'); } })(current, previous);

Jika Anda mendaftarkan ServiceNow koneksi dari halaman Penye dia Kemampuan, navigasikan ke Ruang DevOps Agen tempat Anda ingin menyelidiki tiket ServiceNow insiden. Pilih Kemampuan, lalu Komunikasi, lalu pilih ServiceNow instans yang Anda daftarkan di halaman Penyedia Kemampuan. Satu Ruang DevOps Agen dapat menggunakan lebih dari satu ServiceNow pendaftaran. Untuk menambahkan contoh lain, ulangi langkah ini. Sekarang, semuanya harus diatur, dan semua insiden di mana penelepon diatur ke “Administrator Masalah” (untuk meniru izin yang Anda berikan kepada klien AWS DevOps OAuth) akan memicu penyelidikan respons insiden di Ruang Agen yang dikonfigurasi DevOps . Anda dapat menguji ini dengan membuat insiden baru ServiceNow dan mengatur bidang Penelepon dari insiden tersebut sebagai “Administrator Masalah.”

ServiceNow formulir insiden menunjukkan nomor INC0010001 dengan pemanggil Administrator Masalah.

ServiceNow pembaruan tiket

Selama semua Investigasi respons insiden yang dipicu, DevOps Agen Anda akan memberikan pembaruan tentang temuan utama, analisis akar penyebab, dan rencana mitigasi ke dalam tiket asal. Temuan agen diposting ke komentar insiden, dan saat ini kami hanya akan memposting catatan agen jenisfinding,, cause investigation_summarymitigation_summary, dan pembaruan status investigasi (mis.AWS DevOps Agent started/finished its investigation).

Contoh perutean tiket dan orkestrasi

Skenario: Memfilter insiden mana yang dikirim ke Ruang DevOps Agen

Ini adalah skenario sederhana tetapi memerlukan beberapa konfigurasi ServiceNow untuk membuat bidang ServiceNow untuk melacak sumber insiden. Untuk tujuan contoh ini, buat bidang Sumber (u_source) baru menggunakan pembuat formulir SNOW. Ini akan memungkinkan pelacakan sumber insiden dan menggunakannya untuk merutekan permintaan dari sumber tertentu ke Ruang DevOps Agen. Perutean dilakukan dengan membuat Aturan Bisnis Service Now dan di tab When to run pengaturan “Kapan” memicu dan “Kondisi Filter.” Dalam contoh ini kondisi filter diatur sebagai berikut:

Kapan menjalankan tab dengan sebelum pemicu dan filter untuk Sumber berisi Dynatrace.

Skenario: Perutean insiden di beberapa DevOps Ruang Agen

Contoh ini menunjukkan cara memicu Investigasi di Ruang DevOps Agen B ketika urgensinya adalah1, kategori adalahSoftware, atau LayananAWS, dan memicu Investigasi di Ruang DevOps Agen A ketika layanan adaAWS, dan sumbernya adaDynatrace.

Skenario ini dapat dicapai dengan dua cara. Skrip webhook itu sendiri dapat diperbarui untuk menyertakan logika bisnis ini. Dalam skenario ini kami akan menunjukkan bagaimana mencapainya dengan Aturan ServiceNow Bisnis, untuk transparansi dan menyederhanakan debugging. Routing dilakukan dengan membuat dua Aturan Bisnis Service Now.

  • Buat Aturan Bisnis ServiceNow untuk Ruang DevOps Agen A dan buat kondisi menggunakan pembuat kondisi untuk hanya mengirim peristiwa berdasarkan kondisi yang kami tentukan.

Formulir konfigurasi aturan bisnis dengan kondisi filter untuk Urgensi dan Kategori.
  • Selanjutnya, buat Aturan Bisnis lain ServiceNow untuk AgentSpace B yang aturan bisnisnya hanya akan dipicu ketika Layanan adalah AWS dan sumbernya adalah Dynatrace.

Formulir konfigurasi aturan bisnis untuk mengirim acara ke Ruang Agen B.

Sekarang, ketika Anda membuat Insiden baru yang sesuai dengan kondisi yang ditentukan, itu akan memicu penyelidikan pada Ruang DevOps Agen A atau Ruang DevOps Agen B, memberi Anda kontrol halus atas perutean insiden.