天天看點

使用資料加工将Log轉成Metric使用資料加工将Log轉成Metric

使用資料加工将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的方法可以有兩種:

使用資料加工将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,界面操作
使用資料加工将Log轉成Metric使用資料加工将Log轉成Metric
  • 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

使用資料加工将Log轉成Metric使用資料加工将Log轉成Metric

Metricstore建立好了,那麼如何向Metricstore寫入名額資料呢?

可以看到下面的格式來寫入, 見文檔

Metricstore格式
使用資料加工将Log轉成Metric使用資料加工将Log轉成Metric

可以看到,Metricstore要求資料寫入必須符合一定的格式,

對于Log格式轉Metric格式的場景,可以使用資料加工函數

e_to_metric

來實作.

接下來以Nginx日志中的request_time等名額為例,示範如何将Log轉換成Metricstore的格式

Step2 - 第一個Log轉Metric任務

先來看一下用于示範的Nginx日志, 我們的目标是将建立Nginx的

request_time

名額

使用資料加工将Log轉成Metric使用資料加工将Log轉成Metric
  • 點開Nginx日志的logstore,進入查詢分析頁面後,可以看到“資料加工”的入口,點選進入
使用資料加工将Log轉成Metric使用資料加工将Log轉成Metric
  • 看到資料加工IDE界面後,在IDE裡編寫DSL語句實作生成

    request_time

使用資料加工将Log轉成Metric使用資料加工将Log轉成Metric

資料加工實作日志轉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")           

點一下快速預覽,看一下效果

使用資料加工将Log轉成Metric使用資料加工将Log轉成Metric

可以看到生成了

request_time

名額,并且沒有Label(後面有更多樣例示範如何增加Label,我們先走通最簡單的)

  • 儲存加工任務, 存儲目标的目标庫請選擇剛才第一步建立的Metricstore
使用資料加工将Log轉成Metric使用資料加工将Log轉成Metric

Step3 – 查詢Metricstore

加工任務儲存後,等幾分鐘後資料會寫入Metricstore,然後可以在Grafana裡查詢Metric。

輸入PromQL查詢,直接輸入metricname即可查詢

request_time           
使用資料加工将Log轉成Metric使用資料加工将Log轉成Metric

Log轉Metric - 更多樣例

  • 帶上Label
e_to_metric(names="request_time",labels="slbid")           
使用資料加工将Log轉成Metric使用資料加工将Log轉成Metric
  • 将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"])           
使用資料加工将Log轉成Metric使用資料加工将Log轉成Metric
  • Metric重命名
e_to_metric(names=[("request_time","rt"),"upstream_response_time"],labels=["slbid","scheme"])           
使用資料加工将Log轉成Metric使用資料加工将Log轉成Metric
  • Label重命名
e_to_metric(names=[("request_time","rt"),"upstream_response_time"],labels=["slbid",("scheme","http_type")])           
使用資料加工将Log轉成Metric使用資料加工将Log轉成Metric

小結

本文通過資料加工的

e_to_metric

函數示範了如何将Log轉化成Metric, 希望對看官的可觀察性場景有幫助。

SLS提供了可觀察性的整體方案,積極跟進OpenTelemetry标準,有任何問題歡迎和我們交流。

繼續閱讀