0

我已经启动了一个 minikube(使用 Kubernetes 1.18.3)来测试 ECK,特别是 packetbeat。minikube 配置文件称为“packetbeat”(很重要,因为这也是 Virtualbox VM 的主机名),我按照 ECK 快速入门启动并运行它。ElasticSearch(单节点)和 Kibana 运行良好,packetbeat 也在收集流,但是,我无法让它将 Kubernetes 元数据添加到字段中。

我在默认命名空间中工作并创建了一个 ClusterRoleBinding 来查看命名空间中的默认 ServiceAccount。这很好用,如果我不这样做,packetbeat 会报告它无法列出 API 服务器上的 Pod。

这是我用来制作 ECK 部署 packetbeat 的 Beat 配置:

apiVersion: beat.k8s.elastic.co/v1beta1
kind: Beat
metadata:
  name: packetbeat
spec:
  type: packetbeat
  version: 7.9.0
  elasticsearchRef:
    name: quickstart
  kibanaRef:
    name: kibana
  config:
    packetbeat.interfaces.device: any
    packetbeat.protocols:
    - type: http
      ports: [80, 8000, 8080, 9200]
    - type: tls
      ports: [443]
    packetbeat.flows:
      timeout: 30s
      period: 10s
    processors:
    - add_kubernetes_metadata: {}
  daemonSet:
    podTemplate:
      spec:
        terminationGracePeriodSeconds: 30
        hostNetwork: true
        automountServiceAccountToken: true # some older Beat versions are depending on this settings presence in k8s context
        dnsPolicy: ClusterFirstWithHostNet
        containers:
        - name: packetbeat
          securityContext:
            runAsUser: 0
            capabilities:
              add:
              - NET_ADMIN

(这主要是来自 ECK 示例页面的稍微修改的示例。)但是,这根本不起作用。我首先使用“add_kubernetes_metadata: {}”进行了尝试,但这会导致消息出错:

2020-08-19T14:23:38.550Z 错误 [kubernetes] kubernetes/util.go:117 kubernetes:查询 pod 失败并出现错误:找不到 pod“packetbeat”{“libbeat.processor”:“add_kubernetes_metadata”}

当我添加“主机:packetbeat”时,此消息消失。我现在不再收到错误,但我也没有收到 Kubernetes 元数据。我对命名空间标签最感兴趣,但我没有得到任何东西。我在日志中没有看到任何其他错误,目前它只是每 30 秒报告一次监控详细信息。

我究竟做错了什么?我可以提供更多信息来帮助我调试吗?

4

1 回答 1

0

所以文档只是不清楚。尽管它们没有明确说明,但您确实需要添加索引器和匹配器。我的理解是有“默认”的(因为您可以禁用它们),但似乎并非如此。根据文档中的示例添加索引器和匹配器使 Kubernetes 元数据成为数据的一部分。

于 2020-08-20T14:23:19.957 回答