重磅:SRS支持Prometheus Exporter

Written by 張俊勤, 孟曉偉.

SRS的可觀測性是支撐業(yè)務(wù)的運營的能力临梗,主要指監(jiān)控(Prometheus Exporter)余黎、分布式鏈路追蹤(APM)、上下文日志(Cloud Logging)三個核心能力赖临,以及基于這些能力的運營大盤鲤脏、監(jiān)控系統(tǒng)、問題排查厨姚、日志收集和分析等功能衅澈。

Why Important?

可觀測性,在云原生中有詳細的定義谬墙,參考OpenTelemetry.io今布,從可觀測性上看其實就是三個問題:

  • 監(jiān)控指標(biāo)(Metrics):就是我們一般所理解的監(jiān)控告警经备。監(jiān)控一般是將一些數(shù)據(jù)聚合,體現(xiàn)系統(tǒng)在不同層面的狀態(tài)部默,當(dāng)達到某個狀態(tài)后告警侵蒙。比如區(qū)域的水位值,達到一定水位后就需要自動或人工擴容傅蹂,或者調(diào)整調(diào)度降低這個區(qū)域的負載纷闺。
  • 分布式跟蹤(Tracing):我們排查問題時,一般是按照會話或請求維度排查份蝴,在系統(tǒng)中會涉及多個服務(wù)器犁功,比如播放一個流會經(jīng)過API、調(diào)度婚夫、邊緣浸卦、上游服務(wù)器、源站等请敦,如何把這個全鏈路的信息給出來镐躲,就是分布式追蹤(Tracing)。明顯這是非常高效的解決問題的方法侍筛,問題遲遲得不到解決甚至不了了之萤皂,遲早會失去用戶。
  • 日志(Logging): 就是我們一般所理解的日志匣椰,也是一般研發(fā)所依賴的排查問題的幾乎唯一的方法裆熙。其實日志是最低效的方法,因為日志沒有上下文禽笑,無法在分布式系統(tǒng)中分離出某個會話的多個日志入录。日志只有具備追蹤的能力,或者在關(guān)聯(lián)到Traceing中佳镜,這樣才能更高效僚稿。

Note: 上圖請參考Metrics, tracing, and logging

Note: SRS一直吹的可追蹤日志,其實是在日志中加入了一定追蹤能力蟀伸,不過沒有分布式追蹤能力蚀同,也沒有標(biāo)準(zhǔn)化(工具鏈就不完善,也無法讓業(yè)務(wù)系統(tǒng)采用同樣的日志啊掏,無法讓整個系統(tǒng)具備可觀測性)蠢络。

Note: SRS的錯誤日志還有堆棧信息,這對于Java或Go等現(xiàn)代語言是很普通的能力迟蜜,但是對于C++就是對問題排查非常有用的能力了刹孔。

回頭看我們之前分析的幾個問題,如何使用這三個能力來解決:

  • 收到了系統(tǒng)告警:根據(jù)告警的信息娜睛,比如是錯誤率上升髓霞,還是耗時增加卦睹,在追蹤(Tracing)系統(tǒng)中過濾,可以看到具體的請求和會話酸茴,就可以獲取相關(guān)的詳細日志分预。
  • 用戶反饋的具體問題:根據(jù)業(yè)務(wù)ID,查詢到請求或會話的信息薪捍,在追蹤(Tracing)系統(tǒng)中可以看到整個鏈路笼痹,也可以查詢到每個環(huán)節(jié)的詳細日志。
  • 需要重復(fù)開發(fā)運營系統(tǒng)問題:標(biāo)準(zhǔn)化的可觀測酪穿,可以直接對接到Prometheus和Grafana凳干,以及云存儲比如CLS,直接使用這些標(biāo)準(zhǔn)化的工具被济,不用再重復(fù)開發(fā)救赐。

Note: 上圖請參考Loki: Prometheus-inspired, open source logging for cloud natives

Note: 這套系統(tǒng)就沒有問題嗎?其實也有只磷,那就是超級大規(guī)模的系統(tǒng)不能用经磅,比如上千萬并發(fā)的系統(tǒng),產(chǎn)生的日志非常多钮追,成本太高预厌。如果你是SRS的用戶,你就不用想了元媚,你的系統(tǒng)達不到這么高量級轧叽。只有云計算本身的可觀測性不能直接使用云原生的這套系統(tǒng),而一般遵循這個標(biāo)準(zhǔn)定制刊棕。一般的業(yè)務(wù)規(guī)模炭晒,完全是夠用的,而是成本非常非常低甥角。

針對上面的問題网严,SRS的運營能力分成幾個獨立的部分,首先是提供了Prometheus可以對接的Exporter嗤无,Prometheus可以直接從SRS拉取監(jiān)控數(shù)據(jù)震束,而不依賴外部第三方服務(wù),如下圖所示:

+-----+               +-----------+     +---------+
| SRS +--Exporter-->--| Promethus +-->--+ Grafana +
+-----+   (HTTP)      +-----------+     +---------+

Note: Promethus是云原生的標(biāo)準(zhǔn)監(jiān)控系統(tǒng)翁巍,在K8s中部署也可以使用這個能力,比如通過Pod發(fā)現(xiàn)和采集數(shù)據(jù)休雌。

下面是詳細的使用說明灶壶。

Usage for SRS Exporter

首先,編譯和啟動SRS杈曲,要求SRS 5.0.86+

./configure && make
env SRS_ENV_ONLY=on SRS_EXPORTER_ENABLED=on SRS_LISTEN=1935 \
  ./objs/srs

