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
Aktifkan properti sistem kredensia klien instans Anda
Cari
sys_properties.listdi kotak pencarian filter dan kemudian tekan enter (itu tidak akan menampilkan opsi tetapi menekan enter berfungsi)Pilih Baru
Tambahkan nama sebagai
glide.oauth.inbound.client.credential.grant_type.enableddan nilainya menjadi true dengan tipe sebagai true | false
Arahkan ke System OAuth> Registri Aplikasi dari kotak pencarian filter
Pilih “Baru"> “Pengalaman Integrasi Masuk Baru” > “Integrasi Baru” > “OAuth - Pemberian KredenSIAL Klien”
Pilih nama dan atur pengguna aplikasi OAuth ke “Administrator Masalah”, pilih “Simpan”
Hubungkan klien ServiceNow OAuth Anda ke AWS DevOps Agen
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.
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.
Ikuti langkah selanjutnya, dan simpan informasi yang dihasilkan tentang webhook
penting
Anda tidak akan melihat informasi ini lagi
Mengonfigurasi A ServiceNow turan Bisnis Anda
Setelah Anda menetapkan konektivitas, Anda harus mengonfigurasi aturan bisnis ServiceNow untuk mengirim tiket ke Ruang DevOps Agen Anda.
Arahkan ke Langganan Aktivitas → Administrasi → Aturan Bisnis, dan pilih Baru.
Atur bidang “Tabel” ke “Insiden [insiden]”, centang kotak “Advanced”, dan atur aturan untuk berjalan setelah Sisipkan, Perbarui, dan Hapus.
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 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:
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.
Selanjutnya, buat Aturan Bisnis lain ServiceNow untuk AgentSpace B yang aturan bisnisnya hanya akan dipicu ketika Layanan adalah AWS dan sumbernya adalah Dynatrace.
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.