Esaminare i log per eseguire la diagnostica dei problemi della pipeline
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
I log della pipeline offrono uno strumento potente per determinare la causa degli errori della pipeline e i log dettagliati possono essere configurati per fornire altre informazioni di diagnostica.
Un punto di partenza tipico consiste nell'esaminare i log nella build o nella versione completata. È possibile visualizzare i log passando al riepilogo dell'esecuzione della pipeline e selezionando il processo e l'attività. Se una determinata attività ha esito negativo, controllare i log per l'attività. Configurare i log dettagliati per includere altre informazioni di diagnostica.
Configurare i log dettagliati
Per facilitare la risoluzione dei problemi, è possibile configurare i log in modo più dettagliato.
Per configurare i log dettagliati per una singola esecuzione, è possibile avviare una nuova compilazione scegliendo Esegui pipeline e selezionando Abilita diagnostica di sistema, Esegui.
Per configurare i log dettagliati per tutte le esecuzioni, è possibile aggiungere una variabile denominata
system.debug
e impostarne il valore sutrue
.
Per configurare i log dettagliati per una singola esecuzione, è possibile avviare una nuova compilazione scegliendo Compilazione coda e impostando il valore per la
system.debug
variabile sutrue
.Per configurare i log dettagliati per tutte le esecuzioni, modificare la compilazione, passare alla scheda Variabili e aggiungere una variabile denominata
system.debug
, impostarne il valore sutrue
e selezionare Consenti in fase di coda.Per configurare i log dettagliati per una pipeline YAML, aggiungere la
system.debug
variabile nellavariables
sezione :variables: system.debug: true
I log della pipeline di Azure possono ora acquisire le metriche di utilizzo delle risorse, ad esempio memoria, utilizzo della CPU e spazio disponibile su disco. I log includono anche le risorse usate dall'agente della pipeline e dai processi figlio, incluse le attività eseguite in un processo. Se si sospetta che il processo della pipeline possa verificarsi in vincoli di risorse, abilitare i log dettagliati in modo che le informazioni sull'utilizzo delle risorse vengano inserite nei log della pipeline. Le metriche di utilizzo delle risorse sono disponibili in qualsiasi agente, indipendentemente dal modello di hosting.
Per visualizzare le metriche di utilizzo delle risorse acquisite, cercare i log per Agent environment resources
ogni passaggio.
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%
Visualizzare e scaricare i log
Per visualizzare i singoli log per ogni passaggio, passare ai risultati della compilazione per l'esecuzione e selezionare il processo e il passaggio.
Per scaricare tutti i log, passare ai risultati della compilazione per l'esecuzione, selezionare ...e scegliere Scarica log.
Per scaricare tutti i log, passare ai risultati della compilazione per l'esecuzione, scegliere Scarica tutti i log come ZIP.
Oltre ai log di diagnostica della pipeline, sono disponibili i tipi di log specializzati seguenti e possono contenere informazioni utili per la risoluzione dei problemi.
Log di diagnostica del ruolo di lavoro
È possibile ottenere il log di diagnostica della compilazione completata generata dal processo di lavoro nell'agente di compilazione. Cercare il worker
file di log con data e ora della compilazione completata. Ad esempio: worker_20160623-192022-utc_6172.log
.
Log di diagnostica dell’agente
I log di diagnostica dell'agente forniscono un record del modo in cui l'agente è stato configurato e cosa è successo quando è stato eseguito. Cercare i file di agent
log. Ad esempio: agent_20160624-144630-utc.log
. Esistono due tipi di file di log dell'agente:
File di log generato durante l'esecuzione di
config.cmd
. Questo log:Include questa riga vicino alla parte superiore:
Adding Command: configure
Mostra le scelte di configurazione effettuate.
File di log generato durante l'esecuzione di
run.cmd
. Questo log:Impossibile aprire fino a quando il processo non viene terminato.
Tenta di connettersi all'organizzazione di Azure DevOps o Team Foundation Server .
Mostra quando è stato eseguito ogni processo e come è stato completato
Entrambi i log mostrano come sono state rilevate e impostate le funzionalità dell'agente.
Diagnostica di rete per gli agenti self-hosted
Impostare il valore di Agent.Diagnostic
su true
per raccogliere log aggiuntivi che possono essere usati per la risoluzione dei problemi di rete per gli agenti self-hosted.
file | Informazioni | Si applica a |
---|---|---|
cloudinit.* |
Cloud-init completato correttamente (se usato) | Linux |
BrokenPackages.* |
I pacchetti sono in uno stato coerente | Linux |
Agent.* |
Variabili di ambiente | Linux, Windows |
waagentConf.txt |
Agente di macchine virtuali di Azure (waagent.conf) | Azure: Linux, Windows |
environment.txt / agent.* |
Elenco di appartenenze ai gruppi di account | Windows |
Nota
Agent.Diagnostic
viene impostato automaticamente su true
quando System.Debug
è impostato su true
.
La Agent.Diagnostic
variabile e i log descritti in questa sezione sono disponibili con Agent v2.200.0 e versioni successive.
Per altre informazioni, vedere Risoluzione dei problemi dell'agente nel repository dell'agente open source microsoft/azure-pipelines-agent di Azure Pipelines.
Altri log
All'interno dei log di diagnostica sono disponibili environment.txt
e capabilities.txt
.
Il environment.txt
file contiene varie informazioni sull'ambiente in cui è stata eseguita la compilazione. Sono incluse informazioni come le attività eseguite, se il firewall è abilitato o meno, le informazioni sulla versione di PowerShell e altri elementi. Aggiungiamo continuamente a questi dati per renderli più utili.
Il capabilities.txt
file offre un modo pulito per visualizzare tutte le funzionalità installate nel computer di compilazione che ha eseguito la compilazione.
Log di traccia HTTP
- Usare la traccia HTTP predefinita
- Usare la traccia HTTP completa - Windows
- Usare la traccia HTTP completa - macOS e Linux
Importante
Le tracce HTTP e i file di traccia possono contenere password e altri segreti. Non pubblicarli su siti pubblici.
Usare la traccia HTTP predefinita
Se l'agente è versione 2.114.0 o successiva, è possibile tracciare le intestazioni del traffico HTTP e scriverle nel log di diagnostica. Impostare la VSTS_AGENT_HTTPTRACE
variabile di ambiente prima di avviare agent.listener.
Windows:
set VSTS_AGENT_HTTPTRACE=true
macOS/Linux:
export VSTS_AGENT_HTTPTRACE=true
Usare la traccia HTTP completa - Windows
Avviare Fiddler.
È consigliabile ascoltare solo il traffico dell'agente. File > Capture Traffic off (F12)
Abilitare la decrittografia del traffico HTTPS. Scheda Https delle opzioni > di Fiddler degli strumenti>. Decrittografare il traffico HTTPS
Informare l'agente di usare il proxy:
set VSTS_HTTP_PROXY=http://127.0.0.1:8888
Eseguire l'agente in modo interattivo. Se si esegue come servizio, è possibile impostare come variabile di ambiente nel pannello di controllo per l'account in cui è in esecuzione il servizio.
Riavviare l'agente.
Usare la traccia HTTP completa - macOS e Linux
Usare Charles Proxy (simile a Fiddler in Windows) per acquisire la traccia HTTP dell'agente.
Avviare Charles Proxy.
Charles: Proxy proxy > Impostazioni > scheda SSL. Abilita. Aggiungere l'URL.
Charles: Proxy > Mac OSX Proxy. È consigliabile disabilitare per visualizzare solo il traffico dell'agente.
export VSTS_HTTP_PROXY=http://127.0.0.1:8888
Eseguire l'agente in modo interattivo. Se è in esecuzione come servizio, è possibile impostare nel file con estensione env. Vedere nix service
Riavviare l'agente.
Acquisire log personalizzati
Oltre ai log predefiniti, è possibile usare attività e script per acquisire log personalizzati nella pipeline. Gli esempi seguenti illustrano come acquisire l'utilizzo delle risorse, le tracce di rete, i dump della memoria e perfview le tracce. Se si lavora con il supporto tecnico clienti, potrebbe essere richiesto di acquisire log come questi.
- Acquisire i dettagli sull'utilizzo delle risorse
- Acquisire un dump della memoria del processo dotnet usando ProcDump
- Acquisire tracce ETW per un agente ospitato
- Capture perfview traces for Visual Studio build
Recuperare log personalizzati
Dopo aver acquisito un log personalizzato nella pipeline, è necessario caricarlo in modo che possa essere recuperato per la revisione. È possibile caricare il log personalizzato come parte dei log della pipeline standard oppure caricarlo come artefatto. Gli esempi nelle sezioni seguenti illustrano entrambi i modi per caricare log personalizzati.
Caricare un log come parte dei log standard
Per caricare il log personalizzato come parte dei log della pipeline standard, usare ##vso[task.uploadfile]
per caricare il file desiderato. Per usare questo comando, specificarlo come parte di un comando script, come illustrato nell'esempio seguente. Il file può essere scaricato e visualizzato come parte dei log della pipeline standard. Il ##vso[task.uploadfile]
metodo è utile per caricare un singolo file di log. Se sono presenti più file di log, è necessario usare una riga separata ##vso[task.uploadfile]
per ogni file.
- pwsh: Write-Host "##vso[task.uploadfile]$(Agent.TempDirectory)\resource-usage.txt"
Per altre informazioni, vedere Comandi di registrazione e UploadFile: Caricare un file che può essere scaricato con i log attività.
Caricare un log come artefatto della pipeline
Per caricare un log personalizzato come artefatto della pipeline, usare l'attività PublishPipelineArtifact@1 . PublishPipelineArtifact@1
può caricare un singolo file o i file in un percorso di directory ed è utile se sono presenti molti file di log personalizzati da caricare.
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Pipeline.Workspace)/s/trace'
artifact: 'file_result.pcap'
publishLocation: 'pipeline'
Per altre informazioni, vedere Pubblicare artefatti della pipeline.
Acquisire i dettagli sull'utilizzo delle risorse
Quando si usa Azure DevOps Services, è possibile visualizzare l'utilizzo delle risorse nei log, tra cui l'utilizzo del disco, l'utilizzo della memoria e l'utilizzo della CPU, abilitando i log dettagliati. Al termine della pipeline, cercare nei log le voci per Agent environment resources
ogni passaggio.
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%
Se si usa Azure DevOps Server o se si vogliono raccogliere metriche aggiuntive, è possibile usare PowerShell per acquisire l'utilizzo delle risorse e caricarlo nei log della pipeline. Al termine dell'esecuzione della pipeline, è possibile scaricare i log della pipeline e visualizzare i dati acquisiti. Se il Upload resource usage from pipeline run
passaggio è il sesto passaggio del processo, il nome file nei log verrà 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()
Acquisire un dump della memoria del processo dotnet usando ProcDump
Se si dispone di un'esecuzione di test che si arresta in modo anomalo, il supporto tecnico potrebbe chiedere di acquisire un dump della memoria del processo dotnet dopo l'esecuzione di test non riuscita. Aggiungere l'attività seguente dopo l'attività test di Visual Studio con condition: always()
. Al termine dell'esecuzione della pipeline, è possibile scaricare i log della pipeline, incluso il dump della memoria.
# 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'
Acquisire tracce ETW per un agente ospitato
Se si stanno risolvendo i problemi di rete con gli agenti ospitati da Microsoft, il supporto tecnico potrebbe chiedere di raccogliere tracce ETW. Al termine dell'esecuzione della pipeline, è possibile scaricare i log della pipeline, incluse le tracce 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'
Acquisire perfview tracce per la compilazione di Visual Studio
Se il supporto tecnico chiede di creare una perfview traccia della compilazione di Visual Studio, aggiungere le attività seguenti alla pipeline prima e dopo il passaggio di compilazione di Visual Studio.
Dopo aver eseguito la pipeline, è possibile scaricare l'artefatto PerfViewLog dai dettagli dell'esecuzione della pipeline e inviare il supporto tecnico del file.
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