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.
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 natrue
.
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
natrue
.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 natrue
a vyberte Povolit v době fronty.Pokud chcete nakonfigurovat podrobné protokoly pro kanál YAML, přidejte proměnnou
system.debug
vvariables
čá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.
Pokud chcete stáhnout všechny protokoly, přejděte na výsledky sestavení pro spuštění, vyberte ...a zvolte 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
- Použití integrovaného trasování HTTP
- Použití úplného trasování HTTP – Windows
- Použití úplného trasování HTTP – macOS a Linux
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
Spusťte Fiddler.
Doporučujeme naslouchat jenom provozu agenta. Vypnutý provoz zachytávání souborů > (F12)
Povolte dešifrování provozu HTTPS. Nástroje > Fiddleru – karta Možnosti > HTTPS. Dešifrování provozu HTTPS
Dejte agentu vědět, že má používat proxy server:
set VSTS_HTTP_PROXY=http://127.0.0.1:8888
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á.
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).
Spusťte Charles Proxy.
Charles: Proxy proxy > Nastavení > kartu SSL. Povolte. Přidejte adresu URL.
Charles: Proxy > Mac OSX Proxy. Doporučujeme zakázat jenom provoz agenta.
export VSTS_HTTP_PROXY=http://127.0.0.1:8888
Spusťte agenta interaktivně. Pokud běží jako služba, můžete ji nastavit v souboru .env. Viz nix service.
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.
- Zachycení podrobností o využití prostředků
- Zachycení výpisu paměti procesu dotnet pomocí nástroje ProcDump
- Zachycení trasování trasování Trasování událostí pro Windows pro hostovaného agenta
- Capture perfview traces for Visual Studio build
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 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