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 相關技術,對於字串的解析有特別的處理手法;
如果透過 R API,如果直接以檔案路徑指定,因為沒有 header, 所以會直接報錯。...
我想這是因為我迴避了 Logstash 的學習;依據網友們整理的筆記,可以在 Logstash 進行一些設定,讓 ELK 可以有效的解析不同的log格式。而我為了要跳過這個階段,所以會發生這麼多的雷。
是時候要把 Logstash 的知識給補足了;
最近幾天,在我這個組別中,又多了很多實務界的高手跳下來佛心教學發文了;
在剩下來的日子中,我想也許我就照著他們的建議來完成後續的文章吧。