0. 背景

watchdog v1 版本支持主机 Disk / IO 使用率、主机内存泄漏、APM 请求速率、APM 延时、APM 错误率 等 5 种智能巡检场景。
基于上述 5 种场景观测云侧 UI 需要支持如下功能:

  • 创建智能巡检
  • 查看智能巡检结果

    1. 创建智能巡检

    1.1 创建基础设施类智能巡检

    包含:主机Disk / IO 使用率、主机内存泄漏
    image.png

    1.1.1 Disk / IO 使用率

    检测粒度:host,device
    数据点颗粒度(频率):1 分钟
    检测数据范围:6 小时

    1.1.2 内存泄漏

    检测粒度:host
    数据点颗粒度(频率):1 分钟
    检测数据范围:6 小时

    1.2 创建APM类智能巡检

    包含:APM 请求速率、APM 延时、APM 错误率
    image.png

    1.2.1 APM 请求速率

    检测粒度:resource
    数据点颗粒度(频率):1 分钟
    检测数据范围:6 小时

    1.2.2 APM 延时

    检测粒度:resource
    数据点颗粒度(频率):1 分钟
    检测数据范围:6 小时

    1.2.3 APM 错误率

    检测粒度:resource
    数据点颗粒度(频率):1 分钟
    检测数据范围:6 小时

2. 字段定义

字段名 类型 说明
date interger 智能巡检事件产生时间。Unix时间戳,单位 ms
df_event_id string 事件 id。注意:相同事件存在ongoing,resolved两种状态。
df_status string 状态。智能巡检状态取值:ongoing , resolved
df_watchdog_category string 智能巡检分类。取值:apm , infrastructure
df_watchdog_type string 智能巡检类型。取值:disk_usage , mem_leak , apm_request_rate,apm_latency,apm_error_rate
df_watchdog_object string 智能巡检对象。取值:host,device,resource
df_watchdog_tags string 智能巡检对象标签。
df_title string 标题。
df_message string 详细内容。

3. 智能巡检事件内容

3.1 主机 Disk / IO 使用率

output 格式

