Przeglądanie dzienników w celu diagnozowania problemów z potokami
Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019
Dzienniki potoków udostępniają zaawansowane narzędzie do określania przyczyny awarii potoku, a pełne dzienniki można skonfigurować w celu udostępnienia dodatkowych informacji diagnostycznych.
Typowym punktem wyjścia jest przejrzenie dzienników w ukończonej kompilacji lub wydaniu. Dzienniki można wyświetlić, przechodząc do podsumowania przebiegu potoku i wybierając zadanie i zadanie. Jeśli określone zadanie kończy się niepowodzeniem, sprawdź dzienniki dla tego zadania. Skonfiguruj pełne dzienniki , aby uwzględnić więcej informacji diagnostycznych.
Konfigurowanie pełnych dzienników
Aby pomóc w rozwiązywaniu problemów, możesz skonfigurować dzienniki tak, aby były bardziej szczegółowe.
Aby skonfigurować pełne dzienniki dla pojedynczego przebiegu, możesz uruchomić nową kompilację, wybierając pozycję Uruchom potok i wybierając pozycję Włącz diagnostykę systemu, Uruchom.
Aby skonfigurować pełne dzienniki dla wszystkich przebiegów, możesz dodać zmienną o nazwie
system.debug
i ustawić jej wartość natrue
.
Aby skonfigurować pełne dzienniki dla pojedynczego przebiegu, możesz uruchomić nową kompilację, wybierając pozycję Kompilacja kolejki i ustawiając wartość zmiennej
system.debug
natrue
.Aby skonfigurować pełne dzienniki dla wszystkich przebiegów, zmodyfikuj kompilację, przejdź do karty Zmienne i dodaj zmienną o nazwie
system.debug
, ustaw jej wartość natrue
, a następnie wybierz opcję Zezwalaj na czas kolejki.Aby skonfigurować pełne dzienniki dla potoku YAML, dodaj zmienną
system.debug
wvariables
sekcji :variables: system.debug: true
Dzienniki potoku platformy Azure mogą teraz przechwytywać metryki wykorzystania zasobów, takie jak pamięć, użycie procesora CPU i dostępne miejsce na dysku. Dzienniki obejmują również zasoby używane przez agenta potoku i procesy podrzędne, w tym zadania uruchamiane w zadaniu. Jeśli podejrzewasz, że zadanie potoku może napotkać ograniczenia zasobów, włącz pełne dzienniki, aby informacje o wykorzystaniu zasobów zostały wprowadzone do dzienników potoku. Metryki wykorzystania zasobów są dostępne dla dowolnego agenta niezależnie od modelu hostingu.
Aby wyświetlić przechwycone metryki wykorzystania zasobów, przeszukaj dzienniki pod Agent environment resources
kątem wpisów dla każdego kroku.
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%
Wyświetlanie i pobieranie dzienników
Aby wyświetlić poszczególne dzienniki dla każdego kroku, przejdź do wyników kompilacji dla przebiegu, a następnie wybierz zadanie i krok.
Aby pobrać wszystkie dzienniki, przejdź do wyników kompilacji dla przebiegu, wybierz pozycję ..., a następnie wybierz pozycję Pobierz dzienniki.
Aby pobrać wszystkie dzienniki, przejdź do wyników kompilacji dla przebiegu, wybierz pozycję Pobierz wszystkie dzienniki jako zip.
Oprócz dzienników diagnostycznych potoku dostępne są następujące wyspecjalizowane typy dzienników i mogą zawierać informacje ułatwiające rozwiązywanie problemów.
Dzienniki diagnostyczne procesu roboczego
Dziennik diagnostyczny ukończonej kompilacji wygenerowanej przez proces roboczy można pobrać na agencie kompilacji. worker
Poszukaj pliku dziennika zawierającego sygnaturę daty i godziny ukończonej kompilacji. Na przykład worker_20160623-192022-utc_6172.log
.
Dzienniki diagnostyczne agenta
Dzienniki diagnostyczne agenta zawierają rekord sposobu konfigurowania agenta i tego, co się stało po uruchomieniu. agent
Wyszukaj pliki dziennika. Na przykład agent_20160624-144630-utc.log
. Istnieją dwa rodzaje plików dziennika agenta:
Plik dziennika wygenerowany podczas uruchamiania
config.cmd
polecenia . Ten dziennik:Zawiera ten wiersz w górnej części:
Adding Command: configure
Pokazuje dokonane wybory konfiguracji.
Plik dziennika wygenerowany podczas uruchamiania
run.cmd
polecenia . Ten dziennik:Nie można otworzyć, dopóki proces nie zostanie zakończony.
Próbuje nawiązać połączenie z organizacją usługi Azure DevOps lub serwerem Team Foundation Server.
Pokazuje, kiedy każde zadanie zostało uruchomione i jak zostało ukończone
Oba dzienniki pokazują, jak zostały wykryte i ustawione możliwości agenta.
Diagnostyka sieci dla własnych agentów
Dla elementu Agent.Diagnostic
ustaw wartość true
, aby zebrać dodatkowe dzienniki, których można użyć do rozwiązywania problemów z siecią w przypadku własnych agentów.
Plik | Informacja | Dotyczy |
---|---|---|
cloudinit.* |
Pomyślnie ukończono inicjowanie chmury (jeśli jest używane) | Linux |
BrokenPackages.* |
Pakiety są w stanie spójnym | Linux |
Agent.* |
Zmienne środowiskowe | Linux, Windows |
waagentConf.txt |
Agent maszyny wirtualnej platformy Azure (waagent.conf) | Azure: Linux, Windows |
environment.txt / agent.* |
Lista członkostwa w grupie kont | Windows |
Uwaga
Element Agent.Diagnostic
ma automatycznie ustawianą wartość true
, gdy element System.Debug
ma ustawioną wartość true
.
Zmienne Agent.Diagnostic
i dzienniki opisane w tej sekcji są dostępne w wersji 2.200.0 i nowszych.
Aby uzyskać więcej informacji, zobacz rozwiązywanie problemów z agentem w repozytorium agenta open source agenta microsoft/azure-pipelines-agenta usługi Azure Pipelines.
Inne dzienniki
W dziennikach diagnostycznych znajdziesz environment.txt
i capabilities.txt
.
Plik environment.txt
zawiera różne informacje o środowisku, w którym uruchomiono kompilację. Obejmuje to informacje, takie jak zadania, które są uruchamiane, czy zapora jest włączona, informacje o wersji programu PowerShell i niektóre inne elementy. Stale dodajemy te dane, aby uczynić je bardziej użytecznymi.
Plik capabilities.txt
zapewnia czysty sposób na sprawdzenie wszystkich możliwości zainstalowanych na maszynie kompilacji, na którym uruchomiono kompilację.
Dzienniki śledzenia HTTP
- Korzystanie z wbudowanego śledzenia HTTP
- Korzystanie z pełnego śledzenia HTTP — Windows
- Korzystanie z pełnego śledzenia HTTP — macOS i Linux
Ważne
Ślady HTTP i pliki śledzenia mogą zawierać hasła i inne wpisy tajne. Nie publikuj ich w miejscach publicznych.
Korzystanie z wbudowanego śledzenia HTTP
Jeśli agent jest w wersji 2.114.0 lub nowszej, możesz śledzić nagłówki ruchu HTTP i zapisywać je w dzienniku diagnostycznym. Ustaw zmienną VSTS_AGENT_HTTPTRACE
środowiskową przed uruchomieniem agent.listener.
Windows:
set VSTS_AGENT_HTTPTRACE=true
macOS/Linux:
export VSTS_AGENT_HTTPTRACE=true
Korzystanie z pełnego śledzenia HTTP — Windows
Uruchom program Fiddler.
Zalecamy nasłuchiwanie tylko ruchu agenta. Przechwytywanie ruchu plików > wyłączone (F12)
Włącz odszyfrowywanie ruchu HTTPS. Karta Narzędzia > Fiddler Opcje > PROTOKOŁU HTTPS. Odszyfruj ruch HTTPS
Poinformuj agenta o użyciu serwera proxy:
set VSTS_HTTP_PROXY=http://127.0.0.1:8888
Uruchom agenta interaktywnie. Jeśli używasz usługi jako usługi, możesz ustawić jako zmienną środowiskową w panelu sterowania dla konta, w którym działa usługa.
Uruchom ponownie agenta.
Korzystanie z pełnego śledzenia HTTP — macOS i Linux
Użyj serwera proxy Charlesa (podobnego do programu Fiddler w systemie Windows), aby przechwycić ślad HTTP agenta.
Uruchom serwer proxy Charles.
Charles: serwer proxy > Ustawienia > karta SSL. Włącz. Dodaj adres URL.
Charles: Serwer proxy systemu > Mac OSX. Zalecamy wyłączenie, aby wyświetlić tylko ruch agenta.
export VSTS_HTTP_PROXY=http://127.0.0.1:8888
Uruchom agenta interaktywnie. Jeśli jest ona uruchomiona jako usługa, możesz ją ustawić w pliku env. Zobacz nix service
Uruchom ponownie agenta.
Przechwytywanie dzienników niestandardowych
Oprócz wbudowanych dzienników można używać zadań i skryptów do przechwytywania dzienników niestandardowych w potoku. W poniższych przykładach pokazano, jak przechwytywać wykorzystanie zasobów, ślady sieci, zrzuty pamięci i perfview ślady. Jeśli pracujesz z pomocą techniczną, może zostać wyświetlony monit o przechwycenie dzienników, takich jak te.
- Szczegóły wykorzystania zasobów przechwytywania
- Przechwytywanie zrzutu pamięci procesu dotnet przy użyciu narzędzia ProcDump
- Przechwytywanie śladów ETW dla hostowanego agenta
- Capture perfview traces for Visual Studio build
Pobieranie dzienników niestandardowych
Po przechwyceniu niestandardowego dziennika w potoku należy go przekazać, aby można było go pobrać do przeglądu. Dziennik niestandardowy można przekazać w ramach standardowych dzienników potoku lub przekazać go jako artefakt. Przykłady w poniższych sekcjach przedstawiają oba sposoby przekazywania dzienników niestandardowych.
Przekazywanie dziennika w ramach standardowych dzienników
Aby przekazać dziennik niestandardowy w ramach standardowych dzienników potoku, użyj polecenia ##vso[task.uploadfile]
, aby przekazać żądany plik. Aby użyć tego polecenia, określ go jako część polecenia skryptu, jak pokazano w poniższym przykładzie. Plik można pobrać i wyświetlić jako część standardowych dzienników potoku. Metoda ##vso[task.uploadfile]
jest dobra do przekazywania pojedynczego pliku dziennika. Jeśli masz więcej niż jeden plik dziennika, musisz użyć oddzielnego ##vso[task.uploadfile]
wiersza dla każdego pliku.
- pwsh: Write-Host "##vso[task.uploadfile]$(Agent.TempDirectory)\resource-usage.txt"
Aby uzyskać więcej informacji, zobacz Polecenia rejestrowania i UploadFile: Przekazywanie pliku, który można pobrać z dziennikami zadań.
Przekazywanie dziennika jako artefaktu potoku
Aby przekazać dziennik niestandardowy jako artefakt potoku, użyj zadania PublishPipelineArtifact@1 . PublishPipelineArtifact@1
może przekazać jeden plik lub pliki w ścieżce katalogu i jest przydatny, jeśli masz wiele niestandardowych plików dziennika do przekazania.
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Pipeline.Workspace)/s/trace'
artifact: 'file_result.pcap'
publishLocation: 'pipeline'
Aby uzyskać więcej informacji, zobacz Publikowanie artefaktów potoku.
Szczegóły wykorzystania zasobów przechwytywania
W przypadku korzystania z usług Azure DevOps Services można wyświetlić wykorzystanie zasobów w dziennikach, w tym użycie dysku, użycie pamięci i użycie procesora CPU, włączając pełne dzienniki. Po zakończeniu potoku wyszukaj wpisy w Agent environment resources
dziennikach dla każdego kroku.
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%
Jeśli używasz usługi Azure DevOps Server lub chcesz zebrać dodatkowe metryki, możesz użyć programu PowerShell do przechwytywania wykorzystania zasobów i przekazywania go do dzienników potoku. Po zakończeniu przebiegu potoku można pobrać dzienniki potoku i wyświetlić przechwycone dane. Upload resource usage from pipeline run
Jeśli krok jest szóstym krokiem zadania, nazwa pliku w dziennikach będzie 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()
Przechwytywanie zrzutu pamięci procesu dotnet przy użyciu narzędzia ProcDump
Jeśli masz wykonanie testu, które ulega awarii, dział pomocy technicznej klienta może poprosić o przechwycenie zrzutu pamięci procesu dotnet po nieudanym wykonaniu testu. Dodaj następujące zadanie po zadaniu testowym programu Visual Studio za pomocą polecenia condition: always()
. Po zakończeniu przebiegu potoku można pobrać dzienniki potoku, w tym zrzut pamięci.
# 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'
Przechwytywanie śladów ETW dla hostowanego agenta
Jeśli rozwiązujesz problemy z siecią agentów hostowanych przez firmę Microsoft, dział pomocy technicznej klienta może poprosić Cię o zebranie śladów ETW. Po zakończeniu przebiegu potoku można pobrać dzienniki potoku, w tym ślady ETW.
# 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'
Przechwytywanie perfview śladów kompilacji programu Visual Studio
Jeśli dział pomocy technicznej klienta poprosi o utworzenie perfview śladu kompilacji programu Visual Studio, przed i po kroku kompilacji programu Visual Studio dodaj następujące zadania do potoku.
Po uruchomieniu potoku możesz pobrać artefakt PerfViewLog ze szczegółów przebiegu potoku i wysłać ten plik do działu obsługi klienta.
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