zipkin日志数据模型

cs - Client Start,表示客户端发起请求

sr - Server Receive,表示服务端收到请求

ss - Server Send,表示服务端完成处理,并将结果发送给客户端

cr - Client Received,表示客户端获取到服务端返回信息


sr-cs 当前http请求的网络延迟

ss-sr 当前服务端请求的时间消耗

cr-cs 当前http请求从客户端发起到服务端响应的总时间消耗


1:请求从发起到结束整个总耗时traceDuration计算方式为:

export function traceDuration(spans) {
function makeList({timestamp, duration}) {
if (!timestamp) {
return [];
} else if (!duration) {
return [timestamp];
} else {
return [timestamp, timestamp + duration];
}
}

// turns (timestamp, timestamp + duration) into an ordered list
const timestamps = _(spans).flatMap(makeList).sort().value();

if (timestamps.length < 2) {
return null;
} else {
const first = _.head(timestamps);
const last = _.last(timestamps);
return last - first;
}
}

例子:
long a = Long.valueOf("1502351905261000")+226587;
long b = Long.valueOf("1502351905407000")+41000;
long c = Long.valueOf("1502351905488000")+47;
long d = Long.valueOf("1502351905445000")+45;
java.util.List<Long> list = new ArrayList<>();
list.add(a);
list.add(b);
list.add(c);
list.add(d);
list.add(Long.valueOf("1502351905261000"));
list.add(Long.valueOf("1502351905407000"));
list.add(Long.valueOf("1502351905488000"));
list.add(Long.valueOf("1502351905445000"));
Collections.sort(list);
System.out.println(list.get(list.size()-1)-list.get(0));

2:获取请求的总耗时
export function totalServiceTime(stamps, acc = 0) {
const filtered = stamps.filter((s) => s.duration);
if (filtered.length === 0) {
return acc;
} else {
const ts = _(filtered).minBy((s) => s.timestamp);
const [current, next] = _(filtered)
.partition((t) =>
t.timestamp >= ts.timestamp
&& t.timestamp + t.duration <= ts.timestamp + ts.duration)
.value();
const endTs = Math.max(...current.map((t) => t.timestamp + t.duration));
return totalServiceTime(next, acc + (endTs - ts.timestamp));
}
}

例子:
  1. {name"security"timestamp1502351905261000duration226587}
  2. {name"security"timestamp1502351905407000duration41000}
  3. {name"security"timestamp1502351905488000duration47}
  4. {name"security"timestamp1502351905445000duration45}

第一步:找到 timestamp 最小的为:ts={ name "security" timestamp 1502351905261000 duration 226587 }
第二步:满足这个条件的: t.timestamp >= ts.timestamp
&& t.timestamp + t.duration <= ts.timestamp + ts.duration
current 数据:
{ name "security" timestamp 1502351905261000 duration 226587 }
{ name "security" timestamp 1502351905407000 duration 41000 }
{ name "security" timestamp 1502351905445000 duration 45 }
其他的为next数据:
{ name "security" timestamp 1502351905488000 duration 47 }
第三步:根据 current 数据算出 endTs = Math.max(...current.map((t) => t.timestamp + t.duration));
第四步:根据上一步得到的endTs和第一步得到的ts计算acc + (endTs - ts.timestamp)
第五步:根据第二步得到的current数据和上一步得到数据进行的递归
totalServiceTime(next, acc + (endTs - ts.timestamp))






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值