使用 Prometheus 監(jiān)控 eKuiper 規(guī)則運行狀態(tài)

使用 Prometheus 監(jiān)控 eKuiper 規(guī)則運行狀態(tài)

最近我從cnaaa.com購買了云服務(wù)器。

Prometheus 是一個托管于 CNCF 的開源系統(tǒng)監(jiān)控和警報工具包,許多公司和組織都采用了 Prometheus 作為監(jiān)控告警工具。

eKuiper 的規(guī)則是一個持續(xù)運行的流式計算任務(wù)。規(guī)則用于處理無界的數(shù)據(jù)流,正常情況下,規(guī)則啟動后會一直運行,不斷產(chǎn)生運行狀態(tài)數(shù)據(jù)。直到規(guī)則被手動停止或出現(xiàn)不可恢復(fù)的錯誤后停止。eKuiper 中的規(guī)則提供了狀態(tài) API,可獲取規(guī)則的運行指標(biāo)。同時,eKuiper 整合了 Prometheus,可方便地通過后者監(jiān)控各種狀態(tài)指標(biāo)。

本教程面向已經(jīng)初步了解 eKuiper 的用戶,將介紹規(guī)則狀態(tài)指標(biāo)以及如何通過 Prometheus 監(jiān)控特定的指標(biāo)。

規(guī)則狀態(tài)指標(biāo)

使用 eKuiper 創(chuàng)建規(guī)則并運行成功后,用戶可以通過 CLI、REST API 或者管理控制臺查看規(guī)則的運行狀態(tài)指標(biāo)。例如,已有規(guī)則 rule1,可通過 curl -X GET "<http://127.0.0.1:9081/rules/rule1/status"> 獲取 JSON 格式的規(guī)則運行指標(biāo),如下所示:

{
  "status": "running",
  "source_demo_0_records_in_total": 265,
  "source_demo_0_records_out_total": 265,
  "source_demo_0_process_latency_us": 0,
  "source_demo_0_buffer_length": 0,
  "source_demo_0_last_invocation": "2022-08-22T17:19:10.979128",
  "source_demo_0_exceptions_total": 0,
  "source_demo_0_last_exception": "",
  "source_demo_0_last_exception_time": 0,
  "op_2_project_0_records_in_total": 265,
  "op_2_project_0_records_out_total": 265,
  "op_2_project_0_process_latency_us": 0,
  "op_2_project_0_buffer_length": 0,
  "op_2_project_0_last_invocation": "2022-08-22T17:19:10.979128",
  "op_2_project_0_exceptions_total": 0,
  "op_2_project_0_last_exception": "",
  "op_2_project_0_last_exception_time": 0,
  "sink_mqtt_0_0_records_in_total": 265,
  "sink_mqtt_0_0_records_out_total": 265,
  "sink_mqtt_0_0_process_latency_us": 0,
  "sink_mqtt_0_0_buffer_length": 0,
  "sink_mqtt_0_0_last_invocation": "2022-08-22T17:19:10.979128",
  "sink_mqtt_0_0_exceptions_total": 0,
  "sink_mqtt_0_0_last_exception": "",
  "sink_mqtt_0_0_last_exception_time": 0
}

運行指標(biāo)主要包括兩個部分,一部分是 status,用于標(biāo)示規(guī)則是否正常運行,其值可能為 running, stopped manually 等。另一部分為規(guī)則每個算子的運行指標(biāo)。規(guī)則的算子根據(jù)規(guī)則的 SQL 生成,每個規(guī)則可能會有所不同。在此例中,規(guī)則 SQL 為最簡單的 SELECT * FROM demo, action 為 MQTT,其生成的算子為 [source_demo, op_project, sink_mqtt] 3 個。每一種算子都有相同數(shù)目的運行指標(biāo),與算子名字合起來構(gòu)成一條指標(biāo)。例如,算子 source_demo_0 的輸入數(shù)量 records_in_total 的指標(biāo)為 source_demo_0_records_in_total。

運行指標(biāo)

