Der Blog

Chatten mit der API von PagerDuty

von Vivian Au 6. August 2014 | 7 min Lesezeit

Gast-Blogbeitrag von Simon Westlake, Chief Technical Officer für Leistungscode , ein komplettes CRM-, OSS- und Abrechnungssystem für ISPs. Powercode wird von über zweihundert ISPs weltweit verwendet.

Da Powercode weltweit von einer Vielzahl unterschiedlicher ISP-Typen verwendet wird, verfügen wir über Integrationen mit allen möglichen Drittanbieterdiensten. Diese Integrationen umfassen E-Mail-Kontoverwaltung, Rechnungsdruck, Kreditkartenabwicklung, Fahrzeugverfolgung, Gerätebereitstellung und vieles mehr. Die meisten dieser Integrationen kommen jedoch nur einer Handvoll unserer Kunden zugute, weshalb es eine sehr angenehme Überraschung war, die starke Nutzung von PagerDuty bei unseren Kunden zu sehen, als wir es integriert haben.

Überlegungen zur Integration mit Apps von Drittanbietern

Ich habe zum ersten Mal von PagerDuty gehört, als wir 2012 in unserer Heimatstadt Random Lake, Wisconsin, ein Powercode-Benutzertreffen veranstalteten. Einer unserer leidenschaftlichsten Benutzer, Steve, erzählte mir, wie er Powercode für seinen ISP verwendet. Ich erwähnte, dass wir die Bewältigung von Notfällen außerhalb der Geschäftszeiten als sehr herausfordernd empfinden, da viele der kleineren ISPs, die Powercode verwenden, nicht über die Einnahmen verfügen, um den Betrieb eines rund um die Uhr geöffneten Netzwerkbetriebszentrums (NOC) zu rechtfertigen, und dass es wirklich nervig ist, zu hoffen, dass das klingelnde Telefon einen weckt, wenn man eine E-Mail von seinem Netzwerküberwachungssystem erhält, die einen darüber informiert, dass die Hälfte des Netzwerks ausgefallen ist. Er holte schnell seinen Laptop heraus und loggte sich in sein PagerDuty Konto ein, um mir zu zeigen, was uns entgangen war.

Nachdem er mir die Benutzeroberfläche und den Funktionsumfang erklärt hatte, entschied ich auf der Stelle, dass es für uns entscheidend war, PagerDuty in Powercode zu integrieren. Allerdings haben wir drei strenge Anforderungen, die wir immer einhalten, wenn wir Dienste von Drittanbietern in Powercode integrieren:

  1. Verfügt der Dienst über eine API?
  2. Ist die API gut geschrieben und dokumentiert?
  3. Stellt das Unternehmen eine Test-/Integrationsumgebung für Entwickler bereit?

Wir haben uns schon einmal auf dunkle Pfade begeben, wo wir uns entschieden haben, eine dieser Anforderungen zu überspringen, und es wurde immer zu einem langfristigen Albtraum. Schlecht geschriebene APIs (oder gar keine API) und wenig Unterstützung von Drittanbietern bedeuten, dass wir am Ende eine dürftige Integration wieder zusammenflicken müssen, und wenn die Kunden sich wirklich auf die Integration verlassen, ist es ein ständiger Albtraum, sie am Laufen zu halten. Glücklicherweise hat PagerDuty alle drei Punkte erfüllt. Die API war solide und gut dokumentiert, und sie stellten uns bereitwillig eine Testumgebung zur Verfügung, um den Dienst in Powercode zu integrieren. Wenn wir uns neue Anbieter ansehen, drücke ich immer die Daumen für eine konsistente, REST- und JSON-basierte API, und zum Glück haben wir genau das bekommen!

Was mir beim Erstellen einer Integration mit einem Drittanbietersystem besonders gefällt, ist die Tatsache, dass die uns zur Verfügung gestellte API dieselbe API ist, die die ursprünglichen Entwickler zum Erstellen des Kernsystems verwendet haben. Und das war bei der PagerDuty API definitiv der Fall. Wir konnten wirklich problemlos alles einbinden, was wir brauchten, und die Integration verlief reibungslos und schmerzlos.

Analyse der Integrations-API von PagerDuty

Bei der Arbeit mit der API mussten wir einige Entscheidungen treffen. Vor der Integration von PagerDuty bestand die einzige Möglichkeit zur Alarmierung in Powercode darin, eine E-Mail auszulösen. Der Auslösemechanismus hatte eine Reihe von Konfigurationsoptionen, wie zum Beispiel:

  1. Wie lange muss sich dieses Gerät im Alarmzustand befinden, bevor ein Alarm generiert wird?
  2. Wie oft soll Powercode die Benachrichtigung wiederholen?
  3. Wie hoch ist die Häufigkeit und Anzahl der Wiederholungen?

Wir erkannten schnell, dass die Beibehaltung dieser Konfiguration keinen Sinn machte, da wir die Möglichkeit hatten, unsere Alarmparameter in PagerDuty einzurichten. Wir wollten auch eine Möglichkeit, einen Alarmverlauf für Geräte in PagerDuty zu verwalten. Schließlich mussten wir einige Entscheidungen darüber treffen, ob wir eine bidirektionale Integration mit PagerDuty einrichten wollten oder nicht – wenn ein Alarm in PagerDuty geöffnet oder geändert wird, sollte er dann irgendetwas in Powercode manipulieren?

