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.
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 tilltrue
.
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.
Om du vill ladda ned alla loggar går du till kompileringsresultatet för körningen, väljer ...och väljer 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
- Använd inbyggd HTTP-spårning
- Använd fullständig HTTP-spårning – Windows
- Använda fullständig HTTP-spårning – macOS och Linux
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
Starta Fiddler.
Vi rekommenderar att du bara lyssnar på agenttrafik. Fil > Stäng av trafikupptagning (F12)
Aktivera dekryptering av HTTPS-trafik. Verktyg > Fiddler-alternativ > HTTPS-fliken. Dekryptera HTTPS-trafik
Meddela agenten att den använder proxyn:
set VSTS_HTTP_PROXY=http://127.0.0.1:8888
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.
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.
Starta Charles Proxy.
Charles: Proxy > proxyinställningar > fliken SSL. Aktivera. Lägg till URL.
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
Kör agenten interaktivt. Om den körs som en tjänst kan du ange det i .env-filen. Se nix service
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.
- Samla in information om resursanvändning
- Avbilda en DotNet-processminnesdump med hjälp av ProcDump
- Samla in ETW-spår för en värdbaserad agent
- Capture perfview traces for Visual Studio build
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