Envoy 和 statsd 错误:需要节点“id”和“集群”id

nmd*_*mdr 5 statsd envoyproxy

我正在尝试配置统计接收器以将统计信息收集到statsd.

我已配置 envoy.yaml 如下:

admin:
  access_log_path: /logs/envoy_access.log
  address:
    socket_address:
      protocol: TCP
      address: 0.0.0.0
      port_value: 8001

stats_sinks:
  name: envoy.statsd
  config:
    tcp_cluster_name: statsd-exporter

static_resources:
  ...


  clusters:

    - name: app
      connect_timeout: 0.25s
      type: strict_dns
      lb_policy: round_robin
      hosts:
        - socket_address:
            address: {{appName}}
            port_value: {{appPort}}

    - name: statsd-exporter
      connect_timeout: 0.25s
      type: strict_dns
      lb_policy: round_robin
      hosts:
        - socket_address:
            address: statsd_exporter
            port_value: 9125
Run Code Online (Sandbox Code Playgroud)

statsd在同一个 docker 网络中构建为容器。

当我使用 Envoy 和 statsd 运行 docker 容器时,Envoy 显示以下错误:

proxy_1            | [2019-05-06 04:50:38.006][27][info][main] [source/server/server.cc:516] exiting
proxy_1            | tcp statsd: node 'id' and 'cluster' are required. Set it either in 'node'
config or via --service-node and --service-cluster options.
template-starter-windows_proxy_1 exited with code 1
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个错误?

更新

我能够通过为 envoy 命令设置 --service-cluster 和 --service-node 参数来解决该错误: envoy -c /etc/envoy/envoy.yaml --service-cluster 'front-envoy' --service-node 'front-envoy'

我不确定为什么使用 statsd 接收器需要设置这些参数。特使的文档没有提及此信息,

Mat*_*hew 0

你是对的,文档建议传递参数标志来绕过错误。我同意这并不令人满意。我不确定为什么“示例”下的文档不提供开箱即用的工作 yaml。

为了使用envoy.yml与这些 CLI 参数相同的配置,我添加了以下顶级条目:

node:
  id: foo_id
  cluster: foo_cluster
Run Code Online (Sandbox Code Playgroud)

所以你的完整内容envoy.yml看起来像这样:

node:
  id: foo_id
  cluster: foo_cluster

admin:
  ...
  ...

stats_sinks:
  ...
  ...

static_resources:
  ...
  ...
Run Code Online (Sandbox Code Playgroud)