微服务跟踪

必要知识

oriole-service ≥ 30.6.0

还不会创建微服务?看

环境

为了演示,创建三个微服务:

  • eric_service 独立服务
  • src_service 起始服务,使用中间服务进行审核,然后继续执行。
  • mid_service 中间服务

简略表示为: 【src_service】->【mid_service】->【src_service】
三个微服务处于同一个容器中,实际上如果分别运行在不同的容器中,结果与本文完全一致,这正是分布式的强大之处。
微服务同时运行,交错输出,不是传统的A调用B结束之后B再调用A,以后有机会再细说其中奥妙。

默认方法

采用oriole_service创建的所有微服务自动加入跟踪,如下图:

1
2
3
4
微服务跟踪显示三个服务都参与了服务自动发现
[eric_service.ms_update_service.301fa437-5e46-4d39-b116-6b3ad2b8c84a] entrypoint result trace
[mid_service.ms_update_service.bc1a29e8-8a20-44e1-96fa-e14b3d5acd18] entrypoint call trace
[src_service.ms_update_service.cb07d701-e74a-4842-bcac-cb65a981a760] entrypoint call trace

高级方法

显示详细信息

在services.cfg中加入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
LOGGING:
version: 1
disable_existing_loggers: false
formatters:
tracer:
(): nameko_tracer.formatters.JSONFormatter
loggers:
nameko_tracer:
level: INFO
handlers: [tracer]
handlers:
tracer:
class: logging.StreamHandler
formatter: tracer

执行o s

1
2
3
4
5
6
7
8
显示所有在线服务
服务名 容器 版本
eric_service => 73273e056d25|1.0.1
mid_service => 73273e056d25|0.0.1
src_service => 73273e056d25|0.0.1

调用src_service微服务的add方法
>>> src_service.add()

输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[src_service.add.f1fcca92-d5a7-4d78-9237-dc50f40ef71d] entrypoint call trace

{
"hostname": "73273e056d25",
"service": "mid_service",
"context_data": {},
"call_id": "mid_service.handle.9bc76133-7302-4771-8248-460a870b5082",
"call_id_stack": [
"standalone_rpc_proxy.call.b0c00628-0d5e-47f5-89f0-ddc0aa6c709d",
"src_service.add.f1fcca92-d5a7-4d78-9237-dc50f40ef71d",
"mid_service.handle.9bc76133-7302-4771-8248-460a870b5082"
],
"origin_call_id": "standalone_rpc_proxy.call.b0c00628-0d5e-47f5-89f0-ddc0aa6c709d",
"stage": "request",
"call_args": {"params": {"param": "eric"}},
"call_args_redacted": false
}

[mid_service.handle.9bc76133-7302-4771-8248-460a870b5082] entrypoint call trace

后记

软件设计形同对弈,鼠目寸光则困于当下,势利均沾方可进退自如,世所困扰大体如是。

模拟抽奖
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×