Dela via


Granska loggar för att diagnostisera pipelineproblem

Azure DevOps Services | Azure DevOps Server 2022 – Azure DevOps Server 2019

Pipelineloggar är ett kraftfullt verktyg för att fastställa orsaken till pipelinefel och utförliga loggar kan konfigureras för att ge mer diagnostikinformation.

En vanlig utgångspunkt är att granska loggarna i din färdiga build eller release. Du kan visa loggar genom att öppna sammanfattningen av pipelinekörningen och välja jobbet och uppgiften. Om en viss uppgift misslyckas kontrollerar du loggarna för den uppgiften. Konfigurera utförliga loggar för att inkludera mer diagnostikinformation.

Konfigurera utförliga loggar

Du kan göra felsökningen enklare genom att konfigurera loggarna så att de blir mer utförliga.

  • Om du vill konfigurera utförliga loggar för en enda körning kan du starta en ny version genom att välja Kör pipeline och välja Aktivera systemdiagnostik, Kör.

    Aktivera för systemdiagnostik

  • Om du vill konfigurera utförliga loggar för alla körningar kan du lägga till en variabel med namnet system.debug och ange dess värde till true.

Azure-pipelineloggar kan nu samla in resursanvändningsmått som minne, CPU-användning och tillgängligt diskutrymme. Loggarna innehåller även de resurser som används av pipelineagenten och dess underordnade processer, inklusive de arbeten som körs i ett jobb. Om du misstänker att pipelinejobbet kan stöta på resursbegränsningar kan du aktivera utförliga loggar för att få information om resursanvändning inmatad i pipelineloggar. Mått för resursanvändning är tillgängliga på alla agenter, oberoende av värdmodell.

Om du vill visa mätvärden för insamlad resursanvändning, sök i loggarna efter Agent environment resources poster för varje steg.

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%

Visa och ladda ned loggar

Om du vill visa enskilda loggar för varje steg navigerar du till byggresultatet för körningen och väljer jobbet och steget.

aktivitetslogg

Om du vill ladda ned alla loggar går du till kompileringsresultatet för körningen, väljer ...och väljer Ladda ned loggar.

Ladda ned loggar

Förutom pipelinediagnostikloggarna är följande specialiserade loggtyper tillgängliga och kan innehålla information som hjälper dig att felsöka.

Diagnostikloggar för arbetare

Du kan hämta diagnostikloggen för den färdiga versionen som genereras av arbetsprocessen på byggagenten. Leta efter den worker loggfil som har datum- och tidsstämpeln för den färdiga versionen. Till exempel worker_20160623-192022-utc_6172.log.

Diagnostikloggar för agent

Agentdiagnostikloggar ger en översikt över hur agenten konfigurerades och vad som hände när den kördes. Leta efter agent loggfilerna. Till exempel agent_20160624-144630-utc.log. Det finns två typer av agentloggfiler:

  • Loggfilen som genererades när du körde config.cmd. Den här loggen:

    • Innehåller den här raden nära toppen: Adding Command: configure

    • Visar de konfigurationsalternativ som har gjorts.

  • Loggfilen som genererades när du körde run.cmd. Den här loggen:

    • Det går inte att öppna förrän processen har avslutats.

    • Försöker ansluta till din Azure DevOps-organisation eller Team Foundation Server.

    • Visar när varje jobb kördes och hur det slutfördes

Båda loggarna visar hur agentfunktionerna identifierades och angavs.

Nätverksdiagnostik för lokalt installerade agenter

Ange värdet för Agent.Diagnostic till true för att samla in ytterligare loggar som kan användas för att felsöka nätverksproblem för lokalt installerade agenter.

Fil Information Gäller för
cloudinit.* Cloud-init har slutförts framgångsrikt (om det används) Linux
BrokenPackages.* Paketen är i ett konsekvent tillstånd Linux
Agent.* Miljövariabler Linux, Windows
waagentConf.txt Azure VM-agent (waagent.conf) Azure: Linux, Windows
environment.txt / agent.* Medlemskapslista för kontogrupp Windows

Anmärkning

Agent.Diagnostic anges till true automatiskt när System.Debug är inställt på true.

Den Agent.Diagnostic variabeln och loggarna som beskrivs i det här avsnittet är tillgängliga med Agent v2.200.0 och senare.

Mer information finns i felsöka agent i microsoft/azure-pipelines-agent Azure Pipelines-agentens lagringsplats med öppen källkod.

Andra loggar

I diagnostikloggarna hittar du environment.txt och capabilities.txt.

Filen environment.txt innehåller olika uppgifter om miljön där bygget kördes. Detta inkluderar information som vilka uppgifter som körs, om brandväggen är aktiverad eller inte, PowerShell-versionsinformation och några andra objekt. Vi lägger kontinuerligt till dessa data för att göra dem mer användbara.

Filen capabilities.txt ger ett tydligt sätt att överblicka alla kapaciteter som är installerade på byggdatorn som hanterade bygget.

HTTP-spårningsloggar

Viktigt!

HTTP-spårningar och spårningsfiler kan innehålla lösenord och andra hemligheter. Publicera inte dem på offentliga webbplatser.

Använda inbyggd HTTP-spårning

