配置

编辑

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

  1. 通过 Kibana 进行 APM 代理配置(支持的选项标有 动态配置
  2. 在代码中使用 Tracer Config API
  3. 环境变量

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

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

动态配置

编辑

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

Go Agent 支持 中央配置,允许您通过 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 Server 的 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 Server 版本 >= 7.5 完全支持此功能。

ELASTIC_APM_ENVIRONMENT

编辑
环境 默认 示例

ELASTIC_APM_ENVIRONMENT

“production”

此服务部署在其中的环境的名称,例如“production”或“staging”。

环境允许您在 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 代理可以选择捕获请求和响应标头。

可能的值:true, false

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

ELASTIC_APM_CAPTURE_BODY

编辑

dynamic config

环境 默认

ELASTIC_APM_CAPTURE_BODY

off

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

可能的值:errors, transactions, all, off

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

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

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

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

ELASTIC_APM_EXIT_SPAN_MIN_DURATION

编辑

dynamic config

环境 默认

ELASTIC_APM_EXIT_SPAN_MIN_DURATION

1 毫秒

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

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

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

ELASTIC_APM_SPAN_FRAMES_MIN_DURATION

编辑

dynamic config

环境 默认

ELASTIC_APM_SPAN_FRAMES_MIN_DURATION

5 毫秒

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

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

ELASTIC_APM_SPAN_STACK_TRACE_MIN_DURATION

编辑

dynamic config

环境 默认

ELASTIC_APM_SPAN_STACK_TRACE_MIN_DURATION

5 毫秒

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

此配置以前称为 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 之间的值。我们仍然会记录未采样事务的整体时间和结果,但不会记录上下文信息、标签或 span。

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 指定代理默认内部记录器的日志级别。记录器仅使用的两个级别是“error”和“debug”。默认情况下,日志记录处于禁用状态。您必须指定 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

"auto"

"aws"

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

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

ELASTIC_APM_SPAN_COMPRESSION_ENABLED

编辑

dynamic config

环境 默认

ELASTIC_APM_SPAN_COMPRESSION_ENABLED

true

启用后,代理将尝试将共享同一父级的出口 span 压缩为复合 span。被视为的确切持续时间取决于使用的压缩策略 (same_kindexact_match)。

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

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

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

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

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

ELASTIC_APM_SPAN_COMPRESSION_EXACT_MATCH_MAX_DURATION

编辑

dynamic config

环境 默认

ELASTIC_APM_SPAN_COMPRESSION_EXACT_MATCH_MAX_DURATION

50 毫秒

用于压缩完全匹配的同级出口 span 的最大持续时间。

ELASTIC_APM_SPAN_COMPRESSION_SAME_KIND_MAX_DURATION

编辑

dynamic config

环境 默认

ELASTIC_APM_SPAN_COMPRESSION_SAME_KIND_MAX_DURATION

0 毫秒

用于压缩同类型的同级出口 span 的最大持续时间。

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 开始,跨度链接在跟踪视图中可见。