Просмотр журналов для диагностики проблем с конвейером
Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019
Журналы конвейера предоставляют мощный инструмент для определения причины сбоев конвейера, а подробные журналы можно настроить для предоставления дополнительных диагностических сведений.
Обычной отправной точкой является просмотр журналов в завершенной сборке или выпуске. Чтобы просмотреть журналы, перейдите к сводке выполнения конвейера и выберите задание и задачу. В случае сбоя конкретной задачи проверьте журналы этой задачи. Настройте подробные журналы для включения дополнительных диагностических сведений.
Настройка подробных журналов
Чтобы упростить устранение неполадок, можно настроить ведение более подробных журналов.
Чтобы настроить подробные журналы для одного запуска, можно запустить новую сборку, выбрав конвейер "Запуск" и выбрав "Включить системные диагностика", "Выполнить".
Чтобы настроить подробные журналы для всех запусков, можно добавить переменную с именем
system.debug
и задать для нее значениеtrue
.
Чтобы настроить подробные журналы для одного запуска, можно запустить новую сборку, выбрав сборку очереди и указав значение переменной
system.debug
true
.Чтобы настроить подробные журналы для всех запусков, измените сборку, перейдите на вкладку "Переменные " и добавьте переменную с именем
system.debug
, задайте для нее значениеtrue
и выберите " Разрешить во время очереди".Чтобы настроить подробные журналы для конвейера YAML, добавьте
system.debug
переменную вvariables
раздел:variables: 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%
Просмотр и скачивание журналов
Чтобы просмотреть отдельные журналы для каждого шага, перейдите к результатам сборки для выполнения и выберите задание и шаг.
Чтобы скачать все журналы, перейдите к результатам сборки для выполнения, выберите ...и выберите " Скачать журналы".
Чтобы скачать все журналы, перейдите к результатам сборки для выполнения, выберите "Скачать все журналы в виде ZIP- файла".
Помимо журналов диагностики конвейера доступны следующие специализированные типы журналов и могут содержать сведения для устранения неполадок.
Журналы диагностики рабочей роли
Вы можете получить журнал диагностики завершенной сборки, созданной рабочим процессом в агенте сборки. 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 успешно завершен (если используется) | Linux |
BrokenPackages.* |
Пакеты находятся в согласованном состоянии | Linux |
Agent.* |
Переменные среды | Linux, Windows |
waagentConf.txt |
Агент виртуальной машины Azure (waagent.conf) | Azure: Linux, Windows |
environment.txt / agent.* |
Список членства в группе учетных записей | Windows |
Примечание.
Для Agent.Diagnostic
задается значение true
автоматически, если для System.Debug
задано значение true
.
Переменные Agent.Diagnostic
и журналы, описанные в этом разделе, доступны с агентом версии 2.200.0 и выше.
Дополнительные сведения см. в статье об устранении неполадок агента microsoft/azure-pipelines-agent Azure Pipelines agent с открытым исходным кодом.
Другие журналы
Внутри журналов диагностики вы найдете 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. Рекомендуется отключить только трафик агента.
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()
Запись дампа памяти процесса dotnet с помощью 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