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.

    Aktifkan diagnostik sistem

  • Untuk mengonfigurasi log verbose untuk semua eksekusi, Anda dapat menambahkan variabel bernama system.debug dan mengatur nilainya ke true.

  • Untuk mengonfigurasi log verbose untuk satu eksekusi, Anda dapat memulai build baru dengan memilih build Antrean, dan mengatur nilai untuk variabel ke truesystem.debug .

  • Untuk mengonfigurasi log verbose untuk semua eksekusi, edit build, navigasikan ke tab Variabel , dan tambahkan variabel bernama system.debug, atur nilainya ke true, dan pilih Izinkan pada Waktu Antrean.

  • Untuk mengonfigurasi log verbose untuk alur YAML, tambahkan system.debug variabel di bagian variables :

    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.

Log tugas

Untuk mengunduh semua log, navigasikan ke hasil build untuk eksekusi, pilih ..., dan pilih Unduh log.

Log Pengunduhan

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

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

  1. Mulai Fiddler.

  2. Kami sarankan Anda hanya mendengarkan lalu lintas agen. Lalu Lintas Pengambilan File > nonaktif (F12)

  3. Aktifkan mendekripsi lalu lintas HTTPS. Tab HTTPS Opsi > Fiddler Alat>. Dekripsi lalu lintas HTTPS

  4. Beri tahu agen untuk menggunakan proksi:

    set VSTS_HTTP_PROXY=http://127.0.0.1:8888
    
  5. Jalankan agen secara interaktif. Jika Anda menjalankan sebagai layanan, Anda dapat mengatur sebagai variabel lingkungan di panel kontrol untuk akun tempat layanan berjalan.

  6. Mulai ulang agen:

Menggunakan pelacakan HTTP penuh - macOS dan Linux

Gunakan Charles Proxy (mirip dengan Fiddler di Windows) untuk menangkap jejak HTTP agen.

  1. Mulai Charles Proxy.

  2. Charles: Proksi Proksi > Pengaturan > Tab SSL. Aktifkan. Tambahkan URL.

  3. Charles: Proksi Mac Proksi > OSX. Sebaiknya nonaktifkan untuk hanya melihat lalu lintas agen.

    export VSTS_HTTP_PROXY=http://127.0.0.1:8888
    
  4. Jalankan agen secara interaktif. Jika berjalan sebagai layanan, Anda dapat mengatur dalam file .env. Lihat nix service

  5. 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.

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 givet time for required for 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