指标编辑

使用 Elastic APM,您可以捕获系统和进程指标。这些指标将定期发送到 APM 服务器,然后从那里发送到 Elasticsearch

指标集编辑

CPU/内存指标集编辑

elasticapm.metrics.sets.cpu.CPUMetricSet

此指标集收集各种系统指标和当前进程的指标。

如果您使用 Linux,则需要安装 psutil 才能使用此指标集。

system.cpu.total.norm.pct

类型:scaled_float

格式:百分比

除空闲和 IOWait 之外的状态下的 CPU 时间百分比,按核心数量归一化。

system.process.cpu.total.norm.pct

类型:scaled_float

格式:百分比

自上次事件以来,进程花费的 CPU 时间百分比。此值按 CPU 核心数量归一化,范围从 0 到 100%。

system.memory.total

类型:long

格式:字节

总内存。

system.memory.actual.free

类型:long

格式:字节

实际可用内存(以字节为单位)。

system.process.memory.size

类型:long

格式:字节

进程拥有的总虚拟内存。

system.process.memory.rss.bytes

类型:long

格式:字节

驻留集大小。进程在主内存(RAM)中占用的内存量。

Linux 的 cgroup 指标编辑
system.process.cgroup.memory.mem.limit.bytes

类型:long

格式:字节

当前 cgroup 切片的内存限制。

system.process.cgroup.memory.mem.usage.bytes

类型:long

格式:字节

当前 cgroup 切片中的内存使用量。

细分指标集编辑

可以使用 breakdown_metrics 设置禁用此指标集的跟踪和收集。

span.self_time

类型:简单计时器

此计时器跟踪跨度自计时,是事务细分可视化的基础。

字段

  • sum:自上次报告(增量)以来的所有跨度自计时之和(以毫秒为单位)
  • count:自上次报告(增量)以来的所有跨度自计时次数

您可以按以下维度过滤和分组

  • transaction.name:事务的名称
  • transaction.type:事务的类型,例如 request
  • span.type:跨度的类型,例如 apptemplatedb
  • span.subtype:跨度的子类型,例如 mysql(可选)

Prometheus 指标集(测试版)编辑

此功能处于测试阶段,可能会发生变化。设计和代码不如官方 GA 功能成熟,按原样提供,不提供任何保证。测试版功能不受官方 GA 功能支持 SLA 的约束。

如果您使用 prometheus_client 收集指标,代理也可以收集这些指标,并使其在 Elasticsearch 中可用。

支持以下类型的指标

  • 计数器
  • 仪表
  • 摘要
  • 直方图(需要 APM Server / Elasticsearch / Kibana 7.14+)

要使用 Prometheus 指标集,您必须使用 prometheus_metrics 配置选项启用它。

prometheus_client 收集的所有指标都以 "prometheus.metrics." 为前缀。可以使用 prometheus_metrics_prefix 配置选项更改此前缀。

测试版限制编辑
  • 指标格式可能会在将来的版本中发生变化,并且不保证向后兼容。

自定义指标编辑

自定义指标允许您将自己的指标发送到 Elasticsearch。

发送自定义指标最常见的方法是使用 Prometheus 指标集。但是,您也可以使用自己的指标集。如果您在代码中手动收集指标,可以使用基本 MetricSet

from elasticapm.metrics.base_metrics import MetricSet

client = elasticapm.Client()
metricset = client.metrics.register(MetricSet)

for x in range(10):
    metricset.counter("my_counter").inc()

或者,您可以创建自己的 MetricSet 类,该类继承自基类。在这种情况下,您通常需要覆盖 before_collect 方法,您可以在其中收集和设置指标,然后再将它们收集并发送到 Elasticsearch。

您可以按照上面的示例添加 MetricSet 类,也可以将类的导入字符串添加到 metrics_sets 配置选项中

ELASTIC_APM_METRICS_SETS="elasticapm.metrics.sets.cpu.CPUMetricSet,myapp.metrics.MyMetricSet"

您的 MetricSet 可能看起来像这样

from elasticapm.metrics.base_metrics import MetricSet

class MyAwesomeMetricSet(MetricSet):
    def before_collect(self):
        self.gauge("my_gauge").set(myapp.some_value)

在上面的示例中,MetricSet 会查找 myapp.some_value 并将指标 my_gauge 设置为该值。这将在收集/发送指标时发生,由 metrics_interval 设置控制。