Pular para o conteúdo principal
Sidekiq é um processador de background simples e eficiente para Ruby. É também o processador que usamos para processar jobs no AppSignal. Quando o AppSignal detecta métricas do Sidekiq, ele criará um Magic Dashboard, permitindo que você monitore métricas principais visualmente.

Monitoramento Sidekiq para apps Ruby on Rails

A gem AppSignal Ruby insere automaticamente um listener na pilha de middleware do servidor Sidekiq se o módulo Sidekiq estiver presente, caso você use Rails. Nenhuma ação adicional é necessária. A integração com o Sidekiq é compatível com Active Job.

Monitoramento Sidekiq para apps Ruby

Adicionar esta config só deve ser necessário quando o Sidekiq não carrega o AppSignal automaticamente pelo framework do app, como o Rails. Adicione este snippet à sua config do Sidekiq com o ambiente e o nome corretos:
require 'appsignal'

Sidekiq.configure_server do |config|
  config.on(:startup) do
    # Inicia o AppSignal
    Appsignal.start
  end

  config.on(:shutdown) do
    # Para o agent
    Appsignal.stop('Sidekiq shutdown')
  end
end

Performance monitoring

Uma vez que o AppSignal comece a reportar métricas do Sidekiq, ele fornecerá insights de performance via:

Event timeline

Eventos perform_job.sidekiq serão mostrados na event timeline na página de detalhes do performance incident: Exemplo de event timeline

Error tracking

Rastreie exceptions que ocorrem ao executar jobs do Sidekiq. Quando o Sidekiq encontra um problema antes ou depois de um job ter sido processado, como ao fazer parse de JSON do Redis, ele gerará um erro. Esse erro é reportado sob a action SidekiqInternal no namespace background, pois o contexto do job é desconhecido quando o erro ocorre. Exemplo de erro sidekiq

Reportar erros ao descartar job

Defina a opção de configuração sidekiq_report_errors como discard para reportar erros apenas quando um job é descartado. Quando um job é descartado, todas as tentativas de retry do job foram esgotadas, e o job não é mais executado novamente. Leia a documentação do Sidekiq para saber mais sobre o tratamento de exceptions do Sidekiq e retries de jobs com falha.
Ao usar o Sidekiq com o sistema de retry do Active Job, configure-o para reportar erros apenas no discard, para que ele não reporte erros várias vezes.Após o esgotamento dos retries do Active Job, o sistema de retry do Sidekiq irá assumir. Desabilite o sistema de retry do Sidekiq se este for um comportamento indesejado.

Incident grouping

Os nomes dos jobs são detectados automaticamente com base no nome da classe do worker Sidekiq e sufixados com o nome do método perform, resultando em algo como: MyWorker#perform. Exemplo de agrupamento de performance incidents

Sample performance

Os sample breakdowns permitem que você revise rapidamente a performance do Sidekiq e identifique problemas de performance sem precisar se aprofundar nos detalhes. Exemplo de sample de performance do Sidekiq

Magic dashboard

