跳转至

ebpftrace



配置

前置条件

采集器默认开启采样,采样率默认值为 0.110% 的链路采样。

如果数据量在 1e6 span/min,目前需要至少提供 4C 的 cpu 资源和 4G 的 mem 资源。

ebpftrace 采集器用于接收和链接 eBPF span , 最终实现链路 trace_id 的生成,并建立 span 间的父子关系。

请参考以下部署方式(如下图): 需要使所有 ebpf 外部采集器的 ebpf-trace 插件生成的数据发送至同一个开启 ebpftracing 采集器的 DataKit上,该 DataKit 将会所有 eBPF 采集器生成的链路 eBPF span 数据进行再处理后统一上传至观测云。

如果一个服务的三个应用 App 1 ~ 3 位于两个不同的节点,ebpftrace 目前根据 tcp seq 等来确认进程间的网络调用关系,需要对相关 eBPF span 进行链接以此生成 trace_id 和设置 parent_id。

img0

采集器配置

完成设置后需要将开启了 ebpftrace 采集器的 DataKit 或相关 K8s Service 的 ip:port 提供给 eBPF 采集器用于 eBPF Span 的传输。

进入 DataKit 安装目录下的 conf.d/ebpftrace 目录,复制 ebpftrace.conf.sample 并命名为 ebpftrace.conf。示例如下:

[[inputs.ebpftrace]]
  sqlite_path = "/usr/local/datakit/ebpf_spandb"
  use_app_trace_id = true
  window = "20s"
  sampling_rate = 0.1

该采集器需要部署时需要限定副本数为 1,参考以下 yaml 进行部署,需要设置 yaml 中的 ENV_DATAWAYimage

apiVersion: v1
kind: Namespace
metadata:
  name: datakit-ebpftrace

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: datakit-ebpftrace
  labels:
    app: deployment-datakit-ebpftrace
  namespace: datakit-ebpftrace
spec:
  replicas: 1
  selector:
    matchLabels:
      app: deployment-datakit-ebpftrace
  template:
    metadata:
      labels:
        app: deployment-datakit-ebpftrace
    spec:
      containers:
      - name: datakit-ebpftrace
        image: 
        imagePullPolicy: Always
        ports:
        - containerPort: 9529
          protocol: TCP
        - containerPort: 6060
        resources:
          requests:
            cpu: "200m"
            memory: "256Mi"
          limits:
            cpu: "4000m"
            memory: "8Gi"
        env:
        - name: HOST_IP
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: status.hostIP
        - name: ENV_K8S_NODE_NAME
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: spec.nodeName
        - name: ENV_HTTP_LISTEN
          value: 0.0.0.0:9529
        - name: ENV_DATAWAY
          value: https://openway.guance.com?token=<xxx>
        - name: ENV_GLOBAL_TAGS
          value: host=__datakit_hostname,host_ip=__datakit_ip
        - name: ENV_DEFAULT_ENABLED_INPUTS
          value: ebpftrace
        - name: ENV_INPUT_EBPFTRACE_WINDOW
          value: "20s"
        - name: ENV_INPUT_EBPFTRACE_SAMPLING_RATE
          value: "0.1"
        - name: ENV_ENABLE_PPROF
          value: "true"
        - name: ENV_PPROF_LISTEN
          value: "0.0.0.0:6060"

---

apiVersion: v1
kind: Service
metadata:
  name: datakit-ebpftrace-service
  namespace: datakit-ebpftrace
spec:
  selector:
    app: deployment-datakit-ebpftrace
  ports:
    - protocol: TCP
      port: 9529
      targetPort: 9529

通过以下环境变量可以调整 Kubernetes 中 ebpftrace 采集配置:

  • ENV_INPUT_EBPFTRACE_SQLITE_PATH

    SQLite 数据库文件存放路径

    Type: String

    ConfField: sqlite_path

    Example: /usr/local/datakit/ebpf_spandb/

  • ENV_INPUT_EBPFTRACE_USE_APP_TRACE_ID

    使用应用侧 trace id 替代 eBPF trace id

    Type: Boolean

    ConfField: use_app_trace_id

    Default: false

  • ENV_INPUT_EBPFTRACE_WINDOW

    链路 span 的链接时间窗口

    Type: TimeDuration

    ConfField: window

    Default: 20s

  • ENV_INPUT_EBPFTRACE_SAMPLING_RATE

    链路采样率

    Type: Float

    ConfField: sampling_rate

    Example: 0.1

指标

以下所有数据采集,默认会追加名为 host 的全局 tag(tag 值为 DataKit 所在主机名),也可以在配置中通过 [inputs.ebpftrace.tags] 指定其它标签:

 [inputs.ebpftrace.tags]
  # some_tag = "some_value"
  # more_tag = "some_other_value"
  # ...

文档评价

文档内容是否对您有帮助? ×