业务链路监控数据源默认集成至可观测监控 Prometheus 版,通过编写PromQL语句可以完成自定义告警配置。本文会基于预置的告警指标提供一套常用的运维应急体系配置,并提供常用告警对应的PromQL语句。
业务链路监控数据源在可观测监控 Prometheus 版中对应的实例名称为metricstore-apm-metrics-custom_<regionId>_default-cms-<userId>-<region>。
创建Prometheus告警规则的操作,请参见创建Prometheus告警规则。
操作示例
以电商下单为例:配置VIP下单的业务链路,并针对VIP客户下单的请求量设置告警,若下单请求超过阈值则进行告警。
告警规则配置
通过自定义PromQL创建Prometheus告警规则。
sum by ()(sum_over_time_lorc(arms_biz_app_requests_count_raw{_biz_code="vip_order",serverIp=~".*",callKind=~"http|rpc|custom_entry|server|consumer|schedule",pid="awy7aw18hz@dd0231c44bd35bf",rpc=~"/api/v1/biz/order",source="apm",}[1m]))>10
查看告警通知
在钉钉群收到的告警通知示例:
您可以在控制台的告警管理页面查看告警信息。更多信息,请参见查看告警事件历史。
告警发送历史:
告警事件历史:
常用PromQL模板
指标名称 | 指标说明 |
调用次数 | 应用入口调用的次数。可以通过标签指定HTTP、Dubbo等,根据该指标分析当前应用调用量的大小,从而判断业务量的大小,以及通过调用量是否偏大或偏小判断业务是否存在异常。 |
sum by ($dims) (sum_over_time_lorc(arms_biz_app_requests_count_raw{$filters}[1m])) | |
调用错误率(%) | 应用入口调用的错误次数总和/入口的调用次数总和。 |
sum by ($dims)(sum_over_time_lorc(arms_biz_app_requests_error_count_raw{$filters}[1m])) / sum by ($dims)(sum_over_time_lorc(arms_biz_app_requests_count_raw{$filters}[1m])) | |
调用响应时间 | 应用入口调用的响应时间。可以根据该指标判断是否有慢请求出现,从而判断业务是否存在异常。 |
sum by ($dims) (sum_over_time_lorc(arms_biz_app_requests_seconds_raw{$filters}[1m])) / sum by ($dims) (sum_over_time_lorc(arms_biz_app_requests_count_raw{$filters}[1m])) | |
异常发生次数 | 在软件系统运行过程中发生的各种异常的次数,如空指针异常、数组越界异常、IO异常等。可以根据该指标判断调用堆栈是否抛错,从而判断是否存在业务调用异常。 |
sum by ($dims) (sum_over_time_lorc(arms_biz_exception_requests_count_raw{$filters}[1m])) | |
数据库调用响应时间 | 从应用程序发送请求,到数据库返回响应结果的时间。调用数据库响应时间的快慢直接影响应用程序的性能和用户体验。如果响应时间过长,用户可能会感到卡顿或无响应,降低用户满意度。 |
sum by ($dims) (sum_over_time_lorc(arms_biz_db_requests_seconds_raw{$filters}[1m])) / sum by ($dims) (sum_over_time_lorc(arms_biz_db_requests_count_raw{$filters}[1m])) |
上述模板中$dims
用于分组,$filters
用于过滤。
例如需要对指定业务的所有HTTP接口的错误率进行告警,按照模板对应的PromQL如下:
sum by ()(sum_over_time_lorc(arms_biz_app_requests_error_count_raw{_biz_code="xxxxx",callType="http"}[1m])) / sum by ()(sum_over_time_lorc(arms_biz_app_requests_count_raw{_biz_code="xxxxx",callType="http"}[1m]))
在这个基础上可以再按照实例IP做分组,以便针对不同的实例进行单独告警,修改后的PromQL如下:
sum by (serverIp)(sum_over_time_lorc(arms_biz_app_requests_error_count_raw{_biz_code="xxxxx",callType="http"}[1m])) / sum by (serverIp)(sum_over_time_lorc(arms_biz_app_requests_count_raw{_biz_code="xxxxx",callType="http"}[1m]))
可用Label(维度)-公共
维度 | 说明 |
_biz_code | 业务标签,标识一条固定的业务链路。 |
pid | 应用PID。 |
service | 应用名称。 |
serverIp | 实例IP。 |
rpc | 接口名称。 |
callType | 访问类型。
|
callKind | 大类别访问类型。
|
特有Label(维度)arms_biz_exception_requests_count_raw
维度 | 说明 |
excepName | 异常名称。 |
特有Label(维度)arms_biz_db_requests_seconds_raw
维度 | 说明 |
destId | 数据库名称。 |