配置编辑

使用以下方法之一(按优先级降序排列)调整 Elastic APM Go 代理以满足您的需求

  1. 通过 Kibana 进行 APM 代理配置(支持的选项标记为 动态配置 )
  2. 在代码中,使用 跟踪器配置 API
  3. 环境变量

通过 Kibana 定义的配置优先于在代码中定义的相同配置,而代码中定义的配置优先于环境变量。如果通过 Kibana 定义了配置,然后将其删除,则代理将恢复为通过跟踪器配置 API 或环境变量在本地定义的配置。

为了简化开发和测试,代理默认将数据发送到 https://127.0.0.1:8200 的 Elastic APM 服务器。要将数据发送到其他位置,您必须配置 ELASTIC_APM_SERVER_URL。根据服务器的配置,您可能还需要设置 ELASTIC_APM_API_KEYELASTIC_APM_SECRET_TOKENELASTIC_APM_VERIFY_SERVER_CERT。所有其他变量都有可用的默认值。

动态配置编辑

标记有 动态配置 徽章的配置选项可以在运行时从受支持的源设置时更改。

Go 代理支持 集中配置,允许您通过 APM 应用程序微调某些配置。默认情况下,代理中启用了此功能,使用 ELASTIC_APM_CENTRAL_CONFIG

配置格式编辑

某些选项需要一个单位,可以是持续时间或大小。这些需要以特定格式提供。

持续时间格式编辑

持续时间 格式用于超时等选项。单位作为后缀直接在数字后面提供,中间没有任何空格。

示例: 5ms

支持的单位

  • ms(毫秒)
  • s(秒)
  • m(分钟)

大小格式编辑

大小 格式用于最大缓冲区大小等选项。单位作为后缀直接在数字后面提供,中间没有任何空格。

示例: 10KB

支持的单位

  • B(字节)
  • KB(千字节)
  • MB(兆字节)
  • GB(千兆字节)

我们使用 2 的幂次方大小约定,例如 1KB = 1024B。

ELASTIC_APM_SERVER_URL编辑

环境 默认 示例

ELASTIC_APM_SERVER_URL

https://127.0.0.1:8200

https://127.0.0.1:8200

您的 Elastic APM 服务器的 URL。服务器同时支持 HTTP 和 HTTPS。如果您使用 HTTPS,则可能需要配置您的客户端计算机,以便可以验证服务器证书。您可以使用 ELASTIC_APM_VERIFY_SERVER_CERT 禁用证书验证。

ELASTIC_APM_SERVER_TIMEOUT编辑

环境 默认 示例

ELASTIC_APM_SERVER_TIMEOUT

30s

30s

向您的 Elastic APM 服务器发出请求的超时时间。设置为零或负值时,将禁用超时。

ELASTIC_APM_SECRET_TOKEN编辑

环境 默认 示例

ELASTIC_APM_SECRET_TOKEN

“随机字符串”

此字符串用于确保只有您的代理可以将数据发送到您的 APM 服务器。代理和 APM 服务器都必须配置相同的密钥。

密钥在每次向服务器发出的请求中都以纯文本形式发送,因此您还应该使用 HTTPS 来保护您的通信安全。除非您这样做,否则您的密钥可能会被攻击者观察到。

ELASTIC_APM_API_KEY编辑

环境 默认 示例

ELASTIC_APM_API_KEY

“Base64 编码的字符串”

此 Base64 编码的字符串用于确保只有您的代理可以将数据发送到您的 APM 服务器。必须使用 APM 服务器 命令行工具 创建 API 密钥。

API 密钥在每次向服务器发出的请求中都以纯文本形式发送,因此您还应该使用 HTTPS 来保护您的通信安全。除非您这样做,否则您的 API 密钥可能会被攻击者观察到。

ELASTIC_APM_SERVICE_NAME编辑

环境 默认 示例

ELASTIC_APM_SERVICE_NAME

可执行文件名称

my-app

您的服务或应用程序的名称。这用于将您的服务的所有错误和事务保持在一起,并且是 Elastic APM 用户界面中的主要过滤器。

如果您没有指定 ELASTIC_APM_SERVICE_NAME,Go 代理将使用可执行文件名称。例如,如果您的可执行文件名为“my-app.exe”,则您的服务将被标识为“my-app”。

