配置
编辑配置
编辑使用以下方法之一调整 Elastic APM Go 代理以满足您的需求——按优先级降序排列
- 通过 Kibana 进行 APM 代理配置(支持的选项标有 )
- 在代码中使用 Tracer Config API
- 环境变量
通过 Kibana 定义的配置优先于在代码中定义的相同配置,而代码中定义的配置优先于环境变量。如果通过 Kibana 定义了配置,然后稍后将其删除,则代理将恢复为通过 Tracer Config API 或环境变量在本地定义的配置。
为了简化开发和测试,代理默认将数据发送到 https://127.0.0.1:8200
的 Elastic APM Server。要将数据发送到其他位置,您必须配置 ELASTIC_APM_SERVER_URL。根据服务器的配置,您可能还需要设置 ELASTIC_APM_API_KEY、 ELASTIC_APM_SECRET_TOKEN 和 ELASTIC_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。服务器同时支持 HTTP 和 HTTPS。如果您使用 HTTPS,则可能需要配置您的客户端计算机,以便可以验证服务器证书。您可以使用 ELASTIC_APM_VERIFY_SERVER_CERT
禁用证书验证。
ELASTIC_APM_SERVER_TIMEOUT
编辑环境 | 默认 | 示例 |
---|---|---|
|
|
|
向您的 Elastic APM 服务器发出的请求的超时时间。当设置为零或负值时,将禁用超时。
ELASTIC_APM_SECRET_TOKEN
编辑环境 | 默认 | 示例 |
---|---|---|
|
"一个随机字符串" |
此字符串用于确保只有您的代理可以将数据发送到您的 APM 服务器。代理和 APM 服务器都必须配置相同的密钥令牌。
密钥令牌以明文形式发送到服务器的每个请求中,因此您还应该使用 HTTPS 保护您的通信。除非这样做,否则攻击者可能会观察到您的密钥令牌。
ELASTIC_APM_API_KEY
编辑环境 | 默认 | 示例 |
---|---|---|
|
"一个 base64 编码的字符串" |
此 base64 编码的字符串用于确保只有您的代理可以将数据发送到您的 APM 服务器。必须使用 APM 服务器 命令行工具 创建 API 密钥。
API 密钥以明文形式发送到服务器的每个请求中,因此您还应该使用 HTTPS 保护您的通信。除非这样做,否则攻击者可能会观察到您的 API 密钥。
ELASTIC_APM_SERVICE_NAME
编辑环境 | 默认 | 示例 |
---|---|---|
|
可执行文件名 |
|
您的服务或应用程序的名称。这用于将您的所有服务错误和事务保持在一起,并且是 Elastic APM 用户界面中的主要过滤器。
如果您未指定 ELASTIC_APM_SERVICE_NAME
,则 Go 代理将使用可执行文件名。例如,如果您的可执行文件名为“my-app.exe”,则您的服务将被标识为“my-app”。
服务名称必须符合以下正则表达式:^[a-zA-Z0-9 _-]+$
。换句话说:您的服务名称只能包含来自 ASCII 字母、数字、破折号、下划线和空格的字符。
ELASTIC_APM_SERVICE_VERSION
编辑环境 | 默认 | 示例 |
---|---|---|
|
一个字符串,指示已部署服务的版本 |
当前已部署服务版本的版本字符串。如果您不对部署进行版本控制,则此字段的建议值是已部署修订的提交标识符,例如 git rev-parse HEAD
的输出。
ELASTIC_APM_SERVICE_NODE_NAME
编辑环境 | 默认 | 示例 |
---|---|---|
|
|
用于区分服务中节点的的可选名称。必须是唯一的,否则来自多个节点的数据将被聚合在一起。
如果您未指定 ELASTIC_APM_SERVICE_NODE_NAME
,则将使用容器 ID(如果可用)标识服务节点,否则将使用主机名。
APM Server 版本 >= 7.5 完全支持此功能。
ELASTIC_APM_ENVIRONMENT
编辑环境 | 默认 | 示例 |
---|---|---|
|
|
此服务部署在其中的环境的名称,例如“production”或“staging”。
环境允许您在 APM 应用程序中轻松地全局过滤数据。在跨代理命名环境时保持一致非常重要。有关更多信息,请参阅 APM 应用程序中的 环境选择器。
Kibana 版本 >= 7.2 中的 APM 应用程序完全支持此功能。在 7.2 之前的版本中,您必须使用查询栏来过滤特定环境。
ELASTIC_APM_ACTIVE
编辑环境 | 默认 | 示例 |
---|---|---|
|
true |
|
启用或禁用代理。如果设置为 false,则 Go 代理不会将任何数据发送到 Elastic APM 服务器,并且仪器开销会最小化。
ELASTIC_APM_RECORDING
编辑环境 | 默认 | 示例 |
---|---|---|
|
true |
|
启用或禁用事件记录。如果设置为 false,则 Go 代理不会将任何事件发送到 Elastic APM 服务器,并且仪器开销会最小化,但代理将继续轮询服务器以获取配置更改。
ELASTIC_APM_GLOBAL_LABELS
编辑环境 | 默认 | 示例 |
---|---|---|
|
|
标签将添加到所有事件中。标签的格式为:key=value[,key=value[,...]]
。应用程序通过 API 设置的任何标签都将覆盖具有相同键的全局标签。
此选项需要 APM Server 7.2 或更高版本,并且在使用旧版本服务器时无效。
ELASTIC_APM_TRANSACTION_IGNORE_URLS
编辑环境 | 默认 | 示例 |
---|---|---|
|
|
要忽略的匹配 HTTP 请求的模式列表。请求行与任何模式匹配的传入 HTTP 请求将不会作为事务报告。
此选项支持通配符 *
,它匹配零个或多个字符。示例:/foo/*/bar/*/baz*
,*foo*
。默认情况下,匹配不区分大小写。在模式前加上 (?-i)
使匹配区分大小写。
此配置以前称为 ELASTIC_APM_IGNORE_URLS
,该配置已弃用,将在代理的未来主要版本中删除。
ELASTIC_APM_SANITIZE_FIELD_NAMES
编辑环境 | 默认 | 示例 |
---|---|---|
|
|
|
用于匹配要编辑的 HTTP 标头、cookie 和 POST 表单字段名称的模式列表。
此选项支持通配符 *
,它匹配零个或多个字符。示例:/foo/*/bar/*/baz*
,*foo*
。默认情况下,匹配不区分大小写。在模式前加上 (?-i)
使匹配区分大小写。
ELASTIC_APM_CAPTURE_HEADERS
编辑环境 | 默认 |
---|---|
|
|
对于 HTTP 请求的事务,Go 代理可以选择捕获请求和响应标头。
可能的值:true
, false
。
捕获的标头根据 ELASTIC_APM_SANITIZE_FIELD_NAMES
进行清理。
ELASTIC_APM_CAPTURE_BODY
编辑环境 | 默认 |
---|---|
|
|
对于 HTTP 请求的事务,Go 代理可以选择捕获请求正文。
可能的值:errors
, transactions
, all
, off
。
请求正文通常包含敏感值,例如密码、信用卡号等。如果您的服务处理此类数据,请谨慎启用此功能。
ELASTIC_APM_HOSTNAME
编辑环境 | 默认 | 示例 |
---|---|---|
|
|
|
将错误和事务数据发送到 APM 服务器时要使用的主机名。
ELASTIC_APM_API_REQUEST_TIME
编辑环境 | 默认 |
---|---|
|
|
在结束对 Elastic APM 服务器的请求之前要等待的时间。当您报告事务、跨度和错误时,代理将在有足够的数据发送时启动请求并将其发送到服务器;请求将保持打开状态,直到超过此时间,或者直到达到 最大请求大小。
ELASTIC_APM_API_REQUEST_SIZE
编辑环境 | 默认 | 最小 | 最大 |
---|---|---|---|
|
|
|
|
发送到 Elastic APM 服务器的请求体的最大大小。代理将维护一个压缩数据的内存缓冲区,用于流式传输到 APM 服务器。
ELASTIC_APM_API_BUFFER_SIZE
编辑环境 | 默认 | 最小 | 最大 |
---|---|---|---|
|
|
|
|
当代理繁忙时,存储在内存中的未压缩、编码事件的最大字节数。当代理可用时,它会将缓冲数据传输到请求缓冲区,并开始将其流式传输到服务器。如果缓冲区已满,新事件将开始替换旧事件。
ELASTIC_APM_TRANSACTION_MAX_SPANS
编辑环境 | 默认 |
---|---|
|
|
限制每个事务记录的 span 数量。
这在事务创建大量 span(例如数千个 SQL 查询)的情况下很有用。设置上限将防止代理和 APM 服务器因这些边缘情况而过载。
ELASTIC_APM_EXIT_SPAN_MIN_DURATION
编辑环境 | 默认 |
---|---|
|
|
设置要报告的出口 span 的最小持续时间。短于或等于此阈值的 span 将被代理丢弃,并在 span 的事务中作为统计信息报告,只要事务在报告 span 之前没有结束。
启用 span 压缩时 (ELASTIC_APM_SPAN_COMPRESSION_ENABLED
),将考虑压缩 span 组合的总和。
此设置允许的最小持续时间为 1 微秒 (us
)。
ELASTIC_APM_SPAN_FRAMES_MIN_DURATION
编辑环境 | 默认 |
---|---|
|
|
对于每个记录的持续时间超过此配置值的 span,APM 代理将收集堆栈跟踪。虽然这对于查找代码中导致 span 的确切位置非常有帮助,但收集此堆栈跟踪确实会产生一些处理和存储开销。
此配置已弃用,将在代理的未来主要版本中删除。
ELASTIC_APM_SPAN_STACK_TRACE_MIN_DURATION
编辑环境 | 默认 |
---|---|
|
|
对于每个记录的持续时间超过此配置值的 span,APM 代理将收集堆栈跟踪。虽然这对于查找代码中导致 span 的确切位置非常有帮助,但收集此堆栈跟踪确实会产生一些处理和存储开销。
此配置以前称为 ELASTIC_APM_SPAN_FRAMES_MIN_DURATION
,该配置已弃用,将在代理的未来主要版本中删除。
ELASTIC_APM_STACK_TRACE_LIMIT
编辑环境 | 默认 |
---|---|
|
|
限制为每个堆栈跟踪捕获的帧数。
将限制设置为 0 将禁用堆栈跟踪收集,而任何正整数值将用作要收集的最大帧数。设置负值(例如 -1)意味着将收集所有帧。
ELASTIC_APM_TRANSACTION_SAMPLE_RATE
编辑环境 | 默认 |
---|---|
|
|
默认情况下,代理将对每个事务进行采样(例如,对服务的请求)。为了减少开销和存储需求,请将采样率设置为 0.0
和 1.0
之间的值。我们仍然会记录未采样事务的整体时间和结果,但不会记录上下文信息、标签或 span。
ELASTIC_APM_METRICS_INTERVAL
编辑环境 | 默认 |
---|---|
|
30s |
APM 代理收集和报告指标的间隔。设置为 0s
以禁用。
ELASTIC_APM_DISABLE_METRICS
编辑环境 | 默认 | 示例 |
---|---|---|
|
|
禁用某些指标的收集。如果指标的名称与任何通配符表达式匹配,则不会收集该指标。
此选项支持通配符 *
,它匹配零个或多个字符。示例:/foo/*/bar/*/baz*
,*foo*
。默认情况下,匹配不区分大小写。在模式前加上 (?-i)
使匹配区分大小写。
ELASTIC_APM_BREAKDOWN_METRICS
编辑环境 | 默认 |
---|---|
|
|
捕获分解指标。设置为 false
以禁用。
ELASTIC_APM_SERVER_CERT
编辑环境 | 默认 |
---|---|
|
如果您已使用自签名 TLS 证书配置 APM 服务器,或者您想要固定服务器证书,请通过 ELASTIC_APM_SERVER_CERT
配置指定 PEM 编码证书的路径。
ELASTIC_APM_SERVER_CA_CERT_FILE
编辑环境 | 默认 |
---|---|
|
PEM 编码的 TLS 证书颁发机构证书的路径,该证书将用于验证服务器的 TLS 证书链。
ELASTIC_APM_VERIFY_SERVER_CERT
编辑环境 | 默认 |
---|---|
|
|
默认情况下,如果您使用 HTTPS 连接到 APM 服务器,则代理会验证服务器的证书。可以通过将此设置更改为 false
来禁用验证。设置 ELASTIC_APM_SERVER_CERT
时,将忽略此设置。
ELASTIC_APM_LOG_FILE
编辑环境 | 默认 |
---|---|
|
ELASTIC_APM_LOG_FILE
指定代理默认内部记录器的输出文件。当进程启动时,将创建该文件,如果该文件已存在,则会截断该文件。默认情况下,日志记录处于禁用状态。您必须指定 ELASTIC_APM_LOG_FILE
才能启用它。如果以编程方式配置了记录器,则将忽略此环境变量。
代理识别两个特殊的文件名:stdout
和 stderr
。这将配置记录器分别写入标准输出和标准错误。
ELASTIC_APM_LOG_LEVEL
编辑环境 | 默认 |
---|---|
|
|
ELASTIC_APM_LOG_LEVEL
指定代理默认内部记录器的日志级别。记录器仅使用的两个级别是“error”和“debug”。默认情况下,日志记录处于禁用状态。您必须指定 ELASTIC_APM_LOG_FILE
才能启用它。
如果以编程方式配置了记录器,则将忽略此环境变量。
ELASTIC_APM_CENTRAL_CONFIG
编辑环境 | 默认 |
---|---|
|
|
通过 Kibana 激活 APM 代理中央配置。默认情况下,代理将轮询服务器以获取代理配置更改。可以通过将设置更改为 false
来禁用此功能。有关更多信息,请参阅 APM 代理中央配置。
此功能需要 APM Server v7.3 或更高版本。
ELASTIC_APM_USE_ELASTIC_TRACEPARENT_HEADER
编辑环境 |
默认 |
|
|
要启用分布式跟踪,代理会将跟踪上下文标头添加到使用 module/apmhttp 发出的传出 HTTP 请求中。这些标头 (traceparent
和 tracestate
) 在 W3C 跟踪上下文规范中定义。
当此设置是 true
时,代理还将添加标头 elastic-apm-traceparent
,以便与旧版本的 Elastic APM 代理向后兼容。
ELASTIC_APM_CLOUD_PROVIDER
编辑环境 | 默认 | 示例 |
---|---|---|
|
|
|
此配置值允许您指定应假定哪个云提供商用于元数据收集。默认情况下,代理将使用试错法来自动收集云元数据。
有效选项为 "none"
、"auto"
、"aws"
、"gcp"
和 "azure"
。如果此配置值设置为 "none"
,则不会收集任何云元数据。
ELASTIC_APM_SPAN_COMPRESSION_ENABLED
编辑环境 | 默认 |
---|---|
|
|
启用后,代理将尝试将共享同一父级的短出口 span 压缩为复合 span。被视为短的确切持续时间取决于使用的压缩策略 (same_kind
或 exact_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
编辑环境 | 默认 |
---|---|
|
|
用于压缩完全匹配的同级出口 span 的最大持续时间。
ELASTIC_APM_SPAN_COMPRESSION_SAME_KIND_MAX_DURATION
编辑环境 | 默认 |
---|---|
|
|
用于压缩同类型的同级出口 span 的最大持续时间。
ELASTIC_APM_TRACE_CONTINUATION_STRATEGY
编辑环境 | 默认 |
---|---|
|
|
此选项允许对 APM 代理如何处理传入请求中的 W3C 跟踪上下文标头进行一些控制。默认情况下,traceparent 和 tracestate 标头按照 W3C 规范用于分布式跟踪。但是,在某些情况下,不使用传入的 traceparent 标头可能会有所帮助。一些示例用例
- 受 Elastic 监控的服务正在接收来自不受监控的服务的带有 traceparent 标头的请求。
- 受 Elastic 监控的服务是公开的,并且不希望用户请求可能欺骗跟踪数据(跟踪 ID、采样决策)。
有效选项为 continue
、restart
和 restart_external
。
- continue
- 默认行为。传入的
traceparent
值用于继续跟踪并确定采样决策。 - restart
- 始终忽略传入请求的
traceparent
标头。将生成新的跟踪 ID,并且采样决策将基于transaction_sample_rate
进行。将创建指向传入的traceparent
的跨度链接。 - restart_external
- 如果传入请求在
tracestate
中包含es
供应商标志,则任何traceparent
都将被视为内部,并将按照上述 continue 所述的方式进行处理。否则,任何traceparent
都将被视为外部,并将按照上述 restart 所述的方式进行处理。
从 Elastic Observability 8.2 开始,跨度链接在跟踪视图中可见。