【问题标题】:Is it possible to show the Sidekiq web dashboard for one application on another?是否可以在另一个应用程序上显示 Sidekiq Web 仪表板?
【发布时间】:2016-04-28 09:27:27
【问题描述】:

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

http://localhost:3000 上执行经过身份验证的 sidekiq 仪表板路由的典型方法

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

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

是否可以执行以下操作:

App 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 stats 正在运行并收集数据)传递到另一台服务器,我可以利用 Sidekiq 的 API。

编辑:

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

【问题讨论】:

    标签: ruby-on-rails sidekiq


    【解决方案1】:

    您可以在应用 2 中保留安装(假设您在该应用中进行了身份验证):

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

    并将REDIS_URL 环境变量指向目标应用程序的redis URL。 (此机制因您的运行时环境而异。)您还需要确保所有防火墙都允许此流量通过,等等。

    挂载确保监控接口在 App 2 中可用,并从 App 1 将其指向 Redis 实例确保访问正确的统计信息。

    【讨论】:

    • 如果我想让 App 1 监控除 App 2 之外的其他应用程序,我是否需要多个 REDIS_URL 变量? Sidekiq web 如何知道要监控哪一个?
    • @Nona Tricky!在一个进程中监控多个 sidekiq 可能是不可能的(我没有看过),但是在一个盒子/VM/服务器上就可以了。这可能值得一个单独的问题。
    • 只是为了仔细检查,github.com/mperham/sidekiq/issues/1223 意味着我必须为每个我想要监控的应用程序创建一个“监控应用程序”(如应用程序 2)?
    • @Nona 您的解释是正确的。不过,应该可以将监控应用程序放在一台机器上,Sidekiq::Web 不是资源密集型的。
    • 感谢 Jim,您可能想知道 Sidekiq PRO 确实允许您挂载多个 Sidekiq Web 实例 - github.com/mperham/sidekiq/wiki/Pro-Web-UI#sharding
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-18
      相关资源
      最近更新 更多