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 den färdiga versionen eller versionen. Du kan visa loggar genom att gå till sammanfattningen av pipelinekörningen och välja jobb och uppgift. Om en viss uppgift misslyckas kontrollerar du loggarna för den uppgiften. Konfigurera utförliga loggar så att de innehåller 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 enskild körning kan du starta en ny version genom att välja Kör pipeline och välja Aktivera systemdiagnostik, Kör.

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

  • Om du vill konfigurera utförliga loggar för en enskild körning kan du starta en ny version genom att välja Köversion och ange värdet för variabeln system.debug till true.

  • Om du vill konfigurera utförliga loggar för alla körningar redigerar du versionen, navigerar till fliken Variabler och lägger till en variabel med namnet system.debug, anger dess värde till trueoch väljer Tillåt vid kötid.

  • Om du vill konfigurera utförliga loggar för en YAML-pipeline lägger du till variabeln system.debug i avsnittet variables :

    variables:
      system.debug: true
    

Azure-pipelineloggar kan nu samla in resursanvändningsmått som minne, CPU-användning och tillgängligt diskutrymme. Loggarna innehåller även resurser som används av pipelineagenten och underordnade processer, inklusive uppgifter 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åtten för den insamlade resursanvändningen söker du i loggarnaAgent environment resources efter 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 byggresultatet för körningen, väljer ...och väljer Ladda ned loggar.

Hämta loggar

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

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 loggfilen som har datum- och tidsstämpeln för worker den färdiga versionen. Exempel: worker_20160623-192022-utc_6172.log

Diagnostikloggar för agent

Agentdiagnostikloggar innehåller en post om hur agenten konfigurerades och vad som hände när den kördes. Leta efter loggfilerna agent . 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 lokala värdbaserade 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 (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

Kommentar

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

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

Mer information finns i agentfelsökning i azure pipelines-agentens azure pipelines-agent med öppen källkod.

Andra loggar

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

Filen environment.txt har olika information 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 rent sätt att se alla funktioner som är installerade på byggdatorn som körde bygget.

HTTP-spårningsloggar

Viktigt!

HTTP-spårningar och spårningsfiler kan innehålla lösenord och andra hemligheter. Publicera dem inte 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. VSTS_AGENT_HTTPTRACE Ange 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. File > Capture Traffic off (F12)

  3. Aktivera dekryptering av HTTPS-trafik. Fliken Verktyg > Fiddler-alternativ > HTTPS. 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: Proxyproxy > Instä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 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. Följande exempel visar 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 standard-pipelineloggarna. 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 ned med aktivitetsloggar.

Ladda upp en logg som en pipelineartefakt

Om du vill ladda upp en anpassad logg som en pipelineartefakt använder du uppgiften PublishPipelineArtifact@1 . PublishPipelineArtifact@1 kan ladda upp en enskild 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öker du i loggarnaAgent environment resources efter 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 insamlade data. Om steget Upload resource usage from pipeline run ä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-processminnedump 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 visual studiotestaktiviteten 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 Microsoft-värdbaserade agenter kan kundsupporten be dig att samla in ETW-spårningar. När pipelinekörningen är klar kan du ladda ned pipelineloggarna, inklusive ETW-spårningarna.

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

Om kundsupporten ber dig att skapa en perfview spårning av Visual Studio-versionen lägger du till följande uppgifter i pipelinen före och efter visual studio-byggsteget.

När du har kört pipelinen kan du ladda ned PerfViewLog-artefakten från pipelinekörningsinformationen och skicka den filens 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 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