服务名称必须符合以下正则表达式:^[a-zA-Z0-9 _-]+$。换句话说:您的服务名称只能包含 ASCII 字母表中的字符、数字、破折号、下划线和空格。

ELASTIC_APM_SERVICE_VERSION编辑

环境 默认 示例

ELASTIC_APM_SERVICE_VERSION

指示已部署服务的版本的字符串

当前部署的服务版本的版本字符串。如果您没有对部署进行版本控制,则此字段的建议值是已部署修订版的提交标识符,例如 git rev-parse HEAD 的输出。

ELASTIC_APM_SERVICE_NODE_NAME编辑

环境 默认 示例

ELASTIC_APM_SERVICE_NODE_NAME

my-node-name

用于区分服务中节点的可选名称。必须是唯一的,否则来自多个节点的数据将被聚合在一起。

如果您没有指定 ELASTIC_APM_SERVICE_NODE_NAME,则服务节点将使用容器 ID(如果可用)进行标识,否则使用主机名。

APM 服务器 7.5 及更高版本完全支持此功能。

ELASTIC_APM_ENVIRONMENT编辑

环境 默认 示例

ELASTIC_APM_ENVIRONMENT

“生产环境”

此服务部署到的环境的名称,例如“生产环境”或“测试环境”。

环境允许您在 APM 应用程序中轻松地在全局级别过滤数据。在跨代理命名环境时保持一致非常重要。有关更多信息,请参阅 APM 应用程序中的 环境选择器

Kibana 7.2 及更高版本的 APM 应用程序完全支持此功能。在 7.2 之前的版本中,您必须使用查询栏来过滤特定环境。

ELASTIC_APM_ACTIVE编辑

环境 默认 示例

ELASTIC_APM_ACTIVE

true

false

启用或禁用代理。如果设置为 false,则 Go 代理不会向 Elastic APM 服务器发送任何数据,并且仪器开销最小化。

ELASTIC_APM_RECORDING编辑

dynamic config

环境 默认 示例

ELASTIC_APM_RECORDING

true

false

启用或禁用事件记录。如果设置为 false,则 Go 代理不会向 Elastic APM 服务器发送任何事件,并且仪器开销最小化,但代理将继续轮询服务器以获取配置更改。

ELASTIC_APM_GLOBAL_LABELS编辑

环境 默认 示例

ELASTIC_APM_GLOBAL_LABELS

dept=engineering,rack=number8

标签将添加到所有事件中。标签的格式为:key=value[,key=value[,...]]。应用程序通过 API 设置的任何标签都将覆盖具有相同键的全局标签。

此选项需要 APM Server 7.2 或更高版本,在使用旧版本服务器时无效。

ELASTIC_APM_TRANSACTION_IGNORE_URLS编辑

环境 默认 示例

ELASTIC_APM_TRANSACTION_IGNORE_URLS

/heartbeat*, *.jpg

要忽略的 HTTP 请求匹配模式列表。请求行与任何模式匹配的传入 HTTP 请求都不会被报告为事务。

此选项支持通配符 *,它匹配零个或多个字符。例如:/foo/*/bar/*/baz**foo*。默认情况下,匹配不区分大小写。在模式前添加 (?-i) 使匹配区分大小写。

此配置以前称为 ELASTIC_APM_IGNORE_URLS,现已弃用,并将在未来主要版本的代理中删除。

ELASTIC_APM_SANITIZE_FIELD_NAMES编辑

环境 默认 示例

ELASTIC_APM_SANITIZE_FIELD_NAMES

password, passwd, pwd, secret, *key, *token*, *session*, *credit*, *card*, *auth*, set-cookie, *principal*

sekrits

要编辑的 HTTP 标头、cookie 和 POST 表单字段名称匹配模式列表。

此选项支持通配符 *,它匹配零个或多个字符。例如:/foo/*/bar/*/baz**foo*。默认情况下,匹配不区分大小写。在模式前添加 (?-i) 使匹配区分大小写。

ELASTIC_APM_CAPTURE_HEADERS编辑

dynamic config

环境 默认

ELASTIC_APM_CAPTURE_HEADERS

