Просмотр журналов для диагностики проблем с конвейером

Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019

Журналы конвейера предоставляют мощный инструмент для определения причины сбоев конвейера, а подробные журналы можно настроить для предоставления дополнительных диагностических сведений.

Обычной отправной точкой является просмотр журналов в завершенной сборке или выпуске. Чтобы просмотреть журналы, перейдите к сводке выполнения конвейера и выберите задание и задачу. В случае сбоя конкретной задачи проверьте журналы этой задачи. Настройте подробные журналы для включения дополнительных диагностических сведений.

Настройка подробных журналов

Чтобы упростить устранение неполадок, можно настроить ведение более подробных журналов.

  • Чтобы настроить подробные журналы для одного запуска, можно запустить новую сборку, выбрав конвейер "Запуск" и выбрав "Включить системные диагностика", "Выполнить".

    Enable system diagnostics

  • Чтобы настроить подробные журналы для всех запусков, можно добавить переменную с именем system.debug и задать для нее значение true.

  • Чтобы настроить подробные журналы для одного запуска, можно запустить новую сборку, выбрав сборку очереди и указав значение переменной system.debugtrue.

  • Чтобы настроить подробные журналы для всех запусков, измените сборку, перейдите на вкладку "Переменные " и добавьте переменную с именем 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

Если агент имеет версию 2.114.0 или более новую, можно отслеживать заголовки трафика HTTP и записывать их в журнал диагностики. VSTS_AGENT_HTTPTRACE Задайте переменную среды перед запуском agent.listener.

Windows:
    set VSTS_AGENT_HTTPTRACE=true

macOS/Linux:
    export VSTS_AGENT_HTTPTRACE=true

Использование полной трассировки HTTP — Windows

  1. Запустите Fiddler.

  2. Рекомендуется прослушивать только трафик агента. Отключение трафика записи файлов > (F12)

  3. Включите расшифровку трафика HTTPS. Вкладка "Параметры > Fiddler" > HTTPS. Расшифровка трафика HTTPS

  4. Сообщите агенту, чтобы использовать прокси-сервер:

    set VSTS_HTTP_PROXY=http://127.0.0.1:8888
    
  5. Интерактивный запуск агента. Если вы работаете в качестве службы, вы можете задать переменную среды на панели управления для учетной записи, в которой выполняется служба.

  6. Перезапустите агент.

Использование полной трассировки HTTP — macOS и Linux

Используйте прокси-сервер Чарльза (аналогично Fiddler в Windows) для записи трассировки HTTP агента.

  1. Запустите Прокси Чарльза.

  2. Чарльз: прокси-сервер > Параметры вкладку > SSL. Включите. Добавьте URL-адрес.

  3. Чарльз: Прокси-сервер > Mac OSX. Рекомендуется отключить только трафик агента.

    export VSTS_HTTP_PROXY=http://127.0.0.1:8888
    
  4. Интерактивный запуск агента. Если она выполняется как услуга, можно задать в env-файле. См. раздел nix service.

  5. Перезапустите агент.

Запись пользовательских журналов

Помимо встроенных журналов, можно использовать задачи и сценарии для записи пользовательских журналов в конвейере. В следующих примерах показано, как записывать использование ресурсов, трассировку сети, дампы памяти и perfview трассировки. Если вы работаете с поддержкой клиентов, вам может потребоваться записать журналы, такие как эти.

Получение пользовательских журналов

После записи пользовательского журнала в конвейере необходимо передать его, чтобы его можно было получить для проверки. Вы можете отправить пользовательский журнал как часть стандартных журналов конвейера или отправить его в качестве артефакта. В примерах в следующих разделах показаны оба способа отправки пользовательских журналов.

Отправка журнала в рамках стандартных журналов

Чтобы отправить пользовательский журнал в составе стандартных журналов конвейера, используйте ##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 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