Metricbeat kubernetes模块无法连接到kubelet

时间:2018-12-24 06:40:44

标签: kubernetes elastic-stack metricbeat

我们有一个设置,其中Metricbeat作为DaemonSet部署在Kubernetes集群(特别是AWS EKS)上。

所有功能似乎都正常运行,但是 kubelet 连接。

为澄清,以下模块:

- module: kubernetes
  enabled: true
  metricsets:
    - state_pod
  period: 10s
  hosts: ["kube-state-metrics.system:8080"]

工作正常(事件流入对数/弹性)。

但是,此模块配置不适用于主机值的任何变体(localhost / kubernetes.default /任何):

- module: kubernetes
  period: 10s
  metricsets:
    - pod
  hosts: ["localhost:10255"]
  enabled: true
  add_metadata: true
  in_cluster: true
  

注意:使用群集IP而不是localhost(以便转到   控制平面)也可以工作(尽管不会检索所需的   信息,当然)。

     

以上配置直接来自Metricbeat   文档并立即让我感到奇怪-本地主机如何   (从Metricbeat泊坞窗内)转换为对应的   小菜吗?

错误是,正如您所期望的,鉴于上述情况:

error making http request: Get http://localhost:10255/stats/summary: 
dial tcp [::1]:10255: connect: cannot assign requested address

表明存在某种连通性问题。

但是,在将SSH连接到任何节点Metricbeat时,http://localhost:10255/stats/summary提供正确的输出:

{
  "node": {
   "nodeName": "...",
   "systemContainers": [
    {
     "name": "pods",
     "startTime": "2018-12-06T11:22:07Z",
     "cpu": {
      "time": "2018-12-23T06:54:06Z",
      ...
     },
     "memory": {
      "time": "2018-12-23T06:54:06Z",
      "availableBytes": 17882275840,
      ....

我一定很想念一些明显的东西。任何建议都可以。

注意:我在Elasticsearch Forums上张贴了相同的帖子(几天没有得到回复)

1 个答案:

答案 0 :(得分:2)

通过valueFrom列表中的env:提供者注入Pod的节点IP:

env:
- name: HOST_IP
  valueFrom:
    fieldRef: status.hostIP

,然后更新metricbeat配置文件以使用主机的IP:

hosts: ["${HOST_IP}:10255"]

哪个metricbeat将通过其environment variable config injection来解决