true

对于作为 HTTP 请求的事务,Go 代理可以选择捕获请求和响应标头。

可能的值:truefalse

捕获的标头将根据 ELASTIC_APM_SANITIZE_FIELD_NAMES 进行清理。

ELASTIC_APM_CAPTURE_BODY编辑

dynamic config

环境 默认

ELASTIC_APM_CAPTURE_BODY

off

对于作为 HTTP 请求的事务,Go 代理可以选择捕获请求正文。

可能的值:errorstransactionsalloff

请求正文通常包含敏感值,如密码、信用卡号等。如果您的服务处理此类数据,请谨慎启用此功能。

ELASTIC_APM_HOSTNAME编辑

环境 默认 示例

ELASTIC_APM_HOSTNAME

os.Hostname()

app-server01

将错误和事务数据发送到 APM 服务器时要使用的主机名。

ELASTIC_APM_API_REQUEST_TIME编辑

环境 默认

ELASTIC_APM_API_REQUEST_TIME

10s

在结束对 Elastic APM 服务器的请求之前等待的时间量。当您报告事务、跨度和错误时,代理将启动一个请求,并在有足够的数据发送时将它们发送到服务器;请求将保持打开状态,直到超过此时间,或者直到达到 最大请求大小

ELASTIC_APM_API_REQUEST_SIZE编辑

环境 默认 最小值 最大值

ELASTIC_APM_API_REQUEST_SIZE

750KB

1KB

5MB

要发送到 Elastic APM 服务器的请求正文的最大大小。代理将维护一个内存缓冲区,其中包含要流式传输到 APM 服务器的压缩数据。

ELASTIC_APM_API_BUFFER_SIZE编辑

环境 默认 最小值 最大值

ELASTIC_APM_API_BUFFER_SIZE

1MB

10KB

100MB

代理繁忙时要在内存中存储的未压缩编码事件的最大字节数。当代理能够这样做时,它会将缓冲数据传输到请求缓冲区,并开始将其流式传输到服务器。如果缓冲区已满,新事件将开始替换旧事件。

ELASTIC_APM_TRANSACTION_MAX_SPANS编辑

dynamic config

环境 默认

ELASTIC_APM_TRANSACTION_MAX_SPANS

500

限制每个事务记录的跨度数量。

这在事务创建大量跨度(例如数千个 SQL 查询)的情况下很有用。设置上限将防止代理和 APM 服务器因此类边缘情况而超载。

ELASTIC_APM_EXIT_SPAN_MIN_DURATION编辑

dynamic config

环境 默认

ELASTIC_APM_EXIT_SPAN_MIN_DURATION

1ms

设置要报告的退出跨度的最短持续时间。短于或等于此阈值的跨度将被代理丢弃,并在跨度的事务中作为统计信息报告,只要事务在报告跨度之前没有结束。

启用跨度压缩时(ELASTIC_APM_SPAN_COMPRESSION_ENABLED),将考虑压缩跨度组合的总和。

此设置允许的最短持续时间为 1 微秒(us)。

ELASTIC_APM_SPAN_FRAMES_MIN_DURATION编辑

dynamic config

环境 默认

ELASTIC_APM_SPAN_FRAMES_MIN_DURATION

5ms

APM 代理将为每个记录的跨度收集堆栈跟踪,其持续时间超过此配置值。虽然这对于找到代码中导致跨度的确切位置非常有帮助,但收集此堆栈跟踪确实会产生一些处理和存储开销。

此配置已弃用,并将在未来主要版本的代理中删除。

ELASTIC_APM_SPAN_STACK_TRACE_MIN_DURATION编辑

dynamic config

环境 默认

ELASTIC_APM_SPAN_STACK_TRACE_MIN_DURATION

5ms

APM 代理将为每个记录的跨度收集堆栈跟踪,其持续时间超过此配置值。虽然这对于找到代码中导致跨度的确切位置非常有帮助,但收集此堆栈跟踪确实会产生一些处理和存储开销。

此配置以前称为 ELASTIC_APM_SPAN_FRAMES_MIN_DURATION,现已弃用,并将在未来主要版本的代理中删除。

ELASTIC_APM_STACK_TRACE_LIMIT编辑

