摘 要:本研究就非結構化機器數據利用難題進行了闡述,在此基礎上,對非結構化機器數據范式化處理技術進行了深入研究,并提出了非結構化機器數據的范式化處理能力試驗方法。
關鍵詞:非結構化機器;數據范式化;處理技術;數據利用
中圖分類號:TP311 文獻標識碼:A 文章編號:2096-4706(2018)06-0099-03
Abstract:In this paper,the problem of unstructured machine data utilization is expounded. On this basis,the unstructured machine data paradigm processing technology is deeply studied,and the experimental method of unstructured machine data paradigm processing capability is put forward.
Keywords:unstructured machine;data normalization;processing technology;data utilization
0 引 言
隨著互聯網與數字化信息技術的飛速發(fā)展,新的數據源不斷涌現,各種應用所產生的數據呈指數級增長。根據互聯網數據中心監(jiān)測,全球數據量大約每兩年翻一番。預計到2020年,全球的數據量將達到35 ZB。據Gartner Group統計,如今80%的數據為非結構化數據,并且仍保持高速增長態(tài)勢,非結構化數據已逐漸成為大數據的主體。
1 非結構化機器數據利用難題
計算機信息化系統中的數據分為結構化數據和非結構化數據。非結構化數據是指數據結構不規(guī)則或不完整,沒有預定義的數據模型。包括所有格式的辦公文檔、文本、圖片、XML,HTML、各類報表、圖像和音頻/視頻信息等。
非結構化數據的格式多樣,標準也是多樣性的。而且在技術上非結構化信息比結構化信息更難標準化和理解。所以存儲、檢索、發(fā)布以及利用需要更加智能化的IT技術,比如海量存儲、智能檢索、知識挖掘、內容保護及信息的增值開發(fā)利用等。對比結構化數據,非結構化數據數量巨大、產生速度快,又缺乏規(guī)律性,價值密度較低。因缺乏有效的技術手段進行處理和分析,往往被丟棄和忽視。隨著大數據浪潮的來臨,海量數據處理技術的日漸成熟,數據存儲成本下降,數據分析應用方向逐漸也向非結構化數據轉移。
非結構化數據包含復雜的內容,并具有不同的結構特點。傳統關系數據庫無論從描述能力上還是從管理數據的規(guī)模上,都無法應對非結構化數據管理的要求。因此,如何對非結構化數據進行范式化處理,已成為非結構化機器數據處理相關研究中的一個核心問題。
2 非結構化機器數據范式化處理技術研究
一般情況下,對非結構化數據的處理是通過范式化匹配。提取字段后建立字段索引,則可形成新的結構化數據形式,提高搜索效率。但是非結構化機器數據格式是經常改變,對于沒有提取到字段信息的數據,如果需要進行字段統計,則需要實現搜索時提取字段功能。
2.1 非結構化機器數據范式化處理流程
(1)收到一條原始非結構化數據raw_event;(2)提取關鍵信息key(token + appname(appname不存在則使用hostname)),從ParserCache中找對應的解析規(guī)則EventParser;(3)如果找到對應的解析規(guī)則并且處理成功,則返回structured event;(4)如果沒找到對應的解析規(guī)則EventParser或解析EventParser處理不成功,進入ParserContainer處理;(5)看token+appname是否有對應的用戶Custom配置;(6)如果有則使用按照其配置產生的Parser來處理,如果處理成功則產生event_parser和structured event,更新cache,若不成功則使用DefaultParser只保留raw_message,不提取任何字段;(7)如果沒有,則使用Common配置處理,需要依次使用各種類型的Parser去嘗試處理,如果處理成功則產生event_parser和結構化數據structured event,更新cache,若不成功則使用DefaultParser只保留raw_message,不提取任何字段;(8)返回結構化數據structured event。
在運維過程中,非結構化數據主要來源于大量的設備日志、服務日志、應用日志,普遍缺乏統一的數據采集、格式和存儲規(guī)范。針對常見的日志數據,采用內置相應的日志解析規(guī)則,能夠自動識別和解析常見的日志格式,如Linux、Apache、JSON等;對于非常用的日志格式,通過個性化配置日志格式解析規(guī)則,抽取自定義字段達到數據的范式化處理。
2.2 針對機器數據的字段抽取規(guī)則
2.2.1 字段抽取類
(1)正則解析:通過配置正則解析出匹配的字段,支持命名分組、多行正則、Grok語法;(2)KeyValue解析適用于日志中包含字段名,分隔符比較明確的日志,配置KV對分隔符和KV之間的分隔符來抽取字段;(3)KeyValue正則解析適用于分隔符不確定,KV對不連續(xù)的日志,通過配置Key,Value,分隔符的正則來抽取字段;(4)Json解析適用于Json日志格式,抽取出來的字段結構和Json中定義的結構一致;(5)XML解析適用于XML日志解析,抽取出來的字段結構和XML中定義的結構一致;(6)CSV解析適用于列順序固定,分隔符固定的日志,配置分隔符和列名來解析字段;(7)結構體解析適用于按固定字節(jié)長度寫入的日志,配置字節(jié)格式的解析。
2.2.2 字段轉換類
(1)UserAgent解析:從UserAgent抽取出操作系統,瀏覽器,設備信息;(2)Geo解析:從IP地址中抽取出國家、省、市、互聯網服務提供商、經度、經度、緯度信息;(3)手機號碼解析:從手機號碼中抽取出國家、省、市、互聯網服務提供商、經度、緯度信息;(4)固定號碼解析:從手機號碼中抽取出國家、省、市、經度、緯度信息;(5)自定義字典:查自定義字典表,從一個字段擴展到多個字段;(6)Syslog_prio解析:從Syslog的日志抽取出來設備、日志級別。
2.2.3 字段操作類
(1)格式化處理:用于把多個字段按指定格式,產生新的字段;(2)刪除字段:用于刪除不用的字段;(3)重命名字段:用于重命名字段;(4)內容替換:用于替換字段的內容;(5)hex轉換:用于把16進制度的hex dump轉換成可讀度字符格式;(6)URL轉換:用于把URL轉碼的字段轉換到轉碼之前的格式;(7)IP格式轉換:用于把數值類型的IPv4地址轉換成字符串IP地址;(8)數值字段轉換:用于把字符串類型的字段轉換成數值類型。
2.2.4 其他
時間戳解析:配置時間戳抽取格式,來抽取日志的時間戳,抽取出來時間戳決定日志的存儲位置和搜索時間范圍。
3 非結構化機器數據的范式化處理能力試驗
3.1 自動解析能力試驗
3.1.1 規(guī)則匹配流程
(1)配置的規(guī)則可以指定Appname,tags,匹配上原始日志中斷Appname,tags的規(guī)則執(zhí)行這些規(guī)則;(2)沒有規(guī)則的日志或者配置的規(guī)則中不包括解析成功的日志,嘗試默認規(guī)則。
3.1.2 默認規(guī)則
(1)apache access:匹配apache access日志,同時適用于nginx access日志;(2)apache error:匹配apache error日志,同時適用于nginx error日志;(3)Json:匹配Json格式的日志;(4)Java log4j:log4j默認格式的日志。
3.1.3 時間戳順序
識別時間戳的順序如下:(1)Agent識別到的時間戳;(2)用“時間戳解析”解析出來的時間戳;(3)Agent事件源時間戳;(4)Collector收到的時間戳;(5)當前時間戳。測試步驟如表1所示。
例如支持自動解析的apache日志格式如下:
%h %l %u %t \\"%r\\" %>s %b
%h %l %u %t \\"%r\\" %>s %b \\"%{Referer}i\\" \\"%{User-agent}i\\"
%h %l %u %t \\"%r\\" %>s %b \\"%{Referer}i\\" \\"%{User-agent}i\\" \\"%{X-Forwarded-For}i\\"
其中各項配置的含義如下:
%b or %B - Size
%h RemoteIPOrHost
%l - RemoteLogname
%r - Request
%>s - HttpStatusCode
%t - eventTime
%{Referer}i - Referer
%{User-agent}i - UserAgent
%{X-Forwarded-For}i - XForwardedFor
自動識別Apache的error日志,通常情況下日志格式為:
[Fri Jul 05 21:28:24 2013] [error] child process 1245 still did not exit, sending a SIGKILL
自動解析出如下字段:
timestamp, loglevel, message 等。
3.2 自定義日志解析能力試驗
3.2.1 正則解析
原始日志:
192.168.1.139--[24/Jan/2015:17:03:49 +0800] \"GET /api/v0/search/fields/?field=tagfilters=order=descpage=1query=*size=50sourcegroup=allsourcegroupCn=%E6%89%80%E6%9C%89%E6%97%A5%E5%BF%97time_range=-2d,nowtype=fields HTTP/1.1\" 200 363 \"http://alltest.rizhiyi.com/search/?query=*time_range=-2d%2Cnoworder=descsize=20page=1sourcegroup=alltype=timeline_t=1422088066859title=%E9%BB%98%E8%AE%A4index=0\"\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:35.0) Gecko/20100101 Firefox/35.0\"
可以采用如下配置:
%{ApcClientIP} %{ApcIdent} %{ApcUser} %{ApcTimestamp} %{ApcRequest} %{ApcStatus} %{ApcRespLen} %{ApcReferer} %{ApcUa}
解析結果如下:
Object
clientip:\"192.168.1.139\"
method:\"GET\"
referer:\"http://alltest,rizhiyi.com/
search/?qufery=*time range=-2d%2Cnow
order=descsize=20page=lsourcegroup=
al1type=timelinet=1422088066859title
=%E9%bb%98%E8*AE%A4index=0\"
referer_domain:\"alltest.rizhiyi.com\"
request_path:\"/api/v0/search/fields/\"
request_query:\"field=tagfilters=
order=descpage=lquery=*size=50sourcegroup
=allsourcegroupCn=%E6%89%80%E6%9C
%89%%E6%97%A5%E5%BF%97time_reage=-2d,
nowtype=fields”
resp_len:363
status:200
timestamp: \"24/Jan/2015:17:03:49+4800\"
ua:\"Mozilla/5.0 (Macintosh;Intel Mac
OS X 10.10: rv:35.0) Gecko/20100101
Firefox/35.0\"
version:\"1.1\"
3.2.2 KeyValue分解
解析明顯的KV字符,輸入request_query字段為:
field=tagfilters=order=descpage=1query=*size=50sourcegroup=allsourcegroupCn=%E6%89%80%E6%9C%89%E6%97%A5%E5%BF%97time_range=-2d,nowtype=fields。
即添加解析規(guī)則:KeyValue分解,source字段選擇request_query,定義字段間分隔符為,定義k-v分隔符為=。
解析結果如下:
Object
clientip:\"192.168.1.139\"
method;\"GET\"
referer:\"http://alltest,rizhiyi,com/s
earch/?query=*time range=2d%2Cnow
order=descsize=20page=1sour cegroup=
alltype=timelnet=l422088066859title
=%E9%BB%98%E8%AE%A4index=0\"
referer_domain:〃alltest,rizhiyi,com〃
request_path:〃api/v0/search/fields/〃
request_query:〃field=tagfilters=
order=descpage=1query=*size50=
sourceroup=allsourceroupCn=%E6%89%80%E6%9C
%89%E6%97%A5%E5%BF%97timte_range=-2d,
nowtype=fields
resp_len:363
status:200
timestamp:\"24/Jan/2015:17:03:49+0800\"
ua:\"Mozilla/5.0(Macintosh:Intel Mac
OS X 10 10:rv:35.0) Gecko/20100101
Firefox/35.0\"
Version:\"101\"
4 結 論
非結構化機器數據范式化處理是大數據技術的基礎,是實現海量數據實時檢索和統計分析的前提。本研究主要對大數據中的非結構化機器數據的范式處理技術進行分析和探討,并對自動解析和自定義解析兩種方式做出實驗驗證。上述技術已在機器數據搜索分析平臺成功實現,并在金融、電力、通信運營商等行業(yè)得到應用。
參考文獻:
[1] 郎波,張博宇.面向大數據的非結構化數據管理平臺關鍵技術 [J].信息技術與標準化,2013(10):53-56.
[2] 馮宇.非結構化數據管理平臺研究與建設 [J].電力信息化,2012,10(2):69-72.
[3] 黃海峰.2013年綠色通信呈現四大發(fā)展趨勢 [J].通信世界,2013(26):46.
[4] 陳氫.基于信息鏈的跨部門政府信息共享架構研究 [J].情報雜志,2013,32(11):164-168.
作者簡介:潘世成(1972.06-),河南蘭考人,高級工程師,本科。研究方向:信息技術在電力行業(yè)的應用。