设置自定义指标是一种即时了解所需信息的简便方法(而无需筛选日志线或使用复杂的报告工具挣扎)。通过跟踪有意义的指标来快速识别和解决潜在问题,来补充您的应用程序的关键监视数据。
在此博客文章中,我们将向您展示如何设置和使用自定义指标来删除监视盲点。我们将演示如何使用定制指标以及我们的监视工具套件以更好地了解应用程序的性能。
什么是自定义指标?
涉及指标时,默认情况下,AppSignal会跟踪关键数据,例如错误率,响应时间和吞吐量。我们使用这些指标来监视您的应用程序,并在您的应用程序遇到性能问题时通知您。
自定义指标允许您可视化和跟踪所需的任何应用程序数据,从而通过关联其他上下文(例如主动用户计数或特定工作的处理时间)来深入了解应用程序的性能。您可以在AppSignal中创建仪表板,以跟踪自定义指标以及关键指标,例如吞吐量或数据库大小。
测量您的指标
将您的指标发送到AppSignal时,重要的是要考虑如何测量它们。 AppSignal提供三种测量方法:
测量 | 描述 |
---|---|
量规 | 一个代表特定值的数字,在特定时间点可以经常被覆盖,例如应用程序的活动用户计数。 |
计数器 | 您可以通过任何给定值来增加一个数字,例如一个过程运行的计数。 |
分销 | 我们存储平均值,计数或百分位数的数字集合。您可以使用它来跟踪数据集中的值的传播 - 例如,电子商务应用程序的平均用户购物车值或在所需时间内完成的后台作业百分比。 |
AppSignal提供方法和功能,以帮助您使用适当的测量形式轻松跟踪您的自定义指标。
让我们想象我们正在监视网络商店。我们将展示如何使用仪表,计数器和分配测量来跟踪特定数据点。
测量
对于的上下文,为什么我们的应用程序的性能可能比平时或多或少,让我们看看当前正在使用我们的应用程序的购物者有多少个活跃的购物者。每当我们的应用程序中创建新的用户会话时
为此,我们可以创建一个详细的探测器,该机制将定期发送自定义指标的机制。我们可以使用此探测器记录最后一分钟内更新了多少个购物车,并使用 您可以阅读我们的Ruby文档,以获取有关minutely probes的更多信息。 您可以阅读我们的精灵文档,以获取有关minutely probes的更多信息。 您可以阅读我们的node.js文档,以获取有关minutely probes的更多信息。 一旦配置,我们就可以在AppSignal中创建图表,以跟踪使用我们的应用程序数量的购物者: 有了这些信息,我们能够根据积极使用该网站的大概人数来快速推断网络商店的性能。如果我们注意到有特别高的计数并预测性能问题,我们可以采取措施确保我们的申请可用。 使用计数器,我们可以跟踪应用程序中发生的频率。此功能在您需要监视某些事件或操作随时间的频率的情况下很方便 - 例如,用户完成操作的次数,例如将项目添加到购物车中。 假设我们想了解我们的应用程序向用户开枪的频率。为此,我们需要每次创建发票时都会增加计数器。 在Ruby和Elixir中使用 和node.js中的 设置后,我们可以跟踪应用程序在AppSignal中生成多少发票: 如果我们跟踪其他相关数据点,例如下达订单,并注意我们的指标并没有按预期进行相互跟踪?然后,我们可以调查发票和订购逻辑,并可能在影响我们的许多客户之前找到和解决关键问题。 您可以使用自定义指标记录数据测量值,例如响应时间或背景工作持续时间。跟踪此类指标可以帮助您确定性能差的背景工作或API端点,这可能会对用户体验产生负面影响。 我们希望查看我们的申请进行订单确认工作所需的平均时间,因为它的重要客户在购买后会收到此电子邮件。 为此,我们使用 完成此操作后,我们可以跟踪确认订单作业在AppSignal中完成的平均时间。我们会注意到它的执行效果是否比我们的用户之前的预期慢,使我们可以主动保持应用程序可用和可扩展。 感谢我们的直观UI,您可以在几分钟内开始跟踪您的自定义指标。 您可以在仪表板导航中使用“添加仪表板”按钮来创建一个新的仪表板。单击“添加图”按钮以开始使用我们的图形构建器构建图形。 创建图形时,您可以选择要绘制图表并配置图形的传奇和标签的指标和标签。完成此操作后,您将立即在指定的时间段内看到图形显示当前的度量数据。 日志记录是一个绝妙的解决方案,可以帮助您调试和对应用程序性能问题进行解决问题 set_gauge
方法将此信息发送到标签active_shoppers
下的AppSignal。例如:
红宝石
Appsignal::Minutely.probes.register :active_shoppers_probe, lambda do
active_carts_count = Carts.where(updated_at: 1.minute.ago..).count
Appsignal.set_gauge("active_shoppers", active_carts_count)
end
长生不老药
Appsignal.Probes.register(:active_shoppers_probe, fn ->
query = from(c in Carts,
where: c.updated_at ^DateTime.utc_now() - (60 * :second),
select: count(c.id)
)
active_carts_count = Repo.one(query)
Appsignal.set_gauge("active_shoppers", active_carts_count)
end)
node.js
const meter = Appsignal.client.metrics();
const probes = meter.probes();
probes.register("activeShoppersProbe", () => {
const oneMinuteAgo = new Date(Date.now() - 60000);
// use MongoDB to query carts table
const activeCartsCount = await Cart.countDocuments({
updated_at: { $gte: oneMinuteAgo, $lte: Date.now() },
});
meter.setGauge("active_shoppers", activeCartsCount);
});
柜台
increment_counter
方法:
Appsignal.increment_counter("invoice_count", 1)
incrementCounter
函数:
const meter = Appsignal.client.metrics();
meter.incrementCounter("invoice_count", 1);
分配
add_distribution_value
方法:
红宝石
start_time = Time.now
Ordering::Confirm.new.run
duration = (Time.now - start_time) * 1000
Appsignal.add_distribution_value("order_confirmation_duration", duration)
长生不老药
start_time = :os.system_time(:millisecond)
Ordering.Confirm.run()
duration = :os.system_time(:millisecond) - start_time
Appsignal.add_distribution_value("order_confirmation_duration", duration)
node.js
const meter = Appsignal.client.metrics();
let confirmOrderStartTime = Date.now();
confirmOrder();
let confirmOrderDuration = Date.now() - confirmOrderStartTime;
meter.addDistributionValue("order_confirmation_duration", confirmOrderDuration);
自定义指标的自定义仪表板
为什么指标很重要
- 专注于重要的内容:准确地跟踪应用程序中的特定数据点,并在不通过大量的日志记录元数据或事件列表中进行过滤而无需过滤。
- 从事业务:从业务角度了解您的应用程序的性能,并快速跟踪关键数据,例如主动用户计数,KPI或日常销售。
- 简化您的记录:记录“一次无处不在”是不可持续的。使用自定义指标,您可以有效地跟踪基本数据并使用日志来调查事件的原因,仅记录对故障排除和调试所需的数据。
- 主动工作,而不是反应性:设置自定义触发器,以警告您,如果您的应用程序花费太长时间将发票发送给用户,或者比通常的活动用户更大。这些警告使您可以主动调查和解决问题,然后才能影响客户。
深入研究定制指标
准备充分利用应用程序的指标了吗?这篇博客文章仅涵盖了Appsignal中的自定义指标所可能的一小部分。我们的documentation on custom metrics概述了您需要知道的所有内容。
如果您需要帮助,请疑问指标或其他与AppsSignal或与监视有关的问题,您可以始终contact us。
AppSignal:不仅仅是APM工具
AppSignal的自定义指标只是我们许多开发人员驱动的功能之一,可帮助您监视应用程序。开发人员还喜欢使用我们的监视,因为我们有:
- 一个易于导航的直观接口。
- 简单且可预测的定价。
- 开发人员到开发人员的支持。
如果您是Appsignal的新手,请记住ask us以获取一些免费的stroopwafels!它们的味道几乎和让所有应用程序的指标都触手可及的感觉一样好。