Kumpulkan file log alur pembelajaran mesin di Application Insights untuk pemberitahuan dan penelusuran kesalahan

BERLAKU UNTUK:SDK Python azureml v1

Pustaka Python OpenCensus dapat digunakan untuk merutekan log ke Application Insights dari skrip Anda. Menggabungkan log dari alur yang berjalan di satu tempat memungkinkan Anda membangun kueri dan mendiagnosis masalah. Menggunakan Application Insights akan memungkinkan Anda melacak log dari waktu ke waktu dan membandingkan log alur di seluruh proses.

Memiliki log Anda di satu tempat akan memberikan riwayat pengecualian dan pesan kesalahan. Karena Application Insights terintegrasi dengan Pemberitahuan Azure, Anda juga dapat membuat pemberitahuan berdasarkan kueri Application Insights.

Prasyarat

Memulai

Bagian ini adalah pengantar khusus untuk menggunakan OpenCensus dari alur Azure Machine Learning. Untuk tutorial mendetail, lihat OpenCensus Azure Monitor Exporters

Tambahkan PythonScriptStep ke Azure Pembelajaran Mesin Pipeline Anda. Konfigurasikan RunConfiguration Anda dengan dependensi pada opencensus-ext-Azure. Konfigurasikan APPLICATIONINSIGHTS_CONNECTION_STRING variabel lingkungan.

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")

Buat berkas bernama sample_step.py. Impor kelas AzureLogHandler untuk merutekan log ke Application Insights. Anda juga perlu mengimpor pustaka Python Pengelogan.

from opencensus.ext.azure.log_exporter import AzureLogHandler
import logging

Selanjutnya, tambahkan AzureLogHandler ke pencatatan 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")

Masuk dengan Dimensi Kustom

Secara default, log yang diteruskan ke Application Insights tidak akan memiliki konteks yang cukup untuk melacak kembali ke proses atau eksperimen. Agar log dapat ditindaklanjuti untuk mendiagnosis masalah, diperlukan bidang tambahan.

Untuk menambahkan bidang ini, Dimensi Kustom dapat ditambahkan untuk memberikan konteks ke pesan log. Salah satu contohnya adalah ketika seseorang ingin melihat log di beberapa langkah dalam jalur alur yang sama.

Dimensi Kustom membuat Andas pasangan nilai kunci (disimpan sebagai string, string). Andas kemudian dikirim ke Application Insights dan ditampilkan sebagai kolom dalam hasil kueri. Dimensi individualnya dapat digunakan sebagai parameter kueri.

Konteks Bermanfaat untuk disertakan

Bidang Reasoning/Example
parent_run_id Dapat meminta log untuk yang memiliki parent_run_id yang sama untuk melihat log dari waktu ke waktu untuk semua langkah, daripada harus menyelami setiap langkah individu
step_id Dapat meminta log untuk yang memiliki step_id yang sama untuk melihat di mana masalah terjadi dengan cakupan yang sempit hanya untuk langkah individual
step_name Dapat meminta log untuk melihat performa langkah dari waktu ke waktu. Juga membantu menemukan step_id untuk proses terbaru tanpa masuk ke UI portal
experiment_name Dapat melakukan kueri di seluruh log untuk melihat performa eksperimen dari waktu ke waktu. Juga membantu menemukan parent_run_id atau step_id untuk proses terbaru tanpa masuk ke UI portal
run_url Dapat memberikan link langsung kembali ke run untuk penyelidikan.

Bidang bermanfaat lainnya

Bidang-bidang ini mungkin memerlukan instrumentasi kode tambahan, dan tidak disediakan oleh konteks eksekusi.

Bidang Reasoning/Example
build_url/build_version Jika menggunakan CI/CD untuk menerapkan, bidang ini dapat menghubungkan log ke versi kode yang menyediakan logika langkah dan alur. Tautan ini selanjutnya dapat membantu mendiagnosis masalah, atau mengidentifikasi model dengan sifat tertentu (nilai log/metrik)
run_type Dapat membedakan antara jenis model yang berbeda, atau pelatihan vs. menjalankan eksekusi

Membuat Andas Dimensi Kustom

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})

Pertimbangan pengelogan OpenCensus Python

OpenCensus AzureLogHandler digunakan untuk merutekan log Python ke Application Insights. Akibatnya, nuansa pengelogan Python harus dipertimbangkan. Ketika pencatat dibuat, ia memiliki level log default dan akan menampilkan log yang lebih besar dari atau sama dengan level tersebut. Referensi yang baik untuk menggunakan fitur pengelogan Python adalah Buku Masak Pengelogan.

Variabel lingkungan APPLICATIONINSIGHTS_CONNECTION_STRING diperlukan untuk pustaka OpenCensus. Kami merekomendasikan pengaturan variabel lingkungan ini daripada meneruskannya sebagai parameter alur untuk menghindari melewati string sambungan teks biasa.

Membuat kueri log di Application Insights

Log yang dirutekan ke Application Insights akan muncul di bawah 'jejak' atau 'pengecualian'. Pastikan untuk menyesuaikan jendela waktu Anda untuk memasukkan jalur alur Anda.

Application Insights Query result

Hasil di Application Insights akan menampilkan pesan log dan level, jalur file, dan nomor baris kode. Hal ini juga akan menampilkan dimensi khusus yang disertakan. Dalam gambar ini, Andas customDimensions menampilkan pasangan kunci/nilai dari contoh kode sebelumnya.

Kueri bermanfaat lainnya

Beberapa kueri di bawah ini menggunakan 'customDimensions.Level'. Tingkat keparahan ini sesuai dengan tingkat log Python yang awalnya dikirim. Untuk informasi selengkapnya, lihat Kueri Log Azure Monitor.

Gunakan huruf besar Kueri
Hasil log untuk dimensi khusus tertentu, misalnya 'parent_run_id'
jejak | 
where customDimensions.parent_run_id == '931024c2-3720-11ea-b247-c49deda841c1
Hasil log untuk semua eksekusi pelatihan selama 7 hari terakhir
jejak | 
where timestamp > ago(7d)
and customDimensions.run_type == 'training'
Hasil log dengan Kesalahan severityLevel dari 7 hari terakhir
jejak | 
where timestamp > ago(7d)
and customDimensions.Level == 'ERROR'
Jumlah hasil log dengan Error severityLevel selama 7 hari terakhir
jejak | 
where timestamp > ago(7d)
dan customDimensions.Level == 'ERROR' |
summarize count()

Langkah berikutnya

Setelah Anda memiliki log di instans Application Insights, log tersebut dapat digunakan untuk menyetel pemberitahuan Azure Monitor berdasarkan hasil kueri.

Anda juga dapat menambahkan hasil dari kueri ke Dasbor Azure untuk insight lebih lanjut.