菜单
文档breadcrumb arrow Beylabreadcrumb arrow 网络breadcrumb arrow 快速入门
Grafana Cloud

Beyla 网络指标快速入门

Beyla 可以在任何环境(物理主机、虚拟主机或容器)中生成网络指标。建议使用 Kubernetes 环境,因为 Beyla 能够使用源和目标 Kubernetes 实体的元数据来修饰每个指标。

注意

本教程介绍了如何在 Kubernetes 中从零开始部署 Beyla。要使用 Helm,请参考 使用 Helm 在 Kubernetes 中部署 Beyla 文档。

部署 Beyla 并启用网络指标

要启用网络指标,请在 Beyla 配置中设置以下选项

yaml
network:
  enable: true

或者导出以下环境变量

sh
export BEYLA_NETWORK_METRICS=true

网络指标需要使用 Kubernetes 元数据进行修饰。要启用此功能,请在 Beyla 配置中设置以下选项

yaml
attributes:
  kubernetes:
    enable : true

或者导出以下环境变量

sh
export BEYLA_KUBE_METADATA_ENABLE=true

最后,网络指标需要具有以下功能的管理 sudo 权限

  • Kubernetes 需要完全特权访问,即 rootsudoprivileged: true
  • 以下能力:BPF, PERFMON, NET_ADMIN, SYS_RESOURCE

要了解有关 Beyla 配置的更多信息,请参阅 Beyla 配置文档

配置示例

以下 YAML 配置提供了用于网络指标的简单 Beyla 部署

yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: beyla
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: beyla
rules:
  - apiGroups: [ "apps" ]
    resources: [ "replicasets" ]
    verbs: [ "list", "watch" ]
  - apiGroups: [ "" ]
    resources: [ "pods", "services", "nodes" ]
    verbs: [ "list", "watch" ]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: beyla
subjects:
  - kind: ServiceAccount
    name: beyla
    namespace: default
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: beyla
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: beyla-config
data:
  beyla-config.yml: |
    attributes:
      kubernetes:
        enable: true
    network:
      enable: true
      print_flows: true
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: beyla
spec:
  selector:
    matchLabels:
      instrumentation: beyla
  template:
    metadata:
      labels:
        instrumentation: beyla
    spec:
      serviceAccountName: beyla
      hostNetwork: true
      volumes:
        - name: beyla-config
          configMap:
            name: beyla-config
      containers:
        - name: beyla
          image: grafana/beyla:main
          securityContext:
            privileged: true
          volumeMounts:
            - mountPath: /config
              name: beyla-config
          env:
            - name: BEYLA_CONFIG_PATH
              value: "/config/beyla-config.yml"

请注意此部署配置的以下要求

  • 容器镜像使用最新的开发中镜像 grafana/beyla:main
  • Beyla 需要以 DaemonSet 方式运行,因为它每个节点只需要一个 Beyla 实例
  • 为了监听主机上的网络数据包,Beyla 需要 hostNetwork: true 权限
  • 为了用 Kubernetes 元数据修饰网络指标,请创建一个具有 ReplicaSets、Pods、Services 和 Nodes 的 listwatch 权限的 ClusterRoleClusterRoleBinding

该配置未设置用于导出指标的端点。相反,trace_printer: text 选项将捕获的网络流输出到标准输出。

使用 kubectl logs 查看网络流条目,例如

network_flow: beyla.ip=172.18.0.2 iface= direction=255 src.address=10.244.0.4 dst.address=10.96.0.1
src.name=local-path-provisioner-7577fdbbfb-g6b7d dst.name=kubernetes
k8s.src.node.name=kind-control-plane k8s.dst.namespace=default k8s.dst.name=kubernetes
k8s.dst.owner.type=Service k8s.src.namespace=local-path-storage
k8s.src.name=local-path-provisioner-7577fdbbfb-g6b7d k8s.src.type=Pod
k8s.src.owner.name=local-path-provisioner k8s.src.owner.type=Deployment
k8s.dst.type=Service k8s.dst.owner.name=kubernetes

有关所用属性的更多信息,请参阅网络指标文档

导出 OpenTelemetry 指标