Note: 我們使用環(huán)境變量方式配置SRS驰凛,不依賴配置文件胸懈。當(dāng)然使用conf/prometheus.conf啟動也可以。

Note: SRS啟動成功后恰响,可以打開http://localhost:9972/metrics驗證趣钱,能看到返回指標(biāo)數(shù)據(jù)就是成功了。

接著胚宦,我們啟動FFmpeg推流:

docker run --rm -it ossrs/srs:encoder ffmpeg -re -i doc/source.flv -c copy \
  -f flv rtmp://host.docker.internal/live/livestream

然后首有,啟動node_exporter,收集節(jié)點的數(shù)據(jù)枢劝,這樣和SRS的服務(wù)器數(shù)據(jù)可以形成完整的監(jiān)控數(shù)據(jù):

docker run --rm -p 9100:9100 prom/node-exporter

Note: 用Docker啟動node_exporter數(shù)據(jù)不準(zhǔn)井联,需要特殊的權(quán)限而mac不支持。實際場景請使用二進制直接在主機上啟動您旁,可以從這里下載對應(yīng)系統(tǒng)的二進制烙常。

Note: node_exporter啟動后,可以打開http://localhost:9100/metrics驗證鹤盒,能看到返回指標(biāo)數(shù)據(jù)就是成功了蚕脏。

最后,編寫配置文件prometheus.yml侦锯,內(nèi)容如下:

scrape_configs:
  - job_name: "node"
    metrics_path: "/metrics"
    scrape_interval: 5s
    static_configs:
      - targets: ["host.docker.internal:9100"]
  - job_name: "srs"
    metrics_path: "/metrics"
    scrape_interval: 5s
    static_configs:
      - targets: ["host.docker.internal:9972"]

Note: 默認scrape_interval是1m即一分鐘驼鞭,為了測試方便我們設(shè)置為5s

啟動Prometheus:

docker run --rm -v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml \
  -p 9090:9090 prom/prometheus

打開Prometheus: Targets率触,可以看到抓取數(shù)據(jù)的狀態(tài)终议。打開Prometheus: Graph,輸入一下語句葱蝗,可以驗證是否正常:

rate(srs_receive_bytes_total[10s])*8/1000

這個語句是計算輸入的帶寬穴张,也就是直播流的碼率,如下圖所示:

雖然Prometheus也能生成圖两曼,不過一般是使用Grafana對接Prometheus展示圖表锋华。

Usage for Grafana

首先啟動Grafana:

docker run --rm -it -p 3000:3000 \
  -e GF_SECURITY_ADMIN_USER=admin \
  -e GF_SECURITY_ADMIN_PASSWORD=12345678 \
  -e GF_USERS_DEFAULT_THEME=light \
  grafana/grafana

然后打開Grafana頁面:http://localhost:3000/

輸入用戶名admin愁茁,以及密碼12345678就可以進入Grafana后臺了。

執(zhí)行命令添加Prometheus的DataSource:

curl -s -H "Content-Type: application/json" \
    -XPOST http://admin:12345678@localhost:3000/api/datasources \
    -d '{
    "name": "prometheus",
    "type": "prometheus",
    "access": "proxy", "isDefault": true,
    "url": "http://host.docker.internal:9090"
}'

執(zhí)行命令導(dǎo)入HelloWorld圖表:

curl https://raw.githubusercontent.com/ossrs/srs-grafana/main/dashboards/helloworld.json | \
curl -s -H "Content-Type: application/json" \
    -XPOST http://admin:12345678@localhost:3000/api/dashboards/db \
    --data-binary @-

導(dǎo)入后就可以在儀表盤中看到了,如下圖所示:

我們還提供了更加完整的儀表盤留晚,可以在srs-grafana中看到,如下圖所示:

歡迎一起來完善SRS儀表盤脾猛。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末箍镜,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子渔欢,更是在濱河造成了極大的恐慌墓塌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異苫幢,居然都是意外死亡访诱,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門韩肝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來触菜,“玉大人,你說我怎么就攤上這事哀峻∥邢啵” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵谜诫,是天一觀的道長漾峡。 經(jīng)常有香客問我,道長喻旷,這世上最難降的妖魔是什么生逸? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮且预,結(jié)果婚禮上槽袄,老公的妹妹穿的比我還像新娘。我一直安慰自己锋谐,他們只是感情好遍尺,可當(dāng)我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著乾戏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪三热。 梳的紋絲不亂的頭發(fā)上鼓择,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天,我揣著相機與錄音就漾,去河邊找鬼呐能。 笑死,一個胖子當(dāng)著我的面吹牛抑堡,可吹牛的內(nèi)容都是我干的摆出。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼首妖,長吁一口氣:“原來是場噩夢啊……” “哼偎漫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起有缆,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤象踊,失蹤者是張志新(化名)和其女友劉穎舌仍,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體通危,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年灌曙,在試婚紗的時候發(fā)現(xiàn)自己被綠了菊碟。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡在刺,死狀恐怖逆害,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蚣驼,我是刑警寧澤魄幕,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站颖杏,受9級特大地震影響纯陨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜留储,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一翼抠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧获讳,春花似錦阴颖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至帅矗,卻和暖如春偎肃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背损晤。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工软棺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人尤勋。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓喘落,卻偏偏與公主長得像,于是被迫代替她去往敵國和親最冰。 傳聞我的和親對象是個殘疾皇子瘦棋,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容