Анализ времени процессора, затраченного на фоновые задачи (Sidekiq)

Вы можете включить логирование Sidekiq для сбора данных о времени, затраченном на каждую задачу, через ENV["DISCOURSE_LOG_SIDEKIQ"].

Один из способов включить это без пересборки контейнера — отредактировать файл `/src/config/environments/production.rb` и добавить этот код в начале:
ENV["DISCOURSE_LOG_SIDEKIQ"] = "1"

Затем перезапустите контейнер.

Механизм задач будет записывать данные в файл log/sidekiq.log в формате JSON-линий, который можно легко обработать с помощью утилиты jq.

Чтобы получить общее и среднее время выполнения задач, занимающих более 5% от общего времени:

sudo apt update && apt install jq -y

jq -s '
  group_by(.job_name)
  | map({
      job_name: .[0].job_name,
      count: length,
      total_duration: (map(.duration) | add),
      average_duration: (map(.duration) | add / length)
    })
  | (map(.total_duration) | add) as $grand_total
  | map(. + { percentage: (.total_duration / $grand_total * 100) })
  | map(select(.percentage > 5))
  | sort_by(.total_duration)
' log/sidekiq.log
3 лайка