是否可以在另一个应用程序上显示Sidekiq Web仪表板?

时间:2016-01-21 22:26:26

标签: ruby-on-rails sidekiq

Sidekiq monitor readme,您可以使用以下方法保护当前rails服务器上的sidekiq Web仪表板路由(例如在端口3000上运行localhost):

http://localhost:3000上进行经过身份验证的sidekiq信息中心路线的典型方法

# config/routes.rb
authenticate :user, lambda { |u| u.admin? } do
  mount Sidekiq::Web => '/sidekiq'
end

我想使用另一个Rails应用程序来访问Sidekiq仪表板(而不是运行Sidekiq的Rails应用程序):

是否可以执行以下操作:

应用1 - 在http://localhost:3000 rails服务器中:(Sidekiq正在运行并收集数据的服务器)

# config/routes.rb
mount Sidekiq::Web => 'http://localhost:5000/sidekiq'

应用2 - 在http://localhost:5000 rails服务器(单独的服务器,我想捕获Sidekiq数据,并仍然保护对谁可以看到仪表板的访问权限)

# config/routes.rb
authenticate :user, lambda { |u| u.admin? } do
  get '/sidekiq'
end

我认为这不是基于我对如何安装Rails引擎和Sidekiq仪表板的理解。我的另一个想法是,如果我想将端口3000上的服务器(Sidekiq统计数据正在运行并收集数据)传递给另一台服务器,我可以使用Sidekiq的API。

编辑:

是否也可以从App 2监控多个Rails应用程序? (localhost:5000服务器)

2 个答案:

答案 0 :(得分:3)

您可以在应用2中保留挂载(假设您在该应用中认证):

function disableButtons() {
  var $pages = $('.page li');
  if($pages.eq(0).hasClass('active')) {
      $('#prev').prop('disabled',true);
      $('#next').prop('disabled',false);
  } else if ($pages.eq($pages.size()-1).hasClass('active')) {
      $('#next').prop('disabled',true);
      $('#prev').prop('disabled',false);
  } else {
      // Make sure buttons get enabled
      $('#prev').prop('disabled',false);
      $('#next').prop('disabled',false);
  }
}

并将# config/routes.rb authenticate :user, lambda { |u| u.admin? } do mount Sidekiq::Web => '/sidekiq' end 环境变量指向目标应用的redis网址。 (此机制在您的运行时环境中有很大差异。)您还需要确保所有防火墙都允许此流量通过等。

安装确保监控界面在App 2中可用,并将其指向App 1中的Redis实例,以确保访问正确的统计信息。

答案 1 :(得分:-3)

我在具有多个微服务的应用程序中有类似的要求。有两种服务使用不同的sidekiq实例。要求是使用单个仪表板来访问sidekiq信息。

我的处理方式是为两个sidekiq实例使用单个redis数据库,并通过在服务名称前添加前缀来重命名队列,以便我们可以轻松识别哪个队列属于哪个服务。

我们仍将有两个sidekiq进程在不同的端口上运行,但写入相同的Redis数据库。整个sidekiq仪表板均由redis数据库提供支持,因此,只要您使用相同的数据库,您就可以访问两个sidekiq进程。

enter image description here