Quando o AppSignal recebe métricas do Sidekiq, ele criará um magic dashboard do Sidekiq, disponível na seção de dashboard do app AppSignal. O magic dashboard do Sidekiq terá os seguintes gráficos:
GráficoMétricasTags
Connection countsidekiq_connection_counthostname
Duration per workertransaction_duration
  • action
  • namespace
  • Job status per queuesidekiq_queue_job_count
  • status
  • queue
  • Overall job statussidekiq_job_count
  • status
  • hostname
  • Queue latencysidekiq_queue_latency
  • hostname
  • queue
  • Queue lengthsidekiq_queue_length
  • hostname
  • queue
  • Redis memory usage
  • sidekiq_memory_usage
  • sidekiq_memory_usage_rss
  • hostname
    Throughput per workertransaction_duration
  • action
  • namespace
  • Worker/processes count
  • sidekiq_worker_count
  • sidekiq_process_count
  • hostname
    As tags fornecem um detalhamento contextual das informações de performance do Sidekiq. O AppSignal reporta as seguintes tags para jobs do Sidekiq:
    NomeDescrição
    actionO nome da action da qual a métrica foi reportada (por exemplo, YourWorker#perform).
    hostnameO nome do host do qual a métrica foi reportada.
    namespaceO nome do namespace do qual a métrica foi reportada.
    queueFila nomeada na qual os jobs são processados, por exemplo, default ou mailer.
    statusStatus de cada job, processed ou failed.
    Jobs que são failed também são contados como processed.
    Cada tag será representada com uma linha colorida no gráfico: Exemplo de dashboard do Sidekiq

    Gráfico Connection count

    O gráfico Connection count mostra a contagem de conexões do Sidekiq por host. Você pode usar o gráfico Connection count para monitorar conexões do Sidekiq por host, identificar tendências e gargalos de conexão e otimizar recursos.

    Gráfico Duration per worker

    O gráfico Duration per worker mostra a quantidade de tempo que os jobs levaram para executar, agrupados por namespace e action. Você pode usar o gráfico Duration per worker para monitorar a performance dos workers por action e namespace, dando a você uma visão geral da performance do Sidekiq e permitindo identificar e investigar rapidamente picos no tempo de duração.

    Gráfico Job status per queue

    O gráfico job status per queue com uma prioridade mostra o número de jobs que foram executados, agrupados por seu status resultante, pela fila na qual foram enfileirados. Você pode usar o gráfico Job status per queue para monitorar contagens de erros e performance dos jobs com base na fila, identificar gargalos e otimizar seus background jobs para escalabilidade.

    Gráfico Overall job status

    O gráfico overall job status mostra o número de jobs Sidekiq esperados por status e namespace. Você pode usar o gráfico Overall job status para monitorar jobs com falha e rastrear a distribuição de jobs entre namespaces.

    Gráfico Queue latency

    O gráfico Queue latency mostra a latência que a fila experimentou no momento da medição. O Sidekiq calcula isso subtraindo o horário em que o último job foi enfileirado do horário da medição. Este valor é reportado em milissegundos. Você pode usar o gráfico Queue latency para identificar atrasos no processamento de jobs, detectar congestionamento da fila e entender com que rapidez os background jobs iniciam.

    Gráfico Queue length

    O gráfico Queue length mostra o comprimento das filas do Sidekiq por fila e namespace. Você pode usar o gráfico Queue length para monitorar a performance da fila e identificar e resolver gargalos do Sidekiq.

    Gráfico Redis memory usage

    O gráfico Redis memory usage mostra:
    • O uso de memória Virtual Memory Size do Redis (sidekiq_memory_usage_rss)
    • O uso de memória Resident Set Size do Redis (sidekiq_memory_usage_rss)
    Você pode usar o gráfico Redis memory usage para monitorar o uso de memória do Sidekiq, melhorar o gerenciamento de recursos e otimizar jobs intensivos em memória.

    Gráfico Throughput per worker

    O gráfico Throughput per worker mostra o número de jobs que foram executados, agrupados por hostname. Você pode usar este gráfico para monitorar a performance do worker, agrupada pela classe que define o job.

    Gráfico Worker/processes count

    O gráfico Worker/processes count mostra o número de workers e processos executados do Sidekiq. Você pode usar o gráfico Worker/processes count para gerenciar a distribuição de carga de trabalho, otimizar a alocação de recursos e identificar problemas de performance.

    Configuração de hostname

    O AppSignal tenta detectar o hostname da instância Redis que sua instância Sidekiq usa para armazenar suas filas. Se a detecção não for precisa, é possível personalizar a configuração do hostname sobrescrevendo o probe Sidekiq padrão. Primeiro, você precisará sobrescrever o probe Sidekiq padrão registrando um novo probe com o mesmo nome (:sidekiq). Este probe precisará de um hash de configuração, incluindo a chave :hostname, com o novo valor do hostname. Ao especificar a opção de configuração :hostname no minutely probe do Sidekiq, as métricas serão marcadas com o valor de hostname fornecido. O valor da opção de configuração :hostname não é usado para estabelecer uma conexão Redis ou Sidekiq. Por exemplo:
    # config/initializers/appsignal.rb ou um arquivo que é carregado no boot
    
    # Gem Ruby 2.11.0 e mais nova
    Appsignal::Minutely.probes.register(
      :sidekiq, # Use a mesma chave que o probe Sidekiq padrão para sobrescrevê-lo
      Appsignal::Probes::SidekiqProbe.new(:hostname => "my_sidekiq_hostname")
    )
    
    # Gem Ruby 2.10.x e mais antiga
    Appsignal::Minutely.probes.register(
      :sidekiq, # Use a mesma chave que o probe Sidekiq padrão para sobrescrevê-lo
      Appsignal::Hooks::SidekiqProbe.new(:hostname => "my_sidekiq_hostname")
    )
    
    Na versão 2.11.0 da gem Ruby, a constante SidekiqProbe foi movida para seu próprio módulo. Ao chamar a constante, um aviso será impresso e registrado. Atualize para o novo nome de constante Appsignal::Probes::SidekiqProbe para remover o aviso.