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

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 zapytania usługi Application Insights

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 |
where customDimensions.parent_run_id == '931024c2-3720-11ea-b247-c49deda841c1
Wyniki rejestrowania dla wszystkich przebiegów trenowania w ciągu ostatnich siedmiu dni
ślady |
gdzie znacznik > czasu temu (7d)
and customDimensions.run_type == 'training'
Wyniki dziennika z ważnościąLevel Błąd z ostatnich siedmiu dni
ślady |
gdzie znacznik > czasu temu (7d)
i customDimensions.Level == "ERROR"
Liczba wyników dziennika o ważnościLevel Błąd w ciągu ostatnich siedmiu dni
ślady |
gdzie znacznik > czasu temu (7d)
and customDimensions.Level == 'ERROR' |
summarize count()

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.