Logboeken raadplegen 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 taak en taak te selecteren. Als een bepaalde taak mislukt, controleert u de logboeken voor die taak. Uitgebreide logboeken configureren om meer diagnostische informatie op te nemen.

Uitgebreide logboeken configureren

Als hulp bij het oplossen van problemen kunt u uw logboeken zodanig configureren dat ze uitgebreider zijn.

  • Als u uitgebreide logboeken voor één uitvoering wilt configureren, kunt u een nieuwe build starten door Run pipeline te kiezen en systeemdiagnose inschakelen te selecteren, Uitvoeren.

    Systeemdiagnose inschakelen

  • Als u uitgebreide logboeken voor alle uitvoeringen wilt configureren, kunt u een variabele met de naam system.debug toevoegen en de waarde instellen op true.

  • Als u uitgebreide logboeken voor één uitvoering wilt configureren, kunt u een nieuwe build starten door Queue Build te kiezen en de waarde voor de system.debug variabele in te truestellen op .

  • Als u uitgebreide logboeken voor alle uitvoeringen wilt configureren, bewerkt u de build, gaat u naar het tabblad Variabelen en voegt u een variabele met de naam system.debugtoe, stelt u de waarde trueervan in en selecteert u toestaan op wachtrijtijd.

  • Als u uitgebreide logboeken voor een YAML-pijplijn wilt configureren, voegt u de system.debug variabele toe in de variables sectie:

    variables:
      system.debug: true
    

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, zoekt u 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%

Logboeken weergeven en downloaden

Als u afzonderlijke logboeken voor elke stap wilt weergeven, gaat u naar de buildresultaten voor de uitvoering en selecteert u de taak en stap.

Taaklogboek

Als u alle logboeken wilt downloaden, gaat u naar de buildresultaten voor de uitvoering, selecteert u ...en kiest u Logboeken downloaden.

Logboeken downloaden

Als u alle logboeken wilt downloaden, gaat u naar de buildresultaten voor de uitvoering en kiest u Alle logboeken downloaden als zip.

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.

Diagnostische logboeken voor werkrollen

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 datum- en 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 logboekbestanden. Bijvoorbeeld: agent_20160624-144630-utc.log. Er zijn twee soorten agentlogboekbestanden:

  • Het logboekbestand dat is gegenereerd tijdens het uitvoeren config.cmd. Dit logboek:

    • Bevat deze regel bovenaan: Adding Command: configure

    • Hier ziet u de gemaakte configuratiekeuzes.

  • Het logboekbestand dat is gegenereerd tijdens het uitvoeren run.cmd. 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 aanvullende 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 voltooid (indien gebruikt) Linux
BrokenPackages.* Pakketten hebben een consistente status Linux
Agent.* Omgevingsvariabelen Linux, Windows
waagentConf.txt Azure VM-agent (waagent.conf) Azure: Linux, Windows
environment.txt / agent.* Lijst met accountgroepslidmaatschappen 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 het oplossen van problemen met agents in de opensource-agent van de Azure Pipelines-agent van de Azure Pipelines-agent voor meer informatie.

Andere logboeken

In de diagnostische logboeken vindt environment.txt u en capabilities.txt.

Het environment.txt bestand bevat verschillende informatie over de omgeving waarin uw build is 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 mogelijkheden te zien die zijn geïnstalleerd op de buildcomputer waarop uw build is uitgevoerd.

HTTP-traceringslogboeken

Belangrijk

HTTP-traceringen en traceringsbestanden kunnen wachtwoorden en andere geheimen bevatten. Plaats ze niet op een openbare site.

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

  1. Start Fiddler.

  2. U wordt aangeraden alleen naar agentverkeer te luisteren. File > Capture Traffic off (F12)

  3. Https-verkeer ontsleutelen inschakelen. Extra > Fiddler Opties > HTTPS-tabblad. HTTPS-verkeer ontsleutelen

  4. Laat de agent weten dat de proxy moet worden gebruikt:

    set VSTS_HTTP_PROXY=http://127.0.0.1:8888
    
  5. Voer de agent interactief uit. Als u als een service werkt, kunt u instellen als de omgevingsvariabele in het configuratiescherm voor het account waarop de service wordt uitgevoerd.

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

  1. Start Charles Proxy.

  2. Charles: Proxyproxy > Instellingen > SSL-tabblad. Inschakelen. URL toevoegen.

  3. Charles: Proxy > Mac OSX Proxy. U wordt aangeraden om alleen agentverkeer weer te geven.

    export VSTS_HTTP_PROXY=http://127.0.0.1:8888
    
  4. Voer de agent interactief uit. Als deze wordt uitgevoerd als een service, kunt u instellen in het .env-bestand. Zie nix service

  5. Start de agent opnieuw.

Aangepaste logboeken vastleggen

Naast de ingebouwde logboeken kunt u taken en scripts gebruiken om aangepaste logboeken in uw pijplijn 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.

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 het aangepaste logboek wilt uploaden als onderdeel van de standaardpijplijnlogboeken, moet u het ##vso[task.uploadfile] gewenste bestand 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 standaardpijplijnlogboeken. De ##vso[task.uploadfile] methode is geschikt voor het uploaden van één logboekbestand. Als u meer dan één logboekbestand hebt, moet u voor elk bestand een afzonderlijke ##vso[task.uploadfile] regel gebruiken.

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

Zie Logboekregistratieopdrachten en UploadFile voor meer informatie: Upload een bestand dat kan worden gedownload met taaklogboeken.

Een logboek uploaden als een pijplijnartefact

Als u een aangepast logboek wilt uploaden als een pijplijnartefact, gebruikt u de PublishPipelineArtifact@1 taak. PublishPipelineArtifact@1 kan één bestand of de bestanden in een mappad uploaden en is handig als u veel aangepaste logboekbestanden hebt om te uploaden.

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

Zie Pijplijnartefacten publiceren voor meer informatie.

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, zoekt u 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 downloaden en de vastgelegde gegevens bekijken. 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 dotnet-procesgeheugendump vastleggen met 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 pijplijnuitvoering is voltooid, kunt u de pijplijnlogboeken 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 pijplijn-uitvoering is voltooid, kunt u de pijplijn-logboeken 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'

Traceringen vastleggen perfview 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 voor en na de buildstap van Visual Studio.

Nadat u de pijplijn hebt uitgevoerd, kunt u het PerfViewLog-artefact downloaden vanuit de details van de pijplijnuitvoering en het klantondersteuningsbestand verzenden.

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