pinpoint php 使用不当引发棘手的问题 --psid sid tid pname ptype ah
Pinpoint 简单介绍
Pinpoint 是用 Java 编写的 APM(应用性能管理)工具,用于大规模分布式系统,以帮助分析系统的总体结构以及分布式应用程序的组件之间是如何进行数据互联的。
安装agent是无侵入式的
对性能的影响最较小
架构图:
最近遇到的问题
线上的服务一直运行正常,突然各种报警响起(邮件、短信、微信通知),赶紧登录kibana查看运行日志(日志有点延迟)搜不到????
一面继续搜索kibana,一面跟运维沟通申请开通临时账户,提交oa经过一系列的审批,最后运维特别给力—临时账户顺利开通。都准备好了,那就干活呗(累)。
咦,咋返回的结果跟之前不一样了。(本来约定好,我给你发个消息,你给我回复ok或者no就行了,结果你给我回了 吃瓜 酱油 +ok)这没法解析了(这是返回了啥玩意???)
正常返回的信息:
{“rs”:0,”msg”:”ok”,”timestamp”:1587194823}
错误返回的信息:
psid: -5378148089934788608
sid: -3366960525911415808
tid: AGT_192.162.92.165_12383^1587194823625^22342
pname: merCoreptype: merCorAh: ay.mt.com
{“rs”:0,”msg”:”ok”,”timestamp”:1587194823}
哎,不管返回啥,也得分析啊,报警还在继续报呢
赶紧联系对方(你们服务出问题了,赶紧看看,调用方也蒙圈了,吓的不清)
对方经过一顿查看,回复—-没有问题(啥,没有问题,没看错吧,我这明明收到了错误的信息,咋能没问题呢,我蒙了)
没有问题就没有问题吧,那就自己查自己服务吧,我在服务器上curl模拟请求了一下对方的服务—–真没有问题(难道真是我们服务出问题了,不应该啊,上一秒还好呢,下一秒就这样了)。现在也没有底气去找人家了。现在先把定时服务关闭了吧,要不报警一直报,邮件服务器受不了啊。没多久有人找来了,“你们的的服务是不是出问题了,咋不通知我们了”。巴拉巴拉一堆解释。
初步判断这是某个中间件给加上的信息,但是我们也有其他http请求啊,只有请求这个服务有问题,百思不得其解
接下来在本地开始跑测试代码,在测试环境测试、都没有发现问题。还把body.string()方法源码读了一遍,没有发现啥问题。出现这么怪异的一段字符,那就搜一下吧,终于在网上找到点点蛛丝马迹。上图
似曾眼熟啊,再仔细瞅瞅,这不就是返回的内容吗。我们代码中有这个代码????找了一遍也没有发现。
都没有问题,那就看看pinpoint的原理吧—http如何信息衔接的,需要在http请求头中带上Pinpoint-TraceID 字段,既然知道原理了,那就模拟一下请求吧,果然不出所料,返回结果中带上了tid。
接下来又去找对方,首先给对方讲了一下如何重现,对方一测,果然有问题
接下来对方经过一顿的修改,一切恢复从前。
欢迎交流