電影網(wǎng)站要怎樣做才有出路泉州全網(wǎng)營(yíng)銷優(yōu)化
圖容易被CSDN吞掉,我在掘金也發(fā)了:https://juejin.cn/post/7361821913398837248
我就是這么膨脹
最近在做 OpenAI API
套殼,當(dāng)我使用 okhttp-sse
這個(gè)庫(kù)進(jìn)行流式內(nèi)容轉(zhuǎn)發(fā)的時(shí)候,我發(fā)現(xiàn)有些回調(diào)方法 SkyWalking
不能抓取到。這就出問(wèn)題了。SLA 天天100%,整得我都不好意思說(shuō)出來(lái)我的服務(wù)SLA比阿里、騰訊這些公司還牛X。
搞得我挺膨脹的,有一天有一個(gè)不知名的測(cè)試小伙子來(lái)和我說(shuō)怎么回答沒(méi)出來(lái)的時(shí)候,我是懷疑的。直接就給他來(lái)了一個(gè)三連:
- 你會(huì)用嗎?
- 你網(wǎng)絡(luò)行不行?
- 哥,先別報(bào)老板,我看看。
我打開 SkyWalking
看到 SLA 100%,這時(shí)候我又膨脹了:
- 你真的會(huì)用嗎?
- 你網(wǎng)絡(luò)真的行嗎?
- 哥,你咋報(bào)群里給老板看了,我馬上查還不行嗎?
還好服務(wù)有日志,我一查果然芭比Q了。okhttp-sse
回調(diào)的時(shí)候報(bào)錯(cuò)了,但這個(gè)時(shí)候 SkyWalking
還顯示 HTTP Status: 200
。但是日志確實(shí)有報(bào)錯(cuò),回答也確實(shí)沒(méi)有。
有錯(cuò)就要認(rèn),挨打要立正
這不,測(cè)試小哥告老板去了。我們?cè)俨唤鉀Q掉問(wèn)題估計(jì)明天會(huì)因?yàn)樽竽_先進(jìn)入公司而提取假期。解決問(wèn)題的第一步,應(yīng)該先弄清楚問(wèn)題出在哪里?你面無(wú)表情的話語(yǔ)不剩多少意義,就當(dāng)我求求你,給我一些說(shuō)明。
來(lái)簡(jiǎn)單梳理一下 SSE 的工作流程:
沒(méi)有 OpenAI
的時(shí)候是這樣的
有了 OpenAI
之后是這樣的
問(wèn)題大概知道了,當(dāng)連接建立的時(shí)候,服務(wù)端就返回了 200。那 SkyWalking
也無(wú)能為力呀。
服務(wù)端:服務(wù)真的報(bào)錯(cuò)的,你就探測(cè) HTTP Status 是 200 了不起啊?
SkyWalking:按規(guī)范辦事就是了不起。 OAI/OpenAPI-Specification: The OpenAPI Specification Repository (github.com)
自定義 Span
涉及到自定義的問(wèn)題,不要猶豫一把梭這個(gè)庫(kù)就行了。
the toolkit, such as using maven or gradle | Apache SkyWalking
注意:依賴版本和你使用的 java-agent
版本保持一致
<dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-trace</artifactId><version>${skywalking.version}</version>
</dependency>
導(dǎo)入依賴之后,就創(chuàng)建一個(gè)Span,有多種方式可以創(chuàng)建:
@Trace(operationName = "{name}")
ActiveSpan.setOperationName("{name}")
設(shè)置完 OperationName
之后,保險(xiǎn)起見(jiàn)應(yīng)該在 SkyWalking UI 查一下這個(gè) span 在不在?
如果你真的去看就會(huì)發(fā)現(xiàn)真的有這個(gè)Span,我就不截圖了,放張表情包湊合一下。
接入告警
自定義 Span 之后是能在鏈路追蹤里看到了,但是怎么加告警呢?別急,看我操作。
還是不看我操作了,看吳晟大佬操作吧。
Can skywalking display the metrics(such as resp_time or cpm)of a logic endpoint, in the service dashboard (not endpoint dashboard)? · apache/skywalking · Discussion #10864 (github.com)
The Logic Endpoint | Apache SkyWalking
總結(jié)一下就是,加個(gè) tag
:
@Tag(value = "x-le", key = "{\"logic-span\":true}")
ActiveSpan.tag("x-le", "{\"logic-span\":true}")
加完 tag
之后這個(gè) Span
就是一個(gè)有證的 Endpoint
了,它可以在SkyWalking UI 中查詢到。也能使用 OAL 表達(dá)式里面指標(biāo)來(lái)進(jìn)行告警操作。
貼個(gè)示例:
reaction_stream_failure_rule:expression: sum((endpoint_sla / 100) < 100) >= 1period: 3silence-period: 1include-names:- 'Reaction/stream in fake-service'message: 'SSE回答異常'
我還寫過(guò)一篇告警配置的文章,來(lái)寵幸一下她吧:https://juejin.cn/post/7344567669893021736
Ref
the toolkit, such as using maven or gradle | Apache SkyWalking
The Logic Endpoint | Apache SkyWalking
Can skywalking display the metrics(such as resp_time or cpm)of a logic endpoint, in the service dashboard (not endpoint dashboard)? · apache/skywalking · Discussion #10864 (github.com)