Kontrola protokolů za účelem diagnostiky problémů s kanály

Azure DevOps Services | Azure DevOps Server 2022 – Azure DevOps Server 2019

Protokoly kanálu poskytují výkonný nástroj pro určení příčiny selhání kanálu a podrobné protokoly je možné nakonfigurovat tak, aby poskytovaly další diagnostické informace.

Typickým výchozím bodem je kontrola protokolů v dokončených buildech nebo vydané verzi. Protokoly můžete zobrazit tak, že přejdete do souhrnu spuštění kanálu a vyberete úlohu a úlohu. Pokud se určitá úloha nedaří, zkontrolujte protokoly pro danou úlohu. Nakonfigurujte podrobné protokoly tak, aby zahrnovaly další diagnostické informace.

Konfigurace podrobných protokolů

Jako pomoc s řešením potíží můžete nakonfigurovat protokoly tak, aby byly podrobnější.

  • Pokud chcete nakonfigurovat podrobné protokoly pro jedno spuštění, můžete spustit nové sestavení tak, že zvolíte Spustit kanál a vyberete Povolit diagnostiku systému, spusťte.

    Povolení diagnostiky systému

  • Pokud chcete nakonfigurovat podrobné protokoly pro všechna spuštění, můžete přidat proměnnou s názvem system.debug a nastavit její hodnotu na true.

  • Pokud chcete nakonfigurovat podrobné protokoly pro jedno spuštění, můžete spustit nové sestavení tak, že zvolíte sestavení fronty a nastavíte hodnotu proměnné system.debug na true.

  • Pokud chcete nakonfigurovat podrobné protokoly pro všechna spuštění, upravte sestavení, přejděte na kartu Proměnné a přidejte proměnnou s názvem system.debug, nastavte její hodnotu na truea vyberte Povolit v době fronty.

  • Pokud chcete nakonfigurovat podrobné protokoly pro kanál YAML, přidejte proměnnou system.debug v variables části:

    variables:
      system.debug: true
    

Protokoly kanálu Azure teď můžou zaznamenávat metriky využití prostředků, jako je paměť, využití procesoru a dostupné místo na disku. Protokoly také zahrnují prostředky používané agentem kanálu a podřízenými procesy, včetně úloh spuštěných v úloze. Pokud máte podezření, že vaše úloha kanálu může narazit na omezení prostředků, povolte podrobné protokoly, aby do protokolů kanálu byly vloženy informace o využití prostředků. Metriky využití prostředků jsou k dispozici u libovolného agenta nezávisle na modelu hostování.

Pokud chcete zobrazit metriky využití zachycených prostředků, vyhledejte v protokolech Agent environment resources položky pro každý krok.

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%

Zobrazení a stažení protokolů

Pokud chcete zobrazit jednotlivé protokoly pro každý krok, přejděte na výsledky sestavení pro spuštění a vyberte úlohu a krok.

Protokol úloh

Pokud chcete stáhnout všechny protokoly, přejděte na výsledky sestavení pro spuštění, vyberte ...a zvolte Stáhnout protokoly.

Stáhnout protokoly

Pokud chcete stáhnout všechny protokoly, přejděte na výsledky sestavení pro spuštění a zvolte Stáhnout všechny protokoly jako zip.

Kromě diagnostickýchprotokolůch

Diagnostické protokoly pracovních procesů

Můžete získat diagnostický protokol dokončeného sestavení vygenerovaného pracovním procesem v agentovi sestavení. worker Vyhledejte soubor protokolu s datem a časovým razítkem dokončeného sestavení. Například worker_20160623-192022-utc_6172.log.

Diagnostické protokoly agenta

Diagnostické protokoly agenta poskytují záznam o konfiguraci agenta a o tom, co se stalo při spuštění. agent Vyhledejte soubory protokolu. Například agent_20160624-144630-utc.log. Existují dva druhy souborů protokolu agenta:

  • Soubor protokolu vygenerovaný při spuštění config.cmd. Tento protokol:

    • Zahrnuje tento řádek v horní části: Adding Command: configure

    • Zobrazuje provedené volby konfigurace.

  • Soubor protokolu vygenerovaný při spuštění run.cmd. Tento protokol:

    • Nelze otevřít, dokud se proces neukončil.

    • Pokusí se připojit k organizaci Azure DevOps nebo k Team Foundation Serveru.

    • Ukazuje, kdy byla každá úloha spuštěna a jak byla dokončena.

