如何全方位监控 Ruby 应用

Python013

如何全方位监控 Ruby 应用,第1张

使用 OneAPM 监控 Ruby 应用

登录 OneAPM 官网,注册账号,进入主页面,选择「应用监控」,添加一个应用,选择「Ruby」那个 tab,里面列出了5个步骤,按照这些步骤就可以设置成功:

第一步是把授权编号复制,这个是要用到的。

第二步是复制 oneapm.yml 文件存放到 config 目录下。这个是主要的配置文件。刚才复制的授权编号也是要放到这个文件中的。

第三步是把那个 gem 添加到 Gemfile 文件,并进行 bundle install 就好了。

sidekiq使用redis来保存所有的job和操作数据,所以sidekiq依赖于redis,并且sidekiq默认会去连位于localhost:6379的redis服务器,但是生产环境中可能需要自定义地址

前提:安装并启动redis,不同机器对应的安装方式可自行百度,mac下安装redis可通过

配置sidekiq所依赖的redis位置,必须同时定义sidekiq的server和client

config/initializers/sidekiq.rb

如果要使用 UNIX socket,URL 应该类似于 unix://#{Rails.root}/tmp/sockets/redis.sock

配置config/sidekiq.yml文件,一般只有在需要配置高级选项的时候才需要配置这个文件(如果不使用这个名字,可以使用-c指定 sidekiq -c config/name.yml)

文件中会生成如下内容

将耗时的程序写到perform里

注意:perform是一个实例方法,但是在调用的时候是用类调用

adapter默认使用的adapter是Active Job Inline需要指定为sidekiq才支持异步(如果是使用worker这一步可以省略)

另外由于sidekiq的进程并不是非常稳定,可定会自己断掉,所以可以配合监控工具Monit(可以监控任何进程,只需要设定启动和重开的方式即可)使用,详情还请自行百度

gemfile添加sinatra

执行

tips:

之前直接添加 gem 'sinatra' 运行时导致报错,google之后判断可能是由于sinatra gem的版本问题,导致运行时报错,修正后的sinatra gem 的为 gem 'sinatra', '2.0.0.beta2',require: false

routes.rb添加

打开Sidekiq web界面,检查该作业是否被处理,浏览器中输入

(以下纯属翻译)

注:本文讲的是Sidekiq结合ActiveJob使用的方式,也可以单独使用Sidekiq Worker

文章中注释掉的是单独使用Sidekiq Worker创建任务跟使用ActiveJob的不同部分

参考

https://github.com/mperham/sidekiq/wiki/Getting-Started

(worker)

https://ihower.tw/rails/background-process.html

(active_job)

trap方法返回的是前一次调用时传入的block,实际上是一个Proc对象。

而Proc对象拥有call方法,调用该方法就会执行block的代码段。

因此,例子中第二次调用trap时,返回的是 proc { puts 'first signal handler' },并赋给了old_handler变量。

在捕获中断时,就执行:

old_handler.call # 这里就是调用了Proc对象的call方法,执行了第一次调用trap时传入的block

puts 'second signal handler'

exit