Delen via


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 op 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, 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.

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.

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

  1. Start Fiddler.

  2. U wordt aangeraden alleen naar gesprekken van agenten te luisteren. Bestand > Verkeer vastleggen uitgeschakeld (F12)

  3. Https-verkeer ontsleutelen inschakelen. Hulpmiddelen > 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 een dienst uitvoert, kunt u de variabele in de omgeving instellen via het configuratiescherm voor het account waaronder de dienst 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: Proxy > Proxy-instellingen > SSL-tabblad. Inschakelen. URL toevoegen.

  3. 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
    
  4. Voer de agent interactief uit. Als het als een service draait, kunt u de configuraties instellen in het .env-bestand. Zie nix service

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

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