1. 程式人生 > >open-falcon的falcon-log-agent日誌監控

open-falcon的falcon-log-agent日誌監控

清理 獲取 clone 規則 特征 ces 外掛 其他 生效

falcon-log-agent

技術分享圖片

簡介

falcon-log-agent是一個開源版的日誌采集工具,旨在從流式的日誌中抓取、統計日誌中的特征信息。

獲取的特征信息,與開源版Open-Falcon監控系統打通。可用於業務指標的衡量、也可用於穩定性的建設。

Feature

  • 準確可依賴:歷經滴滴線上業務近一年考驗,統計準確性高。
  • 性能高、資源消耗可控:性能優化程度高,單核單策略可支撐日誌分析:20W條/秒
  • 接入成本低:外掛式采集,只需要標準化日誌即可;輸出數據直接對接open-falcon。

附:我司agent升級前後資源占用對比圖 技術分享圖片

什麽是日誌采集

日誌采集,是一種外掛式的采集。通過讀取進程打印的日誌,來進行監控數據的采集與匯聚計算。

falcon-log-agent如何工作

本agent即日誌采集場景下的實時計算。實時讀取文件內容,實時計算,將計算結果直接推送至falcon。

限定條件

  • 要求日誌必須包含時間:不包含時間的日誌,只能根據當前時間統計日誌條數,結果非常不準確。
  • 不支持文件軟鏈
  • 日誌時間必須有序:為了應對日誌延遲落盤等,agent會根據日誌的時間來判斷某一周期的數據是否采集完成,如果日誌時間順序錯亂,可能導致采集不準。

開始使用log-agent

構建

git clone https://github.com/didi/falcon-log-agent.git && cd falcon-log-agent && sh build.sh

修改配置文件

# base config
cp cfg/dev.cfg cfg/cfg.json
vim cfg/cfg.json

# strategy config
cp cfg/strategy.dev.json cfg/strategy.json
vim cfg/strategy.json

啟動/停止服務

 # start
./control start

# stop
./control stop

# status
./control status

基礎配置項

基礎配置項,即程序本身的配置項。默認是cfg/cfg.json,可以通過-c參數來指定。

日誌相關

log_path:程序輸出的日誌目錄
log_level:日誌等級
log_rotate_size:日誌切割大小
log_rotate_num:按配置切割之後,保留多少個文件,其他的清理掉

worker相關

worker_num:每個日誌文件,進行計算的並發數
queue_size:讀文件和進行計算之間,有一個緩沖隊列,如果隊列滿了,意味著計算能力跟不上,就要丟日誌了。這個配置就是這個緩沖隊列的大小。
push_interval:循環判斷將計算完成的數據推送至發送隊列的時間
push_url:推送的odin-agent的url

資源限制

max_cpu_rate:最大使用的cpu百分比。(可用核數=ceil(總核數*max_cpu_rate))
max_mem_rate:最打使用內存百分比。(最大內存=(內存總大小*max_mem_rate),最小為500M)

策略相關

update_duration:策略的更新周期
default_degree:默認的采集精度

其他

http_port:自身狀態對外暴露的接口

采集策略

文件路徑

文件路徑,即file_path配置項。必須要求啟動agent的用戶,對這個文件有可讀權限。

文件路徑支持固定路徑和動態路徑兩種:

  • 固定路徑:直接填寫即可,如/var/log/falcon-log-agent.log
  • 動態路徑:可支持按照規則配置的根據時間變化的路徑。例如:
比如:線上有些模塊自己按照小時寫入文件,路徑為:
/xiaoju/application/log/20150723/application.log.2015072312
 
對應的我們的配置方式可以填寫為:
/xiaoju/application/log/${%Y%m%d}/application.log.${%Y%m%d%H}    //  ${}中不能包含/

時間格式

時間格式,即time_format配置項。

如果日誌中沒有時間格式,一旦遇到日誌延遲落盤、或者日誌量太大計算延遲的情況。會直接導致我們的監控采集不準。

因此,我們規定日誌中必須有合法的時間格式。且在配置中time_format項指定。

如果想要添加自己的時間格式,可以直接在common/utils/util.go裏添加。

目前已經支持的時間格式如下:

dd/mmm/yyyy:HH:MM:SS
dd/mmm/yyyy HH:MM:SS
yyyy-mm-ddTHH:MM:SS
dd-mmm-yyyy HH:MM:SS
yyyy-mm-dd HH:MM:SS
yyyy/mm/dd HH:MM:SS
yyyymmdd HH:MM:SS
mmm dd HH:MM:SS

PS:為了防止日誌積壓或性能不足導致的計算偏差,日誌采集的計算,依賴於日誌的時間戳。
因此如果配置了錯誤的時間格式,將無法得到正確的結果。

采集規則

采集正則,包含兩個配置項:pattern和exclude。

兩個采集項都是正則表達式,正則表達式的支持情況見:google/re2

pattern代表需要完全匹配出來的表達式。

exclude代表需要排除掉的表達式。

eg. 例如,我希望統計code=500或400的日誌數量,但是想排除掉關鍵字SpeciallyErrorNo。 配置如下:

pattern: code=[45]00
exclude: SpeciallyErrorNo

采集周期

采集周期(step),對應著監控系統的上報周期。意味著多久合並上報一次。

假設每秒產生1條符合采集規則的日誌,配置的采集方式為計數。
如果step為10 : 則每10s上報一次,值為10
如果step為60 : 則每60s上報一次,值為60

采集方式

采集方式(func)的意思是,當我們從日誌中篩選出一堆符合規則的日誌之後,應該以哪種規則來計算拿到最後的值來上報。

目前支持的采集方式有:

  • cnt
  • avg
  • sum
  • max
  • min

舉例:

假設:
正則表達式配置為 Return Success : (\d+)s Used
 
某一個周期內日誌滾動:
2017/12/01 12:12:01 Return Success : 1s Used
2017/12/01 12:12:02 Return Success : 2s Used
2017/12/01 12:12:03 Return Success : 4s Used
2017/12/01 12:12:04 Return Success : 2s Used
2017/12/01 12:12:05 Return Success : 1s Used
 
首先,根據正則獲取到括號內的值:1、2、4、2、1
接下來,根據不同的計算方式,會得到不同的結果:
avg   : (1 + 2 + 4 + 2 + 1) / 5 = 2
count : 5
sum   : (1 + 2 + 4 + 2 + 1) = 10
max   : Max(1, 2, 4, 2, 1) = 4
min   : Min(1, 2, 4, 2, 1) = 1

采集名稱

采集名稱(name)對應open-falcon中的metric,即監控項。

標簽