因專案需要,最近採用inotify和io多路復用技術,實現了乙個輕量級的實時行文字檔案內容提取的程式,主要目的是用來監控閘道器nginx的access log,並且對access log在本地進行實時解析,字段提取和上報的功能。該程式占用記憶體較小,在10k左右,最多占用1個核的資源,提供取樣上報,全量/增量分析文字以及特定字段內容過濾等功能。該程式可以通過自定義connector外掛程式將本地提取以及過濾的資訊上報到遠端伺服器,以實現服務端的流量監控和實時統計;在**裡面已經實現了兩個connector,乙個是標準輸出connector,乙個是udp connector;
# 監聽目錄配置,可以監聽多個目錄,陣列格式
[dir_file,array]
# 被監控的目錄
dir[0]=/root/test0
# 被監控的檔案
file[0]=/root/test0/access_log.txt
# 被監控的目錄
dir[1]=/root/test1
# 被監控的檔案
file[1]=/root/test1/access_log.txt
# 日誌字段提取配置,欄位名=字段位置(從0開始):欄位的大小(位元組)
[field]
client_ip=12:16
host=13:32
method=16:8
resp_time=21:8
time=23:32
url=28:64
# 系統配置
[system]
# 文字分隔符
separator=0x09
# 是否以守護程序的方式啟動
is_daemon=false
# 是否從檔案開始讀
is_from_begin=false
# 取樣率,比如5代表5%
sampling_rate=5
# 字段內容過濾器,精確匹配,匹配到的才會上報採集
[filter]
# 格式:欄位名=字段值,不配置,代表不用過濾字段內容
url=/customlayout/home/top
# 定義connector的路徑,最大connector可支援的數量為32
[connectors,array]
connector_so_path[0]=/root/access_agent/src/connector/stdout_connector/stdout_connector.so
connector_so_path[1]=/root/access_agent/src/connector/udp_connector/udp_connector.so
extern int connnect_to_source(char * snd_buffer , int buffer_size , char * logbuffer);
int connnect_to_source(char * snd_buffer , int buffer_size , char * logbuffer)
編譯成動態連線庫so檔案,在配置檔案中新增connector配置,可以配置多個connector,最多支援32個;傳給connector的二進位制資料,是按照配置檔案中[field]配置項,組成的定長資料段;
# 定義connector的路徑,最大connector可支援的數量為32
[connectors,array]
connector_so_path[0]=/root/access_agent/src/connector/stdout_connector/stdout_connector.so
connector_so_path[1]=/root/access_agent/src/connector/udp_connector/udp_connector.so
Linux上進行文字檔案的操作
解法一 tail n 10 filename 從第10行輸出 解法二 sed sed n 10p file.txt 列印第10 行內容 sed n 9,10p file.txt 列印第十行 sed n 10p file.txt 列印一到十行 sed n 1,10p file.txt 解法三 grep...
C 檔案流 掌握文字檔案讀寫的方法
掌握文字檔案讀寫的方法 了解二進位制檔案的讀寫方法 c 檔案流 fstream 檔案流 ifstream 輸入檔案流 ofstream 輸出檔案流 建立乙個文字檔案並寫入資訊 同向螢幕上輸出資訊一樣將資訊輸出至檔案 include include void main 執行後開啟檔案d me.txt,...
取得乙個文字檔案流的編碼方式
region 取得乙個文字檔案流的編碼方式 取得乙個文字檔案流的編碼方式。文字檔案流。預設編碼方式。當該方法無法從檔案的頭部取得有效的前導符時,將返回該編碼方式。public string getencoding filestream stream,string defaultencoding if...