配置

编辑

要使 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 Server 的 URL。URL 必须是完全限定的,包括协议(httphttps)和端口。注意:如果您在 AWS lambda 函数中使用 APM,请勿设置此值。APM 代理旨在通过 lambda 扩展将其调用代理到 APM Server。请改为设置 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 文档

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

其他选项

编辑

transport_class

编辑
环境 Django/Flask 默认

ELASTIC_APM_TRANSPORT_CLASS

TRANSPORT_CLASS

elasticapm.transport.http.Transport

将事件发送到 APM Server 时要使用的传输类。

service_node_name

编辑
环境 Django/Flask 默认 示例

ELASTIC_APM_SERVICE_NODE_NAME

SERVICE_NODE_NAME

None

"redis1"

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

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

environment

编辑
环境 Django/Flask 默认 示例

ELASTIC_APM_ENVIRONMENT

ENVIRONMENT

None

"production"

此服务部署所在环境的名称,例如“生产”或“暂存”。

环境允许您在 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

None

一个随机字符串

此字符串用于确保只有您的代理才能将数据发送到您的 APM Server。代理和 APM Server 都必须配置相同的密钥令牌。生成安全密钥令牌的一个示例是

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

仅当您的 APM Server 使用 TLS 时,密钥令牌才提供任何安全性。

api_key

编辑
环境 Django/Flask 默认 示例

ELASTIC_APM_API_KEY

API_KEY

None

一个 base64 编码的字符串

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

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

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

service_version

编辑
环境 Django/Flask 默认 示例

ELASTIC_APM_SERVICE_VERSION

SERVICE_VERSION

None

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

当前部署的服务版本的版本字符串。如果您的部署未进行版本控制,则此字段的建议值为已部署修订的提交标识符,例如 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 代理会收集错误的源代码片段。此设置允许您修改收集的源代码行数。

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

特别是对于 span,收集源代码可能会对 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

这限制了每个事务记录的 span 数量。这在事务创建大量 span 的情况下(例如,数千个 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

"5ms"

默认情况下,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

"5ms"

此配置值已被弃用。请改用 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

"50ms"

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

如果以下属性相同,则认为两个 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

"0ms" (已禁用)

如果到相同目的地的连续 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

"0ms"

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

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

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

api_request_size

编辑

dynamic config

环境 Django/Flask 默认

ELASTIC_APM_API_REQUEST_SIZE

API_REQUEST_SIZE

"768kb"

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

如果您遇到突然的流量高峰,此设置有助于限制内存消耗。它必须以大小格式提供。

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

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"]

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

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

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 glob(有关语法的描述,请参阅 fnmatch)。这些路径与每个帧的绝对文件名进行匹配,如果模式匹配,则该帧被认为是“应用内帧”。

include_paths 优先于 exclude_paths

exclude_paths

编辑
环境 Django/Flask 默认

ELASTIC_APM_EXCLUDE_PATHS

EXCLUDE_PATHS

根据 Python 版本和实现而有所不同

多个值之间用逗号分隔,不加空格

一组路径,可以选择使用 shell glob(有关语法的描述,请参阅 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

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

server_cert

编辑
环境 Django/Flask 默认

ELASTIC_APM_SERVER_CERT

SERVER_CERT

None

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

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

server_ca_cert_file

编辑
环境 Django/Flask 默认

ELASTIC_APM_SERVER_CA_CERT_FILE

SERVER_CA_CERT_FILE

None

默认情况下,代理将使用 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

None

一个以逗号分隔的点状指标名称列表,不应发送到 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"]

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

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

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

None

添加到所有事件的标签,格式为 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 的span 链接
  • '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(吉字节)

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