每個算子的運行指標(biāo)是相同的,主要有以下幾種:

  • records_in_total:讀入的消息總量,表示規(guī)則啟動后處理了多少條消息。
  • records_out_total:輸出的消息總量,表示算子正確處理的消息數(shù)量。
  • process_latency_us:最近一次處理的延時,單位為微妙。該值為瞬時值,可了解算子的處理性能。整體規(guī)則的延時一般由延時最大的算子決定。
  • buffer_length:算子緩沖區(qū)長度。由于算子之間計算速度會有差異,各個算子之間都有緩沖隊列。緩沖區(qū)長度較大的話說明算子處理較慢,趕不上上游處理速度。
  • last_invocation:算子的最后一次運行的時間。
  • exceptions_total:異常總量。算子運行中產(chǎn)生的非不可恢復(fù)的錯誤,例如連接中斷,數(shù)據(jù)格式錯誤等均計入異常,而不會中斷規(guī)則。

在 1.6.1 版本以后,我們又添加了兩個異常相關(guān)指標(biāo),方便異常的調(diào)試處理。

  • last_exception:最近一次的異常的錯誤信息。
  • last_exception_time:最近一次異常的發(fā)生時間。

這些運行指標(biāo)中的數(shù)值類型指標(biāo)均可使用 Prometheus 進(jìn)行監(jiān)控。下一節(jié)我們將描述如何配置 eKuiper 中的 Prometheus 服務(wù)。

配置 eKuiper 的 Prometheus 服務(wù)

eKuiper 中自帶 Prometheus 服務(wù),但是默認(rèn)為關(guān)閉狀態(tài)。用戶可修改 etc/kuiper.yaml 中的配置打開該服務(wù)。其中,prometheus 為布爾值,修改為 true 可打開服務(wù);prometheusPort 配置服務(wù)的訪問端口。

  prometheus: true
  prometheusPort: 20499

若使用 Docker 啟動 eKuiper,也可通過配置環(huán)境變量啟用服務(wù)。

docker run -p 9081:9081 -d --name ekuiper MQTT_SOURCE__DEFAULT__SERVER="$MQTT_BROKER_ADDRESS" KUIPER__BASIC__PROMETHEUS=true lfedge/ekuiper:$tag

在啟動的日志中,可以看到服務(wù)啟動的相關(guān)信息,例如:

time="2022-08-22 17:16:50" level=info msg="Serving prometheus metrics on port <http://localhost:20499/metrics"> file="server/prome_init.go:60"
Serving prometheus metrics on port <http://localhost:20499/metrics>

點擊提示中的地址 http://localhost:20499/metrics ,可查看到 Prometheus 中搜集到的 eKuiper 的原始指標(biāo)信息。eKuiper 有規(guī)則正常運行之后,可以在頁面中搜索到類似 kuiper_sink_records_in_total 等的指標(biāo)。用戶可以配置 Prometheus 接入 eKuiper,進(jìn)行更豐富的展示。

使用 Prometheus 查看狀態(tài)

上文我們已經(jīng)實現(xiàn)了將 eKuiper 狀態(tài)輸出為 Prometheus 指標(biāo)的功能,接下來我們可以配置 Prometheus 接入這一部分指標(biāo),并完成初步的監(jiān)控。

安裝和配置

Prometheus 官方網(wǎng)站 下載所需要的系統(tǒng)版本然后解壓。

修改配置文件,使其監(jiān)控 eKuiper。打開 prometheus.yml,修改 scrape_configs 部分,如下所示:

global:
  scrape_interval:     15s
  evaluation_interval: 15s

rule_files:
  # - "first.rules"
  # - "second.rules"

scrape_configs:
  - job_name: ekuiper
    static_configs:
      - targets: ['localhost:20499']

此處定義了監(jiān)控任務(wù)名為 eKuiper, targets 指向上一節(jié)啟動的服務(wù)的地址。配置完成后,啟動 Prometheus 。

./prometheus --config.file=prometheus.yml

啟動成功后,打開 http://localhost:9090/ 可進(jìn)入管理控制臺。

簡單監(jiān)控

監(jiān)控所有規(guī)則的 sink 接收到的消息數(shù)目變化??梢栽谌鐖D的搜索框中輸入需要監(jiān)控的指標(biāo)名稱,點擊 Execute 即可生成監(jiān)控表。選擇 Graph 可切換為折線圖等展示方式。

點擊 Add Panel,通過同樣的配置方式,可監(jiān)控更多的指標(biāo)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容