From c187d56ccee002ac5e90ecb760b44aa667afa7b1 Mon Sep 17 00:00:00 2001 From: evazion Date: Tue, 19 Apr 2022 03:19:35 -0500 Subject: [PATCH] apm: record only select http headers in the apm. Don't record most HTTP request and response headers in the APM, except for the User-Agent, Referer, Save-Data, X-Forwarded-For, Accept-Language, and Content-Type headers. Recording every HTTP header for every request takes up a lot of space and most of them aren't very useful. --- config/initializers/00_elastic_apm.rb | 31 +++++++++++++++++---------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/config/initializers/00_elastic_apm.rb b/config/initializers/00_elastic_apm.rb index b898aa519..224e1d179 100644 --- a/config/initializers/00_elastic_apm.rb +++ b/config/initializers/00_elastic_apm.rb @@ -1,11 +1,20 @@ -#if Danbooru.config.elastic_apm_server_url.present? -# require "elastic_apm" -# -# # https://www.elastic.co/guide/en/apm/agent/ruby/4.x/api.html#api-agent-start -# # https://www.elastic.co/guide/en/apm/agent/ruby/4.x/configuration.html -# ElasticAPM::Rails.start( -# server_url: Danbooru.config.elastic_apm_server_url, -# service_name: Danbooru.config.app_name, -# service_version: Rails.application.config.x.git_hash, -# ) -#end +ENV["ELASTIC_APM_ENABLED"] = "false" unless ENV["ELASTIC_APM_SERVER_URL"].present? + +Rails.application.config.to_prepare do + if ElasticAPM.running? + ElasticAPM.agent.config.service_version ||= Rails.application.config.x.git_hash + ElasticAPM.agent.config.service_node_name ||= ENV["NODE_NAME"] + + ElasticAPM.add_filter(:transaction_filter) do |event| + name, _ = event.first + + if name == :transaction + event.dig(:transaction, :context, :request, :url).except!(:protocol, :port) + event.dig(:transaction, :context, :request, :headers).slice!(*%w[User-Agent Referer Save-Data X-Forwarded-For Accept-Language]) + event.dig(:transaction, :context, :response, :headers).slice!("Content-Type") + else + event + end + end + end +end