行文字檔案實時分析器,流量統計資料採集

2021-10-01 06:28:57 字數 2007 閱讀 4509

因專案需要,最近採用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...