1. 问题背景
今天把服务集成到Skywalking中,但是数据看起来很差劲,success rate 只有70%。还好还没被老板看到。不然他会严重怀疑我写的是啥东西,到底能不能上线给客户提供服务。甚至,连顶替我的人都物色好了。
无论怎么样,咱高低得把数据拉到98%以上才靠谱啊。100%是不可能的,毕竟100%就是这个系统不需要我也能正常跑,咱主打的就是一个若即若离。让老板认为这个系统真的能提供服务,但还需要我来维护,此计甚妙。
2. 尝试解决
解决问题最简单的三步法:
- Google 搜索
- Bing 搜索
- Baidu 搜索
最后真让我找到一个 ...... github issue:Skywalking ignore specific http.status_code · Issue #11011 · apache/skywalking (github.com)
我还和吴晟大佬对线了一把,最后吴晟大佬给我指两条明路:
- 改 Java Agent 插件代码
- 改显示表达式
咱就是说,开发就应该知难而上。应该在绝境中历练一手出神入化的crud本事,所以选那条路不用多说了吧?
那肯定选第二条路啊,第一条谁选谁SB,不仅要改代码,还要打jar和镜像出来同步给其他需要引入的业务组,万一服务端不止一种语言,你就明白悔不当初是怎么悔的了。
3. 解决步骤
既然人家吴晟大佬都指路了,那咱就直接上吧,拿出人生三问: 第一问:你是谁? 第二问:你从哪里来? 第三问:要到那里去?
第一问:你是谁? 这东西真的难写,自己看去:Analysis Native Streaming Traces and Service Mesh Traffic | Apache SkyWalking
不想看也成,总而言之言而总之,就是一些常用的参数,系统默认写一个计算的方式(表达式)给他算好放着。因为这个功能需要有很高的扩展性,毕竟世界之大无奇不有嘛,我不可能为每个人都做一遍需求。
所以呢,搞一套东西出来,能配置或者定义参数,然后你们爱怎么用怎么用,我就不管了。明白我意思吧?不明白那就骂吧,我真写不出来了。
第二问:你从哪里来?
要不就系统默认,要不就自己改的呗。不然还能自己按照你的需求给你参数啊。就是GPT来了也不行,我问了。
(好吧。我承认我做了手脚)
麻蛋,半天了,到底咋改你倒是说啊? 这不就来了吗?看我操作。对比着sla的参数抄一遍,在 core.oal
中把成功条件改一下
oal
endpoint_success = from(Endpoint.*).percent(httpResponseStatusCode < 500);
service_success = from(Service.*).percent(httpResponseStatusCode < 500);
service_instance_success = from(ServiceInstance.*).percent(httpResponseStatusCode < 500);
原来成功的条件是 status == true
上报 agent 捕获到 status >= 400
就会上报错误 那我们改成 httpResponseStatusCode < 500
没毛病吧?
神经病啊?httpResponseStatusCode
怎么来的?
赶快看表达式去,要不你照着抄吧?
第三问:要到那里去?
既然我们参数都定好了,那咋用呢? 别急,看我操作。
先进入编辑模式
添加一个表达式,为什么添加不直接改?只能说我菜,不敢改,只敢加。不过还有一个用处,前端如果胡乱调用,我们可以拿着这图喷他。
搞一个这种小卡片,进入编辑默认,然后抄左边那个success rate就行了
编辑默认改的东西,别忘记保存了。说多了都是泪啊