Marginalia를 활용한 데이터베이스 쿼리 주석
Marginalia gem을 사용하여 PostgreSQL 쿼리에 애플리케이션 컨텍스트 정보가 포함된 주석을 추가하는 방법을 설명합니다.
Marginalia gem 은 ActiveRecord가 생성하는 PostgreSQL 쿼리에 애플리케이션 관련 컨텍스트 정보가 포함된 쿼리 주석을 추가하는 데 사용됩니다. 이 gem은 문제가 되는 쿼리를 애플리케이션 소스로 역추적하는 데 매우 유용합니다. 온콜 인시던트 중에 담당 엔지니어는 주석을 통해 쿼리와 해당 애플리케이션 소스에 대한 완전한 컨텍스트를 파악할 수 있습니다. 주석 내 메타데이터 정보 # Rails 에서 생성된 쿼리에는 다음 메타데이터가 주석으로 포함됩니다: application correlation_id endpoint_id db_config_database line Sidekiq 워커에서 생성된 쿼리에는 다음 메타데이터가 주석으로 포함됩니다: application jid correlation_id endpoint_id db_config_database line endpoint_id 는 애플리케이션의 모든 엔드포인트를 나타낼 수 있는 단일 필드입니다: Rails 컨트롤러의 경우, 컨트롤러와 액션을 나타냅니다. 예: Projects::BlobController#show . Grape API 엔드포인트의 경우, 경로를 나타냅니다. 예: /api/:version/users/:id . Sidekiq 워커의 경우, 워커 클래스 이름을 나타냅니다. 예: UserStatusCleanup::BatchWorker . db_config_database 는 database.yml 의 데이터베이스 구성 해시에서 database 필드를 나타내는 단일 필드입니다. line 은 추가적인 오버헤드로 인해 프로덕션 로그에는 표시되지 않습니다. 주석이 포함된 쿼리 예시: Rails: /*application:web,controller:blob,action:show,correlation_id:01EZVMR923313VV44ZJDJ7PMEZ,endpoint_id:Projects::BlobController#show,db_config_database:gitlabhq_production*/ SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 75 AND "routes"."source_type" = 'Namespace' LIMIT 1 Grape: /*application:web,correlation_id:01EZVN0DAYGJF5XHG9N4VX8FAH,endpoint_id:/api/:version/users/:id,db_config_database:gitlabhq_production*/ SELECT COUNT(*) FROM "users" INNER JOIN "user_follow_users" ON "users"."id" = "user_follow_users"."followee_id" WHERE "user_follow_users"."follower_id" = 1 Sidekiq: /*application:sidekiq,correlation_id:df643992563683313bc0a0288fb55e23,ji