Просмотр журналов для диагностики проблем конвейера
Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019
Журналы конвейера предоставляют мощный инструмент для определения причины сбоев конвейера, а подробные журналы можно настроить для предоставления дополнительных диагностических сведений.
Обычной отправной точкой является просмотр журналов после завершенной сборки или релиза. Чтобы просмотреть журналы, перейдите к сводке выполнения конвейера и выберите задание и задачу. В случае сбоя конкретной задачи проверьте журналы этой задачи. Настроить подробные журналы для включения дополнительных диагностических сведений.
Настройка подробных журналов
Чтобы упростить устранение неполадок, можно настроить ведение более подробных журналов.
Чтобы настроить подробные журналы для одного запуска, можно запустить новую сборку, выбрав Запустить конвейер и выбрав Включить диагностику системы, Запуск.
Чтобы настроить подробные журналы для всех запусков, можно добавить переменную с именем
system.debug
и задать для нее значениеtrue
.
Журналы конвейера Azure теперь могут записывать метрики использования ресурсов, такие как память, использование ЦП и доступное место на диске. Журналы также включают ресурсы, используемые агентом обработки данных и дочерними процессами, включая задачи, выполняемые в рамках задания. Если вы подозреваете, что задание в конвейере может столкнуться с ограничениями ресурсов, включите подробные логи, чтобы в журналы конвейера были внедрены сведения об использовании ресурсов. Метрики использования ресурсов доступны для любого агента, независимо от модели размещения.
Чтобы просмотреть метрики использования захваченных ресурсов, выполните поиск по журналам для Agent environment resources
записей для каждого шага.
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%
Просмотр и скачивание журналов
Чтобы просмотреть отдельные журналы для каждого шага, перейдите к результатам сборки для выполнения и выберите задание и шаг.
Чтобы скачать все журналы, перейдите к результатам выполнения сборки, выберите ..., а затем выберите Скачать журналы.
Помимо журналов диагностики конвейера доступны следующие специализированные типы журналов и могут содержать сведения для устранения неполадок.
- журналы диагностики работников
- журналы диагностики агента
- другие журналы
Журналы диагностики рабочего
Вы можете получить журнал диагностики завершенной сборки, созданной рабочим процессом в агенте сборки. Найдите файл журнала worker
с датой и временем готовой сборки. Например, worker_20160623-192022-utc_6172.log
.
Журналы диагностики агента
Журналы диагностики агента предоставляют запись о том, как был настроен агент и что произошло при запуске. Найдите файлы журнала agent
. Например, agent_20160624-144630-utc.log
. Существует два типа файлов журнала агента:
Файл журнала, созданный при запуске
config.cmd
. Этот журнал:Включает эту линию в верхней части:
Adding Command: configure
Показывает выбранные варианты конфигурации.
Файл журнала, созданный при запуске
run.cmd
. Этот журнал:Невозможно открыть до завершения процесса.
Пытается подключиться к организации Azure DevOps или Team Foundation Server.
Показывает, когда выполняется каждое задание и как оно завершено
Оба журнала показывают, как были обнаружены и заданы возможности агента.
Диагностика сети для локальных агентов
Установите значение Agent.Diagnostic
на true
, чтобы собирать дополнительные журналы, которые можно использовать для устранения неполадок сети для локально размещённых агентов.
Файл | Информация | Применимо к |
---|---|---|
cloudinit.* |
Процесс Cloud-init успешно завершён (если используется) | Линукс |
BrokenPackages.* |
Пакеты находятся в согласованном состоянии | Линукс |
Agent.* |
Переменные среды | Linux, Windows |
waagentConf.txt |
Агент виртуальной машины Azure (waagent.conf) | Azure: Linux, Windows |
environment.txt / agent.* |
Список членства в группе учетных записей | Виндоус |
Примечание.
Для Agent.Diagnostic
задается значение true
автоматически, если для System.Debug
задано значение true
.
Переменные Agent.Diagnostic
и журналы, описанные в этом разделе, доступны с агентом версии 2.200.0 и выше.
Для получения дополнительной информации см. раздел об устранении неполадок агента в репозитории с открытым исходным кодом microsoft/azure-pipelines-agent агента Azure Pipelines.
Другие логи
В журналах диагностики вы найдете environment.txt
и capabilities.txt
.
Файл environment.txt
содержит различные сведения о среде, в которой выполняется сборка. К ним относятся такие сведения, как выполнение задач, включение или отсутствие брандмауэра, сведения о версии PowerShell и некоторые другие элементы. Мы постоянно добавляем к этим данным, чтобы сделать его более полезным.
Файл capabilities.txt
предоставляет чистый способ просмотра всех возможностей, установленных на компьютере сборки, на котором выполняется сборка.
Журналы трассировки HTTP
- Используйте встроенную трассировку HTTP
- Использовать полную трассировку HTTP — Windows
- Использовать полную трассировку HTTP — macOS и Linux
Это важно
Трассировки HTTP и файлы трассировки могут содержать пароли и другие секреты. Не публиковать их на общедоступных сайтах.
Использование встроенной трассировки HTTP
Если агент имеет версию 2.114.0 или более новую, можно отслеживать заголовки трафика HTTP и записывать их в журнал диагностики. Задайте переменную среды VSTS_AGENT_HTTPTRACE
перед запуском agent.listener.
Windows:
set VSTS_AGENT_HTTPTRACE=true
macOS/Linux:
export VSTS_AGENT_HTTPTRACE=true
Использование полной трассировки HTTP — Windows
Запустите Fiddler.
Рекомендуется прослушивать только трафик агента. Отключить захват трафика для файла > (F12)
Включите расшифровку трафика HTTPS. Инструменты > параметры Fiddler > вкладка HTTPS. Расшифровка трафика HTTPS
Сообщите агенту, чтобы использовать прокси-сервер:
set VSTS_HTTP_PROXY=http://127.0.0.1:8888
Интерактивный запуск агента. Если вы запускаете программу как службу, вы можете задавать переменную среды в панели управления для учетной записи, от имени которой выполняется эта служба.
Перезапустите агент.
Использование полной трассировки HTTP — macOS и Linux
Используйте прокси-сервер Чарльза (аналогично Fiddler в Windows) для записи трассировки HTTP агента.
Запустите Прокси Чарльза.
Чарльз: Настройки прокси >> вкладка SSL. Включить. Добавьте URL-адрес.
Чарльз: прокси-сервер > Mac OSX Proxy. Рекомендуется отключить все, кроме трафика агента.
export VSTS_HTTP_PROXY=http://127.0.0.1:8888
Интерактивный запуск агента. Если она выполняется как сервис, можно задать в .env-файле. См. nix service
Перезапустите агент.
Запись пользовательских журналов
Помимо встроенных журналов, можно использовать задачи и скрипты для записи пользовательских журналов в конвейере. В следующих примерах показано, как зафиксировать использование ресурсов, сетевые трассы, дампы памяти и трассы perfview. Если вы работаете с поддержкой клиентов, вам может потребоваться записать журналы, такие как эти.
- Сбор подробной информации об использовании ресурсов
- Создание дампа памяти процесса dotnet с помощью ProcDump
- Сбор ETW трассировок для размещенного агента
- Capture perfview traces for Visual Studio build
Получить пользовательские журналы
После записи пользовательского журнала в конвейере необходимо загрузить его, чтобы его можно было получить для проверки. Вы можете отправить пользовательский журнал как часть стандартных журналов конвейера или отправить его в качестве артефакта. В примерах в следующих разделах показаны оба способа отправки пользовательских журналов.
Загрузите журнал в рамках стандартных журналов
Чтобы отправить пользовательский журнал в рамках стандартных журналов конвейера, используйте ##vso[task.uploadfile]
для отправки нужного файла. Чтобы использовать эту команду, укажите ее как часть команды скрипта, как показано в следующем примере. Файл можно скачать и просмотреть как часть стандартных журналов каналов. Метод ##vso[task.uploadfile]
хорошо подходит для отправки одного файла журнала. Если у вас несколько файлов журнала, необходимо использовать отдельную строку ##vso[task.uploadfile]
для каждого файла.
- pwsh: Write-Host "##vso[task.uploadfile]$(Agent.TempDirectory)\resource-usage.txt"
Дополнительные сведения см. в разделе «Команды ведения журнала» и UploadFile: файл для загрузки, который можно скачать вместе с журналами задач.
Загрузите журнал как артефакт конвейера
Чтобы загрузить пользовательский лог в качестве артефакта конвейера, используйте задачу PublishPipelineArtifact@1.
PublishPipelineArtifact@1
может отправлять один файл или файлы в каталоге, что полезно, если у вас много настроенных файлов журнала для отправки.
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Pipeline.Workspace)/s/trace'
artifact: 'file_result.pcap'
publishLocation: 'pipeline'
Более подробную информацию смотрите в разделе публикация артефактов конвейера.
Сбор сведений об использовании ресурсов
При использовании Azure DevOps Services в журналах можно увидеть использование ресурсов, включая загрузку дисков, потребление памяти и загрузку ЦП, если включить подробные журналы. После завершения конвейера проверьте журналы на наличие записей Agent environment resources
для каждого шага.
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%
Если вы используете Azure DevOps Server или хотите собрать дополнительные метрики, вы можете использовать PowerShell для записи использования ресурсов и отправки его в журналы конвейера. После завершения выполнения конвейера можно скачать журналы конвейера и просмотреть захваченные данные. Если Upload resource usage from pipeline run
шаг является шестым шагом в задании, имя файла в журналах будет 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()
Создание дампа памяти процесса .NET с помощью ProcDump
Если у вас есть тестовое выполнение, которое завершается сбоем, служба поддержки клиентов может попросить вас записать дамп памяти процесса dotnet после неудачного выполнения теста. Добавьте следующую задачу после задачи теста в Visual Studio с condition: always()
. После завершения выполнения конвейера можно скачать журналы конвейера, включаядампа памяти.
# 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 для размещенного агента
Если вы устраняете проблемы с сетью с агентами, размещенными корпорацией Майкрософт, служба поддержки клиентов может попросить вас собирать трассировки ETW. После завершения выполнения конвейера можно скачать журналы конвейера, включая трассировки 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'
Запись трассировок perfview для сборки в Visual Studio
Если служба поддержки клиентов просит создать perfview трассировку сборки Visual Studio, добавьте следующие задачи в конвейер до и после шага сборки Visual Studio.
После запуска конвейера можно скачать артефакт PerfViewLog из сведений о выполнении конвейера и отправить этот файл в службу поддержки.
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