通过http公开phusion乘客身份

问题描述 投票:2回答:1

当通过Kubernetes部署基于Ruby的Passenger独立应用程序时,我们遇到了通过passenger-status失去监视它们的能力的问题。有一个telegraf pluginpassenger exporter来转发指标,需要访问passenger-status二进制文件的输出。

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

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

通过申请

通过Kernel#`运行命令会破坏监视它的目的。只有当有足够的乘客流程可以回答此请求时,才会返回此选项。一旦乘客队列满了,监控也将不再起作用,这正是我们想要在这里看到的。

CGI脚本

由于nginx仅支持FastCGI,因此需要使用fcgiwrap来执行脚本。 fciwrap本身需要运行另一个进程,它本身需要监视。此外,它违反了每个容器有一个进程的想法。

Lua脚本

像这样的lua片段可能会起作用:

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个回答
-1
投票

我们采取了“第二乘客实例”的方法,并有一个second ruby process group within passenger。正如问题中所描述的那样,通过向你的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;
    }

这将启动另一个红宝石流程,为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找到该项目。

© www.soinside.com 2019 - 2024. All rights reserved.