Juni 2018
33. Jahrgang, Nummer 6
Dieser Artikel wurde maschinell übersetzt.
Azure Databricks: Überwachen von Databricks-Aufträgen mit Application Insights
Durch Joseph Fultz | Juni 2018
Wir arbeiten in einem Team, das Daten und Analysen für große Unternehmen behandelt, die implementieren oder ihre Lösungen in die Cloud migrieren möchten. Diese bemühungen verfügen über die offensichtlichen Arbeit optimieren und Neuentwicklung von Anwendungen auf mehrere verschiedene Stufen, um sicherzustellen, dass sie nutzen, was die Cloud bietet. So groß wie die Maßnahmen für die Anwendung selbst sein können, stehen zusätzliche Herausforderungen für Organisationen, die gerade beginnen ihren Weg in die Cloud, wie auch alle arbeiten müssen, die gesendet wird, zusammen mit ihren Funktionen in die Cloud erweitern. Und als neue Technologien auf den Markt kommen, und es werden weiterentwickelt, diese müssen in der vorhandenen operational Infrastruktur, auch gefaltet werden. Dies ist eine der Herausforderungen, die mit Spark und Apache Hadoop-basierten Lösungen vorhanden sind. Ja, Apache Ambari handelt es sich um ein nützliches Dashboard bereitzustellen, und verfügt über eine API, um Metriken verfügbar zu machen, aber viele Organisationen verfügen bereits über eine Investition in und ein gutes Verständnis der anderen Lösungen überwachen und dashboardverwendung wie Azure Application Insights.
Stellen Sie sich vor einen WebJob, das Nachrichten aus Azure Event Hubs abruft, einige anfängliche Überprüfung, und legt dann in Azure Storage, sobald dies der Fall, dass Daten über verschiedene Spark-Aufträge, verarbeitet werden, siehe Abbildung1. Ziel ist es, die über ein einziges Laufzeitmodul Dashboard verfügen, die Informationen, die anzeigt, nicht nur was passiert, sondern auch Prozess und Business-spezifische Informationen bereitstellen können, während er aktiv ist. Darüber hinaus ist es wäre wünschenswert, kann diese Informationen als einem ganzheitlichen den Arbeitsfluss nachverfolgen und Details finden auf die einzelnen Prozesse.
Abbildung 1 Einzellösung, separaten Prozessen Separate Schritte
Natürlich sehen Sie standardmetriken für WebJobs in Application Insights und einige Informationen aus der Spark-in Ambari Aufträge – und setzen Sie sie für die post-hoc-Insights all up with Azure Log Analytics. Wir möchten jedoch nicht zwei separate Vorgänge mit vier Schritten finden Sie unter. Soll der Prozess wird als Ganzes angezeigt und Common Language Runtime-Einblicke und Laufzeit-Warnungen werden soll.
In diesem Artikel werden Überlegungen und planen das vollständige Projekt zusammen mit Application Insights direkt erläutert. Darüber hinaus werden wir die Azure Databricks-Konfiguration des Spark verwenden, wie sie einen praktischen Satz von Funktionen, die helfen Sie uns Weitere problemlos zu entwickeln und zu operationalisieren des Workflows.
Planen der Application Insights-Telemetrie
Es wird nicht behandelt die grundlegenden Konzepte, aber eine Einführung zu diesen Konzepten sehen Sie mit der Onlinedokumentation unter bit.ly/2FYOCyp. Darüber hinaus Victor Mushkatin und Sergey Kanzhelev schrieb einen guten Artikel zum Optimieren der telemetriedatensammlung "Optimieren der Telemetrie mit Application Insights" (msdn.com/magazine/mt808502). Hier konzentrieren wir uns zum Organisieren von unserer Notebooks und Aufträge zur Erleichterung der ordnungsgemäßen nachverfolgen, die in Form von dem Vorgang, zu Events und Daten, die wir aus unserer Databricks-Aufträgen zu senden.
In Databricks können Sie einen Auftrag als die Ausführung eines Notebooks mit bestimmten Parametern definieren. Abbildung 2 veranschaulicht eine Reihe von grundlegenden Ansätze zum Organisieren von Arbeit in ein Databricks-Notebook.
Abbildung 2: grundlegende Anordnung Optionen für einen Auftrag für die Databricks-Notebook
Abbildung 2 zeigt zwei einfache Möglichkeiten, die in dem ein Auftrag definiert wird, als ein einzelnes Notizbuch mit einer Reihe von Codeblöcken oder Funktionen, die aufgerufen werden, während andere ein Notebook Steuerelement erscheint, der die Ausführung der untergeordneten Notebooks, orchestriert. entweder nacheinander oder parallel. Dies ist nicht der Fall, mit welchen Mitteln, die einzige Organisation, die verwendet werden können, jedoch ist dies ausreichend, um zu verdeutlichen, dass wie Korrelation vorstellen. Wie Sie vorgehen zum Organisieren von Notebooks und -Code ist sicherlich eine lohnende Thema und stark variieren je nach Größe und Art des Auftrags. Für ein wenig genauer auf Databricks-Notebook-Workflows, sehen Sie sich den Blogbeitrag "Notebook-Workflows: Die einfachste Möglichkeit zum Implementieren von Apache Spark-Pipelines"(bit.ly/2HOqvTj).
Beachten Sie, dass der Notebook-Organisation mit diskreten ausgerichtet wurden, die Gruppe-Ereignis, die berichterstellung in Application Insights verwendet werden können. In Application Insights erfolgt die Korrelation über zwei Eigenschaften: Die Vorgangs-Id und die übergeordnete Vorgangs-Id. Wie in abbildung2, wir alle diskrete Ereignisse erfassen möchten, und Metriken innerhalb eines Codes blockiert oder Notebook im Kontext eines einzelnen Vorgangs, was erfolgt mithilfe eines distinct-Vorgangs-Id für die einzelnen Abschnitte zu trennen. Darüber hinaus möchten wir die Blöcke, die separate große-Vorgang als Teil des gesamten zu sehen, die wir tun können, durch den Kontext des übergeordneten Vorgangs-Id auf den gleichen Wert für alle Metriken, die bei jedem Vorgang reporting festlegen. Im übergeordneten Vorgang Id übergeben werden kann, einer externen Triggers für den Auftrag, der dann einen Mechanismus zum Verknüpfen Sie alle diskreten Vorgänge aus der vorherigen Prozess und den Azure Databricks-Auftrag im Rahmen einer einzelnen gesamtargumentation identifizierte bieten würde die übergeordnete Vorgangs-Id in Application Insights.
Wir haben hier ein paar Szenarios dargestellt. Der wichtigste Punkt ist, die Sie berücksichtigen sollten, wie Sie Ihre Vorgänge, Ereignisse und Metriken im Rahmen des gesamten Auftrags Unternehmens organisieren möchten.
Hinzufügen von Application Insights in der Umgebung
Um die Umgebung vorzubereiten, müssen Sie zum Installieren der Python Application Insights-Bibliothek auf dem Cluster, nehmen einige Konfigurationseinstellungen, und fügen ein paar Codezeilen Helper. Application Insights finden Sie unter Pypi (pypi.python.org/pypi/applicationinsights/0.11.5/). Um sie mit Databricks hinzuzufügen, einfach wählen Sie einen Speicherort in Ihrem Arbeitsbereich (es erstellt eine benannte Lib) und mit der rechten Maustaste und erstellen und dann die Bibliothek auswählen. Einmal, Sie können den Pypi-Anwendungsnamen eingeben und Databricks heruntergeladen und installiert das Paket. Die Sache Sie entscheiden müssen, ist, und zwar unabhängig davon, ob Sie die Bibliothek automatisch zu allen Clustern zuordnen möchten.
Versuch, die den Code zum Hinzufügen von einzelnen Notebook zu reduzieren haben wir eine Include-Datei hinzugefügt, die über eine Reihe von Hilfsfunktionen verfügt:
def NewTelemetryClient (applicationId, operationId="",
parentOperationId=""):
tc = TelemetryClient(instrumentationKey)
tc.context.application.id = applicationId
tc.context.application.ver = '0.0.1'
tc.context.device.id = 'Databricks notebook'
tc.context.operation.id = operationId
tc.context.operation.parentId = parentOperationId
return tc
Dieser Code enthält eine factoryfunktion, die mit dem Namen NewTelemetryClient zum Erstellen eines Telemetrie-Clientobjekts, einige der Eigenschaften festlegen und das Objekt an den Aufrufer zurückgeben. Wie Sie sehen, dauert es eine übergeordnete Vorgangs-Id und eine Vorgangs-Id. Dadurch wird das Objekt initialisiert, aber beachten Sie, dass wenn Sie die Vorgangs-Id ändern möchten, Sie dafür im Auftrag Notebook direkt müssen. Beachten Sie, die die TelemetryClient ist nimmt Konstruktor auch einen instrumentierungsschlüssel ab, die sich auf dem Eigenschaftenblatt "des Application Insights-Instanz befinden, die Sie verwenden möchten. Wir haben einige Werte, die für das Beispiel erforderlich sind statisch zugewiesen, aber die TelemetryClient-Context-Objekt verfügt über viele untergeordnete Objekte und Eigenschaften, die verfügbar sind. Wenn Sie andere Werte zu initialisieren, wäre dies der Ort, an der dafür. Abtrennen von der Factory-Funktion wird von der Masse abheben nach unten, und erleichtert auch die Implementierung für den Entwickler, konvertieren das Notebook aus einem Sandkasten Prototyp Art von Code in einer Enterprise-Auftrag Art der Implementierung.
Mit der Bibliothek hinzugefügt werden, auf dem Cluster und das Setup-Notebook, das definiert müssen wir einfach eine Linie am oberen Rand der Auftrags-Notebook, um das Setup ausführen, und klicken Sie dann erstellen Sie ein Starter-Telemetry-Objekt hinzufügen. Wir werden einen ausführen am oberen Rand des Notebooks % ausgeben:
%run ./AppInsightsSetup
In der nachfolgenden Zelle werden wir einfach eine neue Instanz des Objekts TelemetryClient instanziieren.
Abbildung 3 zeigt den Code aus dem Vorhersage-Beispiel, das wir erstellt haben. Es gibt mehrere Dinge hier notieren. Zunächst sind wir übergeben in einer Reihe von Variablen an das Notebook, die als Teil der auftragsinitialisierung, gesendet werden, die über das dbutils.widgets-Objekt, das als Teil der Databricks-Umgebung ausgeführt wird. Da wir eine Reihe von IDs für die übergeordneten Vorgang und der diskreten Vorgang benötigen, wir fahren Sie fort, und überprüfen Sie die und, wenn sie leer ist, sind erstellen und Zuweisen von neuen UUIDs. Die willkürliche IDs zuweisen werden in diesem Fall vor allem interaktive Ausführung zu vereinfachen. Allerdings können andere Methoden durchgeführt werden, wie z. B. das Auftrags-Notebook-Code in eine Reihe von Funktionen zu kapseln und Ausführen von tests durch Aufrufen der übergeordneten Funktion mit einer bestimmten ID, Beide funktionieren ausreichend gut für unsere Zwecke. Der letzte Schritt, wir weisen, ist ein Vorgangsname, der schließlich in Application Insights als können Sie anzeigen und Gruppieren nach, wird wie in Abbildung 4.
Abbildung 3 Code zur Initialisierung von Notebook
baseRatingsFile = dbutils.widgets.get("baseRatingsFile")
newRatingsFile = dbutils.widgets.get("newRatingsFile")
trainOperationId = dbutils.widgets.get("trainOperationId")
parentOperationId = dbutils.widgets.get("parentOperationId")
maxIterations = int(dbutils.widgets.get("maxIterations"))
numFolds = int(dbutils.widgets.get("numFolds"))
numUserRecommendations = int(
dbutils.widgets.get("numUserRecommendations"))
predictionFilePath = dbutils.widgets.get("predictionFilePath")
if trainOperationId == "":
trainOperationId = NewCorrelationId()
if parentOperationId == "":
parentOperationId = NewCorrelationId()
#setup other needed variables
telemetryClient = NewTelemetryClient("PredictionExample",
trainOperationId, parentOperationId)
telemetryClient.context.operation.name = "Train Model"
Ansehen Abbildung 3, sehen Sie, dass der Name des Vorgangs der Wert des Train Model zugewiesen wurde. Abbildung 4 zeigt es in einem Datenraster, nachdem er als Gruppierungsmechanismus für die für die Daten ausgewählt wurde. Wir führen Sie mehrere Aufträge, und weisen Sie unterschiedlichen Vorgangsnamen, werden wir können Sie die in der Ansicht angezeigt. Mit diesen Dingen vorhanden sind wir in gutem um in unserem Auftrag Instrumentierungscode zum Erfassen von Ereignissen und Metriken zu arbeiten.
Abbildung 4-Vorgangsnamen in Application Insights
Databricks-Auftrag Instrumentierungscode
Betrachten wir ein Beispiel, das Application Insights verwendet wird, um einen typischen Data Engineering-Auftrag in Databricks zu überwachen. In diesem Szenario verwenden wir öffentlich zugängliche Daten aus Fannie Mae (bit.ly/2AhL5sS) und übernimmt rohquelldaten auf gespiegelten Loan-Leistung und zur Bericht- und analyseerstellung vorzubereiten. Es sind mehrere Schritte erforderlich, um die Daten ordnungsgemäß vorbereiten. Bei jedem Schritt wir Informationen wie Anzahl der Datensätze und die verstrichene Zeit zu erfassen und notieren Sie diese im Application Insights. Abbildung 5 veranschaulicht die Hauptschritte im Auftrag. Wir haben entschieden, zum Titel am oberen Rand verwenden Abbildung 5 unsere separaten Vorgängen zu identifizieren.
Abbildung 5-Engineering-Auftrag-Datenfluss
Darüber hinaus haben wir eine Reihe von Messungen mit ähnlichen Namen (z. B. Dauer schreiben, lesen Dauer, Anzahl der Datensätze), die gemeldet werden, unterschiedlich benannte Ereignisse eingerichtet. Dies wird in der Analyse wichtig, wie wir sehen Sie sich bestimmte Metriken, und sie dann, indem Operation oder ein Ereignis anzeigen sein. Siehe Abbildung 5, zuerst wir erfassen mehrere Datendateien, und klicken Sie dann zu konsolidieren und verwandeln Sie diese und schließlich an zwei Zielspeicherorte schreiben. Vollständig vorbereitete DataSet wird in den Langzeitspeicher Blob beibehalten, und eine aggregierte Teilmenge an unsere RDBMS, Azure SQL-Datenbank gesendet wird. In jedem Schritt auf hoher Ebene sind natürlich mehrere Teilschritte erforderlich. Insbesondere wir vier unterschiedliche Dateien importieren, diese in einen einzelnen Spark DataFrame zusammenführen und die Rohdaten, konsolidierte-Dataset in Blob Storage schreiben. Die konsolidierten Daten werden dann wieder aus dem Blob-Speicher in einen neuen Datenrahmen für die DatenBereinigung und-Transformation gelesen. Ausführen die Transformation für das wir Teilmenge DataFrame (d. h. einzugrenzen sie nur die relevanten Spalten), benennen Sie die Spalten, um aussagekräftige Namen, und Ersetzen Sie null-Werte in der Spalte die Anforderungsserver-Name. Das endgültige Format der Daten wird im Parquet-Format beibehalten. Der letzte Schritt in diesem Beispiel speichert die Daten in Azure SQL-Datenbank.
In diesem Beispiel Azure Databricks-Auftrag haben wir die einzelnen Notebook mit den Schritten, die in separaten codezellen programmiert vorgegangen. Einen übergeordneten Vorgang, wird bei jeder Ausführung des Auftrags-Id festgelegt. Eines (untergeordneten)-Vorgangs-Id gilt, für jeden Vorgang innerhalb des Auftrags, und wir haben die Übernahme, Transformation und Persistenz zunehmender Komplexität dieser Vorgänge definiert. Wir verfolgen die Ereignisse, die für jeden Vorgang, Timestamp, Anzahl der Datensätze, die Dauer und andere Parameter in Application Insights zu auftragslaufzeit Aufzeichnung.
Wie im früheren Beispiel Vorhersagen wir das Python-Paket "Applicationinsights" soll dem Cluster hinzugefügt, das Setup-Notebook ausführen, und Instanziieren einer neuen Instanz von TelemetryClient-Objekt. Dieses Mal Wir nennen Sie die Instanz DataEngineeringExample und legen Sie dann den Namen des ersten Vorgangs zu erwerben, um die Vorbereitung auf unsere erste Reihe von Schritten zum Abrufen von Quelldaten:
telemetryClient = NewTelemetryClient(
"DataEngineeringExample", operationId, parentOperationId)
telemetryClient.context.operation.name = "Acquisition"
Als Nächstes wir erfassen die aktuelle Zeit und verfolgen unsere erste Ereignis in Application Insights aufzeichnen, dass der Auftrag gestartet wurde:
import datetime
jobStartTime = datetime.datetime.now()
jobStartTimeStr = str(jobStartTime)
telemetryClient.track_event('Start Job', { 'Start Time': jobStartTimeStr,
'perfDataFilePath':perfDataFilePath, 'perfDataFileNamePrefix' :
perfDataFileNamePrefix, 'consolidatedDataPath':consolidatedDataPath,
'transformedFilePath' : transformedFilePath, 'perfDBTableName': perfDBTableName})
telemetryClient.flush()
Dies ist der Code den aktuellen Zeitstempel als die Startzeit für den Auftrag festlegen, und notieren Sie sie in unserer ersten Application Insights-Ereignis. Zunächst wir importieren die Python-Bibliothek "DateTime" für einfache Datums- und Uhrzeitfunktionen, und legen Sie dann die Variable "jobstarttime" auf den aktuellen Zeitstempel. Es ist, beachten Sie, dass die Signatur für die Track_event ([EventName], [{Props}], [{Messungen}])-Methode akzeptiert Parameter für den Ereignisnamen, Wörterbuch von Eigenschaften und ein Wörterbuch von Messungen. Zu diesem Zweck muss die Timestamp-Variablen zur Einbindung in die Eigenschaften des telemetrieereignisses per JSON serialisierbar sein. Wir können also wandeln Sie das Objekt "jobstarttime" als Zeichenfolge und fügen Sie den Wert in eine neue Variable JobStartTimeStr. Im nächsten Schritt senden wir unsere erste telemetrieereignis mit der Track_event-Methode, und übergeben sie unsere Name des benutzerdefinierten Ereignisses Startzeit zusammen mit mehreren Parametern, die wir ausgewählt, um mit diesem Ereignis erfassen. Wir haben die verwendeten Parameter für die verschiedenen Dateipfade und den Datenbanknamen für die Tabelle eingefügt, im Auftrag. Z. B. PerfDataFilePath enthält den Speicherort der Quelldateien für die Daten und PerfDBTableName enthält der Name der Zieltabelle in der Azure SQL-Datenbank, in dem wir einige der Daten beibehalten werden. Hierbei handelt es sich um nützliche Informationen in diesen Fällen, in dem wir finden Sie unter einen 0-Datensatz, eine Verbindung herstellen, oder haben eine Benachrichtigung festlegen; einen kurzen Blick auf die Telemetriedaten von den entsprechenden Vorgang dauern Sie können und schnell zu überprüfen, die Dateien bzw. Datenbanken, die auf die zugegriffen wird.
Jetzt können wir über den Befehl Zellen im Notebook, fortfahren, Hinzufügen von ähnlichen ereignisüberwachung Code in die einzelnen Schritte, mit einigen Änderungen, die relevant für die internen Schritte des Auftrags. Da es oft hilfreich, um die Anzahl von Datensätzen in der gesamten eines Auftrags Data Engineering-Volumen für Daten bei der Überwachung von Leistung und Ressourcenverwendung zu berücksichtigen ist, haben wir ein Maß für die Anzahl der Datensätze für jede überwachte Ereignis hinzugefügt.
Abbildung 6 zeigt einige grundlegende Datentransformationen, gefolgt von ereignisüberwachung für Application Insights. In der Behandlung von Ausnahmen Try-Block führen Sie drei Arten von Transformationen auf einmal auf die PerfTransformDF DataFrame. Wir Teilmenge Dataframes, behalten nur eine ausgewählte Gruppe von relevanten Spalten und den Rest wird verworfen. Ersetzen wir die NULL-Werte in der Spalte die Anforderungsserver-Name mit "Unbekannt". Und, da die ursprünglichen Spaltennamen (z. B. "_C0", "_C1"), ohne Bedeutung sind benennen wir die relevante Teilmenge der Spalten, aussagekräftige Namen wie "Loan_id" und "Loan_age."
Abbildung 6 Data Transformation Ereignisüberwachung Code
if notebookError == "":
try:
perfTransformedDF = perfTransformedDF['_c0','_c1','_C2','_C3','_C4', \
'_C5','_C6','_C7','_C8','_C9', \
'_C10','_C11','_C12','_C13'] \
.fillna({'_C2':'UNKNOWN'}) \
.withColumnRenamed("_C0", "loan_id") \
.withColumnRenamed("_C1", "period") \
.withColumnRenamed("_C2", "servicer_name") \
.withColumnRenamed("_C3", "new_int_rt") \
.withColumnRenamed("_C4", "act_endg_upb") \
.withColumnRenamed("_C5", "loan_age") \
.withColumnRenamed("_C6", "mths_remng") \
.withColumnRenamed("_C7", "aj_mths_remng") \
.withColumnRenamed("_C8", "dt_matr") \
.withColumnRenamed("_C9", "cd_msa") \
.withColumnRenamed("_C10", "delq_sts") \
.withColumnRenamed("_C11", "flag_mod") \
.withColumnRenamed("_C12", "cd_zero_bal") \
.withColumnRenamed("_C13", "dt_zero_bal")
print("nulls replaced")
end = datetime.datetime.now()
rowCount = perfTransformedDF.count()
duration = round((end - start).total_seconds(), 1)
telemetryClient.track_event('Transformation Complete', {}, \
{ 'Records Transformed': rowCount, \
'Transformation Duration':duration })
telemetryClient.flush()
except Exception as e:
notebookError = str(e)
telemetryClient.track_exception(e,{"action":"column transform"},{})
else:
print("command skipped due to previous error")
Sobald die Transformationen abgeschlossen sind, erfasst dem aktuellen Zeitstempel in der Variablen "End" als die Zeit dieser Schritt abgeschlossen; zählen der Zeilen in den DataFrame; und berechnet die Schrittdauer basierend auf der Start- und Endzeiten. Wir senden Telemetriedaten an Application Insights an, mit dem telemetryClient.track_event Methode mit dem Ereignisnamen "Transformation abgeschlossen", und wir Messungen für Datensätze transformiert und die Dauer der Transformation enthalten.
Wir fügen einige sehr einfache Ausnahmebehandlung in unserer Notebooks ausschließlich um die nachverfolgung-Ausnahmen mithilfe von Application Insights sowie zu veranschaulichen. Beachten Sie in der except-Blocks in Abbildung 6 , wenn wir eine Ausnahme abfangen, es geht um die Track_exception-Methode aufrufen. Die Ausnahme als erster Parameter übergeben, und die nachfolgende Parameter sind dieselben Typen wie Track_event, sodass Sie so viele Informationen rund um das Ereignis wie möglich zu erfassen. Hier ist ein wichtiger Hinweis ist, dass derzeit keine Semantik für die Ausnahmebehandlung für Inline-Sql. Daher ist es möglicherweise am besten, überspringen Sie Magics wie %SQL für Produktionsaufträge bis Unterstützung für Ausnahmebehandlung hinzugefügt wird.
Die anderen Schritte in unsere Data Engineering-Aufgabe, darunter Vorgänge für den Erwerb und die Persistenz, führen Sie die Muster in der Transformation-Code zum Senden von Telemetrie-Ereignissen mit benutzerdefinierten Messungen an Application Insights.
Konfigurieren von Analysen und Warnungen
Mit diesem Code zum Senden der Telemetriedaten aktiviert die Konfiguration von Application Insights für dynamische Dashboards erstellen, Durchsuchen von Ereignis- und korrelierte Ereignisse-Details und Einrichten von Warnungen zu informieren und möglicherweise Maßnahmen ergreifen, die basierend auf den Auslöser.
Abbildung 7 zeigt einige Diagramme, die wir über das Blatt "Metrik-Explorer" und das Blatt "Metriken (Vorschau)" in Application Insights konfiguriert haben, und klicken Sie dann an das Azure-Portal-Dashboard angeheftet.
Abbildung 7 Application Insights-Diagrammen auf Azure-Dashboard
Notieren Sie sich die zwei rechten Quartil. Oben rechts zeigt ein Raster der Dauer, gruppiert nach den Namen des Vorgangs, dass wir die Telemetrie unter bei der Addition der Aufrufe zur nachverfolgung gemeldet. Rechts unten zeigt eine Datensatzanzahl Messung, gruppiert nach den Ereignisnamen, den wir verwendet haben. Natürlich ist die "Beibehalten, SQL-Datenbank" wesentlich geringer als die anderen, da dies das Ereignis wurde, das nur eine kleine, gefilterte Teilmenge der Daten in Azure SQL-Datenbank geschrieben. Auswählen Ihrer Vorgang Gruppierungen Vorgangsnamen und die Namen von Ereignissen ist ein wichtiger Teil der Planung, die zahlt sich aus off an diesem Punkt als Sie visuell darstellen und erstatten Sie Bericht über die Daten in einer Weise, die sinnvoll für zu Ihren Vorgängen Vorschlags erhalten.
Die beiden linken Quartil in abbildung7 Diagramme, die mit den Metriken (Vorschau), die eine gute Konfiguration sowie zusätzliche Funktionen erstellt wurden für das Aufteilen der Messungen, die basierend auf einer anderen Eigenschaft-Benutzeroberfläche anzeigen. Oben links sehen Sie die Anzahl der Datensätze, aber wir haben es unterteilen, sodass dies nach Ereignisnamen, bietet uns einen Graphen und die Daten für die Anzahl der Datensätze für verschiedene Ereignisse gemeldet wird. Hier Vergleichen wir Anzahl von Datensätzen ausgeführt, wenn die Quelldaten gelesen werden, um die Anzahl von Datensätzen später ausgeführt werden, wenn konsolidierte Daten in einen Datenrahmen geladen wurde. Dies ist ein wichtiges Feature, da die Datensatzanzahl möglicherweise ein recht häufig Maß für unsere übergeordneten Vorgang, aber wir möchten sie an jedem Vorgang oder ein Ereignis finden Sie unter.
Wenn Sie ein Element in einem der operational Diagramme, die für ein wenig Recherche aufruft sehen, können Sie über alle Telemetriedaten suchen. Abbildung 8 zeigt die Ergebnisse der Suche und in einem Diagramm wird die Anzahl der Vorkommen im Laufe der Zeit im linken Bereich. Im rechten Bereich sehen Sie alle Informationen, die im Ereignis aufgezeichnet. Beachten Sie die Track_event ([Name], [Eigenschaften], [Messungen]) Signatur. Wir haben Sie die Details der einen persistenten SQL-Datenbank-Ereignis abgerufen, in denen Sie die benutzerdefinierten Eigenschaften oben sehen können. In der Mitte ist mit der Bezeichnung benutzerdefinierte Daten, in dem Sie die benutzerdefinierten Messungen finden können, die mit den Telemetriedaten gesendet wurden. Sind Sie unten rechts auf alle zugehörigen Elemente, in dem Sie leicht auf alle Ereignisse navigieren können, die zu dem übergeordneten oder Vorgang gehören. Es gibt außerdem eine Zeile unten, um alle verfügbaren Telemetriedaten zum Zeitpunkt des Ereignisses finden Sie unter. Wenn Sie für die Common Language Runtime-Überwachung in Application Insights standardisiert haben, ist dies ein hervorragendes Tool für das Verständnis des gesamtsystemstatus und den operativen Kontext eines Ereignisses. Müssen einen Einblick in großem Umfang Geschehnisse kann erklären, wenn die Anzahl von Datensätzen deaktiviert sind oder die Dauer ist askew.
Abbildung 8 Eventsuche und Details
Die Sache für Application Insights behandelt werden soll, ist die Möglichkeit, eine Warnung einrichten. In Abbildung 9 Teil der Konfiguration der Warnung angezeigt. Wie die anderen Elemente, die wir uns angesehen haben, wird die benutzerdefinierte Informationen in den Ereignissen gesendeten hier für uns als Kriterien für Warnungen auswählen.
Abbildung 9: Einrichten einer Warnung für Metrik
Wie zu erwarten, kann die Warnung eine E-mail senden. Sie können jedoch auch einen WebHook Aufrufen für eine gute und einfache Möglichkeit, andere Maßnahmen zu ergreifen, die Sie wünschen, können dadurch. Azure Functions ist die perfekte Lösung für dieses Setup anpassen und ermöglicht Ihnen die Erstellung von beliebige geeignete benutzerdefinierte Aktion, die Ihnen gefällt. Interessanter ist, ist Application Insights direkt in Logic Apps integriert. Dies ermöglicht die native Funktion für die Integration und Aktionen für eine Vielzahl von Integrationen und Microsoft Azure zu orchestrieren. Daher kann eine Application Insights-Warnung Benachrichtigungstask während des Starts kompensierende und/oder korrigierende Aktionen über Logik-Apps-Orchestrierung, einschließlich der Aktionen und Integrationen mit anderen nachgeschalteten und upstream-Systemen.
Abschließende Bemerkungen
Wir möchten sicherstellen, dass wir die wichtigsten Bits des Informationen hervorzuheben. Application Insights ist nicht über eine Log Analytics-Lösung. Es ist in Azure Log Analytics und eine post-hoc-Analysen und langfristige Aufbewahrung bietet integriert. Application Insights ist für die Überwachung und Analyse Ihrer Laufzeit-Vorgänge, dadurch erhalten Sie Informationen, Einblicke und Warnungen zu was jetzt passiert. Direkte Integration in andere Azure-Dienste und die Breite Verfügbarkeit von Plattform-SDKs ist es eine gute Ergänzung zu helfen, Ihre Azure Databricks-Aufträge zu operationalisieren. Daher ist nicht für diese Aufträge in einem Silo, aber stattdessen im Kontext der vollständigen Lösungsarchitektur Überwachungen.
Joseph Fultz arbeitet als Cloud Solution Architect bei Microsoft. Er arbeitet mit Microsoft-Kunden entwickelt Architekturen, die zum Lösen von geschäftlichen Probleme Lew-Eraging Microsoft Azure. Früher war Fultz für die Entwicklung und Architektur des Carsharingprogramms von GM verantwortlich (mavendrive.com). CON unverändert ihm auf Twitter: @JosephRFultz oder per E-mail unter jofultz@microsoft.com.
Ryan Murphyist Lösungsarchitekt in St. Louis, Aktionszeitraums Leben Er wurde erstellen und mit Daten Innovationen, fast 20 Jahre einschließlich große in die Spiele und Landwirtschaft Branchen. Derzeit hilft Murphy einige der weltweit größten Unternehmen modernisieren ihres Unternehmens mit Data-Lösungen unterstützt von Microsoft Azure-Cloud. Folgen Sie ihm auf Twitter: @murphrp.