首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过http公开phusion乘客状态

通过http公开phusion乘客状态
EN

Stack Overflow用户
提问于 2018-03-02 14:34:57
回答 1查看 679关注 0票数 3

在通过Kubernetes部署基于Ruby的乘客独立应用程序时,我们遇到了通过passenger-status监视它们的能力丧失的问题。有一个telegraf插件旅客出口商来转发度量,这需要访问passenger-status二进制文件的输出。

按照让每个容器都有一个(主)进程的理念,使用Sidecar容器来收集度量在部署到Kubernetes时是合理的。从另一个容器访问passenger-status的输出是这里的挑战。将文件链接到另一个容器是不支持。为容器和副本可执行文件设置目录似乎过于复杂。

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

通识应用

通过http://ruby-doc.org/core-2.5.0/Kernel.html#method-i-60运行命令可能会破坏监视它的目的。只有在有足够的旅客程序可以自由回答这一要求时,这才会返回。一旦旅客队列满了,监控也就不再起作用了,这正是我们想要看到的。

CGI脚本

由于nginx只支持FastCGI,因此有必要使用类似于[医]包装的东西来执行脚本。不过,fci包装机本身需要运行另一个进程,而该进程本身需要监视。此外,它违反了每个容器只有一个进程的想法。

Lua脚本

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

代码语言:javascript
运行
复制
location /passenger-status {
  content_by_lua_block {
    os.execute("/opt/ruby/bin/passenger-status")
  }
}

然而,将Lua脚本添加到每个生产容器中,似乎就是为了这个目的而用大锤破解胡桃。

二审旅客案

将第二个微小的红宝石脚本作为监控的辅助端点也可能有效:

代码语言:javascript
运行
复制
http {
    ...

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

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

    ...
}

总之,我觉得这些方法都不令人满意。你对这个话题有什么想法或解决方案?

EN

回答 1

Stack Overflow用户

发布于 2019-02-18 10:02:10

我们采用了“第二个乘客实例”的方法,得到了一个旅客内部第二红宝石处理组。正如问题中所描述的,通过在nginx.conf中添加这样的代码片段,已经可以集成工作。

代码语言:javascript
运行
复制
    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监视基础结构收集的乘客指标。对此的答复可能如下:

代码语言:javascript
运行
复制
# 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

旅客-普罗米修斯-出口商-app找到这个项目。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49071265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档