【问题标题】:Expose phusion passenger-status via http通过 http 公开 phusion 乘客状态
【发布时间】:2018-08-10 19:04:19
【问题描述】:

在通过 Kubernetes 部署基于 Ruby 的Passenger 独立应用程序时,我们 遇到了失去通过以下方式监控它们的能力的问题 passenger-status。有一个telegraf pluginpassenger exporter 转发指标,这些指标需要访问 passenger-status 二进制。

遵循每个容器拥有一个(主)进程的理念,使用 用于收集指标的 Sidecar 容器在部署到时是合理的 Kubernetes。从另一个容器访问passenger-status 的输出是这里的挑战。将文件链接到另一个容器是not supported。为容器和复制可执行文件设置目录似乎过于复杂。

一个 Pod 中的容器之间的通信是通过环回网络进行的。因此,通过 HTTP 公开指标是导出这些指标的常见模式。因此,我们正在研究通过 HTTP 公开 passenger-status 指标的不同方式:

通过应用程序

通过 Kernel#` 运行命令有点违背了监视它的目的。只有当有足够的乘客进程可以免费回答此请求时,才会返回。一旦乘客队列满了,监控也将不再起作用,这正是我们希望在这里看到的。

CGI 脚本

由于 nginx 只支持 FastCGI,因此必须有类似 fcgiwrap 的东西来执行脚本。 fciwrap 本身需要运行另一个进程,它本身需要监控。此外,它违反了每个容器有一个进程的想法。

Lua 脚本

这样的 lua sn-p 可能会起作用:

location /passenger-status {
  content_by_lua_block {
    os.execute("/opt/ruby/bin/passenger-status")
  }
}

然而,仅仅为此目的将 Lua 脚本添加到每个生产容器中似乎是在用大锤敲碎核桃。

第二个乘客实例

使用第二个小型 ruby​​ 脚本作为监控的乘客端点也可能有效:

http {
    ...

    server {
        listen 80;
        server_name _;
        root /app;
        passenger_enabled on;
        ...
    }

    server {
        listen 8080;
        server_name _;
        root /monitoring;
        passenger_enabled on;
        ...
    }

    ...
}

总而言之,我认为这些方法中的任何一种都不能令人满意。您对此主题有何想法或解决方案?

【问题讨论】:

    标签: nginx kubernetes passenger


    【解决方案1】:

    我们采用“第二个乘客实例”的方法,并有一个second ruby process group within passenger。如问题中所述,已经通过将这样的 sn-p 添加到您的nginx.conf 来集成作品:

        server {
            server_name _;
            listen 0.0.0.0:10254;
            root '/monitor/public';
            passenger_app_root '/monitor';
            passenger_app_group_name 'Prometheus exporter';
            passenger_spawn_method direct;
            passenger_enabled on;
            passenger_min_instances 1;
            passenger_load_shell_envvars off;
        }
    

    这将启动另一个 ruby​​ 进程,为http://<ip-of-this-server>:10254/metrics 上的 prometheus 端点提供服务,该进程公开乘客指标,由您常用的 Kubernetes 监控基础设施收集。对此的响应可能如下所示:

    # HELP passenger_capacity Capacity used
    # TYPE passenger_capacity gauge
    passenger_capacity{supergroup_name="/app (development)",group_name="/app (development)",hostname="my-container"} 1
    # HELP passenger_wait_list_size Requests in the queue
    # TYPE passenger_wait_list_size gauge
    passenger_wait_list_size{supergroup_name="/app (development)",group_name="/app (development)",hostname="my-container"} 0
    # HELP passenger_processes_active Active processes
    # TYPE passenger_processes_active gauge
    passenger_processes_active{supergroup_name="/app (development)",group_name="/app (development)",hostname="my-container"} 0
    

    passenger-prometheus-exporter-app找到项目。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-24
      • 1970-01-01
      • 2022-11-10
      • 2011-12-09
      • 2012-04-27
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      相关资源
      最近更新 更多