İşlem hattı sorunlarını tanılamak için günlükleri gözden geçirme

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

İşlem hattı günlükleri, işlem hattı hatalarının nedenini belirlemek için güçlü bir araç sağlar ve ayrıntılı günlükler daha fazla tanılama bilgisi sağlayacak şekilde yapılandırılabilir.

Tipik bir başlangıç noktası, tamamlanmış derleme veya yayınınızın günlüklerini gözden geçirmektir. İşlem hattı çalıştırma özetine gidip işi ve görevi seçerek günlükleri görüntüleyebilirsiniz. Belirli bir görev başarısız olursa, söz konusu görevin günlüklerini denetleyin. Ayrıntılı günlükleri daha fazla tanılama bilgisi içerecek şekilde yapılandırın.

Ayrıntılı günlükleri yapılandırma

Sorun giderme aşamasını kolaylaştırmak için günlüklerinizi daha ayrıntılı olacak şekilde yapılandırabilirsiniz.

  • Tek bir çalıştırma için ayrıntılı günlükleri yapılandırmak için, İşlem hattını çalıştır'ı seçip Sistem tanılamasını etkinleştir, Çalıştır'ı seçerek yeni bir derleme başlatabilirsiniz.

    Sistem tanılamasını etkinleştirme

  • Tüm çalıştırmalar için ayrıntılı günlükleri yapılandırmak için adlı system.debug bir değişken ekleyebilir ve değerini olarak trueayarlayabilirsiniz.

  • Tek bir çalıştırma için ayrıntılı günlükleri yapılandırmak için, Kuyruk derlemesi'ni seçerek ve değişkenin system.debug truedeğerini olarak ayarlayarak yeni bir derleme başlatabilirsiniz.

  • Tüm çalıştırmalar için ayrıntılı günlükleri yapılandırmak için derlemeyi düzenleyin, Değişkenler sekmesine gidin ve adlı system.debugbir değişken ekleyin, değerini olarak trueayarlayın ve Kuyruk Zamanında İzin Ver'i seçin.

  • YAML işlem hattı için ayrıntılı günlükleri yapılandırmak için değişkeni variables bölümüne ekleyinsystem.debug:

    variables:
      system.debug: true
    

Azure işlem hattı günlükleri artık bellek, CPU kullanımı ve kullanılabilir disk alanı gibi kaynak kullanım ölçümlerini yakalayabilir. Günlükler ayrıca işlem hattı aracısı tarafından kullanılan kaynakları ve bir işte çalıştırılan görevler de dahil olmak üzere alt işlemleri içerir. İşlem hattı işinizin kaynak kısıtlamalarıyla karşılaşabileceğini düşünüyorsanız, işlem hattı günlüklerine kaynak kullanımı bilgilerinin eklenmiş olması için ayrıntılı günlükleri etkinleştirin. Kaynak kullanım ölçümleri, barındırma modelinden bağımsız olarak herhangi bir aracıda kullanılabilir.

Yakalanan kaynak kullanımı ölçümlerini görüntülemek için günlüklerde her adıma Agent environment resources ilişkin girdileri arayın.

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%

Günlükleri görüntüleme ve indirme

Her adımın tek tek günlüklerini görüntülemek için çalıştırmanın derleme sonuçlarına gidin ve işi ve adımı seçin.

Görev günlüğü

Tüm günlükleri indirmek için çalıştırmanın derleme sonuçlarına gidin, ... öğesini seçin ve Günlükleri indir'i seçin.

Günlükleri indir

Tüm günlükleri indirmek için çalıştırmanın derleme sonuçlarına gidin ve Tüm günlükleri zip olarak indir'i seçin.

İşlem hattı tanılama günlüklerine ek olarak, aşağıdaki özel günlük türleri kullanılabilir ve sorun gidermenize yardımcı olacak bilgiler içerebilir.

Çalışan tanılama günlükleri

Derleme aracısı üzerinde çalışan işlemi tarafından oluşturulan tamamlanmış derlemenin tanılama günlüğünü alabilirsiniz. worker Tamamlanmış derlemenizin tarih ve saat damgasını içeren günlük dosyasını arayın. Örneğin, worker_20160623-192022-utc_6172.log.

Aracı tanılama günlükleri

Aracı tanılama günlükleri, aracının nasıl yapılandırıldığını ve çalıştırıldığında ne olduğunu gösteren bir kayıt sağlar. Günlük dosyalarını arayın agent . Örneğin, agent_20160624-144630-utc.log. İki tür aracı günlük dosyası vardır:

  • çalıştırdığınızda config.cmdoluşturulan günlük dosyası. Bu günlük:

    • Bu satırı en üste yakın bir noktada içerir: Adding Command: configure

    • Yapılan yapılandırma seçimlerini gösterir.

  • çalıştırdığınızda run.cmdoluşturulan günlük dosyası. Bu günlük:

    • İşlem sonlandırılana kadar açılamaz.

    • Azure DevOps kuruluşunuza veya Team Foundation Server'a bağlanmaya çalışır.

    • Her işin ne zaman çalıştırıldığını ve nasıl tamamlandığını gösterir

