iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 16
0
Elastic Stack on Cloud

Elastic 30天自我修行系列 第 16

使用 R 寫入log檔(CSV)後上傳

ELK 有一個很重要的功能就是分析 log 檔;

log 檔對於程式效能與發現bug有很多的幫助。
R不像Python內建有 logging 套件,此處我們另外再安裝名為 logger 的套件來產生 log 檔。

請看示例,範例中是直接產生幾百筆的 log 檔案

# install.packages("logger")
library(logger)

log_threshold(TRACE)

logger <- layout_glue_generator(format = '"{time}",{level},{msg}')

log_layout(logger)

# write log file
# log_appender : log 訊息要往何處送? 如果你願意的話,也可以往 slack 傳遞
# appender_file : 將 log 檔案輸出至 my_log.csv

log_file <- "my_log.csv"
log_appender(appender_file(log_file))


# make some log

for (i in 1:1e2) {
  log_info( "New_Start"  )

  x <- sample(80:100, 1)

  log_warn(paste0("喂_要小心點_現在_Loaging:", x, "%")  )

  if (x > 95) {
    log_warn("Loading>95%"   )

    log_error("__非常事態__爆走前三秒___"  )
  } else {
    log_info(paste0("___Pass___Pass___")   )
  }
}

原本我打算簡單設定 log layout:log_layout(layout_glue),
預期 log 輸出格式如下:

INFO [2020-16-09 21:47:35] New_Start
WARN [2020-16-09 21:47:35] 喂_要小心點_現在_Loaging:91%
INFO [2020-16-09 21:47:35] ___Pass___Pass___
INFO [2020-16-09 21:47:35] New_Start
WARN [2020-16-09 21:47:35] 喂_要小心點_現在_Loaging:95%
INFO [2020-16-09 21:47:35] ___Pass___Pass___

但是進行上傳時,無論是使用官網網頁介面或是 Elastic API上傳時,都一直報錯。

後來只好先改成 CSV 格式進行上傳,所以改成如下設定:
layout_glue_generator(format = '"{time}",{level},{msg}')

log 輸出格式,轉變成:

"2020-09-16 21:32:23",ERROR,__非常事態__爆走前三秒___
"2020-09-16 21:32:23",INFO,New_Start
"2020-09-16 21:32:23",WARN,喂_要小心點_現在_Loaging:81%
"2020-09-16 21:32:23",INFO,___Pass___Pass___
"2020-09-16 21:32:23",INFO,New_Start
"2020-09-16 21:32:23",WARN,喂_要小心點_現在_Loaging:95%
"2020-09-16 21:32:23",INFO,___Pass___Pass___

另外發現如果透過官網網頁上傳時,可以自動解析此 csv 的log文件檔,果然是有用到 ML 相關技術,對於字串的解析有特別的處理手法;

https://ithelp.ithome.com.tw/upload/images/20200916/20130033Mk4mpsGt88.png

如果透過 R API,如果直接以檔案路徑指定,因為沒有 header, 所以會直接報錯。...

我想這是因為我迴避了 Logstash 的學習;依據網友們整理的筆記,可以在 Logstash 進行一些設定,讓 ELK 可以有效的解析不同的log格式。而我為了要跳過這個階段,所以會發生這麼多的雷。

是時候要把 Logstash 的知識給補足了;

最近幾天,在我這個組別中,又多了很多實務界的高手跳下來佛心教學發文了;
在剩下來的日子中,我想也許我就照著他們的建議來完成後續的文章吧。


上一篇
關於鐵人賽參加了一半的心得
下一篇
解析三欄位的 Log File ( Logstash : grok )
系列文
Elastic 30天自我修行31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言