在确认网络指标正在收集后,将 Beyla 配置为将指标以 OpenTelemetry 格式导出到 OpenTelemetry 端点。

注意

目前不支持将网络指标导出到 Prometheus。

Beyla 适用于任何 OpenTelemetry 端点。本快速入门使用 Grafana Cloud 中的 OpenTelemetry 端点。您可以在 Grafana 网站上获取免费的 Grafana Cloud 账户

要获取您技术栈的 OpenTelemetry 端点,请登录 Grafana Cloud Portal,然后在 OpenTelemetry 部分下点击 Configure

OpenTelemetry Grafana Cloud portal

Password / API token 下,点击 Generate now 并按照说明创建一个 API token。

Environment Variables 部分填充了一组标准 OpenTelemetry 环境变量,这些变量为 Beyla 提供了连接端点和凭据信息。

OTLP connection headers

复制 OTEL_EXPORTER_OTLP_HEADERS 环境变量的值,并将其作为 Kubernetes secret 粘贴(并部署)。

yaml
apiVersion: v1
kind: Secret
metadata:
  name: grafana-secret
type: Opaque
stringData:
  otlp-headers: "Authorization=Basic MzQ3NTp....."

现在添加 OTEL_EXPORTER_OTLP_HEADERS 并将此 secret 引用为变量值。

同时将 OTEL_EXPORTER_OTLP_ENDPOINT 及其值作为环境变量添加到 Kubernetes manifest 中 Beyla 容器的 env 部分。本文档开头 manifest 中 beyla 容器的 env 部分应如下所示:

yaml
          env:
            - name: BEYLA_CONFIG_PATH
              value: "/config/beyla-config.yml"
            - name: OTEL_EXPORTER_OTLP_ENDPOINT
              value: "https://otlp-gateway-prod-eu-west-0.grafana.net/otlp"
            - name: OTEL_EXPORTER_OTLP_HEADERS
              valueFrom:
                secretKeyRef:
                  key: otlp-headers
                  name: grafana-secret

选择指标属性以减少基数

默认情况下,Beyla 在 beyla.network.flow.bytes 指标中包含以下属性

  • k8s.src.owner.name
  • k8s.src.namespace
  • k8s.dst.owner.name
  • k8s.dst.namespace
  • k8s.cluster.name

Beyla 只包含可用属性的一个子集,以避免导致指标存储中出现基数爆炸,尤其当某些属性(如 src.addressdst.address)捕获了外部流量的 IP 地址时。

attributes.select.<metric-name>.include YAML 子节可以用于选择要报告的属性

yaml
network:
  enable: true
attributes:
  kubernetes:
    enable: true
  select:
    beyla.network.flow.bytes:
      include:
      - k8s.src.owner.name
      - k8s.src.namespace
      - k8s.dst.owner.name
      - k8s.dst.namespace

上面的示例将按源和目标 Kubernetes 所有者(Deployment、DaemonSet、StatefulSet、ReplicaSet)聚合 beyla.network.flow.bytes 的值,从而避免了更细粒度的属性,例如 Pod 名称或 IP 地址。

按 CIDR 对 IP 地址分组

报告包含 IP 地址(src.addressdst.address)的指标属性可能导致基数爆炸,但它可能是获取有关网络和子网如何通信的更清晰视图的有用网络级信息。

network 中的 cidrs YAML 子节(或 BEYLA_NETWORK_CIDRS 环境变量)接受 CIDR 表示法的子网列表,支持 IPv4 和 IPv6 格式。

cidrs 部分的存在会保留 src.addressdst.address 字段不变,并添加 src.cidrdst.cidr 属性。请不要忘记将它们添加到 attributes.select 部分

yaml
network:
  enable: true
  cidrs:
    - 10.10.0.0/24
    - 10.0.0.0/8
    - 10.30.0.0/16
attributes:
  kubernetes:
    enable: true
  select:
    beyla_network_flow_bytes:
      include:
          - k8s.src.owner.name
          - k8s.src.namespace
          - k8s.dst.owner.name
          - k8s.dst.namespace
          - src.cidr
          - dst.cidr