Oba protokoly ukazují, jak se detekovaly a nastavily možnosti agenta.

Diagnostika sítě pro agenty v místním prostředí

Pokud chcete shromáždit další protokoly, které je možné použít při řešení potíží se sítí u agentů v místním prostředí, nastavte parametr Agent.Diagnostic na hodnotu true.

Soubor Informační Platí pro
cloudinit.* Cloud-init se úspěšně dokončil (pokud se používá) Linux
BrokenPackages.* Balíčky jsou v konzistentním stavu Linux
Agent.* Proměnné prostředí Linux, Windows
waagentConf.txt Agent virtuálního počítače Azure (waagent.conf) Azure: Linux, Windows
environment.txt / agent.* Seznam členství ve skupině účtů Windows

Poznámka:

Pokud je parametr System.Debug nastavený na hodnotu true, je parametr Agent.Diagnostic automaticky nastavený na hodnotu true.

Proměnné Agent.Diagnostic a protokoly popsané v této části jsou k dispozici s agentem v2.200.0 a novějším.

Další informace najdete v tématu Řešení potíží s agenty v úložišti opensourcového agenta Microsoft/azure-pipelines-agenta Azure Pipelines.

Další protokoly

Uvnitř diagnostických protokolů najdete environment.txt a capabilities.txt.

Soubor environment.txt obsahuje různé informace o prostředí, ve kterém byl váš build spuštěný. Patří sem informace o tom, jaké úlohy se spouštějí, jestli je povolená brána firewall, informace o verzi PowerShellu a některé další položky. Tato data průběžně přidáváme, aby byla užitečnější.

Soubor capabilities.txt poskytuje čistý způsob, jak zobrazit všechny funkce nainstalované na buildovém počítači, na který byl váš build spuštěný.

Protokoly trasování HTTP

Důležité

Trasování HTTP a trasovací soubory můžou obsahovat hesla a další tajné kódy. Neposílejte je na veřejných webech.

Použití integrovaného trasování HTTP

Pokud je váš agent verze 2.114.0 nebo novější, můžete trasovat hlavičky provozu HTTP a zapisovat je do diagnostického protokolu. Před spuštěním agent.listener nastavte proměnnou VSTS_AGENT_HTTPTRACE prostředí.

Windows:
    set VSTS_AGENT_HTTPTRACE=true

macOS/Linux:
    export VSTS_AGENT_HTTPTRACE=true

Použití úplného trasování HTTP – Windows

  1. Spusťte Fiddler.

  2. Doporučujeme naslouchat jenom provozu agenta. Vypnutý provoz zachytávání souborů > (F12)

  3. Povolte dešifrování provozu HTTPS. Nástroje > Fiddleru – karta Možnosti > HTTPS. Dešifrování provozu HTTPS

  4. Dejte agentu vědět, že má používat proxy server:

    set VSTS_HTTP_PROXY=http://127.0.0.1:8888
    
  5. Spusťte agenta interaktivně. Pokud běžíte jako služba, můžete nastavit jako proměnnou prostředí v ovládacích panelech účtu, na kterém je služba spuštěná.

  6. Restartujte agenta.

Použití úplného trasování HTTP – macOS a Linux

K zachycení trasování PROTOKOLU HTTP agenta použijte Charles Proxy (podobný fiddleru ve Windows).

  1. Spusťte Charles Proxy.

  2. Charles: Proxy proxy > Nastavení > kartu SSL. Povolte. Přidejte adresu URL.

  3. Charles: Proxy > Mac OSX Proxy. Doporučujeme zakázat jenom provoz agenta.

    export VSTS_HTTP_PROXY=http://127.0.0.1:8888
    
  4. Spusťte agenta interaktivně. Pokud běží jako služba, můžete ji nastavit v souboru .env. Viz nix service.

  5. Restartujte agenta.