dynamic config

环境 默认

ELASTIC_APM_STACK_TRACE_LIMIT

50

限制为每个堆栈跟踪捕获的帧数。

将限制设置为 0 将禁用堆栈跟踪收集,而任何正整数值都将用作要收集的最大帧数。设置负值(例如 -1)意味着将收集所有帧。

ELASTIC_APM_TRANSACTION_SAMPLE_RATE编辑

dynamic config

环境 默认

ELASTIC_APM_TRANSACTION_SAMPLE_RATE

1.0

默认情况下,代理将对每个事务(例如对服务的请求)进行采样。要减少开销和存储需求,请将采样率设置为 0.01.0 之间的值。我们仍然会记录未采样事务的总时间和结果,但不会记录上下文信息、标签或跨度。

ELASTIC_APM_METRICS_INTERVAL编辑

环境 默认

ELASTIC_APM_METRICS_INTERVAL

30s

APM 代理收集和报告指标的时间间隔。设置为 0s 可禁用。

ELASTIC_APM_DISABLE_METRICS编辑

环境 默认 示例

ELASTIC_APM_DISABLE_METRICS

system.*, *cpu*

禁用某些指标的收集。如果指标的名称与任何通配符表达式匹配,则不会收集该指标。

此选项支持通配符 *,它匹配零个或多个字符。例如:/foo/*/bar/*/baz**foo*。默认情况下,匹配不区分大小写。在模式前添加 (?-i) 使匹配区分大小写。

ELASTIC_APM_BREAKDOWN_METRICS编辑

环境 默认

ELASTIC_APM_BREAKDOWN_METRICS

true

捕获细分指标。设置为 false 可禁用。

ELASTIC_APM_SERVER_CERT编辑

环境 默认

ELASTIC_APM_SERVER_CERT

如果您已使用自签名 TLS 证书配置 APM 服务器,或者您想固定服务器证书,请通过 ELASTIC_APM_SERVER_CERT 配置指定 PEM 编码证书的路径。

ELASTIC_APM_SERVER_CA_CERT_FILE编辑

环境 默认

ELASTIC_APM_SERVER_CA_CERT_FILE

PEM 编码的 TLS 证书颁发机构证书的路径,该证书将用于验证服务器的 TLS 证书链。

ELASTIC_APM_VERIFY_SERVER_CERT编辑

环境 默认

ELASTIC_APM_VERIFY_SERVER_CERT

true

默认情况下,如果您使用 HTTPS 连接到 APM 服务器,则代理会验证服务器的证书。可以通过将此设置更改为 false 来禁用验证。设置 ELASTIC_APM_SERVER_CERT 时,将忽略此设置。

ELASTIC_APM_LOG_FILE编辑

环境 默认

ELASTIC_APM_LOG_FILE

ELASTIC_APM_LOG_FILE 指定代理默认内部记录器的输出文件。该文件将在进程启动时创建,如果文件已存在,则会被截断。默认情况下,日志记录处于禁用状态。您必须指定 ELASTIC_APM_LOG_FILE 才能启用它。如果以编程方式配置了记录器,则将忽略此环境变量。

代理识别两个特殊的文件名:stdoutstderr。这些将分别将记录器配置为写入标准输出和标准错误。

ELASTIC_APM_LOG_LEVEL编辑

环境 默认

ELASTIC_APM_LOG_LEVEL

"error"

ELASTIC_APM_LOG_LEVEL 指定代理默认内部记录器的日志级别。记录器仅使用的两个级别是“错误”和“调试”。默认情况下,日志记录处于禁用状态。您必须指定 ELASTIC_APM_LOG_FILE 才能启用它。

如果以编程方式配置了记录器,则将忽略此环境变量。

ELASTIC_APM_CENTRAL_CONFIG编辑

环境 默认

ELASTIC_APM_CENTRAL_CONFIG

true

通过 Kibana 激活 APM 代理中心配置。默认情况下,代理将轮询服务器以获取代理配置更改。可以通过将设置更改为 false 来禁用此功能。有关更多信息,请参阅 APM 代理中心配置

此功能需要 APM Server v7.3 或更高版本。

