为每个要自动检测的 Pod 添加一个 Pod 模板注释编辑

要自动检测部署,请更新其 spec.template.metadata.annotations 以包含 co.elastic.apm/attach 键。Webhook 将此键的值与 Helm 值文件定义的 webhookConfig.agents 值匹配。

例如,如果您的 Webhook 值文件包含以下内容

...
webhookConfig:
  agents:
    java:
...

那么您的 co.elastic.apm/attach 值应为 java

apiVersion: apps/v1
kind: Deployment
metadata:
  # ...
spec:
  replicas: 1
  template:
    metadata:
      annotations:
        co.elastic.apm/attach: java 
      labels:
        # ...
    spec:
      #...

APM 连接器配置 webhookConfig.agents.javaco.elastic.apm/attach: java 匹配。如果您定义了更多配置,例如以下 java-dev 配置,并且您想将该定义用于此部署,则此条目将为 java-dev 而不是 java

通过 spec.template.metadata.annotations 值,您可以为每个部署设置自定义环境变量和镜像。例如,您的 Helm 值文件可能配置了多个部署:java-dev 可能与 java-prod 具有不同的 APM 环境,而 backend2 使用与其他部署不同的 APM 代理。

agents:
  java-dev:
    image: docker.elastic.co/observability/apm-agent-java:latest
    artifact: "/usr/agent/elastic-apm-agent.jar"
    environment:
      ELASTIC_APM_SERVER_URL: "http://192.168.1.10:8200"
      ELASTIC_APM_ENVIRONMENT: "dev"
      ELASTIC_APM_LOG_LEVEL: "debug"
      ELASTIC_APM_PROFILING_INFERRED_SPANS_ENABLED: "true"
      JAVA_TOOL_OPTIONS: "-javaagent:/elastic/apm/agent/elastic-apm-agent.jar"
  java-prod:
    image: docker.elastic.co/observability/apm-agent-java:1.44.0 
    artifact: "/usr/agent/elastic-apm-agent.jar"
    environment:
      ELASTIC_APM_SERVER_URL: "http://192.168.1.11:8200"
      ELASTIC_APM_ENVIRONMENT: "prod"
      ELASTIC_APM_LOG_LEVEL: "info"
      ELASTIC_APM_PROFILING_INFERRED_SPANS_ENABLED: "true"
      JAVA_TOOL_OPTIONS: "-javaagent:/elastic/apm/agent/elastic-apm-agent.jar"
  backend2:
    image: docker.elastic.co/observability/apm-agent-nodejs:latest
    artifact: "/opt/nodejs/node_modules/elastic-apm-node"
    environment:
      NODE_OPTIONS: "-r /elastic/apm/agent/elastic-apm-node/start"
      ELASTIC_APM_SERVER_URL: "http://192.168.1.11:8200"
      ELASTIC_APM_SERVICE_NAME: "petclinic"
      ELASTIC_APM_LOG_LEVEL: "info"

此处的示例显示了 java-prod 配置,它指定了特定版本的代理,而不是 latest

values.yaml 中定义的唯一 webhookConfig.agents 值是 javanodejs。使用其他值时,您必须显式指定 imageartifact*OPTIONS 值。

Webhook 和此处定义的环境变量优先于 Kubernetes 部署中定义的值 - 覆盖它们。例如,如果您的镜像使用 JAVA_TOOL_OPTIONS,则您的镜像设置的值将被忽略,而优先使用此处或 values.yaml 中设置的值。