通过动态开启访问日志跟踪服务调用情况

访问日志可以很好的记录某台机器在某段时间内处理的所有服务请求信息,包括请求接收时间、远端 IP、请求参数、响应结果等,运行态动态的开启访问日志对于排查问题非常有帮助。

开始之前

任务详情

商城的所有用户服务都由 User 应用的 UserService 提供,通过这个任务,我们为 User 应用的某一台或几台机器开启访问日志,以便观察用户服务的整体访问情况。

动态开启访问日志

Dubbo 通过 accesslog 标记识别访问日志的开启状态,我们可以指定日志文件的输出位置,也可以单独打开某台机器的访问日志。

accesslog.png

操作步骤

  1. 打开 Dubbo Admin 控制台
  2. 在左侧导航栏选择【服务治理】>【动态配置】
  3. 点击 “创建”,输入应用名 shop-user 并勾选 “开启访问日志”(此时访问日志将和普通日志打印在一起)。

Admin 访问日志设置截图

再次访问登录页面,登录到 User 应用的任意一台机器,可以看到如下格式的访问日志。

  1. [2022-12-30 12:36:31.15900] -> [2022-12-30 12:36:31.16000] 192.168.0.103:60943 -> 192.168.0.103:20884 - org.apache.dubbo.samples.UserService login(java.lang.String,java.lang.String) ["test",""], dubbo version: 3.2.0-beta.4-SNAPSHOT, current host: 192.168.0.103
  2. [2022-12-30 12:36:33.95900] -> [2022-12-30 12:36:33.95900] 192.168.0.103:60943 -> 192.168.0.103:20884 - org.apache.dubbo.samples.UserService getInfo(java.lang.String) ["test"], dubbo version: 3.2.0-beta.4-SNAPSHOT, current host: 192.168.0.103
  3. [2022-12-30 12:36:31.93500] -> [2022-12-30 12:36:34.93600] 192.168.0.103:60943 -> 192.168.0.103:20884 - org.apache.dubbo.samples.UserService getInfo(java.lang.String) ["test"], dubbo version: 3.2.0-beta.4-SNAPSHOT, current host: 192.168.0.103

规则详解

规则 key : shop-user

规则体

  1. configVersion: v3.0
  2. enabled: true
  3. configs:
  4. - side: provider
  5. parameters:
  6. accesslog: true

以下是开启访问日志的关键配置

  1. parameters:
  2. accesslog: true

accesslog 的有效值如下:

  • truedefault 时,访问日志将随业务 logger 一同输出,此时可以在应用内提前配置 dubbo.accesslog appender 调整日志的输出位置和格式
  • 具体的文件路径如 /home/admin/demo/dubbo-access.log,这样访问日志将打印到指定的文件内

在 Admin 界面,还可以单独指定开启某一台机器的访问日志,以方便精准排查问题,对应的后台规则如下:

  1. configVersion: v3.0
  2. enabled: true
  3. configs:
  4. - match
  5. address:
  6. oneof:
  7. - wildcard: "{ip}:*"
  8. side: provider
  9. parameters:
  10. accesslog: true

其中,{ip} 替换为具体的机器地址即可。

最后修改 September 13, 2024: Refactor website structure (#2860) (1a4b998f54b)