ELASTIC_APM_USE_ELASTIC_TRACEPARENT_HEADER编辑

环境

默认

ELASTIC_APM_USE_ELASTIC_TRACEPARENT_HEADER

true

为了启用分布式追踪,代理会将追踪上下文标头添加到使用 module/apmhttp 发出的传出 HTTP 请求中。这些标头(traceparenttracestate)在 W3C 追踪上下文 规范中定义。

如果此设置是 true,则代理还会添加标头 elastic-apm-traceparent,以便与旧版本的 Elastic APM 代理向后兼容。

ELASTIC_APM_CLOUD_PROVIDER编辑

环境 默认 示例

ELASTIC_APM_CLOUD_PROVIDER

“none”

“aws”

此配置值允许您指定应假定哪个云提供商用于元数据收集。默认情况下,代理将使用试错法自动收集云元数据。

有效选项为 “none”“auto”“aws”“gcp”“azure”。如果此配置值设置为 “none”,则不会收集任何云元数据。

ELASTIC_APM_SPAN_COMPRESSION_ENABLED编辑

dynamic config

环境 默认

ELASTIC_APM_SPAN_COMPRESSION_ENABLED

true

启用后,代理将尝试将共享同一父级的_短_出口跨度压缩为一个组合跨度。_短_的确切持续时间取决于所使用的压缩策略(same_kindexact_match)。

为了使跨度可压缩,需要满足以下条件

  • 跨度是出口跨度。
  • 跨度是同级(共享同一父级)。
  • 跨度没有向下游传播其上下文。
  • 每个跨度的持续时间等于或小于压缩策略的最大持续时间。
  • 当以下属性相等时,跨度将使用 same_kind 策略进行压缩

    • span.type.
    • span.subtype.
    • span.context.destination.service.resource
  • 当满足所有先前条件并且 span.name 相等时,跨度将使用 exact_match 策略进行压缩。

压缩短出口跨度应该可以为创建大量连续短出口跨度的服务(例如数据库或缓存服务)节省一些存储空间,这些服务在查看跟踪时通常不感兴趣。

此功能是实验性的,需要 APM Server v7.15 或更高版本。

ELASTIC_APM_SPAN_COMPRESSION_EXACT_MATCH_MAX_DURATION编辑

dynamic config

环境 默认

ELASTIC_APM_SPAN_COMPRESSION_EXACT_MATCH_MAX_DURATION

50 毫秒

要考虑压缩完全匹配的同级出口跨度的最大持续时间。

ELASTIC_APM_SPAN_COMPRESSION_SAME_KIND_MAX_DURATION编辑

dynamic config

环境 默认

ELASTIC_APM_SPAN_COMPRESSION_SAME_KIND_MAX_DURATION

0 毫秒

要考虑压缩同类同级出口跨度的最大持续时间。

ELASTIC_APM_TRACE_CONTINUATION_STRATEGY编辑

dynamic config

环境 默认

ELASTIC_APM_TRACE_CONTINUATION_STRATEGY

continue

此选项允许对 APM 代理如何处理传入请求上的 W3C 追踪上下文标头进行一些控制。默认情况下,traceparent 和 tracestate 标头根据 W3C 规范用于分布式追踪。但是,在某些情况下,不使用传入的 traceparent 标头可能会有所帮助。一些用例示例

  • 受 Elastic 监控的服务正在接收来自未监控服务的带有 traceparent 标头的请求。
  • 受 Elastic 监控的服务是公开的,并且不希望追踪数据(追踪 ID、采样决策)可能被用户请求欺骗。

有效选项为 continuerestartrestart_external

continue
默认行为。传入的 traceparent 值用于继续追踪并确定采样决策。
restart
始终忽略传入请求的 traceparent 标头。将生成新的追踪 ID,并将根据 transaction_sample_rate 做出采样决策。将建立到传入 traceparent 的跨度链接。
restart_external
如果传入请求在 tracestate 中包含 es 供应商标志,则任何 traceparent 都将被视为内部的,并将按照上述 continue 的描述进行处理。否则,任何 traceparent 都将被视为外部的,并将按照上述 restart 的描述进行处理。

从 Elastic Observability 8.2 开始,跨度链接在追踪视图中可见。