1
0
Fork 0
mirror of https://github.com/mperham/sidekiq.git synced 2022-11-09 13:52:34 -05:00

Minimize metrics overhead, disable hourly/daily aggregates for now since we dont use them, expire histograms quicker

This commit is contained in:
Mike Perham 2022-09-22 11:19:12 -07:00
parent 14153c691f
commit 354f368054
No known key found for this signature in database
3 changed files with 14 additions and 11 deletions

View file

@ -46,6 +46,7 @@ module Sidekiq
GET u16 #16 GET u16 #17 GET u16 #18 GET u16 #19 \ GET u16 #16 GET u16 #17 GET u16 #18 GET u16 #19 \
GET u16 #20 GET u16 #21 GET u16 #22 GET u16 #23 \ GET u16 #20 GET u16 #21 GET u16 #22 GET u16 #23 \
GET u16 #24 GET u16 #25".split GET u16 #24 GET u16 #25".split
HISTOGRAM_TTL = 8 * 60 * 60
def each def each
buckets.each { |counter| yield counter.value } buckets.each { |counter| yield counter.value }
@ -86,7 +87,7 @@ module Sidekiq
end end
conn.bitfield(*cmd) if cmd.size > 3 conn.bitfield(*cmd) if cmd.size > 3
conn.expire(key, 86400) conn.expire(key, HISTOGRAM_TTL)
key key
end end
end end

View file

@ -48,8 +48,8 @@ module Sidekiq
end end
end end
LONG_TERM = 90 * 24 * 60 * 60 # LONG_TERM = 90 * 24 * 60 * 60
MID_TERM = 7 * 24 * 60 * 60 # MID_TERM = 7 * 24 * 60 * 60
SHORT_TERM = 8 * 60 * 60 SHORT_TERM = 8 * 60 * 60
def flush(time = Time.now) def flush(time = Time.now)
@ -59,12 +59,13 @@ module Sidekiq
return if procd == 0 && fails == 0 return if procd == 0 && fails == 0
now = time.utc now = time.utc
nowdate = now.strftime("%Y%m%d") # nowdate = now.strftime("%Y%m%d")
nowhour = now.strftime("%Y%m%d|%-H") # nowhour = now.strftime("%Y%m%d|%-H")
nowmin = now.strftime("%Y%m%d|%-H:%-M") nowmin = now.strftime("%Y%m%d|%-H:%-M")
count = 0 count = 0
redis do |conn| redis do |conn|
# persist fine-grained histogram data
if grams.size > 0 if grams.size > 0
conn.pipelined do |pipe| conn.pipelined do |pipe|
grams.each do |_, gram| grams.each do |_, gram|
@ -73,15 +74,16 @@ module Sidekiq
end end
end end
# persist coarse grained execution count + execution millis.
# note as of today we don't use or do anything with the
# daily or hourly rollups.
[ [
["j", jobs, nowdate, LONG_TERM], # ["j", jobs, nowdate, LONG_TERM],
["j", jobs, nowhour, MID_TERM], # ["j", jobs, nowhour, MID_TERM],
["j", jobs, nowmin, SHORT_TERM] ["j", jobs, nowmin, SHORT_TERM]
].each do |prefix, data, bucket, ttl| ].each do |prefix, data, bucket, ttl|
# Quietly seed the new 7.0 stats format so migration is painless.
conn.pipelined do |xa| conn.pipelined do |xa|
stats = "#{prefix}|#{bucket}" stats = "#{prefix}|#{bucket}"
# logger.debug "Flushing metrics #{stats}"
data.each_pair do |key, value| data.each_pair do |key, value|
xa.hincrby stats, key, value xa.hincrby stats, key, value
count += 1 count += 1
@ -89,7 +91,7 @@ module Sidekiq
xa.expire(stats, ttl) xa.expire(stats, ttl)
end end
end end
logger.info "Flushed #{count} metrics" logger.debug "Flushed #{count} metrics"
count count
end end
end end

View file

@ -35,7 +35,7 @@ describe Sidekiq::Metrics do
it "tracks metrics" do it "tracks metrics" do
count = create_known_metrics count = create_known_metrics
assert_equal 12, count assert_equal 4, count
end end
describe "marx" do describe "marx" do