Zachycení vlastních protokolů

Kromě předdefinovaných protokolů můžete pomocí úloh a skriptů zaznamenávat vlastní protokoly v kanálu. Následující příklady ukazují, jak zachytit využití prostředků, trasování sítě, výpisy paměti a perfview trasování. Pokud pracujete se zákaznickou podporou, můžete být požádáni o zaznamenání protokolů, jako jsou tyto.

Načtení vlastních protokolů

Po zachycení vlastního protokolu v kanálu ho musíte nahrát, aby bylo možné ho načíst ke kontrole. Vlastní protokol můžete nahrát jako součást standardních protokolů kanálu nebo ho můžete nahrát jako artefakt. Příklady v následujících částech ukazují oba způsoby nahrávání vlastních protokolů.

Nahrání protokolu jako součásti standardních protokolů

Pokud chcete nahrát vlastní protokol jako součást standardních protokolů kanálu, použijte ##vso[task.uploadfile] k nahrání požadovaného souboru. Pokud chcete tento příkaz použít, zadejte ho jako součást příkazu skriptu, jak je znázorněno v následujícím příkladu. Soubor lze stáhnout a zobrazit jako součást standardních protokolů kanálu. Metoda ##vso[task.uploadfile] je vhodná pro nahrání jednoho souboru protokolu. Pokud máte více než jeden soubor protokolu, musíte pro každý soubor použít samostatný ##vso[task.uploadfile] řádek.

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

Další informace najdete v tématu Příkazy protokolování a UploadFile: Nahrání souboru, který lze stáhnout pomocí protokolů úloh.

Nahrání protokolu jako artefaktu kanálu

Pokud chcete nahrát vlastní protokol jako artefakt kanálu, použijte PublishPipelineArtifact@1 úlohu. PublishPipelineArtifact@1 může nahrát jeden soubor nebo soubory v cestě k adresáři a je užitečné, pokud máte k nahrání mnoho vlastních souborů protokolu.

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

Další informace najdete v tématu Publikování artefaktů kanálu.

Zachycení podrobností o využití prostředků

Pokud používáte Azure DevOps Services, můžete vidět využití prostředků v protokolech, včetně využití disku, využití paměti a využití procesoru, povolením podrobných protokolů. Po dokončení kanálu vyhledejte v protokolech Agent environment resources položky pro každý krok.

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%

Pokud používáte Azure DevOps Server nebo pokud chcete shromažďovat další metriky, můžete pomocí PowerShellu zaznamenat využití prostředků a nahrát ho do protokolů kanálu. Po dokončení spuštění kanálu si můžete stáhnout protokoly kanálu a zobrazit zachycená data. Upload resource usage from pipeline run Pokud je krok šestým krokem v úloze, název souboru v protokolech bude 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()

Zachycení výpisu paměti procesu dotnet pomocí nástroje ProcDump

Pokud máte testovací spuštění, které se chybově ukončí, může vás zákaznická podpora požádat o zachycení výpisu paměti procesu dotnet po neúspěšném spuštění testu. Přidejte následující úkol za úlohu Visual Studio Test s condition: always(). Po dokončení spuštění kanálu si můžete stáhnout protokoly kanálu, včetně výpisu paměti.

# 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'

Zachycení trasování trasování Trasování událostí pro Windows pro hostovaného agenta

Pokud řešíte problémy se sítí s agenty hostovanými Microsoftem, může vás zákaznická podpora požádat, abyste shromáždili trasování trasování událostí pro Windows. Po dokončení spuštění kanálu si můžete stáhnout protokoly kanálu, včetně trasování událostí pro Windows.

# 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'

Zachycení perfview trasování pro sestavení sady Visual Studio

Pokud vás zákaznická podpora požádá o vytvoření perfview trasování sestavení sady Visual Studio, před a za krok sestavení sady Visual Studio přidejte do kanálu následující úlohy.

Po spuštění kanálu si můžete stáhnout artefakt PerfViewLog z podrobností o spuštění kanálu a odeslat tuto zákaznickou podporu.

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