Om din agent är version 2.114.0 eller senare kan du spåra HTTP-trafikhuvudena och skriva dem i diagnostikloggen. Ange VSTS_AGENT_HTTPTRACE miljövariabeln innan du startar agent.listener.

Windows:
    set VSTS_AGENT_HTTPTRACE=true

macOS/Linux:
    export VSTS_AGENT_HTTPTRACE=true

Använda fullständig HTTP-spårning – Windows

  1. Starta Fiddler.

  2. Vi rekommenderar att du bara lyssnar på agenttrafik. Fil > Stäng av trafikupptagning (F12)

  3. Aktivera dekryptering av HTTPS-trafik. Verktyg > Fiddler-alternativ > HTTPS-fliken. Dekryptera HTTPS-trafik

  4. Meddela agenten att den använder proxyn:

    set VSTS_HTTP_PROXY=http://127.0.0.1:8888
    
  5. Kör agenten interaktivt. Om du kör som en tjänst kan du ange som miljövariabel i kontrollpanelen för kontot som tjänsten körs som.

  6. Starta om agenten.

Använda fullständig HTTP-spårning – macOS och Linux

Använd Charles Proxy (liknar Fiddler i Windows) för att samla in HTTP-spårningen av agenten.

  1. Starta Charles Proxy.

  2. Charles: Proxy > proxyinställningar > fliken SSL. Aktivera. Lägg till URL.

  3. Charles: Proxy > Mac OSX Proxy. Vi rekommenderar att du inaktiverar för att endast se agenttrafik.

    export VSTS_HTTP_PROXY=http://127.0.0.1:8888
    
  4. Kör agenten interaktivt. Om den körs som en tjänst kan du ange det i .env-filen. Se nix service

  5. Starta om agenten.

Samla in anpassade loggar

Förutom de inbyggda loggarna kan du använda uppgifter och skript för att samla in anpassade loggar i pipelinen. I följande exempel visas hur du samlar in resursanvändning, nätverksspårningar, minnesdumpar och perfview spårningar. Om du arbetar med kundsupport kan du bli ombedd att samla in loggar som dessa.

Hämta anpassade loggar

När du har hämtat en anpassad logg i pipelinen måste du ladda upp den så att den kan hämtas för granskning. Du kan ladda upp den anpassade loggen som en del av standard-pipelineloggarna, eller så kan du ladda upp den som en artefakt. Exemplen i följande avsnitt visar båda sätten att ladda upp anpassade loggar.

Ladda upp en logg som en del av standardloggarna

Om du vill ladda upp den anpassade loggen som en del av standardpipelineloggarna använder du ##vso[task.uploadfile] för att ladda upp önskad fil. Om du vill använda det här kommandot anger du det som en del av ett skriptkommando enligt följande exempel. Filen kan laddas ned och visas som en del av standardpipelineloggarna. Metoden ##vso[task.uploadfile] är bra för att ladda upp en enda loggfil. Om du har fler än en loggfil måste du använda en separat ##vso[task.uploadfile] rad för varje fil.

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

Mer information finns i loggningskommandon och UploadFile: Ladda upp en fil som kan laddas ner med uppgiftsloggar.

Ladda upp en logg som en pipeline-artfakt

Om du vill ladda upp en anpassad logg som en pipelineartefakt använder du uppgiften PublishPipelineArtifact@1. PublishPipelineArtifact@1 kan ladda upp en enda fil eller filerna i en katalogsökväg och är användbart om du har många anpassade loggfiler att ladda upp.

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

Mer information finns i Publicera pipelineartefakter.

Samla in information om resursanvändning

När du använder Azure DevOps Services kan du se resursutnyttjande i loggarna, inklusive diskanvändning, minnesanvändning och CPU-användning, genom att aktivera utförliga loggar. När pipelinen är klar sök i loggarna efter Agent environment resources poster för varje steg.

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%

Om du använder Azure DevOps Server, eller om du vill samla in ytterligare mått, kan du använda PowerShell för att samla in resursanvändning och ladda upp den till pipelineloggarna. När pipelinekörningen är klar kan du ladda ned pipelineloggarna och visa de insamlade data. Om det Upload resource usage from pipeline run steget är det sjätte steget i jobbet blir filnamnet i loggarna 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()

Avbilda en dotnet-processminnesdump med hjälp av ProcDump

Om du har en testkörning som kraschar kan kundsupporten be dig att samla in en minnesdump av dotnet-processen efter den misslyckade testkörningen. Lägg till följande uppgift efter din Visual Studio-testuppgift med condition: always(). När pipelinekörningen är klar kan du ladda ned pipelineloggarna, inklusive minnesdumpen.

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

Samla in ETW-spårningar för en värdbaserad agent

Om du felsöker nätverksproblem med agenter som driftas av Microsoft kan kundsupporten be dig att samla in ETW-spår. När pipelinekörningen är klar kan du ladda ned loggfilerna för pipeline, inklusive ETW-spårfilerna.

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

Samla in perfview spårningar för Visual Studio-kompilering

Om kundsupporten ber dig att skapa en perfview-spårning av ditt Visual Studio-bygge, lägg till följande uppgifter i din pipeline före och efter Visual Studio-byggsteget.

Efter att du har kört pipelinen kan du ladda ned PerfViewLog--artefakten från pipelinekörningsinformationen och skicka den filen till kundsupport.

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