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.
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
.
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
tilltrue
.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 tilltrue
och 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 avsnittetvariables
: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 loggarna Agent 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.
Om du vill ladda ned alla loggar går du till byggresultatet för körningen, väljer ...och väljer Ladda ned 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
- Använda inbyggd HTTP-spårning
- Använda 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 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
Starta Fiddler.
Vi rekommenderar att du bara lyssnar på agenttrafik. File > Capture Traffic off (F12)
Aktivera dekryptering av HTTPS-trafik. Fliken Verktyg > Fiddler-alternativ > HTTPS. 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: Proxyproxy > Instä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 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. 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.
- Samla in information om resursanvändning
- Avbilda en dotnet-processminnedump med Hjälp av ProcDump
- Samla in ETW-spårningar 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 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 loggarna Agent 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 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