配置编辑

要使 Elastic APM 代理适应您的需求,请使用环境变量或特定于框架的配置对其进行配置。

您可以通过设置环境变量来配置代理

ELASTIC_APM_SERVICE_NAME=foo python manage.py runserver

或使用内联配置

apm_client = Client(service_name="foo")

或使用特定于框架的配置,例如在您的 Django settings.py 文件中

ELASTIC_APM = {
    "SERVICE_NAME": "foo",
}

优先级如下

  • 集中配置(支持的选项标记有 动态配置
  • 环境变量
  • 内联配置
  • 特定于框架的配置
  • 默认值

动态配置编辑

如果从受支持的来源设置,则标记有 动态配置 标记的配置选项可以在运行时更改。

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

Django编辑

要配置 Django,请将 ELASTIC_APM 字典添加到您的 settings.py

ELASTIC_APM = {
    'SERVICE_NAME': 'my-app',
    'SECRET_TOKEN': 'changeme',
}

Flask编辑

要配置 Flask,请将 ELASTIC_APM 字典添加到您的 app.config

app.config['ELASTIC_APM'] = {
    'SERVICE_NAME': 'my-app',
    'SECRET_TOKEN': 'changeme',
}

apm = ElasticAPM(app)

核心选项编辑

service_name编辑

环境 Django/Flask 默认 示例

ELASTIC_APM_SERVICE_NAME

SERVICE_NAME

unknown-python-service

my-app

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

虽然提供了一个默认值,但必须使用更具描述性且在您的基础架构中唯一的默认值来覆盖此默认值。

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

server_url编辑

环境 Django/Flask 默认

ELASTIC_APM_SERVER_URL

SERVER_URL

'http://127.0.0.1:8200'

您的 APM 服务器的 URL。URL 必须是完全限定的,包括协议(httphttps)和端口。注意:如果您在 AWS lambda 函数中使用 APM,请不要设置此项。APM 代理旨在通过 lambda 扩展将其调用代理到 APM 服务器。而是设置 ELASTIC_APM_LAMBDA_APM_SERVER。有关更多信息,请参阅 AWS Lambda

enabled编辑

环境 Django/Flask 默认

ELASTIC_APM_ENABLED

ENABLED

true

启用或禁用代理。设置为 false 时,代理将不会收集任何数据或启动任何后台线程。

recording编辑

dynamic config

环境 Django/Flask 默认

ELASTIC_APM_RECORDING

RECORDING

true

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

日志记录选项编辑

log_level编辑

dynamic config

环境 Django/Flask 默认

ELASTIC_APM_LOG_LEVEL

LOG_LEVEL

elasticapm 记录器将记录的 logging.logLevel。可用选项为

  • "off"(将 logging.logLevel 设置为 1000)
  • “critical”
  • “error”
  • “warning”
  • “info”
  • “debug”
  • "trace"(将 logging.log_level 设置为 5)

选项不区分大小写

请注意,此选项不会对日志处理程序执行任何操作。为了使任何日志可见,您必须配置处理程序(logging.basicConfig 将为您执行此操作)或设置 log_file。这也将覆盖您的应用程序为 elasticapm 记录器设置的任何日志级别。

log_file编辑

环境 Django/Flask 默认 示例

ELASTIC_APM_LOG_FILE

LOG_FILE

""

"/var/log/elasticapm/log.txt"

这使代理能够记录到文件。默认情况下禁用此功能。代理将记录在使用 log_level 配置的 logging.logLevel 处。使用 log_file_size 配置日志文件的最大大小。此日志文件将自动轮换。

请注意,设置 log_level 是此设置执行任何操作所必需的。

如果安装了 ecs_logging,日志将自动格式化为与 ecs 兼容的 json。

log_file_size编辑

环境 Django/Flask 默认 示例

ELASTIC_APM_LOG_FILE_SIZE

LOG_FILE_SIZE

"50mb"

"100mb"

如果设置了 log_file,则为日志文件的大小。

代理在轮换时始终保留一个备份文件,因此日志文件将消耗的最大空间是此设置值的两倍。

log_ecs_reformatting编辑

环境 Django/Flask 默认

ELASTIC_APM_LOG_ECS_REFORMATTING

LOG_ECS_REFORMATTING

"off"

此功能处于技术预览阶段,可能会在未来版本中更改或删除。Elastic 将努力解决任何问题,但技术预览版中的功能不受官方 GA 功能的支持 SLA 的约束。

有效选项

  • "off"
  • “override”

如果安装了 ecs_logging,则将其设置为 "override" 将导致代理自动尝试启用 ecs 格式的日志记录。

对于来自标准库的基本 logging,代理将获取根记录器,找到任何附加的处理程序,并为每个处理程序将格式化程序设置为 ecs_logging.StdlibFormatter()

如果安装了 structlog,代理将使用 ecs_logging.StructlogFormatter() 覆盖任何配置的处理器。

请注意,这是一个非常粗略的工具,可能会产生意想不到的副作用。如果出现问题,请手动应用这些格式化程序,并将此设置保留为 "off"。有关使用这些格式化程序的更多信息,请参阅 ecs_logging 文档

另请注意,此设置不 facilitar 将日志发送到 Elasticsearch。为此,我们建议使用 Filebeat

其他选项编辑

transport_class编辑

环境 Django/Flask 默认

ELASTIC_APM_TRANSPORT_CLASS

TRANSPORT_CLASS

elasticapm.transport.http.Transport

向 APM 服务器发送事件时要使用的传输类。

service_node_name编辑

环境 Django/Flask 默认 示例

ELASTIC_APM_SERVICE_NODE_NAME

SERVICE_NODE_NAME

“redis1”

给定服务节点的名称。这是可选的,如果省略,APM 服务器将回退到 system.container.id(如果可用),并在必要时回退到 host.name

此选项允许您手动设置节点名称,以确保其唯一且有意义。

environment编辑

环境 Django/Flask 默认 示例

ELASTIC_APM_ENVIRONMENT

ENVIRONMENT

“production”

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

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

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

cloud_provider编辑

环境 Django/Flask 默认 示例

ELASTIC_APM_CLOUD_PROVIDER

CLOUD_PROVIDER

“auto”

"aws"

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

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

secret_token编辑

环境 Django/Flask 默认 示例

ELASTIC_APM_SECRET_TOKEN

SECRET_TOKEN

随机字符串

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

python -c "import secrets; print(secrets.token_urlsafe(32))"

仅当您的 APM 服务器使用 TLS 时,密钥才提供任何安全性。

api_key编辑

环境 Django/Flask 默认 示例

ELASTIC_APM_API_KEY

API_KEY

Base64 编码的字符串

此功能处于技术预览阶段,可能会在未来版本中更改或删除。Elastic 将努力解决任何问题,但技术预览版中的功能不受官方 GA 功能的支持 SLA 的约束。

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

仅当您的 APM 服务器使用 TLS 时,API 密钥才提供任何真正的安全性。

service_version编辑

环境 Django/Flask 默认 示例

ELASTIC_APM_SERVICE_VERSION

SERVICE_VERSION

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

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

framework_name编辑

环境 Django/Flask 默认

ELASTIC_APM_FRAMEWORK_NAME

FRAMEWORK_NAME

取决于框架

所用框架的名称。对于 Django 和 Flask,默认值分别为 djangoflask,否则默认值为 None

framework_version编辑

环境 Django/Flask 默认

ELASTIC_APM_FRAMEWORK_VERSION

FRAMEWORK_VERSION

取决于框架

所用框架的版本号。对于 Django 和 Flask,默认值为所用框架的版本,否则默认值为 None

filter_exception_types编辑

环境 Django/Flask 默认 示例

ELASTIC_APM_FILTER_EXCEPTION_TYPES

FILTER_EXCEPTION_TYPES

[]

['OperationalError', 'mymodule.SomeoneElsesProblemError']

多个值用逗号分隔,不带空格

要过滤的异常类型列表。这些类型的异常不会发送到 APM 服务器。

transaction_ignore_urls编辑

dynamic config

环境 Django/Flask 默认 示例

ELASTIC_APM_TRANSACTION_IGNORE_URLS

TRANSACTION_IGNORE_URLS

[]

['/api/ping', '/static/*']

多个值用逗号分隔,不带空格

代理不应捕获任何事务数据的 URL 列表。

可以选择使用 * 一次匹配多个 URL。

transactions_ignore_patterns编辑

环境 Django/Flask 默认 示例

ELASTIC_APM_TRANSACTIONS_IGNORE_PATTERNS

TRANSACTIONS_IGNORE_PATTERNS

[]

['^OPTIONS ', 'myviews.Healthcheck']

多个值用逗号分隔,不带空格

正则表达式列表。名称与任何已配置模式匹配的事务将被忽略,并且不会发送到 APM 服务器。

由于事务的名称只能在事务结束时确定,因此代理可能仍会导致通过此设置忽略的事务产生开销。如果担心代理开销,我们建议改用 transaction_ignore_urls

server_timeout编辑

环境 Django/Flask 默认

ELASTIC_APM_SERVER_TIMEOUT

SERVER_TIMEOUT

"5s"

APM 服务器请求的超时时间。必须以 持续时间格式 提供设置。如果对 APM 服务器的请求花费的时间超过配置的超时时间,则请求将被取消,并且事件(异常或事务)将被丢弃。设置为 None 可禁用超时。

如果超时被禁用或设置为较大的值,则如果 APM 服务器超时,您的应用程序可能会遇到内存问题。

hostname编辑

环境 Django/Flask 默认 示例

ELASTIC_APM_HOSTNAME

HOSTNAME

socket.gethostname()

app-server01.example.com

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

auto_log_stacks编辑

环境 Django/Flask 默认

ELASTIC_APM_AUTO_LOG_STACKS

AUTO_LOG_STACKS

True

设置为 "true" / "false"

如果设置为 True(默认值),则代理会将堆栈跟踪添加到每个日志事件,指示发出日志消息的位置。

可以通过设置 extrastack 来分别覆盖此设置

logger.info('something happened', extra={'stack': False})

collect_local_variables编辑

环境 Django/Flask 默认

ELASTIC_APM_COLLECT_LOCAL_VARIABLES

COLLECT_LOCAL_VARIABLES

errors

可能的值:errorstransactionsalloff

Elastic APM Python 代理可以收集堆栈帧的局部变量。默认情况下,这仅针对错误执行。

收集局部变量会产生相当大的开销。在生产环境中收集事务的局部变量可能会对服务的性能产生负面影响。

local_var_max_length编辑

环境 Django/Flask 默认

ELASTIC_APM_LOCAL_VAR_MAX_LENGTH

LOCAL_VAR_MAX_LENGTH

200

收集局部变量时,它们将转换为字符串。此设置允许您限制结果字符串的长度。

local_var_list_max_length编辑

环境

Django/Flask

默认

ELASTIC_APM_LOCAL_VAR_LIST_MAX_LENGTH

LOCAL_VAR_LIST_MAX_LENGTH

10

此设置允许您限制局部变量中列表的长度。

local_var_dict_max_length编辑

环境 Django/Flask 默认

ELASTIC_APM_LOCAL_VAR_DICT_MAX_LENGTH

LOCAL_VAR_DICT_MAX_LENGTH

10

此设置允许您限制局部变量中字典的长度。

source_lines_error_app_frames编辑

source_lines_error_library_frames编辑

source_lines_span_app_frames编辑

source_lines_span_library_frames编辑

环境 Django/Flask 默认

ELASTIC_APM_SOURCE_LINES_ERROR_APP_FRAMES

SOURCE_LINES_ERROR_APP_FRAMES

5

ELASTIC_APM_SOURCE_LINES_ERROR_LIBRARY_FRAMES

SOURCE_LINES_ERROR_LIBRARY_FRAMES

5

ELASTIC_APM_SOURCE_LINES_SPAN_APP_FRAMES

SOURCE_LINES_SPAN_APP_FRAMES

0

ELASTIC_APM_SOURCE_LINES_SPAN_LIBRARY_FRAMES

SOURCE_LINES_SPAN_LIBRARY_FRAMES

0

默认情况下,APM 代理会收集错误的源代码片段。此设置允许您修改要收集的源代码行数。

我们区分错误和跨度,以及库帧和应用程序帧。

特别是对于跨度,收集源代码可能会对 Elasticsearch 集群中的存储使用产生很大影响。

capture_body编辑

dynamic config

环境 Django/Flask 默认

ELASTIC_APM_CAPTURE_BODY

CAPTURE_BODY

off

对于作为 HTTP 请求的事务,Python 代理可以选择捕获请求正文(例如 POST 变量)。

可能的值:errorstransactionsalloff

如果请求具有正文并且此设置被禁用,则正文将显示为 [REDACTED]

对于内容类型为 multipart/form-data 的请求,任何上传的文件都将在特殊的 _files 键中引用。它包含字段的名称和上传文件的名称(如果提供)。

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

capture_headers编辑

dynamic config

环境 Django/Flask 默认

ELASTIC_APM_CAPTURE_HEADERS

CAPTURE_HEADERS

true

对于由于 HTTP 请求而发生的事务和错误,Python 代理可以选择捕获请求和响应标头。

可能的值:truefalse

请求标头通常包含敏感值,例如会话 ID 和 Cookie。有关如何过滤敏感数据的更多信息,请参阅清理数据

transaction_max_spans编辑

dynamic config

环境 Django/Flask 默认

ELASTIC_APM_TRANSACTION_MAX_SPANS

TRANSACTION_MAX_SPANS

500

这限制了每个事务记录的跨度数量。这在事务创建大量跨度(例如数千个 SQL 查询)的情况下很有用。设置上限将防止边缘情况导致代理和 APM 服务器过载。

stack_trace_limit编辑

dynamic config

环境 Django/Flask 默认

ELASTIC_APM_STACK_TRACE_LIMIT

STACK_TRACE_LIMIT

50

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

将限制设置为 0 将禁用堆栈跟踪收集,而任何正整数值都将用作要收集的最大帧数。要禁用限制并始终捕获所有帧,请将值设置为 -1

span_stack_trace_min_duration编辑

dynamic config

环境 Django/Flask 默认

ELASTIC_APM_SPAN_STACK_TRACE_MIN_DURATION

SPAN_STACK_TRACE_MIN_DURATION

“5 毫秒”

默认情况下,APM 代理会为每个记录的 span 收集堆栈跟踪,这些 span 的持续时间等于或大于此配置的阈值。虽然堆栈跟踪对于查找代码中 span 源自的确切位置非常有帮助,但收集此堆栈跟踪确实会产生一些开销。请调整此阈值,以确保仅收集可能存在问题的 span 的堆栈跟踪。

要收集所有 span 的跟踪,无论其长度如何,请将值设置为 0

要完全禁用 span 的堆栈跟踪收集,请将值设置为 -1

除特殊值 -10 外,此设置应以 持续时间格式 提供。

span_frames_min_duration编辑

dynamic config

环境 Django/Flask 默认

ELASTIC_APM_SPAN_FRAMES_MIN_DURATION

SPAN_FRAMES_MIN_DURATION

“5 毫秒”

此配置值已被弃用。请改用 span_stack_trace_min_duration

span_compression_enabled编辑

dynamic config

环境 Django/Flask 默认

ELASTIC_APM_SPAN_COMPRESSION_ENABLED

SPAN_COMPRESSION_ENABLED

True

启用/禁用 span 压缩。

如果启用,代理会将非常短的重复 span 压缩为单个 span,这有利于存储和处理需求。在此过程中会丢失一些信息,例如每个压缩 span 的确切持续时间。

span_compression_exact_match_max_duration编辑

dynamic config

环境 Django/Flask 默认

ELASTIC_APM_SPAN_COMPRESSION_EXACT_MATCH_MAX_DURATION

SPAN_COMPRESSION_EXACT_MATCH_MAX_DURATION

“50 毫秒”

完全匹配且低于此阈值的连续 span 将被压缩为单个复合 span。这减少了收集、处理和存储开销,并消除了 UI 中的混乱。缺点是不会收集所有压缩 span 的数据库语句。

如果以下属性相同,则认为两个 span 完全匹配:* span 名称 * span 类型 * span 子类型 * 目标资源(例如数据库名称)

span_compression_same_kind_max_duration编辑

dynamic config

环境 Django/Flask 默认

ELASTIC_APM_SPAN_COMPRESSION_SAME_KIND_MAX_DURATION

SPAN_COMPRESSION_SAME_KIND_MAX_DURATION

“0 毫秒”(已禁用)

指向同一目标且低于此阈值的连续 span 将被压缩为单个复合 span。这减少了收集、处理和存储开销,并消除了 UI 中的混乱。缺点是不会收集所有压缩 span 的元数据(例如数据库语句)。

如果以下属性相同,则认为两个 span 属于同一类型:* span 类型 * span 子类型 * 目标资源(例如数据库名称)

exit_span_min_duration编辑

dynamic config

环境 Django/Flask 默认

ELASTIC_APM_EXIT_SPAN_MIN_DURATION

EXIT_SPAN_MIN_DURATION

“0 毫秒”

退出 span 是表示对外部服务(如数据库)的调用的 span。如果此类调用非常短,则它们通常无关紧要,可以忽略。

默认情况下,此功能处于禁用状态。

如果 span 传播分布式跟踪 ID,则即使它短于配置的阈值,也不会被忽略。这是为了确保不会记录任何断开的跟踪。

api_request_size编辑

dynamic config

环境 Django/Flask 默认

ELASTIC_APM_API_REQUEST_SIZE

API_REQUEST_SIZE

“768 KB”

在将请求发送到 APM 服务器之前,请求缓冲区的最大队列长度。较低的值会增加 APM 服务器上的负载,而较高的值会增加应用程序的内存压力。较高的值还会影响数据在 Elasticsearch 中建立索引和可搜索的时间。

如果遇到流量突然激增,此设置可用于限制内存消耗。必须以 大小格式 提供。

由于 gzip 的内部缓冲,实际请求大小可能比给定限制大几千字节。默认情况下,APM 服务器将请求有效负载大小限制为 1 MB

api_request_time编辑

dynamic config

环境 Django/Flask 默认

ELASTIC_APM_API_REQUEST_TIME

API_REQUEST_TIME

“10 秒”

在将请求发送到 APM 服务器之前,请求缓冲区的最大队列时间。较低的值会增加 APM 服务器上的负载,而较高的值会增加应用程序的内存压力。较高的值还会影响数据在 Elasticsearch 中建立索引和可搜索的时间。

如果遇到流量突然激增,此设置可用于限制内存消耗。必须以 持续时间格式 提供。

实际时间将在给定值的 90-110% 之间变化,以避免同时启动的实例发生拥挤。

processors编辑

环境 Django/Flask 默认

ELASTIC_APM_PROCESSORS

PROCESSORS

['elasticapm.processors.sanitize_stacktrace_locals', 'elasticapm.processors.sanitize_http_request_cookies', 'elasticapm.processors.sanitize_http_headers', 'elasticapm.processors.sanitize_http_wsgi_env', 'elasticapm.processors.sanitize_http_request_body']

用于处理事务和错误的处理器列表。有关更多信息,请参阅清理数据

如果自定义此设置,我们建议始终包含默认的验证器集。

sanitize_field_names编辑

dynamic config

环境 Django/Flask 默认

ELASTIC_APM_SANITIZE_FIELD_NAMES

SANITIZE_FIELD_NAMES

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

使用处理器时要匹配和屏蔽的 glob 匹配字段名称列表。有关更多信息,请参阅清理数据

如果自定义此设置,我们建议始终包含默认的字段名称匹配集。

transaction_sample_rate编辑

dynamic config

环境 Django/Flask 默认

ELASTIC_APM_TRANSACTION_SAMPLE_RATE

TRANSACTION_SAMPLE_RATE

1.0

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

此设置将自动舍入到小数点后 4 位。

include_paths编辑

环境 Django/Flask 默认

ELASTIC_APM_INCLUDE_PATHS

INCLUDE_PATHS

[]

多个值用逗号分隔,不带空格

一组路径,可以选择使用 shell 通配符(有关语法说明,请参阅 fnmatch)。这些路径与每个帧的绝对文件名匹配,如果模式匹配,则该帧被视为“应用内帧”。

include_paths 优先于 exclude_paths

exclude_paths编辑

环境 Django/Flask 默认

ELASTIC_APM_EXCLUDE_PATHS

EXCLUDE_PATHS

因 Python 版本和实现而异

多个值用逗号分隔,不带空格

一组路径,可以选择使用 shell 通配符(有关语法说明,请参阅 fnmatch)。这些路径与每个帧的绝对文件名匹配,如果模式匹配,则该帧被视为“库帧”。

include_paths 优先于 exclude_paths

默认值因 Python 版本和实现而异,例如

  • PyPy3:['\*/lib-python/3/*', '\*/site-packages/*']
  • CPython 2.7:['\*/lib/python2.7/*', '\*/lib64/python2.7/*']

debug编辑

环境 Django/Flask 默认

ELASTIC_APM_DEBUG

DEBUG

False

如果您的应用程序处于调试模式(例如,在 Django 中使用 settings.DEBUG = True 或在 Flask 中使用 app.debug = True),则代理不会向 APM 服务器发送任何数据。您可以通过将此设置更改为 True 来覆盖它。

disable_send编辑

环境 Django/Flask 默认

ELASTIC_APM_DISABLE_SEND

DISABLE_SEND

False

如果设置为 True,则代理不会向 APM 服务器发送任何事件,无论任何调试状态如何。

instrument编辑

环境 Django/Flask 默认

ELASTIC_APM_INSTRUMENT

INSTRUMENT

True

如果设置为 False,则代理不会检测任何代码。这将禁用大多数跟踪功能,但对于调试可能的检测问题很有用。

verify_server_cert编辑

环境 Django/Flask 默认

ELASTIC_APM_VERIFY_SERVER_CERT

VERIFY_SERVER_CERT

True

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

server_cert编辑

环境 Django/Flask 默认

ELASTIC_APM_SERVER_CERT

SERVER_CERT

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

如果设置了此选项,则代理仅验证 APM 服务器提供的证书是否与此处配置的证书相同。不会检查证书的有效性。

server_ca_cert_file编辑

环境 Django/Flask 默认

ELASTIC_APM_SERVER_CA_CERT_FILE

SERVER_CA_CERT_FILE

默认情况下,代理将使用 Mozilla 精选并由 certifi 包提供的众所周知的 CA 来验证 APM 服务器的 TLS/SSL 证书。

您可以将此选项设置为包含将要使用的 CA 证书的文件的路径。

使用自签名证书时,需要指定此选项,除非禁用了服务器证书验证。

use_certifi编辑

环境 Django/Flask 默认

ELASTIC_APM_USE_CERTIFI

USE_CERTIFI

True

默认情况下,Python 代理使用 certifi 证书存储。要使用 Python 的默认机制查找证书,请将此选项设置为 False

metrics_interval编辑

环境 Django/Flask 默认

ELASTIC_APM_METRICS_INTERVAL

METRICS_INTERVAL

30 秒

代理收集指标的时间间隔。较短的时间间隔会增加指标的粒度,但也会增加代理的开销以及存储需求。

必须以 持续时间格式 提供。

disable_metrics编辑

环境 Django/Flask 默认

ELASTIC_APM_DISABLE_METRICS

DISABLE_METRICS

不应发送到 APM 服务器的点分隔指标名称的逗号分隔列表。您可以使用 * 匹配多个指标;例如,要禁用所有与 CPU 相关的指标以及“系统总内存”指标,请将 disable_metrics 设置为

"*.cpu.*,system.memory.total"

此设置仅禁用给定指标的 发送,而不禁用收集。

breakdown_metrics编辑

环境 Django/Flask 默认

ELASTIC_APM_BREAKDOWN_METRICS

BREAKDOWN_METRICS

True

启用或禁用细分指标的跟踪和收集。将其设置为 False 将禁用细分指标的跟踪,这可以减少代理的开销。

此功能需要 APM 服务器和 Kibana >= 7.3。

prometheus_metrics (测试版)编辑

环境 Django/Flask 默认

ELASTIC_APM_PROMETHEUS_METRICS

PROMETHEUS_METRICS

False

启用/禁用从 prometheus_client 跟踪和收集指标。

有关更多信息,请参阅 Prometheus 指标集(测试版)

此功能目前处于测试阶段。

prometheus_metrics_prefix (测试版)编辑

环境 Django/Flask 默认

ELASTIC_APM_PROMETHEUS_METRICS_PREFIX

PROMETHEUS_METRICS_PREFIX

prometheus.metrics.

要添加到 Prometheus 指标名称前面的前缀。

有关更多信息,请参阅 Prometheus 指标集(测试版)

此功能目前处于测试阶段。

metrics_sets编辑

环境 Django/Flask 默认

ELASTIC_APM_METRICS_SETS

METRICS_SETS

["elasticapm.metrics.sets.cpu.CPUMetricSet"]

应用于收集指标的 MetricSets 的导入路径列表。

有关更多信息,请参阅 自定义指标

central_config编辑

环境 Django/Flask 默认

ELASTIC_APM_CENTRAL_CONFIG

CENTRAL_CONFIG

True

启用后,代理将定期向 APM 服务器发出请求以获取更新的配置。

有关更多信息,请参阅 动态配置

此功能需要 APM 服务器和 Kibana >= 7.3。

global_labels编辑

环境 Django/Flask 默认

ELASTIC_APM_GLOBAL_LABELS

GLOBAL_LABELS

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

此功能需要 APM 服务器 >= 7.2。

disable_log_record_factory编辑

环境 Django/Flask 默认

ELASTIC_APM_DISABLE_LOG_RECORD_FACTORY

DISABLE_LOG_RECORD_FACTORY

False

默认情况下,在 Python 3 中,代理会安装一个 LogRecord 工厂,它会自动将跟踪字段添加到您的日志记录中。通过将其设置为 True 来禁用此行为。

use_elastic_traceparent_header编辑

环境 Django/Flask 默认

ELASTIC_APM_USE_ELASTIC_TRACEPARENT_HEADER

USE_ELASTIC_TRACEPARENT_HEADER

True

为了启用 分布式跟踪,代理会为使用 已检测的 HTTP 库 发出的传出请求设置多个 HTTP 标头。这些标头(traceparenttracestate)在 W3C 跟踪上下文 规范中定义。

此外,当此设置设置为 True 时,代理将设置 elasticapm-traceparent 以实现向后兼容性。

trace_continuation_strategy编辑

dynamic config

环境 Django/Flask 默认

ELASTIC_APM_TRACE_CONTINUATION_STRATEGY

TRACE_CONTINUATION_STRATEGY

continue

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

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

有效值为

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

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

use_elastic_excepthook编辑

环境 Django/Flask 默认

ELASTIC_APM_USE_ELASTIC_EXCEPTHOOK

USE_ELASTIC_EXCEPTHOOK

False

如果设置为 True,代理将拦截默认的 sys.excepthook,这允许代理收集所有未捕获的异常。

include_process_args编辑

环境 Django/Flask 默认

ELASTIC_APM_INCLUDE_PROCESS_ARGS

INCLUDE_PROCESS_ARGS

False

每个事务是否应附加进程参数。默认情况下禁用以节省磁盘空间。

Django 特定配置编辑

django_transaction_name_from_route编辑

环境 Django 默认

ELASTIC_APM_DJANGO_TRANSACTION_NAME_FROM_ROUTE

DJANGO_TRANSACTION_NAME_FROM_ROUTE

False

默认情况下,我们使用视图的函数或类名作为事务名称。从 Django 2.2 开始,Django 在 request.resolver_match 对象上提供了路由(例如 users/<int:user_id>/)。如果要使用路由而不是视图名称作为事务名称,请将此配置选项设置为 true

在 Django 2.2 之前的版本中,更改此设置不会有任何效果。

django_autoinsert_middleware编辑

环境 Django 默认

ELASTIC_APM_DJANGO_AUTOINSERT_MIDDLEWARE

DJANGO_AUTOINSERT_MIDDLEWARE

True

为了跟踪 Django 请求,代理使用中间件 elasticapm.contrib.django.middleware.TracingMiddleware。默认情况下,此中间件作为 settings.MIDDLEWARES 中的第一项自动插入。要禁用中间件的自动插入,请将此设置更改为 False

通用环境变量编辑

一些并非特定于 APM 代理的环境变量可用于配置代理。

HTTP_PROXYHTTPS_PROXY编辑

通过使用 HTTP_PROXYHTTPS_PROXY,可以指示代理使用代理连接到 APM 服务器。如果两者都设置了,则 HTTPS_PROXY 优先。

环境变量不区分大小写。

NO_PROXY编辑

要指示代理 使用代理,可以使用 NO_PROXY 环境变量。可以将其设置为以逗号分隔的主机列表,代理不应使用这些主机(例如 localhost,example.com),或者使用 * 匹配任何主机。

如果 HTTP_PROXY / HTTPS_PROXY 是出于代理/APM 服务器通信以外的其他原因设置的,这将很有用。

SSL_CERT_FILESSL_CERT_DIR编辑

要指示代理使用不同的 SSL 证书,可以使用这些环境变量。另请参阅 OpenSSL 文档

请注意,这些变量可能适用于服务中的其他 SSL/TLS 通信,而不仅仅是与 APM 代理相关的通信。

只有当 use_certifi 设置为 False 时,这些环境变量才会生效。

配置格式编辑

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

持续时间格式编辑

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

示例5ms

支持的单位

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

大小格式编辑

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

示例10kb

支持的单位:

  • b(字节)
  • kb(千字节)
  • mb(兆字节)
  • gb(千兆字节)

我们使用 2 的幂次方大小约定,例如 1 千字节 == 1024 字节