Sammeln von Machine Learning-Pipelineprotokolldateien in Application Insights für Warnungen und Debuggen
GILT FÜR:Python SDK azureml v1
Die OpenCensus-Python-Bibliothek kann zum Weiterleiten von Protokollen an Application Insights in Ihren Skripts verwendet werden. Durch das Aggregieren der Protokolle von Pipelineausführungen an einem zentralen Ort können Sie Abfragen erstellen und Probleme diagnostizieren. Mithilfe von Application Insights können Sie Protokolle im Lauf der Zeit nachverfolgen und Pipelineprotokolle zwischen den Ausführungen vergleichen.
Dadurch, dass sich alle Ihre Protokolle am selben Speicherort befinden, erhalten Sie einen Verlauf der Ausnahmen und Fehlermeldungen. Da Application Insights in Azure-Warnungen integriert ist, können Sie auch Warnungen basierend auf Application Insights Abfragen erstellen.
Voraussetzungen
- Führen Sie die Schritte zum Erstellen eines Azure Machine Learning-Arbeitsbereichs ausund erstellen Sie Ihre erste Pipeline
- Konfigurieren Sie Ihre Entwicklungsumgebung für die Installation des Azure Machine Learning-SDKs.
- Installieren Sie das OpenCensus Azure Monitor Exporter-Paket lokal:
pip install opencensus-ext-azure
- Erstellen Sie eine Application Insights-Instanz. (Dieses Dokument enthält auch Informationen zum Abrufen der Verbindungszeichenfolge für die Ressource.)
Erste Schritte
Dieser Abschnitt ist eine Einführung in die Verwendung von OpenCensus aus einer Azure Machine Learning-Pipeline. Ein ausführliches Tutorial finden Sie unter OpenCensus Azure Monitor Exporters.
Fügen Sie Ihrer Azure Machine Learning-Pipeline einen PythonScriptStep hinzu. Konfigurieren Sie Ihre RunConfiguration mit der Abhängigkeit von opencensus-ext-azure. Konfigurieren Sie die Umgebungsvariable APPLICATIONINSIGHTS_CONNECTION_STRING
.
from azureml.core.conda_dependencies import CondaDependencies
from azureml.core.runconfig import RunConfiguration
from azureml.pipeline.core import Pipeline
from azureml.pipeline.steps import PythonScriptStep
# Connecting to the workspace and compute target not shown
# Add pip dependency on OpenCensus
dependencies = CondaDependencies()
dependencies.add_pip_package("opencensus-ext-azure>=1.0.1")
run_config = RunConfiguration(conda_dependencies=dependencies)
# Add environment variable with Application Insights Connection String
# Replace the value with your own connection string
run_config.environment.environment_variables = {
"APPLICATIONINSIGHTS_CONNECTION_STRING": 'InstrumentationKey=00000000-0000-0000-0000-000000000000'
}
# Configure step with runconfig
sample_step = PythonScriptStep(
script_name="sample_step.py",
compute_target=compute_target,
runconfig=run_config
)
# Submit new pipeline run
pipeline = Pipeline(workspace=ws, steps=[sample_step])
pipeline.submit(experiment_name="Logging_Experiment")
Erstellen Sie eine Datei namens sample_step.py
. Importieren Sie die AzureLogHandler-Klasse, um Protokolle an Application Insights weiterzuleiten. Sie müssen auch die Python-Protokollierungsbibliothek importieren.
from opencensus.ext.azure.log_exporter import AzureLogHandler
import logging
Fügen Sie als Nächstes der Python-Protokollierung AzureLogHandler hinzu.
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
logger.addHandler(logging.StreamHandler())
# Assumes the environment variable APPLICATIONINSIGHTS_CONNECTION_STRING is already set
logger.addHandler(AzureLogHandler())
logger.warning("I will be sent to Application Insights")
Protokollierung mit benutzerdefinierten Dimensionen
Standardmäßig haben an Application Insights weitergeleitete Protokolle keinen ausreichenden Kontext für die Rückverfolgung auf die Ausführung oder das Experiment. Damit die Protokolle für die Diagnose von Problemen verwendet werden können, sind zusätzliche Felder erforderlich.
Dazu können benutzerdefinierte Dimensionen als Felder hinzugefügt werden, um Kontext für eine Protokollnachricht bereitzustellen. Ein Beispiel hierfür ist, wenn ein Benutzer die Protokolle für mehrere Schritte in derselben Pipelineausführung anzeigen möchte.
Benutzerdefinierte Dimensionen bilden ein Wörterbuch von Schlüssel-Wert-Paaren (in der Form „Zeichenfolge, Zeichenfolge“ gespeichert). Das Wörterbuch wird dann an Application Insights gesendet und als Spalte in den Abfrageergebnissen angezeigt. Die einzelnen Dimensionen können als Abfrageparameter verwendet werden.
Hilfreicher Kontext zum Einschließen
Feld | Begründung/Beispiel |
---|---|
parent_run_id | Abfragen von Protokollen für andere mit derselben parent_run_id, um die Protokolle im Zeitverlauf für alle Schritte anzuzeigen, anstatt jeden Schritt einzeln zu untersuchen |
step_id | Abfragen von Protokollen mit derselben step_id, um zu sehen, wo ein Problem mit einem engen Bereich nur für den einzelnen Schritt aufgetreten ist |
step_name | Abfragen von Protokollen, um die Schrittleistung im Zeitverlauf anzuzeigen. Unterstützt auch das Auffinden einer step_id für kürzliche Ausführungen, ohne die Benutzeroberfläche des Portals anzuzeigen |
experiment_name | Abfragen über Protokolle hinweg, um die Leistung des Experiments im Zeitverlauf anzuzeigen. Unterstützt auch das Auffinden einer parent_run_id oder step_id für kürzliche Ausführungen, ohne die Benutzeroberfläche des Portals anzuzeigen |
run_url | Bereitstellen eines Links direkt zurück zur Runtime für die weitere Untersuchung |
Weitere nützliche Felder
Diese Felder erfordern möglicherweise eine weitere Codeinstrumentierung und werden nicht vom Ausführungskontext bereitgestellt.
Feld | Begründung/Beispiel |
---|---|
build_url/build_version | Wenn Sie für die Bereitstellung CI/CD verwenden, kann dieses Feld Protokolle mit der Codeversion, die die Schritt- und Pipelinelogik bereitgestellt hat, korrelieren. Dieser Link kann weiter bei der Diagnose von Problemen oder beim Identifizieren von Modellen mit bestimmten Merkmalen (Protokoll-/Metrikwerte) helfen. |
run_type | Unterscheiden zwischen verschiedenen Modelltypen oder zwischen Trainings- und Bewertungsausführungen |
Erstellen eines benutzerdefinierten Dimensionswörterbuchs
from azureml.core import Run
run = Run.get_context(allow_offline=False)
custom_dimensions = {
"parent_run_id": run.parent.id,
"step_id": run.id,
"step_name": run.name,
"experiment_name": run.experiment.name,
"run_url": run.parent.get_portal_url(),
"run_type": "training"
}
# Assumes AzureLogHandler was already registered above
logger.info("I will be sent to Application Insights with Custom Dimensions", extra= {"custom_dimensions":custom_dimensions})
Überlegungen zur Python-Protokollierung mit OpenCensus
Der OpenCensus-AzureLogHandler wird zum Weiterleiten von Python-Protokollen an Application Insights verwendet. Daher sollten die Besonderheiten der Python-Protokollierung berücksichtigt werden. Wenn eine Protokollierung erstellt wird, weist sie eine Standardprotokollebene auf und zeigt Protokolle an, die sich auf oder über dieser Ebene befinden. Eine gute Referenz zur Verwendung der Python-Protokollierungsfunktionen stellt das Logging Cookbook dar.
Die Umgebungsvariable APPLICATIONINSIGHTS_CONNECTION_STRING
ist für die OpenCensus-Bibliothek erforderlich. Es wird empfohlen, diese Umgebungsvariable festzulegen, anstatt sie als Pipelineparameter zu übergeben, um die Weitergabe von Textverbindungszeichenfolgen zu vermeiden.
Abfragen von Protokollen in Application Insights
Die an Application Insights weitergeleiteten Protokolle werden als „Ablaufverfolgungen“ oder „Ausnahmen“ aufgeführt. Passen Sie Ihr Zeitfenster unbedingt so an, dass die Pipelineausführung enthalten ist.
Das Ergebnis in Application Insights enthält die Protokollmeldung und -ebene, den Dateipfad und die Nummer der Codezeile. Außerdem werden alle enthaltenen benutzerdefinierten Dimensionen angezeigt. In dieser Abbildung weist das Wörterbuch „customDimensions“ die Schlüssel-Wert-Paare aus dem vorherigen Codebeispiel auf.
Weitere hilfreiche Abfragen
Einige der nachstehenden Abfragen verwenden „customDimensions.Level“. Diese Schweregrade entsprechen der Ebene, mit der das Python-Protokoll ursprünglich gesendet wurde. Weitere Abfrageinformationen finden Sie unter Protokollabfragen in Azure Monitor.
Anwendungsfall | Abfrage |
---|---|
Protokollergebnisse für eine bestimmte benutzerdefinierte Dimension, z. B. „parent_run_id“ | traces | |
Protokollergebnisse für alle Trainingsausführungen in den letzten 7 Tagen | traces | |
Protokollergebnisse mit severityLevel-Fehler in den letzten 7 Tagen | traces | |
Anzahl der Protokollergebnisse mit severityLevel-Fehler in den letzten 7 Tagen | traces | |
Nächste Schritte
Nachdem Sie in Ihrer Application Insights-Instanz Protokolle verwendet haben, können Sie sie zum Festlegen von Azure Monitor-Warnungen basierend auf den Abfrageergebnissen verwenden.
Sie können Ergebnisse von Abfragen für mehr Einsicht auch einemAzure-Dashboard hinzufügen.
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für