Her iki günlük de aracı özelliklerinin nasıl algılandığını ve ayarlandığını gösterir.

Şirket içinde barındırılan aracılar için ağ tanılama

Şirket içinde barındırılan aracıların ağ sorunlarını giderirken kullanılabilecek ek günlükleri toplamak için Agent.Diagnostic değerini true olarak ayarlayın.

Dosya Bilgiler Şunlara uygulanır
cloudinit.* Cloud-init başarıyla tamamlandı (kullanılıyorsa) Linux
BrokenPackages.* Paketler tutarlı durumda Linux
Agent.* Ortam değişkenleri Linux, Windows
waagentConf.txt Azure VM aracısı (waagent.conf) Azure: Linux, Windows
environment.txt / agent.* Hesap grubu üyelik listesi Windows

Not

System.Debug true değerine ayarlandığında Agent.Diagnostic otomatik olarak true değerine ayarlanır.

Bu Agent.Diagnostic bölümde açıklanan değişken ve günlükler Agent v2.200.0 ve üzeri sürümlerde kullanılabilir.

Daha fazla bilgi için bkz. microsoft/azure-pipelines-agent Azure Pipelines aracısı açık kaynak aracı deposunda aracı sorunlarını giderme.

Diğer günlükler

ve capabilities.txttanılama günlüklerinin içinde bulabilirsinizenvironment.txt.

Dosya, environment.txt derlemenizin çalıştırıldığı ortam hakkında çeşitli bilgilere sahiptir. Bu, hangi görevlerin çalıştırılır, güvenlik duvarının etkin olup olmadığı, PowerShell sürüm bilgileri ve diğer bazı öğeler gibi bilgileri içerir. Bu verileri daha kullanışlı hale getirmek için sürekli olarak ekliyoruz.

Dosya, capabilities.txt derlemenizi çalıştıran derleme makinesinde yüklü olan tüm özellikleri görmek için temiz bir yol sağlar.

HTTP izleme günlükleri

Önemli

HTTP izlemeleri ve izleme dosyaları parolalar ve diğer gizli diziler içerebilir. Bunları genel sitelere göndermeyin.

Yerleşik HTTP izlemeyi kullanma

Aracınız 2.114.0 veya daha yeni bir sürümse, HTTP trafik üst bilgilerini izleyebilir ve tanılama günlüğüne yazabilirsiniz. VSTS_AGENT_HTTPTRACE agent.listener'ı başlatmadan önce ortam değişkenini ayarlayın.

Windows:
    set VSTS_AGENT_HTTPTRACE=true

macOS/Linux:
    export VSTS_AGENT_HTTPTRACE=true

Tam HTTP izlemeyi kullanma - Windows

  1. Fiddler'ı başlatın.

  2. Yalnızca aracı trafiğini dinlemenizi öneririz. Dosya > Yakalama Trafiği Kapalı (F12)

  3. HTTPS trafiğinin şifresini çözmeyi etkinleştirin. Araçlar > Fiddler Seçenekleri > HTTPS sekmesi. HTTPS trafiğinin şifresini çözme

  4. Aracıya ara sunucuyu kullanmasını bildirin:

    set VSTS_HTTP_PROXY=http://127.0.0.1:8888
    
  5. Aracıyı etkileşimli olarak çalıştırın. Hizmet olarak çalıştırıyorsanız, hizmetin çalıştığı hesabın denetim masasında ortam değişkeni olarak ayarlayabilirsiniz.

  6. Aracıyı yeniden başlatın.

Tam HTTP izlemeyi kullanma - macOS ve Linux

Aracının HTTP izlemesini yakalamak için Charles Proxy (Windows'da Fiddler'a benzer) kullanın.

  1. Charles Proxy'i başlatın.

  2. Charles: Proxy > Proxy Ayarlar > SSL Sekmesi. Etkinleştirin. URL ekleyin.

  3. Charles: Proxy > Mac OSX Proxy. Yalnızca aracı trafiğini görmek için devre dışı bırakmanızı öneririz.

    export VSTS_HTTP_PROXY=http://127.0.0.1:8888
    
  4. Aracıyı etkileşimli olarak çalıştırın. Hizmet olarak çalışıyorsa ,env dosyasında ayarlayabilirsiniz. Bkz. nix service

  5. Aracıyı yeniden başlatın.

Özel günlükleri yakalama