Nach langer Überlegung haben wir uns entschieden, keine Zweiwegekommunikation zu integrieren. Wir wollten, dass Powercode der „Master“ für den Status von Vorfällen bleibt und die Leute dazu ermutigen, die Powercode-Schnittstelle zur Verwaltung ihrer Geräte zu verwenden. Dies stellte uns vor ein Problem: Was passiert, wenn jemand einen Vorfall in PagerDuty löst, während dieser in Powercode noch Alarm schlägt?

Um damit umzugehen, haben wir uns entschieden, in PagerDuty bei jedem Zyklus unserer Benachrichtigungs-Engine, also einmal pro Minute, die Erstellung oder Aktualisierung eines Vorfalls auszulösen. PagerDuty protokolliert Aktualisierungen eines offenen Vorfalls, ohne einen weiteren Vorfall auszulösen, und bündelt automatisch offene Vorfälle, die ungefähr zur gleichen Zeit auftreten, in einer Warnung, um die Alarmhäufigkeit zu reduzieren. Dies kann zwar eine lange Liste von Vorfallaktualisierungen in PagerDuty erzeugen, hat uns jedoch einige Vorteile gebracht:

  1. Wenn sich der Status eines Geräts ändert, wird diese Änderung in der Vorfallbeschreibung PagerDuty widergespiegelt. Wenn beispielsweise ein Router Alarm schlägt, weil die CPU-Auslastung zu hoch ist, und dann Alarm schlägt, weil die Temperatur zu hoch ist, können wir diese Informationen in die Beschreibung einfügen, indem wir den Vorfall erneut auslösen.
  2. Wenn ein Benutzer einen Vorfall in PagerDuty löst, der nicht wirklich gelöst ist (das Gerät befindet sich noch im Alarmzustand), wird er automatisch erneut geöffnet.

Eine der schönen Eigenschaften der PagerDuty -API ist, dass Sie einen „Vorfallschlüssel“ übermitteln können, um den betreffenden Vorfall zu verfolgen. Wir haben uns entschieden, die eindeutige ID in unserer Datenbank, die mit dem Gerät verknüpft ist, das den Alarm auslöst, als Vorfallschlüssel zu verwenden – dies vereinfachte den Deduplizierungsprozess und ermöglichte es uns, innerhalb von PagerDuty einen Verlauf der Vorfälle zu führen, die mit diesem Gerät aufgetreten sind. Es machte es auch einfach, Vorfälle aufgrund von Änderungen innerhalb von Powercode zu lösen oder zu bestätigen – wir wussten immer, wie wir auf den betreffenden Vorfall verweisen konnten, ohne eine weitere Kennung speichern zu müssen. Diese scheinbar kleine Funktion der PagerDuty -API hat unsere Fähigkeit, sie schnell zu integrieren, wirklich beschleunigt. Sehen Sie sich unten ein Beispiel an, wie einfach dies für uns in PHP zu tun ist:

pagerduty-incident-api

Dies gibt uns eine schöne Liste beschreibender Vorfälle in PagerDuty:

Powercode_incident_description

Halten Sie mit PagerDuty alle auf dem Laufenden

Bei unserer ersten Integration wurde nur die „Integrations-API“ von PagerDuty verwendet. Wir gingen davon aus, dass die meisten anderen Funktionen von den Benutzern direkt über die PagerDuty Anwendung gesteuert und abgerufen werden würden, und es wenig Sinn machte, sie alle in Powercode nachzubilden. Im Laufe der Zeit fanden wir jedoch langsam Verwendungsmöglichkeiten für die Daten in anderen Abschnitten. Beispielsweise haben wir in unserem NOC ein System implementiert, das den Abschnitt „Zeitpläne und Eskalationsrichtlinien“ der API verwendet, um unseren lokalen Technikern anzuzeigen, wer gerade Bereitschaft hat und wen sie im Falle einer Eskalation anrufen sollen. Unser nächster Plan ist die Implementierung des Abschnitts „Webhooks“ der API, um Protokolle in Powercode speichern zu können, die zeigen, wer gerade an einem Vorfall arbeitet – so können wir unseren Kunden die Möglichkeit geben, bessere Echtzeitdaten zu erhalten, ohne für jedes Mitglied ihrer Organisation Konten in PagerDuty erstellen zu müssen.

Abschließende Gedanken

Was mir wirklich gefällt, ist die positive Reaktion unserer Kunden, die den Service nutzen. Ich glaube, dass die PagerDuty Integration in Powercode von allen von uns integrierten Services der am häufigsten genutzte Drittanbieterservice ist. Als wir den Leuten zeigten, wie es funktioniert, war die Reaktion durchweg positiv. Wir haben sogar begonnen , PagerDuty für unseren Support außerhalb der Geschäftszeiten für Powercode selbst zu verwenden – wenn Sie außerhalb der Geschäftszeiten unsere Notfall-Support-Hotline anrufen und eine Voicemail hinterlassen, wird ein Vorfall in PagerDuty geöffnet, der den Eskalationsprozess durchläuft!

Wir empfehlen PagerDuty unseren Kunden weiterhin und ich bin überzeugt, dass die fortlaufende Integration in Powercode aufgrund der soliden API und des hervorragenden Supports ein Kinderspiel ist. Schauen Sie sich diesen Integrationsleitfaden an um zu sehen, wie einfach es ist, Powercode mit PagerDuty zu integrieren.