gpt4 book ai didi

nginx - 通过 http 公开 phusion passenger-status

转载 作者:行者123 更新时间:2023-12-02 11:45:10 27 4
gpt4 key购买 nike

当通过 Kubernetes 部署基于 Ruby 的 Passenger 独立应用程序时,我们遇到了失去通过以下方式监视它们的能力的问题乘客状态。有一个 telegrafpluginpassenger exporter转发指标,这需要访问的输出passenger-status 二进制。

遵循每个容器有一个(主)进程的理念,使用部署到时收集指标的 Sidecar 容器是合理的库伯内斯。从另一个容器访问 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;
...
}

...
}

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

最佳答案

我们采用了“Second Passenger instance”方法并得到了一个 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;
}

这将启动另一个 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 找到项目.

关于nginx - 通过 http 公开 phusion passenger-status,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49071265/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com