Meninjau log untuk mendiagnosis masalah alur
Layanan Azure DevOps | Azure DevOps Server 2022 - Azure DevOps Server 2019
Log alur menyediakan alat yang kuat untuk menentukan penyebab kegagalan alur, dan log verbose dapat dikonfigurasi untuk memberikan informasi diagnostik yang lebih banyak.
Titik awal yang khas adalah meninjau log di build atau rilis Anda yang telah selesai. Anda dapat melihat log dengan membuka ringkasan aksekusi alur dan memilih pekerjaan dan tugas. Periksa log tugas jika ada tugas tertentu yang gagal. Konfigurasikan log verbose untuk menyertakan informasi diagnostik lainnya.
Mengonfigurasi log verbose
Untuk membantu pemecahan masalah, Anda dapat mengonfigurasi log agar lebih verbose.
Untuk mengonfigurasi log verbose untuk satu eksekusi, Anda dapat memulai build baru dengan memilih Jalankan alur dan memilih Aktifkan diagnostik sistem, Jalankan.
Untuk mengonfigurasi log verbose untuk semua eksekusi, Anda dapat menambahkan variabel bernama
system.debug
dan mengatur nilainya ketrue
.
Untuk mengonfigurasi log verbose untuk satu eksekusi, Anda dapat memulai build baru dengan memilih build Antrean, dan mengatur nilai untuk variabel ke
true
system.debug
.Untuk mengonfigurasi log verbose untuk semua eksekusi, edit build, navigasikan ke tab Variabel , dan tambahkan variabel bernama
system.debug
, atur nilainya ketrue
, dan pilih Izinkan pada Waktu Antrean.Untuk mengonfigurasi log verbose untuk alur YAML, tambahkan
system.debug
variabel di bagianvariables
:variables: system.debug: true
Log alur Azure sekarang dapat menangkap metrik pemanfaatan sumber daya seperti memori, penggunaan CPU, dan ruang disk yang tersedia. Log juga mencakup sumber daya yang digunakan oleh agen alur dan proses anak termasuk tugas yang dijalankan dalam pekerjaan. Jika Anda menduga pekerjaan alur Anda mungkin mengalami batasan sumber daya, aktifkan log verbose agar informasi pemanfaatan sumber daya disuntikkan ke dalam log alur. Metrik pemanfaatan sumber daya tersedia di agen apa pun, independen dari model hosting.
Untuk melihat metrik pemanfaatan sumber daya yang diambil, cari log untuk Agent environment resources
entri untuk setiap langkah.
2024-02-28T17:41:15.1315148Z ##[debug]Agent environment resources - Disk: D:\ Available 12342.00 MB out of 14333.00 MB, Memory: Used 1907.00 MB out of 7167.00 MB, CPU: Usage 17.23%
Melihat dan mengunduh log
Untuk melihat log individual untuk setiap langkah, navigasikan ke hasil build untuk eksekusi, dan pilih pekerjaan dan langkah.
Untuk mengunduh semua log, navigasikan ke hasil build untuk eksekusi, pilih ..., dan pilih Unduh log.
Untuk mengunduh semua log, navigasikan ke hasil build untuk eksekusi, pilih Unduh semua log sebagai zip.
Selain log diagnostik alur, jenis log khusus berikut tersedia, dan mungkin berisi informasi untuk membantu Anda memecahkan masalah.
Log diagnostik pekerja
Anda bisa mendapatkan log diagnostik dari build yang telah selesai yang dihasilkan oleh proses pekerja pada agen build. Cari worker
file log yang memiliki stempel tanggal dan waktu build Anda yang telah selesai. Contohnya,worker_20160623-192022-utc_6172.log
.
Log diagnostik agen
Log diagnostik agen memberikan catatan tentang bagaimana agen dikonfigurasi dan apa yang terjadi saat dijalankan. Cari agent
file log. Contohnya,agent_20160624-144630-utc.log
. Ada dua jenis file log agen:
File log yang dihasilkan saat Anda menjalankan
config.cmd
. Log ini:Termasuk baris ini di dekat bagian atas:
Adding Command: configure
Memperlihatkan pilihan konfigurasi yang dibuat.
File log yang dihasilkan saat Anda menjalankan
run.cmd
. Log ini:Tidak dapat dibuka sampai proses dihentikan.
Upaya untuk menyambungkan ke organisasi Azure DevOps atau Team Foundation Server Anda.
Menunjukkan kapan setiap pekerjaan dijalankan, dan bagaimana pekerjaan selesai
Kedua log menunjukkan bagaimana kemampuan agen terdeteksi dan diatur.
Diagnostik jaringan untuk agen yang dihost sendiri
Atur nilai Agent.Diagnostic
ke true
untuk mengumpulkan log tambahan yang dapat digunakan untuk memecahkan masalah jaringan untuk agen yang dihost sendiri.
File | Informasi | Berlaku untuk |
---|---|---|
cloudinit.* |
Cloud-init berhasil diselesaikan (jika digunakan) | Linux |
BrokenPackages.* |
Paket dalam keadaan konsisten | Linux |
Agent.* |
Variabel lingkungan | Linux, Windows |
waagentConf.txt |
Agen Azure VM (waagent.conf) | Azure: Linux, Windows |
environment.txt / agent.* |
Daftar keanggotaan grup akun | Windows |
Catatan
Agent.Diagnostic
diatur ke true
secara otomatis jika System.Debug
diatur ke true
.
Variabel Agent.Diagnostic
dan log yang dijelaskan di bagian ini tersedia dengan Agen v2.200.0 dan yang lebih tinggi.
Untuk informasi selengkapnya, lihat pemecahan masalah agen di repositori agen sumber terbuka agen Azure pipelines microsoft/azure-pipelines .
Log lainnya
Di dalam log diagnostik, Anda akan menemukan environment.txt
dan capabilities.txt
.
File environment.txt
memiliki berbagai informasi tentang lingkungan tempat build Anda dijalankan. Ini termasuk informasi seperti tugas apa yang dijalankan, apakah firewall diaktifkan atau tidak, info versi PowerShell, dan beberapa item lainnya. Kami terus menambahkan ke data ini untuk membuatnya lebih berguna.
File ini capabilities.txt
menyediakan cara yang bersih untuk melihat semua kemampuan yang diinstal pada komputer build yang menjalankan build Anda.
Log pelacakan HTTP
- Menggunakan pelacakan HTTP bawaan
- Menggunakan pelacakan HTTP penuh - Windows
- Menggunakan pelacakan HTTP penuh - macOS dan Linux
Penting
Jejak HTTP dan file pelacakan dapat berisi kata sandi dan rahasia lainnya. Jangan mempostingnya di situs publik.
Menggunakan pelacakan HTTP bawaan
Jika agen Anda versi 2.114.0 atau yang lebih baru, Anda dapat melacak header lalu lintas HTTP dan menulisnya ke dalam log diagnostik. Atur VSTS_AGENT_HTTPTRACE
variabel lingkungan sebelum Anda meluncurkan agent.listener.
Windows:
set VSTS_AGENT_HTTPTRACE=true
macOS/Linux:
export VSTS_AGENT_HTTPTRACE=true
Menggunakan pelacakan HTTP penuh - Windows
Mulai Fiddler.
Kami sarankan Anda hanya mendengarkan lalu lintas agen. Lalu Lintas Pengambilan File > nonaktif (F12)
Aktifkan mendekripsi lalu lintas HTTPS. Tab HTTPS Opsi > Fiddler Alat>. Dekripsi lalu lintas HTTPS
Beri tahu agen untuk menggunakan proksi:
set VSTS_HTTP_PROXY=http://127.0.0.1:8888
Jalankan agen secara interaktif. Jika Anda menjalankan sebagai layanan, Anda dapat mengatur sebagai variabel lingkungan di panel kontrol untuk akun tempat layanan berjalan.
Mulai ulang agen:
Menggunakan pelacakan HTTP penuh - macOS dan Linux
Gunakan Charles Proxy (mirip dengan Fiddler di Windows) untuk menangkap jejak HTTP agen.
Mulai Charles Proxy.
Charles: Proksi Proksi > Pengaturan > Tab SSL. Aktifkan. Tambahkan URL.
Charles: Proksi Mac Proksi > OSX. Sebaiknya nonaktifkan untuk hanya melihat lalu lintas agen.
export VSTS_HTTP_PROXY=http://127.0.0.1:8888
Jalankan agen secara interaktif. Jika berjalan sebagai layanan, Anda dapat mengatur dalam file .env. Lihat nix service
Mulai ulang agen:
Mengambil log kustom
Selain log bawaan, Anda dapat menggunakan tugas dan skrip untuk mengambil log kustom di alur Anda. Contoh berikut menunjukkan cara mengambil pemanfaatan sumber daya, jejak jaringan, cadangan memori, dan perfview jejak. Jika Anda bekerja dengan dukungan pelanggan, Anda mungkin diminta untuk mengambil log seperti ini.
- Menangkap detail pemanfaatan sumber daya
- Mengambil cadangan memori proses dotnet menggunakan ProcDump
- Mengambil jejak ETW untuk agen yang dihosting
- Capture perfview traces for Visual Studio build
Mengambil log kustom
Setelah menangkap log kustom di alur Anda, Anda harus mengunggahnya sehingga dapat diambil untuk ditinjau. Anda dapat mengunggah log kustom sebagai bagian dari log alur standar, atau Anda dapat mengunggahnya sebagai artefak. Contoh di bagian berikut menunjukkan kedua cara mengunggah log kustom.
Mengunggah log sebagai bagian dari log standar
Untuk mengunggah log kustom sebagai bagian dari log alur standar, gunakan ##vso[task.uploadfile]
untuk mengunggah file yang diinginkan. Untuk menggunakan perintah ini, tentukan sebagai bagian dari perintah skrip seperti yang ditunjukkan dalam contoh berikut. File dapat diunduh dan dilihat sebagai bagian dari log alur standar. Metode ##vso[task.uploadfile]
ini baik untuk mengunggah satu file log. Jika Anda memiliki lebih dari satu file log, Anda harus menggunakan baris terpisah ##vso[task.uploadfile]
untuk setiap file.
- pwsh: Write-Host "##vso[task.uploadfile]$(Agent.TempDirectory)\resource-usage.txt"
Untuk informasi selengkapnya, lihat Perintah pengelogan dan UploadFile: Mengunggah file yang dapat diunduh dengan log tugas.
Mengunggah log sebagai artefak alur
Untuk mengunggah log kustom sebagai artefak alur, gunakan tugas PublishPipelineArtifact@1 . PublishPipelineArtifact@1
dapat mengunggah satu file atau file di jalur direktori, dan berguna jika Anda memiliki banyak file log kustom untuk diunggah.
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Pipeline.Workspace)/s/trace'
artifact: 'file_result.pcap'
publishLocation: 'pipeline'
Untuk informasi selengkapnya, lihat Menerbitkan Artefak Alur.
Menangkap detail pemanfaatan sumber daya
Saat menggunakan Azure DevOps Services, Anda dapat melihat pemanfaatan sumber daya di log, termasuk penggunaan disk, penggunaan memori, dan pemanfaatan CPU, dengan mengaktifkan log verbose. Ketika alur selesai, cari log untuk Agent environment resources
entri untuk setiap langkah.
2024-02-28T17:41:15.1315148Z ##[debug]Agent environment resources - Disk: D:\ Available 12342.00 MB out of 14333.00 MB, Memory: Used 1907.00 MB out of 7167.00 MB, CPU: Usage 17.23%
Jika Anda menggunakan Azure DevOps Server, atau jika Anda ingin mengumpulkan metrik tambahan, Anda dapat menggunakan PowerShell untuk mengambil pemanfaatan sumber daya dan mengunggahnya ke log alur. Saat eksekusi alur selesai, Anda dapat mengunduh log alur dan melihat data yang diambil. Jika langkah tersebut Upload resource usage from pipeline run
adalah langkah keenam dalam pekerjaan, nama file dalam log akan 6_resource-usage.txt.
# Place this task in your pipeline to log the current resource utilization
# of the pipeline. This task appends the specified resource usage to a logfile
# which is uploaded at the end of the current pipeline job.
- pwsh: |
$logFile = '$(Agent.TempDirectory)\resource-usage.txt'
if (!(Test-Path $logFile))
{
New-Item $logFile
}
Get-Date | Out-File -FilePath $logFile -Append
Get-Volume | Out-File -FilePath $logFile -Append
Get-Counter '\Memory\Available MBytes' | Out-File -FilePath $logFile -Append
Get-Counter '\Processor(_Total)\% Processor Time' | Out-File -FilePath $logFile -Append
sleep 10
displayName: 'Check resource utilization'
# Other tasks here, and you can repeat the "Check resource utilization"
# step if desired, and the results will be appended to the resource-usage.txt file
- pwsh: Write-Host "##vso[task.uploadfile]$(Agent.TempDirectory)\resource-usage.txt"
displayName: 'Upload resource usage from pipeline run'
condition: always()
Mengambil cadangan memori proses dotnet menggunakan ProcDump
Jika Anda memiliki eksekusi pengujian yang crash, dukungan pelanggan mungkin meminta Anda untuk mengambil cadangan memori proses dotnet setelah eksekusi pengujian yang gagal. Tambahkan tugas berikut setelah tugas Uji Visual Studio Anda dengan condition: always()
. Ketika eksekusi alur selesai, Anda dapat mengunduh log alur, termasuk cadangan memori.
# Run this task after your test execution crashes
# with a condition of alway() so that it always runs
- pwsh: |
Invoke-WebRequest https://download.sysinternals.com/files/Procdump.zip -OutFile $(Agent.TempDirectory)\Procdump.zip
mkdir $(Agent.TempDirectory)\Procdump
unzip $(Agent.TempDirectory)\Procdump.zip -d Procdump
cd $(Agent.TempDirectory)\Procdump
Get-Process dotnet | % { $(Agent.TempDirectory)\procdump.exe -accepteula -ma $_.Id dotnet-$($_.Id).dmp }
Compress-Archive *.dmp -DestinationPath $(Agent.TempDirectory)\dump_files.zip
Write-Host "##vso[task.uploadfile]$(Agent.TempDirectory)\dump_files.zip"
condition: always()
displayName: 'Create and upload a dotnet process memory dump'
Mengambil jejak ETW untuk agen yang dihosting
Jika Anda memecahkan masalah jaringan dengan agen yang dihosting Microsoft, dukungan pelanggan dapat meminta Anda untuk mengumpulkan jejak ETW. Ketika eksekusi alur selesai, Anda dapat mengunduh log alur, termasuk jejak ETW.
# Add this task to start the ETW trace
- script: netsh trace start scenario=InternetClient capture=yes tracefile=$(Agent.TempDirectory)\networktrace.etl
displayName: 'Start ETW trace'
# Other tasks here
# Add these 2 tasks to stop the trace and upload
# the trace to the pipeline logs
- script: netsh trace stop
displayName: 'Stop ETW trace'
- pwsh: |
Write-Host "##vso[task.uploadfile]$(Agent.TempDirectory)\networktrace.etl"
Write-Host "##vso[task.uploadfile]$(Agent.TempDirectory)\networktrace.cab"
displayName: 'Upload ETW trace logs'
Mengambil perfview jejak untuk build Visual Studio
Jika dukungan pelanggan meminta Anda untuk membuat perfview jejak build Visual Studio Anda, tambahkan tugas berikut ke alur Anda sebelum dan sesudah langkah build Visual Studio Anda.
Setelah menjalankan alur, Anda dapat mengunduh artefak PerfViewLog dari detail eksekusi alur dan mengirim dukungan pelanggan file tersebut.
steps:
- task: PowerShell@2 # download the perfview exe
inputs:
targetType: 'inline'
script: |
invoke-webrequest https://github.com/microsoft/perfview/releases/download/v3.1.7/PerfView.exe -OutFile PerfView.exe
- task: PowerShell@2
inputs:
targetType: 'inline' # start perfview to capture the traces before build build task
script: '$(System.DefaultWorkingDirectory)\PerfView.exe "/DataFile:PerfViewData.etl" /accepteula /BufferSizeMB:512 /StackCompression /CircularMB:5000 /Providers:"Microsoft-Windows-IIS" /logfile:"PerfView.log" /zip:true /norundown start'
- task: VSBuild@1
displayName: '$(solution)' # build of the solution, note the msbuildargs might be different for your scenario
inputs:
solution: '$(solution)'
clean: true
msbuildArgs: '/p:DeployOnBuild=true /p:PrecompileBeforePublish=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(Build.ArtifactStagingDirectory)" /p:TransformWebConfigEnabled=false /p:AutoParameterizationWebConfigConnectionStrings=false /p:MarkWebConfigAssistFilesAsExclude=false /p:ProfileTransformWebConfigEnabled=false /p:IsTransformWebConfigDisabled=true'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
- task: PowerShell@2 # stop the perfview tracing
inputs:
targetType: 'inline'
script: |
$(System.DefaultWorkingDirectory)\perfview.exe /accepteula /logfile:"PerfView.log" stop
- task: PowerShell@2 # abort perfview, it seems required.
inputs:
targetType: 'inline'
script: '$(System.DefaultWorkingDirectory)\perfview.exe /accepteula /logfile:"PerfView.log" abort'
- task: PowerShell@2 # add a sleep of 5 mins, to give it time for required traces to be complete
inputs:
targetType: 'inline'
script: 'Start-Sleep -Seconds 300'
- task: PublishPipelineArtifact@1 # upload the traces
displayName: 'Publish Pipeline Artifact'
inputs:
artifactName: webapp