Logboeken controleren om problemen met pijplijnen vast te stellen
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Pijplijnlogboeken bieden een krachtig hulpprogramma voor het bepalen van de oorzaak van pijplijnfouten en uitgebreide logboeken kunnen worden geconfigureerd voor meer diagnostische informatie.
Een typisch uitgangspunt is het controleren van de logboeken in uw voltooide build of release. U kunt logboeken bekijken door naar het overzicht van de pijplijnuitvoering te navigeren en de job en taak te selecteren. Als een bepaalde taak mislukt, controleert u de logboeken voor die taak. Configureer uitgebreide logboeken om meer diagnostische gegevens te bevatten.
Uitgebreide logboeken configureren
Als hulp bij het oplossen van problemen kunt u uw logboeken zodanig configureren dat ze gedetailleerder zijn.
Als u uitgebreide logboeken voor één uitvoering wilt configureren, kunt u een nieuwe build starten door Pijplijn uitvoeren te kiezen en Systeemdiagnose inschakelen te selecteren, Uitvoeren.
#B0 #A1 Inschakelen systeemdiagnose #A2 #C3
Als u uitvoerige logs voor alle runs wilt configureren, kunt u een variabele genaamd
system.debug
toevoegen en de waarde instellen optrue
.
Azure-pijplijnlogboeken kunnen nu metrische gegevens over resourcegebruik vastleggen, zoals geheugen, CPU-gebruik en beschikbare schijfruimte. De logboeken bevatten ook resources die worden gebruikt door de pijplijnagent en onderliggende processen, waaronder taken die in een taak worden uitgevoerd. Als u vermoedt dat uw pijplijntaak resourcebeperkingen kan ondervinden, schakelt u uitgebreide logboeken in om informatie over resourcegebruik in pijplijnlogboeken te laten opnemen. Metrische gegevens over resourcegebruik zijn beschikbaar op elke agent, onafhankelijk van het hostingmodel.
Als u de metrische gegevens over het vastgelegde resourcegebruik wilt weergeven, doorzoek de logboeken naar vermeldingen voor elke stap.
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%
Logboeken weergeven en downloaden
Als u afzonderlijke logbestanden voor elke stap wilt weergeven, ga naar de buildresultaten van de uitvoering en selecteer de taak en stap.
Taaklogboek
Als u alle logboeken wilt downloaden, gaat u naar de buildresultaten van de uitvoering, selecteert u ... en kiest u Logboeken downloaden.
Naast de diagnostische logboeken van de pijplijn zijn de volgende gespecialiseerde logboektypen beschikbaar en bevatten ze mogelijk informatie om u te helpen bij het oplossen van problemen.
- worker-diagnoselogboeken
- diagnostische logboeken van agent
- andere logboeken
Diagnostische logboeken voor werknemers
U kunt het diagnostische logboek ophalen van de voltooide build die is gegenereerd door het werkproces op de buildagent. Zoek het worker
logboekbestand met de datumen tijdstempel van de voltooide build. Bijvoorbeeld: worker_20160623-192022-utc_6172.log
.
Diagnostische logboeken van agent
Diagnostische logboeken van agents bevatten een record over hoe de agent is geconfigureerd en wat er is gebeurd toen deze werd uitgevoerd. Zoek naar de agent
logbestanden. Bijvoorbeeld: agent_20160624-144630-utc.log
. Er zijn twee soorten agentlogboekbestanden:
Het logbestand dat is gegenereerd toen u
config.cmd
uitvoerde. Dit logboek:Bevat deze regel bovenaan:
Adding Command: configure
Hier ziet u de gemaakte configuratiekeuzes.
Het logboekbestand dat is gegenereerd toen u
run.cmd
uitvoerde. Dit logboek:Kan pas worden geopend nadat het proces is beëindigd.
Probeert verbinding te maken met uw Azure DevOps-organisatie of Team Foundation Server.
Geeft weer wanneer elke taak is uitgevoerd en hoe deze is voltooid
Beide logboeken laten zien hoe de agentmogelijkheden zijn gedetecteerd en ingesteld.
Netwerkdiagnose voor zelf-hostende agents
Stel de waarde van Agent.Diagnostic
in op true
om extra logboeken te verzamelen die kunnen worden gebruikt voor het oplossen van netwerkproblemen voor zelf-hostende agents.
Bestand | Gegevens | Van toepassing op |
---|---|---|
cloudinit.* |
Cloud-init is succesvol voltooid (indien van toepassing) | Linux |
BrokenPackages.* |
Pakketten bevinden zich in een consistente toestand | Linux |
Agent.* |
Omgevingsvariabelen | Linux, Windows |
waagentConf.txt |
Azure VM-agent (waagent.conf) | Azure: Linux, Windows |
environment.txt / agent.* |
Lijst van accountgroep lidmaatschappen | Windows |
Notitie
Agent.Diagnostic
wordt ingesteld op true
automatisch wanneer System.Debug
is ingesteld op true
.
De Agent.Diagnostic
variabele en logboeken die in deze sectie worden beschreven, zijn beschikbaar met Agent v2.200.0 en hoger.
Zie agent troubleshooting in de microsoft/azure-pipelines-agent-repository van de Azure Pipelines-agent voor meer informatie.
Andere logboeken
In de diagnostische logboeken vindt u environment.txt
en capabilities.txt
.
Het environment.txt
bestand bevat diverse informatie over de omgeving waarin uw build werd uitgevoerd. Dit omvat informatie zoals welke taken worden uitgevoerd, of de firewall is ingeschakeld, powerShell-versiegegevens en enkele andere items. We voegen voortdurend aan deze gegevens toe om deze nuttiger te maken.
Het capabilities.txt
-bestand biedt een schone manier om alle functies te zien die zijn geïnstalleerd op de computer waarop uw build is uitgevoerd.
HTTP-traceringslogboeken
- Ingebouwde HTTP-tracering gebruiken
- #B0 Gebruik volledige HTTP-tracering - Windows #C1
- Volledige HTTP-tracering gebruiken - macOS en Linux
Belangrijk
HTTP-traceringen en traceringsbestanden kunnen wachtwoorden en andere geheimen bevatten. #B0 Plaats ze niet op openbare sites #C1.
Ingebouwde HTTP-tracering gebruiken
Als uw agent versie 2.114.0 of hoger is, kunt u de HTTP-verkeersheaders traceren en naar het diagnostische logboek schrijven. Stel de VSTS_AGENT_HTTPTRACE
omgevingsvariabele in voordat u de Agent.Listener start.
Windows:
set VSTS_AGENT_HTTPTRACE=true
macOS/Linux:
export VSTS_AGENT_HTTPTRACE=true
Volledige HTTP-tracering gebruiken - Windows
Start Fiddler.
U wordt aangeraden alleen naar gesprekken van agenten te luisteren. Bestand > Verkeer vastleggen uitgeschakeld (F12)
Https-verkeer ontsleutelen inschakelen. Hulpmiddelen > Fiddler-opties > HTTPS-tabblad. HTTPS-verkeer ontsleutelen
Laat de agent weten dat de proxy moet worden gebruikt:
set VSTS_HTTP_PROXY=http://127.0.0.1:8888
Voer de agent interactief uit. Als u een dienst uitvoert, kunt u de variabele in de omgeving instellen via het configuratiescherm voor het account waaronder de dienst wordt uitgevoerd.
Start de agent opnieuw.
Volledige HTTP-tracering gebruiken - macOS en Linux
Gebruik Charles Proxy (vergelijkbaar met Fiddler in Windows) om de HTTP-tracering van de agent vast te leggen.
Start Charles Proxy.
Charles: Proxy > Proxy-instellingen > SSL-tabblad. Inschakelen. URL toevoegen.
Charles: Proxy > Mac OSX Proxy. We raden aan om iets uit te schakelen om alleen agentverkeer te zien.
export VSTS_HTTP_PROXY=http://127.0.0.1:8888
Voer de agent interactief uit. Als het als een service draait, kunt u de configuraties instellen in het .env-bestand. Zie nix service
Start de agent opnieuw.
Aangepaste logboeken vastleggen
Naast de ingebouwde logs kunt u taken en scripts gebruiken om aangepaste logs in uw pipeline vast te leggen. In de volgende voorbeelden ziet u hoe u resourcegebruik, netwerktraceringen, geheugendumps en perfview-traceringen kunt vastleggen. Als u met klantondersteuning werkt, wordt u mogelijk gevraagd om logboeken zoals deze vast te leggen.
- Details van het gebruik van hulpbronnen vastleggen
- Een .NET-proces-geheugendump vastleggen met ProcDump
- Vastleggen van ETW-traceringen voor een gehoste agent
- Capture perfview traces for Visual Studio build
Aangepaste logboeken ophalen
Nadat u een aangepast logboek in uw pijplijn hebt vastgelegd, moet u het uploaden zodat deze kan worden opgehaald voor revisie. U kunt het aangepaste logboek uploaden als onderdeel van de standaardpijplijnlogboeken of u kunt het uploaden als artefact. In de voorbeelden in de volgende secties ziet u beide manieren om aangepaste logboeken te uploaden.
Een logboek uploaden als onderdeel van de standaardlogboeken
Als u de aangepaste log wilt uploaden als onderdeel van de standaard pijplogboeken, gebruikt u ##vso[task.uploadfile]
om het gewenste bestand te uploaden. Als u deze opdracht wilt gebruiken, geeft u deze op als onderdeel van een scriptopdracht, zoals wordt weergegeven in het volgende voorbeeld. Het bestand kan worden gedownload en bekeken als onderdeel van de standaard pijplijnlogboeken. Deze ##vso[task.uploadfile]
-methode is geschikt voor het uploaden van één logbestand. Als u meer dan één logboekbestand hebt, moet u voor elk bestand een afzonderlijke #D0 regel gebruiken.
- pwsh: Write-Host "##vso[task.uploadfile]$(Agent.TempDirectory)\resource-usage.txt"
Zie Logopdrachten en UploadFile: Upload een bestand dat kan worden gedownload met taaklogboeken voor meer informatie.
Een logboek uploaden als een pijplijnartefact
Als u een aangepaste log wilt uploaden als een pijplijnartefact, gebruikt u de taak PublishPipelineArtifact@1.
PublishPipelineArtifact@1
kan een enkel bestand of de bestanden in een map uploaden en is handig als u veel aangepaste logboekbestanden te uploaden hebt.
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Pipeline.Workspace)/s/trace'
artifact: 'file_result.pcap'
publishLocation: 'pipeline'
Zie voor meer informatie Publiceer Pijplijnartefacten.
Details van resourcegebruik vastleggen
Wanneer u Azure DevOps Services gebruikt, kunt u het resourcegebruik in de logboeken zien, waaronder schijfgebruik, geheugengebruik en CPU-gebruik, door uitgebreide logboeken in te schakelen. Wanneer de pijplijn is voltooid, zoek in de logboeken naar Agent environment resources
vermeldingen voor elke stap.
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%
Als u Azure DevOps Server gebruikt of als u aanvullende metrische gegevens wilt verzamelen, kunt u PowerShell gebruiken om resourcegebruik vast te leggen en te uploaden naar de pijplijnlogboeken. Wanneer de pijplijnuitvoering is voltooid, kunt u de pijplijnlogboeken #B0 downloaden en de vastgelegde gegevens bekijken #A1. Als de stap de Upload resource usage from pipeline run
zesde stap in de taak is, wordt de bestandsnaam in de logboeken 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()
Een geheugendump van een dotnet-proces vastleggen met behulp van ProcDump
Als u een testuitvoering hebt die vastloopt, kan de klantondersteuning u vragen een geheugendump van het dotnet-proces vast te leggen na de mislukte testuitvoering. Voeg de volgende taak toe na uw Visual Studio Test-taak met condition: always()
. Wanneer de pijplijn-run is voltooid, kunt u de logbestanden van de pijplijn downloaden, inclusief de geheugendump.
# 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'
ETW-traceringen vastleggen voor een gehoste agent
Als u netwerkproblemen met door Microsoft gehoste agents wilt oplossen, kan de klantondersteuning u vragen ETW-traceringen te verzamelen. Wanneer de pijplijnuitvoering is afgerond, kunt u de logbestanden van de pijplijn downloaden, inclusief de ETW-traceringen.
# 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'
Vastleggen van traceringen voor Visual Studio-build
Als de klantondersteuning u vraagt om een perfview tracering van uw Visual Studio-build te maken, voegt u de volgende taken toe aan uw pijplijn vóór en na uw Visual Studio-buildstap.
Nadat u de pijplijn hebt uitgevoerd, kunt u het PerfViewLog artefact downloaden vanuit de details van de uitvoering van de pijplijn en dat bestand naar de klantondersteuning sturen.
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