字段 说明
date 智能巡检事件产生时间。Unix时间戳,单位 ms
df_event_id 事件 id。注意:相同事件存在ongoing,resolved两种状态。
df_status 状态。取值:ongoing , resolved
df_watchdog_category 巡检分类。取值:infrastructure
df_watchdog_type 巡检类型。取值:disk_usage
df_watchdog_object 巡检对象。取值:
主机(host)
磁盘(device)
df_watchdog_tags 固定标签。取值:
项目(project)
云厂商(cloud_provider)
Label 属性(df_label)
df_title 固定格式。
主机 {#host} 有 {#N} 个磁盘使用率持续升高
df_message 固定格式。
- Disk 使用率趋势图
- 近 6 小时 Disk 使用率数据点
- 当前磁盘挂载点位置
- 获取问题 device 的挂载地址
- 建议信息
- 待补全

原型示例

image.png

3.2 内存泄漏

output 格式

字段 说明
date 智能巡检事件产生时间。Unix时间戳,单位 ms
df_event_id 事件 id。注意:相同事件存在ongoing,resolved两种状态。
df_status 状态。取值:ongoing , resolved
df_watchdog_category 巡检分类。取值:infrastructure
df_watchdog_type 巡检类型。取值:mem_leak
df_watchdog_object 巡检对象。取值:
主机(host)
df_watchdog_tags 固定标签。取值:
项目(project)
云厂商(cloud_provider)
Label 属性(df_label)
df_title 固定格式。
主机 {#host} 存在内存泄漏问题
df_message 固定格式。
- 内存率趋势图
- 近 6 小时内存使用率数据点
- 巡检对象上内存占用 TOP 10 进程列表
- process_name
- pid
- mem_usage
- 巡检对象上内存占用 TOP 10 POD列表
- pod_name
- mem_usage

原型示例

image.png

3.3 APM 请求速率

output 格式

字段 说明
date 智能巡检事件产生时间。Unix时间戳,单位 ms
df_event_id 事件 id。注意:相同事件存在ongoing,resolved两种状态。
df_status 状态。取值:ongoing , resolved
df_watchdog_category 巡检分类。取值:apm
df_watchdog_type 巡检类型。取值:apm_request_rate
df_watchdog_object 巡检对象。取值:
资源(resource)
df_watchdog_tags 固定标签。取值:
服务(service)
环境(env)
版本(version)
项目(project)
df_title 固定格式。
{#service} 服务中有 {#N} 个资源请求速率异常
df_message 固定格式。
- 资源请求速率趋势图
- 近 6 小时资源请求速率数据点
- 资源请求速率异常结果
- 资源(resource)
- 请求速率(request_rate)
- 异常资源关联的span 列表
- 异常资源关联 trace_id列表
- 基于异常 trace_id 的 service_map —- 前端查询获得
- 基于异常 trace_id 关联的 前端应用、用户数、页面地址
- 查询 RUM View 数据获取 app_id,userid,view_url 具体值及数量统计值

原型示例

image.png
image.png

3.4 APM 延时

output 格式

字段 说明
date 智能巡检事件产生时间。Unix时间戳,单位 ms
df_event_id 事件 id。注意:相同事件存在ongoing,resolved两种状态。
df_status 状态。取值:ongoing , resolved
df_watchdog_category 巡检分类。取值:apm
df_watchdog_type 巡检类型。取值:apm_latency
df_watchdog_object 巡检对象。取值:
资源(resource)
df_watchdog_tags 固定标签。取值:
服务(service)
环境(env)
版本(version)
项目(project)
df_title 固定格式。
{#service} 服务中有 {#N} 个资源延时波动异常
df_message 固定格式。
- 资源延时趋势图
- 近 6 小时资源延时数据点
- 资源延时异常结果
- 资源(resource)
- 延时(duration)
- 异常资源关联的span 列表
- 异常资源关联 trace_id列表
- 基于异常 trace_id 的 service_map —- 前端查询获得
- 基于异常 trace_id 关联的 前端应用、用户数、页面地址
- 查询 RUM View 数据获取 app_id,userid,view_url 具体值及数量统计值

原型示例

image.png
image.png

3.5 APM 错误率

output 格式

字段 说明
date 智能巡检事件产生时间。Unix时间戳,单位 ms
df_event_id 事件 id。注意:相同事件存在ongoing,resolved两种状态。
df_status 状态。取值:ongoing , resolved
df_watchdog_category 巡检分类。取值:apm
df_watchdog_type 巡检类型。取值:apm_error_rate
df_watchdog_object 巡检对象。取值:
资源(resource)
df_watchdog_tags 固定标签。取值:
服务(service)
环境(env)
版本(version)
项目(project)
df_title 固定格式。
{#service} 服务中有 {#N} 个资源导致错误率上升
df_message 固定格式。
- 资源错误率分布趋势图
- 近 6 小时资源错误率数据点
- 资源延时异常结果
- 资源(resource)
- 错误数(error_count)
- 错误率(error_rate)
- 异常资源关联的span 列表
- 异常资源关联 trace_id列表
- 基于异常 trace_id 的 service_map —- 前端查询获得
- 基于异常 trace_id 关联的 前端应用、用户数、页面地址
- 查询 RUM View 数据获取 app_id,userid,view_url 具体值及数量统计值

原型示例

image.png
image.png

4. 巡检事件数据获取 DQL

服务异常检测
请求数(线)—- 获取服务一分钟内的所有请求数量,加上时间范围查询即可得出服务的每分钟请求数变化趋势
T::re(.*):(sum(r_request_count)) {source = ‘service_list_1m’} [::1m] by r_service

错误数(线)—- 获取服务一分钟内的所有错误请求数量,加上时间范围查询即可得出服务每分钟错误请求数变化趋势
T::re(.*):(sum(r_error_count)) {source = ‘service_list_1m’} [::1m] by r_service

错误率(线)—- 获取服务一分钟内的请求错误率,加上时间范围查询即可得出服务每分钟的错误率变化趋势
eval(A/B100, A=”T::re(`.):(sum(r_error_count)) {source = 'service_list_1m'} [::1m] by r_service", B="T::re(.*`):(sum(r_request_count)) {source = ‘service_list_1m’} [::1m] by r_service”)

平均响应时间(线)—- 获取服务一分钟内的平均响应时间,加上时间范围查询即可得出服务每分钟的平均响应时间变化趋势
eval(A/B,A=”T::re(.*):(sum(r_resp_time)) {source = ‘service_list_1m’} [::1m] by r_service”,B=”T::re(.*):(sum(r_request_count)) {source = ‘service_list_1m’} [::1m] by r_service”)

QPS(线)—- 获取服务一分钟内的所有请求数量,除以60 秒,加上时间范围查询即可得出服务的QPS(每秒请求速率)变化趋势
eval(A/60,A=”T::re(.*):(sum(r_request_count)) {source = ‘service_list_1m’} [::1m] by r_service”)

P90(点)
接口文档:https://confluence.jiagouyun.com/pages/viewpage.action?pageId=139763636
找杨智对下实际实现

RUM 关联数据查询 — 关联影响服务、影响用户、影响页面
前提:需要用户 SDK 中配置 service ,username 信息。service 填写:SDK 引入时,username :通过自定义 tag 标注用户名信息

1)影响服务数量和服务名称 — 通过 APM 的异常服务列表跟 RUM 的服务列表求交集获得
R::view:(count_distinct(service),distinct(service)) {service = #{服务}} [异常开始时间:结束时间]

2)影响用户数量和用户名称
R::view:(count_distinct(userid),distinct(username)) {service = #{服务}} [异常开始时间:结束时间]

3)影响页面数量和页面名称
R::view:(count_distinct(view_url),distinct(view_url)) {service = #{服务}} [异常开始时间:结束时间]