使用資料加工将Log轉成Metric
雲原生時代的可觀察性
我們關注應用運作起來後的運作時資料,主要有Log、Trace和Metric 這3大類。
Log是離散的事件,Trace可以認為是帶請求追蹤的事件,Metric是帶統計量的事件。
本質上Log、Trace、Metric都是事件,存儲上滿足事件存儲的系統都可以用來存儲這3類資料。
阿裡雲SLS為運作時資料提供了兩種存儲:Logstore和Metricstore。
- Logstore:适合存儲Log和Trace
- Metricstore:适合存儲Metric
SLS Metricstore針對時序場景做了大量優化,提供PromQL查詢能力,支援Prometheus協定。
SLS Metricstore 詳細介紹請參考
官方連結, PromQL查詢語言請參考
Log轉Metric
很多應用的Log資料往往比Metric全面。 經常存在這樣的場景: 把Log中的資料轉換為Metric。
前面提到,Metric可以認為是特定格式的Log,是以在SLS裡可以将Log轉換為Metric。
常見的Log轉Metric的方法可以有兩種:

- 聚合日志産生名額,類似sql做group by以後産生對應的統計值. 對應SLS ScheduleSQL功能
- 将日志格式做格式轉換,使其符合Metric格式. 對應SLS資料加工
場景e_to_metric
本文主要介紹第二種的場景,即日志按行處理轉化為Metric的格式
阿裡雲SLS 資料加工簡介
資料加工服務是SLS推出的面向日志行處理的服務,主要為日志的規整、過濾、富化等場景設計
SLS資料加工DSL是專門為日志實時行處理定制的一套語言(類Python)。目前支援200+的行處理函數,可以參考
官網文檔本文主要介紹Log轉Metric的函數
e_to_metric
Log轉Metric實戰
Step1 – 建立Metricstore
首先來建一個Metricstore用于接受名額資料
- 建立Metricstore,界面操作
- Grafana配置通路Metricstore, 以便使用Grafana查詢Metricstore資料, 進入Grafana首頁
Configuration -> Data Sources -> Add Data Source, 選擇Prometheus -> URL的組成格式如下
https://${Endpoint}/prometheus/${Project}/${Metricstore}/
# Endpoint、Project、 Metricstore分别做相應替換
Auth -> Basic auth要enable起來,Basic Auth Details輸入阿裡雲AccesskeyID和AccesskeySecret
Metricstore建立好了,那麼如何向Metricstore寫入名額資料呢?
可以看到下面的格式來寫入, 見文檔
Metricstore格式可以看到,Metricstore要求資料寫入必須符合一定的格式,
對于Log格式轉Metric格式的場景,可以使用資料加工函數
e_to_metric
來實作.
接下來以Nginx日志中的request_time等名額為例,示範如何将Log轉換成Metricstore的格式
Step2 - 第一個Log轉Metric任務
先來看一下用于示範的Nginx日志, 我們的目标是将建立Nginx的
request_time
名額
- 點開Nginx日志的logstore,進入查詢分析頁面後,可以看到“資料加工”的入口,點選進入
- 看到資料加工IDE界面後,在IDE裡編寫DSL語句實作生成
request_time
資料加工實作日志轉Metric主要由
e_to_metric
來實作, 函數參數要求如下,完整幫助參考
連結e_to_metric(names=None, labels=None, time=None)
# names字段用于指定名額名稱字段,指定該字段後名額的值也會取Log中該字段名的值
# labels字段用于指定名額label字段
# time字段不填,自動使用logstore中的__time__時間
我們隻需要建立一個名額叫
request_time
,并且名額取值也是request_time的值,是以加工語句如下
e_to_metric(names="request_time")
點一下快速預覽,看一下效果
可以看到生成了
request_time
名額,并且沒有Label(後面有更多樣例示範如何增加Label,我們先走通最簡單的)
- 儲存加工任務, 存儲目标的目标庫請選擇剛才第一步建立的Metricstore
Step3 – 查詢Metricstore
加工任務儲存後,等幾分鐘後資料會寫入Metricstore,然後可以在Grafana裡查詢Metric。
輸入PromQL查詢,直接輸入metricname即可查詢
request_time
Log轉Metric - 更多樣例
- 帶上Label
e_to_metric(names="request_time",labels="slbid")
- 将Log中的多個值轉化為名額
e_to_metric(names=["request_time","upstream_response_time"],labels="slbid")
- 多個Label
e_to_metric(names=["request_time","upstream_response_time"],labels=["slbid","scheme"])
- Metric重命名
e_to_metric(names=[("request_time","rt"),"upstream_response_time"],labels=["slbid","scheme"])
- Label重命名
e_to_metric(names=[("request_time","rt"),"upstream_response_time"],labels=["slbid",("scheme","http_type")])
小結
本文通過資料加工的
e_to_metric
函數示範了如何将Log轉化成Metric, 希望對看官的可觀察性場景有幫助。
SLS提供了可觀察性的整體方案,積極跟進OpenTelemetry标準,有任何問題歡迎和我們交流。