0

我正在使用 linkerd 并且必须global tunnel通过localhost:4140. 问题是这似乎导致 loggly 停止工作。一旦全局隧道处于活动状态,loggly 就不会收到任何消息。我怎样才能改变它?

globalTunnel.initialize({
  host: 'localhost',
  port: 4140
});

我已经看到,我可以在loggy实例的配置中传递一个代理变量。

var logglyStream = new Bunyan2Loggly(logglyConfig);

谢谢您的帮助。

4

2 回答 2

1

globalTunnel覆盖所有 http 请求,因此假设 Loggly 库使用标准http库,则不需要在 Loggly 库中进行进一步的代理配置。

我觉得这里可能有两个问题:

Linkerd 路由规则

linkerd 需要路由规则来代理到外部互联网。您需要一个dtab来识别host:port请求并相应地路由它们:

dtab: |
  /ip-hostport => /$/inet;
  /svc => /$/io.buoyant.hostportPfx/ip-hostport;

使用以下命令确认路由工作:

$ http_proxy=localhost:4140 curl -s -o /dev/null -w "%{http_code}" www.google.com:80
200

Loggly 标头处理

Loggly 似乎使所有包含带有正斜杠的标头的请求都失败:

# working request:
$ curl -H "foo: bar" -s -o /dev/null -w "%{http_code}" logs-01.loggly.com
403

# failed request:
$ curl -H "foo: /bar" -s -o /dev/null -w "%{http_code}" logs-01.loggly.com
400

Linkerd 在出站请求上设置了几个标头,用于跟踪、服务发现和上下文信息。其中一些标头包括带有正斜杠的字符串。

为了解决这个问题,我们有两种选择:

  1. 修改 linkerd 以清除出站请求的标头。我已经提交了 github.com/linkerd/linkerd/issues/1218 来跟踪这项工作。
  2. 设置代理服务器来处理 Loggly 的出站请求,如https://github.com/loggly/loggly-jslogger#setup-proxy-for-ad-blockers中所述。然后,假设服务设置在internal-nginx-proxy,您可以使用此路由规则:
dtab: |
  /svc/logs-01.loggly.com => /$/inet/internal-nginx-proxy/80;
于 2017-04-16T22:21:02.063 回答
0

我不熟悉 linkerd,但它会在端口 80 或 443 上将日志发送到 logs-01.loggly.com 以确保安全。那是通过你的隧道代理的吗?

于 2017-04-10T21:50:14.563 回答