X-MSG-IM
的分布式信令跟踪能力已基本具有, 特色是:实时. 只有要RX/TX就会实时产生信令跟踪事件, 先入kafka, 再入influxdb待查. 同时提供实时sub/pub接口.分布式
完备. 能够完整地回放整个业务流程.spa
代码零侵入.code
x-msg-ap
, 访问点.blog
x-msg-im-hlr
, 用户归属位置.继承
x-msg-im-auth
, 鉴权中心.token
客户端向x-msg-ap
发起附着请求.接口
x-msg-ap
向x-msg-im-hlr
透传此请求.flux
x-msg-im-hlr
向x-msg-im-auth
询问此附着请求中的token等参数是否有效.事件
x-msg-im-auth
向x-msg-im-hlr
回送附着结果.事务
x-msg-im-hlr
向x-msg-ap
回送附着结果.
x-msg-ap
向客户端透传附着结果,
RX/TX
位置都有测点
, 也就是下图中的: A, B, C, D, E, F, G, H, I, J
. 每一个测点上都抓取XSC协议从传输层到应用层每个字节.trace-id
进行关联, 经过span-id
和parent-span-id
的继承关系组成了一个完整的RPC链.detect point | timestamp(nano) | trace-id | span-id | parent-span-id | source network element | destination network element | pdu |
---|---|---|---|---|---|---|---|
A | 1571714778393000000 | 00fd4b376ab64e87 | 2267f44c65454cb9 | 0000000000000000 | 5c1acfd87a254463aa2cfa6bca8c7e94 | im.xmsg.dev5.cn.szap0$0000 | DEADBEEF |
B | 1571714778393000001 | 00fd4b376ab64e87 | 5b99e760169d41df | 2267f44c65454cb9 | im.xmsg.dev5.cn.szap0$0000 | im.xmsg.dev5.cn.szu0$0000 | DEADBEEF |
C | 1571714778393000002 | 00fd4b376ab64e87 | 6957f3c576af4d63 | 5b99e760169d41df | im.xmsg.dev5.cn.szap0$0000 | im.xmsg.dev5.cn.szu0$0000 | DEADBEEF |
D | 1571714778393000003 | 00fd4b376ab64e87 | b250652a8f5a434a | 6957f3c576af4d63 | im.xmsg.dev5.cn.szu0$0000 | im.xmsg.dev5.cn.sza0$0000 | DEADBEEF |
E | 1571714778393000004 | 00fd4b376ab64e87 | 878b41ccd8b6439b | b250652a8f5a434a | im.xmsg.dev5.cn.szu0$0000 | im.xmsg.dev5.cn.sza0$0000 | DEADBEEF |
F | 1571714778393000005 | 00fd4b376ab64e87 | 4d1eb9960e064048 | 878b41ccd8b6439b | im.xmsg.dev5.cn.sza0$0000 | im.xmsg.dev5.cn.szu0$0000 | DEADBEEF |
G | 1571714778393000006 | 00fd4b376ab64e87 | 4111a284197b42d3 | 4d1eb9960e064048 | im.xmsg.dev5.cn.sza0$0000 | im.xmsg.dev5.cn.szu0$0000 | DEADBEEF |
H | 1571714778393000008 | 00fd4b376ab64e87 | ac7a980bcfb84021 | 4111a284197b42d3 | im.xmsg.dev5.cn.szu0$0000 | im.xmsg.dev5.cn.szap0$0000 | DEADBEEF |
I | 1571714778393000009 | 00fd4b376ab64e87 | 1a13f39862c3472c | ac7a980bcfb84021 | im.xmsg.dev5.cn.szu0$0000 | im.xmsg.dev5.cn.szap0$0000 | DEADBEEF |
J | 1571714778393000010 | 00fd4b376ab64e87 | 4330b6dafba44a07 | 1a13f39862c3472c | im.xmsg.dev5.cn.szap0$0000 | 5c1acfd87a254463aa2cfa6bca8c7e94 | DEADBEEF |
x-msg-ap
网元上/* x-msg-ap处理来自客户端的附着请求. */ void XmsgImHlrAttachSimple::handle(SptrXitp trans /* 事务. */, shared_ptr<XmsgImHlrAttachSimpleReq> req) { shared_ptr<XmsgNeUsr> hlr = XmsgNeGroupMgr::instance()->getHlr(); /* 获取x-msg-im-hlr网元句柄. */ XmsgImChannel::cast(hlr->channel)->begin(req, [trans](SptrXiti itrans) /* 向x-msg-im-hlr透传. */ { shared_ptr<XmsgImHlrAttachSimpleRsp> rsp = static_pointer_cast<XmsgImHlrAttachSimpleRsp>(itrans->endMsg); /* x-msg-im-hlr回来的响应. */ trans->end(rsp); /* 事务结束, 直接将响应透传回客户端. */ }, nullptr, trans); }
x-msg-im-hlr
网元上/* x-msg-im-hlr收到x-msg-ap透传过来的客户端附着请求. */ void XmsgImHlrAttachSimple::handle(shared_ptr<XmsgNeUsr> nu, const string& ccid, SptrXitp trans, shared_ptr<XmsgImHlrAttachSimpleReq> req) { shared_ptr<XmsgNeUsr> auth = XmsgNeGroupMgr::instance()->getAuth(); /* 获取x-msg-im-auth网元句柄. */ XmsgImChannel::cast(auth->channel)->begin(req, [trans](SptrXiti itrans) /* 向x-msg-im-auth透传. */ { shared_ptr<XmsgImHlrAttachSimpleRsp> rsp = static_pointer_cast<XmsgImHlrAttachSimpleRsp>(itrans->endMsg); /* x-msg-im-auth回来的响应. */ trans->end(rsp); /* 直接将响应透传回x-msg-ap. */ }, nullptr, trans); }
x-msg-im-auth
网元上/* x-msg-im-auth收到x-msg-im-hlr透传过来的客户端附着请求. */ void XmsgImAuthClientAttachSimple::handle(shared_ptr<XmsgNeUsr> nu, SptrXitp trans, shared_ptr<XmsgImHlrAttachSimpleReq> req) { shared_ptr<XmsgImHlrAttachSimpleRsp> rsp(new XmsgImHlrAttachSimpleRsp()); rsp->set_usr("usr"); rsp->set_secret("secret"); LOG_DEBUG("x-msg-im-client attach successful, req: %s, rsp: %s", req->ShortDebugString().c_str(), rsp->ShortDebugString().c_str()) trans->end(rsp); /* 直接将响应透传回x-msg-im-hlr. */ }