Sidekiq 로깅
GitLab에서 Sidekiq worker의 컨텍스트 메타데이터 추가 방법과 인수 로깅 설정 방법을 설명합니다.
Worker 컨텍스트 # 로그에서 worker에 관한 더 많은 정보를 얻기 위해, job에 ApplicationContext 형식의 메타데이터를 추가합니다 . 대부분의 경우 요청에서 job을 스케줄링할 때 이 컨텍스트는 이미 요청에서 추론되어 스케줄된 job에 추가됩니다. job이 실행될 때, 스케줄링 당시 활성화된 컨텍스트가 복원됩니다. 이로 인해 실행 중인 job 내에서 스케줄된 모든 job에 컨텍스트가 전파됩니다. 이 모든 것은 대부분의 경우 job에 컨텍스트를 추가하기 위해 별도로 아무것도 할 필요가 없다는 것을 의미합니다. 그러나 job이 스케줄될 때 컨텍스트가 없거나 잘못된 컨텍스트가 있을 수 있는 경우가 있습니다. 이러한 경우를 위해 RuboCop 규칙을 추가하여 주의를 환기시키고 로그에서 잘못된 메타데이터를 방지합니다. 대부분의 다른 cop들처럼, 이를 비활성화할 타당한 이유가 있을 수 있습니다. 예를 들어 요청의 컨텍스트가 올바른 경우이거나, cop이 감지하지 못하는 방식으로 이미 컨텍스트를 지정한 경우가 있습니다. 어떤 경우든 cop을 비활성화할 때 사용할 컨텍스트를 가리키는 코드 주석을 남겨 두세요. 객체를 컨텍스트에 제공할 때는 네임스페이스와 프로젝트의 라우트가 미리 로드되어 있는지 확인하세요. 이는 모든 Routable 에 정의된 .with_route 스코프를 사용하여 수행할 수 있습니다. Cron worker # 컨텍스트는 크론 job 큐의 worker( include CronjobQueue )에 대해 자동으로 초기화되며, 요청에서 스케줄링하는 경우에도 마찬가지입니다. 이는 cron worker에서 다른 job이 스케줄될 때 잘못된 메타데이터를 방지하기 위해 수행합니다. Cron worker 자체는 인스턴스 전체에서 실행되므로 사용자, 네임스페이스, 프로젝트 또는 컨텍스트에 추가해야 하는 다른 리소스로 범위가 지정되지 않습니다. 그러나 컨텍스트가 필요한 서비스를 실행하거나 다른 job을 스케줄링하는 경우가 많습니다. 그렇기 때문에 worker 어딘가에 컨텍스트에 대한 표시가 있어야 합니다. 이는 worker 내의 어딘가에서 다음 방법 중 하나를 사용하여 수행할 수 있습니다: with_context 헬퍼에 job을 스케줄링하는 코드를 감싸는 방법: def perform deletion_cutoff = Gitlab::CurrentSettings .deletion_adjourned_period.days.ago.to_date projects = Project.with_route.with_namespace .marked_for_deletion_before(deletion_cutoff) projects.find_each(batch_size: 100).with_index do |project, index| delay = index * INTERVAL with_context(project: project) do AdjournedProjectDeletionWorker.perform_in(delay, project.id) end