如何在New Relic中为Sidekiq特定队列配置队列长度与延迟告警?
解决Rails 5项目中Sidekiq特定队列的New Relic告警需求
一、用New Relic内置指标搞定(无需第三方插件)
别折腾很久没更新的第三方插件了,New Relic本身就采集了Sidekiq队列的核心指标,只是默认仪表盘没展示而已:
- 队列长度对应指标:
SidekiqQueueLength,通过queue维度即可过滤你要监控的特定队列 - 队列延迟对应指标:
SidekiqQueueLatency,同样用queue维度筛选目标队列
二、NSQL查询实例
直接用这些指标编写NSQL,精准监控目标队列:
- 查询特定队列当前长度:
SELECT latest(value) FROM SidekiqQueueLength WHERE queue = 'your_target_queue' SINCE 1 MINUTE AGO
- 查询特定队列的任务延迟(任务入队到开始执行的时长):
SELECT average(value) FROM SidekiqQueueLatency WHERE queue = 'your_target_queue' SINCE 5 MINUTES AGO
三、创建告警的具体步骤
- 进入New Relic的「Alerts & AI」页面,点击「Create alert」
- 选择「NRQL alert condition」,将上面的NSQL查询粘贴进去
- 设置阈值:比如队列长度超过50且持续5分钟,或者延迟超过30秒持续2分钟,根据业务需求调整
- 配置通知渠道(邮件、Slack等),完成告警创建
四、自定义指标采集(内置指标不够用的情况)
如果需要更细粒度的监控,自己在Rails项目里加自定义采集即可:
在项目的初始化文件或Sidekiq定时任务中添加以下代码,定期采集队列状态:
# 创建定时任务,每分钟采集一次目标队列指标 Sidekiq::Cron::Job.create(name: 'New Relic Sidekiq Queue Metrics', cron: '* * * * *', class: 'NewRelicSidekiqMetricsJob') # 对应的任务类 class NewRelicSidekiqMetricsJob include Sidekiq::Job def perform target_queue = Sidekiq::Queue.new('your_target_queue') NewRelic::Agent.record_metric('Custom/Sidekiq/QueueLength', target_queue.size) NewRelic::Agent.record_metric('Custom/Sidekiq/QueueLatency', target_queue.latency) end end
之后就能在NSQL中查询这些自定义指标,例如:
SELECT latest(value) FROM Custom/Sidekiq/QueueLength
内容的提问来源于stack exchange,提问作者Sam Egea
相关产品推荐
相关产品推荐