Yerleşik günlüklere ek olarak, işlem hattınızdaki özel günlükleri yakalamak için görevleri ve betikleri kullanabilirsiniz. Aşağıdaki örneklerde kaynak kullanımı, ağ izlemeleri, bellek dökümleri ve perfview izlemelerin nasıl yakalanacakları gösterilmektedir. Müşteri desteğiyle çalışıyorsanız, bunlar gibi günlükleri yakalamanız istenebilir.

Özel günlükleri alma

İşlem hattınızda özel bir günlük yakaladıktan sonra, gözden geçirilebilmeleri için bu günlüğü karşıya yüklemeniz gerekir. Özel günlüğü standart işlem hattı günlüklerinin bir parçası olarak veya yapıt olarak karşıya yükleyebilirsiniz. Aşağıdaki bölümlerdeki örneklerde özel günlükleri karşıya yüklemenin her iki yolu da gösterilmektedir.

Standart günlüklerin bir parçası olarak bir günlüğü karşıya yükleme

Standart işlem hattı günlüklerinin bir parçası olarak özel günlüğü karşıya yüklemek için komutunu kullanarak ##vso[task.uploadfile] istenen dosyayı karşıya yükleyin. Bu komutu kullanmak için, aşağıdaki örnekte gösterildiği gibi bir betik komutunun parçası olarak belirtin. Dosya , standart işlem hattı günlüklerinin bir parçası olarak indirilebilir ve görüntülenebilir . ##vso[task.uploadfile] yöntemi tek bir günlük dosyasını karşıya yüklemek için iyidir. Birden fazla günlük dosyanız varsa, her dosya için ayrı ##vso[task.uploadfile] bir satır kullanmanız gerekir.

- pwsh: Write-Host "##vso[task.uploadfile]$(Agent.TempDirectory)\resource-usage.txt"

Daha fazla bilgi için bkz . Günlük komutları ve UploadFile: Görev günlükleriyle indirilebilen bir dosyayı karşıya yükleme.

Günlüğü işlem hattı yapıtı olarak karşıya yükleme

Özel bir günlüğü işlem hattı yapıtı olarak karşıya yüklemek için PublishPipelineArtifact@1 görevini kullanın. PublishPipelineArtifact@1 tek bir dosyayı veya dizin yolundaki dosyaları karşıya yükleyebilir ve karşıya yüklenecek çok sayıda özel günlük dosyanız varsa kullanışlıdır.

- task: PublishPipelineArtifact@1
  inputs:
    targetPath: '$(Pipeline.Workspace)/s/trace'
    artifact: 'file_result.pcap'
    publishLocation: 'pipeline'

Daha fazla bilgi için bkz . İşlem Hattı Yapıtlarını Yayımlama.

Kaynak kullanımı ayrıntılarını yakalama

Azure DevOps Services kullanırken ayrıntılı günlükleri etkinleştirerek günlüklerde disk kullanımı, bellek kullanımı ve CPU kullanımı gibi kaynak kullanımını görebilirsiniz. İşlem hattı tamamlandığında, günlüklerde her adım için Agent environment resources giriş arayın.

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%

Azure DevOps Server kullanıyorsanız veya ek ölçümler toplamak istiyorsanız Kaynak kullanımını yakalamak ve işlem hattı günlüklerine yüklemek için PowerShell'i kullanabilirsiniz. İşlem hattı çalıştırması tamamlandığında işlem hattı günlüklerini indirebilir ve yakalanan verileri görüntüleyebilirsiniz. Upload resource usage from pipeline run Adım işin altıncı adımıysa, günlüklerdeki dosya adı 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()

ProcDump kullanarak dotnet işlem bellek dökümü yakalama

Kilitlenen bir test yürütmeniz varsa, müşteri desteği başarısız test yürütme sonrasında dotnet işleminin bellek dökümünü yakalamanızı isteyebilir. ile condition: always()Visual Studio Test görevinizden sonra aşağıdaki görevi ekleyin. İşlem hattı çalıştırması tamamlandığında, bellek dökümü de dahil olmak üzere işlem hattı günlüklerini indirebilirsiniz.

# 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'

Barındırılan bir aracı için ETW izlemelerini yakalama

Microsoft tarafından barındırılan aracılarla ilgili ağ sorunlarını gideriyorsanız, müşteri desteği SIZDEN ETW izlemelerini toplamanızı isteyebilir. İşlem hattı çalıştırması tamamlandığında ETW izlemeleri dahil olmak üzere işlem hattı günlüklerini indirebilirsiniz.

# 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'

Visual Studio derlemesi için izlemeleri yakalama perfview

Müşteri desteği Sizden Visual Studio derlemenizin bir perfview izlemesini oluşturmanızı isterse, Visual Studio derleme adımınızdan önce ve sonra işlem hattınıza aşağıdaki görevleri ekleyin.

İşlem hattını çalıştırdıktan sonra, işlem hattı çalıştırma ayrıntılarından PerfViewLog yapıtını indirebilir ve bu dosya müşteri desteğini gönderebilirsiniz.

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