调试配置

当服务上线后,为了更精确的分析线上的结果,需要汇总各种信息。在线下可以打印日志调试,当服务上线后,无法灵活的进行打印。本配置主要收集线上调试信息,并能灵活的开启,或打印到终端,或者输出到 datahub 上进行更细致的分析,或输出到本地文件供进行其它调用。

目前主要收集的是召回、过滤、粗排之后的 items 数据。

DebugConfs

主体配置如下:

 {
   "DebugConfs": {
    "feed": { // 场景名称
      "OutputType": "datahub",
      "Rate": 0,
      "DebugUsers": [
        "10631522"
      ],
      "DatahubName": "dh_debug_log",
      "FilePath": "/Users/username/pairec/debug_log/",
      "MaxFileNum": 20
    }
  }
 }
  • OutputType 输出类型,目前包含三种:
     1. console     控制台输出
     2. datahub    输出到 datahub 中。 输出到 datahub 中,一定要配置 DatahubName
     3. file             本地文件输出。 输出到 本地文件 中,一定要配置 FilePath,可选择配置 MaxFileNum

  • Rate 日志的采样比例。 合法值在 0 - 100 之间。很多时候,线上 qps 高的话,可以适当的调整采样比例,来使线上服务影响最小。当为 0 时, 默认不输出调试信息

  • DebugUsers 针对某些 uid 列表进行日志打印

  • DatahubName 当输出到 datahub 上需要配置此值。此 name 需要能从 DatahubConfs 里能找到

  • FilePath 当输出到 本地文件 上需要配置此值。需要输入本地合法路径,路径不存在时会自动创建。调试信息会写入到路径中最近自动创建的日志文件中,文件格式为 “pairec.debug.20060102150405.log”,其中时间信息会显示文件的创建时间。

  • MaxFileNum 当输出到 本地文件 上可选择性配置此值,设置 FilePath 路径中可保存的最大日志数量,默认为20。路径中每个日志文件大小限制为1G,超过会进行文件轮转。若文件数量超过 MaxFileNum,会删除最旧的日志文件。

目前输出的信息包括如下:

  • request_id 请求标识

  • module 标识哪个模块的日志,目前包括 recall, filter, general_rank

  • scene_id 场景id

  • exp_id 实验id

  • request_time 请求时间戳,秒为单位

  • uid 用户id

  • retrieveid 召回id

  • items item list 列表,格式为 “item1:score1,item2:score2”, 这里 score 可以理解为,当 module = recall 时, score 为召回得分。 module=general_rank, score 为粗排得分

目前在某个 module 下, items 是分 retrieveid 进行输出的。比如有5个召回源,那么在 module = recall 时, 会有5条记录,每条记录对应一路召回。同样,filter, general_rank 也是按此逻辑打印。

Datahub 配置

在 Datahub 配置中,可以不用创建 topic, 只要指定 topic , schemas , 引擎会自动创建。

{
 "DatahubConfs": {
    "dh_debug_log": {
      "Endpoint": "http://dh-cn-beijing-int-vpc.aliyuncs.com",
      "AccessId": "",
      "AccessKey": "",
      "ProjectName": "",
      "TopicName": "pairec_debug_log",
      "Schemas": [
        {
          "Field": "request_id",
          "Type": "string"
        },
        {
          "Field": "module",
          "Type": "string"
        },
        {
          "Field": "scene_id",
          "Type": "string"
        },
        {
          "Field": "request_time",
          "Type": "integer"
        },
        {
          "Field": "exp_id",
          "Type": "string"
        },
        {
          "Field": "items",
          "Type": "string"
        },
        {
          "Field": "retrieveid",
          "Type": "string"
        },
        {
          "Field": "uid",
          "Type": "string"
        }
      ]
    }
  }
}

当运行服务时,引擎会自动创建此 Topic: pairec_debug_log, 并使用上面的 schema。 当在 datahub 控制台,看到有日志输出时,可以自行创建 maxcompute 与 datahub 的订阅关系。