jetty-runner / stats端点仅在localhost上可用,如何打开网络?

时间:2014-11-07 00:23:25

标签: java jetty

the jetty-runner documentation起,--stats标志将允许在http://localhost/stats下显示统计信息。但AFAICT并不适用于任何其他界面,而且我没有看到配置它的方法。

有没有办法打开/统计网络?

以下是详细信息:

启动码头,运行grobid战争,打开“stats”并取消密码,不带任何--host标志

$ java -jar jetty-runner-9.2.3.v20140905.jar  --stats unsecure grobid-service-0.2.10.war  &
[10] 29549
$ 2014-11-07 09:07:31.255:INFO::main: Logging initialized @47ms
2014-11-07 09:07:31.261:INFO:oejr.Runner:main: Runner
2014-11-07 09:07:31.383:INFO:oejs.Server:main: jetty-9.2.3.v20140905
2014-11-07 09:07:31.416:INFO:oejsh.ContextHandler:main: Started o.e.j.s.ServletContextHandler@6981170d{/stats,null,AVAILABLE}
Nov 07, 2014 9:07:33 AM com.sun.jersey.api.core.PackagesResourceConfig init
INFO: Scanning for root resource and provider classes in the packages:
  org.grobid.service
Nov 07, 2014 9:07:33 AM com.sun.jersey.api.core.ScanningResourceConfig logClasses
INFO: Root resource classes found:
  class org.grobid.service.GrobidRestService
Nov 07, 2014 9:07:33 AM com.sun.jersey.api.core.ScanningResourceConfig init
INFO: No provider classes found.
Nov 07, 2014 9:07:33 AM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
INFO: Initiating Jersey application, version 'Jersey: 1.9 09/02/2011 11:17 AM'
2014-11-07 09:07:35.160:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@1a108c98{/,file:/tmp/jetty-0.0.0.0-8080-grobid-service-0.2.10.war-_-any-6704428208347840300.dir/webapp/,AVAILABLE}{file:/home/kevin/temp/xx/grobid-service-0.2.10.war}
2014-11-07 09:07:35.161:WARN:oejsh.RequestLogHandler:main: !RequestLog
2014-11-07 09:07:35.180:INFO:oejs.ServerConnector:main: Started ServerConnector@10a54c39{HTTP/1.1}{0.0.0.0:8080}
2014-11-07 09:07:35.180:INFO:oejs.Server:main: Started @3998ms

我可以从外部网络接口请求grobid服务,没问题

$ wget -qS 'http://192.168.122.171:8080' -O - | head -5
  HTTP/1.1 200 OK
  Date: Fri, 07 Nov 2014 17:10:19 GMT
  Accept-Ranges: bytes
  Content-Type: text/html
  Last-Modified: Tue, 04 Nov 2014 21:03:04 GMT
  Content-Length: 7772
  Server: Jetty(9.2.3.v20140905)
<!DOCTYPE XHTML>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Grobid Web Application</title>

但“/ stats /”是该界面上的503服务不可用

$ wget -qS 'http://192.168.122.171:8080/stats/' -O - | head -5
  HTTP/1.1 503 Service Unavailable
  Date: Fri, 07 Nov 2014 17:11:41 GMT
  Cache-Control: must-revalidate,no-cache,no-store
  Content-Type: text/html; charset=ISO-8859-1
  Content-Length: 294
  Server: Jetty(9.2.3.v20140905)

虽然“localhost

上有”/ stats /“
$ wget -qS 'http://127.0.0.1:8080/stats/' -O - | head -5
  HTTP/1.1 200 OK
  Date: Fri, 07 Nov 2014 17:15:30 GMT
  Content-Type: text/html; charset=ISO-8859-1
  Content-Length: 1342
  Server: Jetty(9.2.3.v20140905)
<h1>Statistics:</h1>
Statistics gathering started 9185ms ago<br />
<h2>Requests:</h2>
Total requests: 3<br />
Active requests: 1<br />

回应下面的Joakim Erdfelt的建议,添加--host 0.0.0.0或--host 192.168.122.171就像这样

java -jar jetty-runner-9.2.3.v20140905.jar --host 192.168.122.171 --stats unsecure grobid-service-0.2.10.war  &

仍导致503-服务不可用。我知道--host 192.168.122.171一些效果,因为在/查询时,127.0.0.1的工作页面无效。

2 个答案:

答案 0 :(得分:1)

如果有人会遇到与@KevinG相同的问题,这里是我的解决方案,因为我发现这个话题试图解决同样的问题,经过一段时间的思考,我找到了如何克服限制的方法,统计数据可以是仅在运行jetty-runner的机器/服务器本地调用。

首先在运行jetty-runner的同一服务器/机器上设置nginx。确保在nginx配置中使用代理转发将所有流量转发到jetty-runner(localhost:8080)。默认情况下,您的nginx应该在端口80上侦听。从主机服务器/机器/本地PC打开http://localhost:80,nginx会将您的请求转发给jetty-runner并返回回复。同样适用于/ stats /。在您的主机/本地PC上打开http://localhost:80/stats/,您将到达jetty-runner的统计页面。

nginx config:

     var numberOfRecords = 3;
        var numberOfFields = 2;
        var columnDelimeter = ' ';
        var lineSeparator = "\r\n\r\n";
        var tokened = new string[numberOfRecords, numberOfFields];
        var input = System.IO.File.ReadAllText(@"d:\abc.txt");
        var lines = input.Replace(lineSeparator, "|").Split('|').ToArray();
        //loop through rows
        for (var row = 0; row < lines.Length; row++)
        {
            //split the columns with a space
            var cols = lines[row].Split(columnDelimeter).ToArray();
            for(var col = 0; col < numberOfFields; col++)
            {
                tokened[row, col] = cols[col];
            }
        }

答案 1 :(得分:0)

使用jetty-runner命令通过--stats启用统计信息时,实际上是在向正在运行的服务器及其所有连接器添加StatisticsHandler

现在,使用jetty-runner,您只有1个连接器,并使用命令行控制其监听--port--host

如果只指定了--host localhost,那么它只会收集localhost接口的统计信息。

如果您希望它监听所有接口,那么使用类似--host 0.0.0.0的内容来监听所有IPv4接口(如果使用IPv6,那么您将不得不使用IPv6等效接口)