Zbieranie plików dziennika potoku uczenia maszynowego w usłudze Application Insights na potrzeby alertów i debugowania
DOTYCZY:Zestaw SDK języka Python w wersji 1
Biblioteka OpenCensus języka Python może służyć do kierowania dzienników do usługi Application Insights ze skryptów. Agregowanie dzienników z przebiegów potoku w jednym miejscu umożliwia tworzenie zapytań i diagnozowanie problemów. Korzystanie z usługi Application Insights umożliwia śledzenie dzienników w czasie i porównywanie dzienników potoków między przebiegami.
Posiadanie dzienników w jednym miejscu zapewni historię wyjątków i komunikatów o błędach. Ponieważ usługa Application Insights integruje się z alertami platformy Azure, można również tworzyć alerty na podstawie zapytań usługi Application Insights.
Wymagania wstępne
- Wykonaj kroki tworzenia obszaru roboczego usługi Azure Machine Learning i tworzenia pierwszego potoku
- Skonfiguruj środowisko deweloperskie , aby zainstalować zestaw AZURE Machine Learning SDK.
- Zainstaluj lokalnie pakiet eksportera Usługi Azure Monitor OpenCensus :
pip install opencensus-ext-azure
- Tworzenie wystąpienia usługi Application Insights (ten dokument zawiera również informacje dotyczące pobierania parametrów połączenia dla zasobu)
Getting Started
Ta sekcja jest wprowadzeniem specyficznym dla używania biblioteki OpenCensus z potoku usługi Azure Machine Learning. Aby zapoznać się ze szczegółowym samouczkiem, zobacz OpenCensus Azure Monitor Exporters (Eksporterzy usługi Azure Monitor w usłudze OpenCensus)
Dodaj skrypt PythonScriptStep do potoku usługi Azure Machine Learning. Skonfiguruj funkcję RunConfiguration przy użyciu zależności od polecenia opencensus-ext-azure. Skonfiguruj zmienną APPLICATIONINSIGHTS_CONNECTION_STRING
środowiskową.
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")
Utwórz plik o nazwie sample_step.py
. Zaimportuj klasę AzureLogHandler, aby kierować dzienniki do usługi Application Insights. Należy również zaimportować bibliotekę rejestrowania języka Python.
from opencensus.ext.azure.log_exporter import AzureLogHandler
import logging
Następnie dodaj program AzureLogHandler do rejestratora języka Python.
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")
Rejestrowanie przy użyciu wymiarów niestandardowych
Domyślnie dzienniki przekazywane do usługi Application Insights nie będą miały wystarczającego kontekstu, aby śledzić przebieg lub eksperyment. Aby dzienniki można było wykonać w celu diagnozowania problemów, potrzebne są więcej pól.
Aby dodać te pola, można dodać wymiary niestandardowe w celu zapewnienia kontekstu do komunikatu dziennika. Jednym z przykładów jest to, że ktoś chce wyświetlić dzienniki w wielu krokach w tym samym przebiegu potoku.
Wymiary niestandardowe tworzą słownik par klucz-wartość (przechowywany jako ciąg, ciąg). Słownik jest następnie wysyłany do usługi Application Insights i wyświetlany jako kolumna w wynikach zapytania. Jego poszczególne wymiary mogą być używane jako parametry zapytania.
Przydatny kontekst do uwzględnienia
Pole | Rozumowanie/przykład |
---|---|
parent_run_id | Może wysyłać zapytania do dzienników dla tych z tymi samymi parent_run_id, aby wyświetlić dzienniki w czasie dla wszystkich kroków, zamiast poznać poszczególne kroki |
step_id | Może wysyłać zapytania do dzienników dla tych z tymi samymi step_id, aby zobaczyć, gdzie wystąpił problem z wąskim zakresem tylko do pojedynczego kroku |
step_name | Może wysyłać zapytania do dzienników, aby zobaczyć wydajność kroku w czasie. Pomaga również znaleźć step_id dla ostatnich przebiegów bez nurkowania w interfejsie użytkownika portalu |
experiment_name | Może wykonywać zapytania w dziennikach, aby zobaczyć wydajność eksperymentu w czasie. Pomaga również znaleźć parent_run_id lub step_id dla ostatnich przebiegów bez nurkowania w interfejsie użytkownika portalu |
run_url | Może podać link bezpośrednio do przebiegu do badania. |
Inne przydatne pola
Te pola mogą wymagać dodatkowej instrumentacji kodu i nie są dostarczane przez kontekst przebiegu.
Pole | Rozumowanie/przykład |
---|---|
build_url/build_version | Jeśli do wdrożenia używasz ciągłej integracji/ciągłego wdrażania, to pole może skorelować dzienniki z wersją kodu, która dostarczyła logikę kroku i potoku. Ten link może dodatkowo pomóc zdiagnozować problemy lub zidentyfikować modele o określonych cechach (wartości dziennika/metryki) |
run_type | Może rozróżniać różne typy modeli lub trenować w porównaniu z przebiegami oceniania |
Tworzenie słownika wymiarów niestandardowych
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})
Zagadnienia dotyczące rejestrowania w języku Python openCensus
Program AzureLogHandler openCensus służy do kierowania dzienników języka Python do usługi Application Insights. W związku z tym należy wziąć pod uwagę niuanse rejestrowania języka Python. Po utworzeniu rejestratora ma domyślny poziom dziennika i wyświetli dzienniki większe lub równe tym poziomom. Dobrym rozwiązaniem do korzystania z funkcji rejestrowania języka Python jest książka kucharska rejestrowania.
Zmienna środowiskowa jest wymagana APPLICATIONINSIGHTS_CONNECTION_STRING
dla biblioteki OpenCensus. Zalecamy ustawienie tej zmiennej środowiskowej zamiast przekazywania jej jako parametru potoku, aby uniknąć przekazywania parametrów połączenia w postaci zwykłego tekstu.
Wykonywanie zapytań dotyczących dzienników w usłudze Application Insights
Dzienniki kierowane do usługi Application Insights będą wyświetlane w obszarze "ślady" lub "wyjątki". Pamiętaj, aby dostosować przedział czasu, aby uwzględnić przebieg potoku.
Wynik w usłudze Application Insights spowoduje wyświetlenie komunikatu dziennika i poziomu, ścieżki pliku i numeru wiersza kodu. Zostaną również wyświetlone wszystkie uwzględnione wymiary niestandardowe. Na tym obrazie słownik customDimensions przedstawia pary klucz/wartość z poprzedniego przykładu kodu.
Inne przydatne zapytania
Niektóre z poniższych zapytań używają polecenia "customDimensions.Level". Te poziomy ważności odpowiadają poziomowi, z którego pierwotnie został wysłany dziennik języka Python. Aby uzyskać więcej informacji na temat zapytań, zobacz Zapytania dzienników usługi Azure Monitor.
Przypadek użycia | Zapytanie |
---|---|
Wyniki dziennika dla określonego wymiaru niestandardowego, na przykład "parent_run_id" | ślady | |
Wyniki rejestrowania dla wszystkich przebiegów trenowania w ciągu ostatnich siedmiu dni | ślady | |
Wyniki dziennika z ważnościąLevel Błąd z ostatnich siedmiu dni | ślady | |
Liczba wyników dziennika o ważnościLevel Błąd w ciągu ostatnich siedmiu dni | ślady | |
Następne kroki
Po zalogowaniu się w wystąpieniu usługi Application Insights można je użyć do ustawiania alertów usługi Azure Monitor na podstawie wyników zapytania.
Możesz również dodawać wyniki z zapytań do pulpitu nawigacyjnego platformy Azure , aby uzyskać więcej szczegółowych informacji.