【问题标题】:Apache "server-status" (mod_status) output as in JSON or XML format?Apache“服务器状态”(mod_status)以 JSON 或 XML 格式输出?
【发布时间】:2019-06-12 08:01:24
【问题描述】:

Apache“mod_status”:

我们知道,通过使用“mod_status”,我们可以检查 Apache 的当前状态。它返回了很多信息,类似于这个示例页面 (由 Apache 提供)

https://www.apache.org/server-status

我需要做什么:

我需要解析然后处理这个结果,尤其是ExtendedStatus标志给出的详细连接部分(在httpd.conf中)。该部分类似于:

Srv PID Acc M   CPU SS  Req Conn    Child   Slot    Client  VHost   Request
0-24    23433   0/94/338163 _   208.04  2   0   0.0 1.85    22068.75    221.254.46.37       
0-24    23433   0/99/337929 _   208.93  1   1141    0.0 2.23    19373.00    197.89.161.5        
0-24    23433   0/94/337834 _   206.04  4   0   0.0 3.46    22065.36    114.31.251.82       
0-24    23433   0/95/338139 _   198.94  2   7   0.0 2.74    21101.66    122.252.253.242     
0-24    23433   0/111/338215    _   206.21  3   0   0.0 3.89    19496.71    186.5.109.211

我的问题:

是否可以通过结构化数据格式(如 JSON)获取此页面(信息)? (因为我需要通过 PHP 解析它们。然后再做一些进一步的事情。)

我不能只使用一些简单的方法,比如 Javascript DOM Parsers(比如:jQuery)。因为我需要脚本在服务器的 Linux 命令行(本地)本身中运行。不是通过任何来自外部的花哨的客户端浏览器。

因此,通过 Javascript(JQuery 等)解析它几乎不是一种选择。我最好接收结构化数据。所以我可以很容易地从 PHP 中解析。通过终端触发 PHP 脚本,如:

# php /www/docroots/parse-server-status.php

或者,至少:

# curl -I http://localhost/parse-server-status.php

问题:

  • 知道如何从 Apache 的服务器状态 (mod_status) 中获取 JSON 或 XML 吗?

谢谢大家。

【问题讨论】:

  • 简洁的?auto URL arg 返回一个相当容易解析的纯文本摘要。试试看:curl localhost:80/server-status?auto

标签: json xml apache


【解决方案1】:

我认为没有办法在标准 apache mod_status 中获取 json。 但是在开发者列表上有一个关于这个话题的讨论。

简而言之:您必须在服务器上安装另一个脚本。你需要在服务器上安装 mod_lua。这是项目页面:

https://github.com/Humbedooh/server-status

安装该 lua 脚本后,您可以获得 json 文件。 Daniel 在这里安装了一个示例脚本:

HTML 视图:http://httpd.apache.org/server-status
JSON:http://httpd.apache.org/server-status?view=json
扩展 JSON: http://httpd.apache.org/server-status?view=json&extended=true(很多 数据:p)

【讨论】:

  • 太糟糕了,但是示例链接现在已经过时并返回 404。
【解决方案2】:

在 JavaScript/jQuery (ES6) 中,我们可以使用 ?auto 获取 Apache 机器可读状态并通过正则表达式解析内容:

$.get('http://localhost/parse-server-status.php?auto', (d) => {
  const o = {};
  const host = d.substring(0, d.indexOf('\n'));
  Array.from(d.replace(host, '').matchAll(/^([\w\s]+)\:\s(.*)+/gm)).forEach(l => o[l[1].replace(/\s/, '')] = l[2]);
  console.log(host, o);
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-03
    • 2013-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多