Gem SimpleAPM - Rails 慢事务追踪

xiayuanyin · 2019年02月25日 · 最后由 ane 回复于 2019年06月12日 · 9705 次阅读
本帖已被管理员设置为精华贴

分享自己做的一个 Rails 项目的监控 GEM(SimpleApm)

目前在公司生产服务器上运行状态良好……

第一次发东西,欢迎大家的批评和意见

Github: https://github.com/xiayuanyin/simple_apm

功能

基于 Redis 的简单的 Web 请求性能监控/慢事务追踪工具,支持集群服务

以天为维度记录:

  • 耗时最长的 N 个请求
  • 记录每个 action 最慢的 20 次请求
  • 记录每个 action 的平均访问时间
  • 记录慢请求的详情和对应 SQL 详情(多余的会删掉)
  • 以 10 分钟为刻度记录平均/最慢访问时间、次数等性能指标,并生成图表
  • 记录请求中外部 http 访问时间
  • 记录请求前后的内存变动 (用 Unicorn 的时候比较有用)

原理

围绕 Rack 记录请求级别的相关信息,使用 redis 作为数据存储/计算工具来记录慢事务

数据传递核心为:Active Support Instrumentation

处理 Instrument 方式为:开启一个不影响主线程的常驻线程,循环计算处理数据

获取内存信息用到了 gem: get_process_mem

配置文件说明:

# config/simple_apm.yml
# 默认为 redis://localhost:6379/0
# 确保是完整的redis地址,可以设置远程地址
redis_url: 
# 默认为空, 建议使用hiredis(并确保有这个gem)
redis_driver: hiredis
# 记录每天的最慢的请求数存储量,默认200
slow_actions_limit:
# 记录每天的每个Action最慢的N个请求,默认20
action_slow_request_limit:
# 项目名,默认为 'app',区分项目名可以多个项目数据存于一台redis server上
app_name:
# SQL记录临界值,超过的才记录(秒)
sql_critical_time: 0.1
# 不统计的请求(值为:xxxController#Action)(数组)
#  - Devise::SessionsController#create
exclude_actions:

功能截图

请求量,响应时间概况 Dashboard

慢请求详情 RequestInfo

Action 的概况 ActionInfo

huacnlee 将本帖设为了精华贴。 02月25日 17:26

好东西啊 不打算写个英文 readme 么

Rei 回复

厉害了

Rei 回复

支持私有部署吧?

newrelic 呢?

好熟悉的头像,必须点一个赞👍

wayne_deng 回复

欢迎指点呐

wayne_deng 回复

https://ruby-china.org/topics/38175

DZ,你看看这个你们用的上吗哈哈😀

ad583255925 回复

谢谢哈,我们没有用 webpacker,前端是单独作为一个项目来做的,彻底的前后端分离😂

pynix 回复

newrelic 只是有免费版本的软件,Elastic 家的开源噢

私有化部署也简单: https://www.elastic.co/downloads/apm

https://github.com/elastic/apm-server

还有 Prometheus

rails 就是支持了那么多事物追踪,才慢的不像话,你还又继续写一个。。。扩展一下,不好吗

需要 登录 后方可回复, 如果你还没有账号请 注册新账号