輕松利用日志動態(tài)分析平臺玩轉(zhuǎn)Nginx運維管理
一、分享背景
1、關(guān)于此次分享
(1) 關(guān)于炎凰數(shù)據(jù)
炎凰數(shù)據(jù)是一家專注于打造自主知識產(chǎn)權(quán)的大數(shù)據(jù)處理平臺的公司。
(2) 關(guān)于鴻鵠
鴻鵠是炎凰數(shù)據(jù)為廣大開發(fā)者(研發(fā)人員、數(shù)據(jù)分析師、數(shù)據(jù)科學(xué)家等)提供的免費社區(qū)版一站式異構(gòu)數(shù)據(jù)分析平臺,包含了異構(gòu)數(shù)據(jù)的采集、導(dǎo)入、存儲、計算分析、可視化和告警等一系列服務(wù)。平臺采用云原生架構(gòu)和特有的讀時建模引擎,支持標(biāo)準(zhǔn)的SOL語言,讓用戶可以靈活地管理海量多源異構(gòu)數(shù)據(jù),快速地分析數(shù)據(jù)特征,助力用戶輕松實現(xiàn)數(shù)據(jù)驅(qū)動業(yè)務(wù),誠邀大家一起參與,免費體驗,共同助力新產(chǎn)品的功能優(yōu)化、新技術(shù)的發(fā)現(xiàn)探索。
(3) 分享目的
Nginx是個常用的系統(tǒng),其運維管理是普遍的需求。本文從實際案例出發(fā),介紹如何利用日志動態(tài)分析平臺(炎凰 數(shù)據(jù)的鴻鵠產(chǎn)品)完成Nginx運維管理的場景落地,涵蓋從數(shù)據(jù)導(dǎo)入、數(shù)據(jù)解析、數(shù)據(jù)建模,到數(shù)據(jù)可視化的全過程,以及告警及第三方系統(tǒng)集成等等。通過實際案例分享,展示一個新型的日志動態(tài)分析平臺如何通過一站式的方案解決日志運維管理中的挑戰(zhàn),幫助用戶敏捷且高效地完成運維管理工作。
(4) 期望收獲
- 端到端快速高效搭建簡單Nginx運維管理的實操案例
- 使用一體化日志分析工具平臺的最佳實踐
- 手把手的異構(gòu)數(shù)據(jù)解析和關(guān)聯(lián)分析的實戰(zhàn)經(jīng)驗
2、實踐場景:Nginx運維管理
(1) 數(shù)據(jù)源
來自Nginx的access log (包含所有客戶端請求信息),屬于日志類型數(shù)據(jù)。
- 時序文本型。
- 具備一定格式而非結(jié)構(gòu)化。
- 格式非固定,具有predefined combined format,也具有各種extended format,依賴于具體配置而變化。
來自Prometheus的CPU監(jiān)控數(shù)據(jù),屬于監(jiān)控類型數(shù)據(jù)。
- 時序型(按時間采樣)。
- 結(jié)構(gòu)化數(shù)據(jù) (關(guān)系型數(shù)據(jù)庫表結(jié)構(gòu),包含明確字段定義)。
來自CMDB的映射數(shù)據(jù),屬于靜態(tài)數(shù)據(jù)。
- 非時序型
- 結(jié)構(gòu)化數(shù)據(jù) (IT資產(chǎn)與業(yè)務(wù)資產(chǎn)的關(guān)系數(shù)據(jù),包含:FQDN,IP,Service等的相關(guān)映射關(guān)系)
(2) 場景特點
- 對log這類動態(tài)非結(jié)構(gòu)化數(shù)據(jù)的解析。
- 多源異構(gòu)數(shù)據(jù)的關(guān)聯(lián)分析:Nginx + Prometheus + CMDB。
- 運維管理場景下,需求靈活多變且會持續(xù)迭代。
二、實踐案例
1、場景實現(xiàn)準(zhǔn)備
應(yīng)用
應(yīng)用是平臺提供的一種實現(xiàn)不同場景的方式,讓用戶將創(chuàng)作的儀表板、告警等資源有序地組織起來,打造完整的解決方案。
如下圖所示,利用鴻鵠平臺,創(chuàng)建了一個名叫“Nginx運營管理”的應(yīng)用,之后所有的操作,以及所有分析資源本身都會包含在所創(chuàng)建的這個應(yīng)用當(dāng)中。
因此,實現(xiàn)某一通用場景的最佳實踐就是創(chuàng)建“應(yīng)用”,進(jìn)而通過打包等方式實現(xiàn)“共享”。
數(shù)據(jù)源
數(shù)據(jù)集是一個一組事件的集合,用來存儲事件的容器。每一個查詢,都需要描述清楚從哪個數(shù)據(jù)集開始進(jìn)行查詢。導(dǎo)入數(shù)據(jù)的時候,都需要明確指出事件存儲在哪個數(shù)據(jù)集中。
如下圖所示,完成應(yīng)用的創(chuàng)建后,下一步需要新建數(shù)據(jù)集。
數(shù)據(jù)源類型
數(shù)據(jù)源類型用于對具有統(tǒng)一類型屬性的數(shù)據(jù)進(jìn)行集合處理。平臺中的數(shù)據(jù)源類型包含一系列的屬性,定義了對數(shù)據(jù)的各類解析處理規(guī)則,例如數(shù)據(jù)索引階段的抽取模式、查詢階段的抽取模式、字段分隔符等。平臺內(nèi)置了多種開箱即用的數(shù)據(jù)源類型,包含ncinx accesslog,apache access log,syslog等。數(shù)據(jù)源類型對應(yīng)字段_datatype,是一個字符串,用來標(biāo)記事件原始數(shù)據(jù)的格式等元信息。
在實際使用的過程中,推薦用戶優(yōu)先定義數(shù)據(jù)源類型,用來限定該數(shù)據(jù)的適用范圍;必要時還需自定義一些字段加工規(guī)則,用來和數(shù)據(jù)源類型進(jìn)行一一對應(yīng)。
2、數(shù)據(jù)處理流程
(1) 數(shù)據(jù)導(dǎo)入
鴻鵠系統(tǒng)支持各類數(shù)據(jù)源的自動化導(dǎo)入操作,通過數(shù)據(jù)采集器或數(shù)據(jù)連接器,將數(shù)據(jù)從不同的數(shù)據(jù)源拉取并匯總到鴻鵠系統(tǒng)中。同時數(shù)據(jù)的格式也是多種多樣的,包括文件類型、數(shù)據(jù)庫類型、Kafka類型等。
- 日志數(shù)據(jù)導(dǎo)入
注:此演示為手動導(dǎo)入過程,實際生產(chǎn)中多為自動化導(dǎo)入,關(guān)于自動化導(dǎo)入的實現(xiàn),請參考使用手冊中的“數(shù)據(jù)導(dǎo)入”章節(jié)設(shè)定數(shù)據(jù)源類型。
完成數(shù)據(jù)上傳后,在預(yù)覽界面選擇自定義的數(shù)據(jù)源類型。利用鴻鵠系統(tǒng)實現(xiàn)對時間字段的自動化提取,并通過預(yù)覽數(shù)據(jù)的方式確認(rèn)時間字段提取的正確性。
- 設(shè)定目標(biāo)數(shù)據(jù)集
將數(shù)據(jù)存放在目標(biāo)數(shù)據(jù)集中,如上圖所示,支持通過數(shù)據(jù)源主機來區(qū)分不同的數(shù)據(jù)來源,以達(dá)到數(shù)據(jù)源區(qū)分的目的,避免混亂。
- 數(shù)據(jù)導(dǎo)入驗證
- CPU監(jiān)控數(shù)據(jù)
- 設(shè)定數(shù)據(jù)源類型
由于CPU數(shù)據(jù)為csv文件,因此采用內(nèi)置的csv數(shù)據(jù)源類型就可以進(jìn)行導(dǎo)入(平臺支持csv類型文件的時間字段自動識別功能)。
- 設(shè)定目標(biāo)數(shù)據(jù)集
同樣地,通過數(shù)據(jù)源主機以及數(shù)據(jù)源的方式,對數(shù)據(jù)來源進(jìn)行區(qū)分。
- 資產(chǎn)關(guān)系映射數(shù)據(jù)
資產(chǎn)映射數(shù)據(jù)是相對“靜態(tài)”、不帶時間屬性的數(shù)據(jù),表達(dá)從A到B的映射關(guān)系。對于這類數(shù)據(jù),鴻鵠系統(tǒng)支持用戶通過構(gòu)建“查找表”來記錄這種映射關(guān)系,實現(xiàn)資產(chǎn)映射的管理。
- 構(gòu)建“查找表”
上圖中,構(gòu)建了fqdn、ip、service這3個查找表。新建查找表的具體界面如下圖所示。
- FQDN <-> 系統(tǒng) 映射表
- IP <-> 系統(tǒng) 映射表
- URL節(jié)點<-> Web服務(wù)模塊 映射表
(2) 數(shù)據(jù)解析
完成了數(shù)據(jù)的導(dǎo)入,下一步是解析數(shù)據(jù),提取數(shù)據(jù)字段,為建模做準(zhǔn)備。對于本例中的數(shù)據(jù)格式,由于其是非結(jié)構(gòu)化數(shù)據(jù),故采用正則表達(dá)式的方式來提取字段。在鴻鵠系統(tǒng)中,正則解析方式有兩種實現(xiàn)方式:互動劃詞,和手動編輯。
- 方式1:互動劃詞 (“數(shù)據(jù)管理” -> “字段加工” -> “新建規(guī)則應(yīng)用”)
上圖可以看出,藍(lán)色方框內(nèi)彩色部分是手動劃分的詞;完成劃詞后,會提示輸入字段名稱(右下角紅色圓圈);確定字段名稱后,鴻鵠系統(tǒng)將自動生成正則并提取字段,并提供預(yù)覽界面,實現(xiàn)可視化互動。
- 方式2:手動編輯
如果遇到較為復(fù)雜的正則表達(dá),樣例數(shù)據(jù)不能滿足已有的正則匹配,則可以進(jìn)行一些手動的編輯。一般首先利用互動劃詞生成自動化正則表達(dá)式,然后使用手動編輯的方式進(jìn)行調(diào)整。
(3) 數(shù)據(jù)建模
完成字段的解析,下一步就是對數(shù)據(jù)進(jìn)行建模,根據(jù)Nginx運營管理場景的需求來實現(xiàn)邏輯,包括兩種方式:
- 利用視圖構(gòu)建虛擬模型
視圖,是由SQL語句組成的查詢定義的虛擬表,是一個邏輯上抽象的虛擬表,用來存儲查詢邏輯。實際應(yīng)用中,可以利用視圖進(jìn)行過濾、分桶等操作。
- 利用物化視圖構(gòu)建物理模型
物化視圖是一種特殊的物理表,"物化"(Materialized)了查詢的結(jié)果。和普通視圖僅保存SQL定義不同,物化視圖會存儲SQL預(yù)計算結(jié)果的數(shù)據(jù)集,適用于數(shù)據(jù)聚合加速等場景。
在實際應(yīng)用中,建議通過視圖來構(gòu)建物化視圖,這樣會讓概念邏輯更加清晰,具有結(jié)構(gòu)化的意義,修改或者調(diào)整的成本更低。
此外,建議用戶為各資源定義合理的命名規(guī)范(如vw,mat等),以區(qū)分視圖和物化視圖。
(4) 數(shù)據(jù)可視化
完成了模型的構(gòu)建,下一步即可創(chuàng)建圖表,以實現(xiàn)可視化。在鴻鵠系統(tǒng)中,可以通過儀表板構(gòu)建多個圖表。以HTTP網(wǎng)絡(luò)流量統(tǒng)計為例,實現(xiàn)過程如下:
- 圖表構(gòu)建
第1步:數(shù)據(jù)探索 -> 生成期望的分析結(jié)果數(shù)據(jù)。
首先基于實現(xiàn)的場景來進(jìn)行數(shù)據(jù)探索,如上圖所示,通過SQL實現(xiàn)該場景下的一些計算邏輯,生成分析結(jié)果數(shù)據(jù);進(jìn)而將其添加到可視化的UI板中,生成可視化圖表。
第2步:根據(jù)分析結(jié)果數(shù)據(jù)直接創(chuàng)建可視化圖表,按需更改鉆取交互的配置圖表構(gòu)建。
第3步:調(diào)整可視化圖表的屬性,達(dá)到預(yù)期展現(xiàn)效果。
完成圖表創(chuàng)建后,通過調(diào)整可視化的儀表板的各類屬性,即可達(dá)到用戶預(yù)期的展現(xiàn)效果;該模塊支持用戶自定義,以及eCharts等更高級的功能。
- 儀表板構(gòu)建——Nginx運營管理
類似上述的過程,創(chuàng)建多個圖表,最終構(gòu)建成一個儀表板。以“Nginx運營管理”這一實際使用場景為例:
其中,所有圖表均由“日期”下拉框決定時間范圍和“系統(tǒng)名稱”,下拉框決定觀察對象。具體圖表包括:
- HTTP網(wǎng)絡(luò)流量統(tǒng)計 (MB)
- 頁面訪問量PV
- 頁面訪問量PV vs. CPU使?率
- HTTP請求方法分布
- HTTP請求狀態(tài)碼分布 (圖表4中鉆取的時間段)
- 訪問來源分布
- 訪問來源客戶端類型分布
- Top10訪問來源模塊統(tǒng)計
- Top10熱門頁面訪問統(tǒng)計
- 頁面訪問失敗統(tǒng)計
- 異常操作記錄
以上這11種圖表涵蓋了大多數(shù)通用的應(yīng)用場景。其中,圖表④和圖表⑤之間形成聯(lián)動。
(5) 擴展話題
完成了儀表板的構(gòu)建,下面分享一些擴展話題。
- 告警開發(fā)
基于查詢字段以及建模的視圖\物化視圖,可以進(jìn)行告警開發(fā)。例如前文所述,可基于儀表板中的異常操作記錄進(jìn)行告警開發(fā),以確保異常記錄的時效性。
- 創(chuàng)建“告警”
如上圖所示,利用自定義觸發(fā)條件設(shè)定閾值,進(jìn)而形成告警記錄;再通過郵件、webhook等方式將告警結(jié)果通知給相關(guān)人員。
- “告警”執(zhí)行歷史
通過告警記錄查詢,達(dá)到良好的管理目的。
- 第三方集成
前文所述,是鴻鵠自研的儀表板上完成的開發(fā)。此外,鴻鵠系統(tǒng)還可以集成到第三方可視化組件(例如Grafana等)中。
- 可視化部分 -> Grafana
鴻鵠系統(tǒng)集成Grafana,其核心思想是將復(fù)雜的計算邏輯放到鴻鵠系統(tǒng)來處理,將Grafana作為可視化工具來呈現(xiàn)結(jié)果。這里簡單分享一個在Grafana中集成鴻鵠系統(tǒng)的操作步驟,更詳細(xì)的操作流程可以參照相關(guān)操作文檔。
在Grafana中添加鴻鵠插件。
配置鴻鵠鏈接信息。
構(gòu)建 SQL 查詢。
生成可視化展現(xiàn)。
- 第三方集成(封裝數(shù)據(jù)接口)
鴻鵠系統(tǒng)還可以實現(xiàn)數(shù)據(jù)接口的封裝功能,將復(fù)雜的SQL語句封裝成查詢工具。
創(chuàng)建“SQL表函數(shù)”。
在鴻鵠系統(tǒng)中,將復(fù)雜的查詢計算邏輯“包裝”成“SQL表函數(shù)”,如上圖所示,該“SQL表函數(shù)”包括函數(shù)參數(shù)及參數(shù)類型,函數(shù)的輸入和輸出都是數(shù)據(jù)表格;用戶自定義函數(shù)邏輯將表格A轉(zhuǎn)化為表格B。
調(diào)用“SQL表函數(shù)”。
應(yīng)用過程中可以直接調(diào)用包裝好的“SQL表函數(shù)”,因此對于下游用戶接口的使用非常便捷。這樣,可以將復(fù)雜邏輯甚至是Grafana不支持的邏輯,借助接口工具得以實現(xiàn);詳見下圖舉例,優(yōu)化前文中Grafana集成的步驟3(構(gòu)建SQL查詢):Grafana通過調(diào)用“SQL表函數(shù)”接口直接實現(xiàn)可視化操作,從而實現(xiàn)數(shù)據(jù)計算和數(shù)據(jù)可視化之間的解耦。
三、總結(jié)和回顧
1、實踐產(chǎn)出
通過數(shù)據(jù)導(dǎo)入、數(shù)據(jù)解析、數(shù)據(jù)建模和數(shù)據(jù)可視化等操作,最終實現(xiàn)了Nginx運維的一個完整的場景應(yīng)用,實現(xiàn)了該場景下的數(shù)據(jù)監(jiān)控和分析。這就是一個典型的實踐產(chǎn)出。
- 一個完整場景應(yīng)用
完成Nginx運營管理場景分析和監(jiān)控需求。
充分滿足場景特點:
- 實現(xiàn)簡單化的非結(jié)構(gòu)化數(shù)據(jù)動態(tài)解析,無需編程語言開發(fā),只需字段加工配置調(diào)整;
- 實現(xiàn)非結(jié)構(gòu)化數(shù)據(jù)和結(jié)構(gòu)化數(shù)據(jù)關(guān)聯(lián)分析,無需顯式類型轉(zhuǎn)換便可以直接快速關(guān)聯(lián);
- 實現(xiàn)靈活應(yīng)對多變的運維管理需求,無需端到端代碼重構(gòu),僅需數(shù)據(jù)模型迭代
可共享,易遷移。
下圖是該場景下的界面展示示例:
2、總結(jié)回顧
Nginx運營管理是個通用的、普遍的需求,不同團(tuán)隊會使用不同的工具去實現(xiàn)這個需求。炎凰數(shù)據(jù)使用鴻鵠平臺完成了基礎(chǔ)版的Nginx運營管理實現(xiàn),使用到了鴻鵠的諸多基本功能,包括應(yīng)用、數(shù)據(jù)集、數(shù)據(jù)源類型、查找表、字段加工、視圖、物化視圖、儀表板、告警、SQL表函數(shù)等。鴻鵠系統(tǒng)的更多功能也等待用戶的挖掘。
此外,我們幫助大家總結(jié)了一些最佳實踐,避免大家在使用的過程中“繞彎路”。
- 創(chuàng)建“應(yīng)用”
- 自定義“數(shù)據(jù)源類型”
- 確認(rèn)時間字段的抽取正確性
- 通過“數(shù)據(jù)源主機”和“數(shù)據(jù)源”區(qū)分?jǐn)?shù)據(jù)來源
- 使用“查找表”
- 有效結(jié)合“互動劃詞”與“手動編輯”
- 利用視圖:行過濾 and/or 列過濾 and/or 時間分桶
- 利用物化視圖:聚合加速
- 基于視圖構(gòu)建物化視圖
- 為各資源定義合理的命名規(guī)范,如:vw,mat等
- 參考生成各圖表所需的數(shù)據(jù)樣例文檔章節(jié),合理分配維度和度量
- 自定義圖表
- 靈活利用自定義觸發(fā)條件設(shè)定閾值
- 利用Webhook對接外部網(wǎng)關(guān),例如即時通訊工具等
- 利用“SQL表函數(shù)”封裝邏輯,構(gòu)建數(shù)據(jù)接口
該平臺旨在讓用戶從繁瑣的事情中解放出來,提高工作的效率。
本次分享只是開始,更多更豐富的場景等您來挖掘!
四、Q&A
Q1:數(shù)據(jù)解析規(guī)則和數(shù)據(jù)源類型是一一對應(yīng)的關(guān)系嗎?
A1:在鴻鵠系統(tǒng)中,這樣的綁定關(guān)系并不是一對一的關(guān)系,而是多對多的關(guān)系。同一套規(guī)則可以應(yīng)用于不同的數(shù)據(jù)源,實現(xiàn)數(shù)據(jù)間規(guī)則的共享;同樣,同一數(shù)據(jù)源也可綁定不同的規(guī)則,形成規(guī)則“pineline”。
Q2:告警配置中的限制秒是什么?
A2:限制秒是告警配置中的一個必填項。假設(shè)監(jiān)控CPU使用率,當(dāng)CPU使用率達(dá)到80%將會設(shè)定一級報警,而運維人員的處理則往往會需要一定的時間延遲;這樣在運維人員處理之前就會重復(fù)報警,生成冗余報警信息,甚至曹誠告警風(fēng)暴;因此,通過限制秒的方式,在限制秒的時間內(nèi)避免重復(fù)報警;如果時間超過了限制秒,而報警仍未得到處理,則會再次報警。
Q3:默認(rèn)告警有自帶的短信等配置方式嗎?
A3:自帶方式是沒有的,一般最佳實踐是通過webhook的方式將告警信息post出去,和外部系統(tǒng)實現(xiàn)對接;如果采用短信方式,則需要進(jìn)行短信網(wǎng)關(guān)等的設(shè)置,需要進(jìn)行針對性的開發(fā)和對接,目前沒有預(yù)定義的方式。
Q4:是不是將所有來源的數(shù)據(jù)都導(dǎo)入到同一數(shù)據(jù)集才能實現(xiàn)數(shù)據(jù)關(guān)聯(lián)?
A4:本文所演示的案例中,是將3個數(shù)據(jù)源導(dǎo)入到同一數(shù)據(jù)集;但這樣的操作不是必須的,鴻鵠系統(tǒng)支持對多源異構(gòu)數(shù)據(jù)進(jìn)行直接關(guān)聯(lián),并沒有數(shù)據(jù)集的限制,用戶可以根據(jù)實際的應(yīng)用場景去構(gòu)建數(shù)據(jù)集的分布,更好地實現(xiàn)數(shù)據(jù)管理的目的。
Q5:使用鴻鵠需要先掌握什么技能?上手會比較困難嗎?
A5:鴻鵠系統(tǒng)主要需要SQL技能,使用基本的SQL語法就可以實現(xiàn)基于鴻鵠系統(tǒng)的開發(fā);而對于一些高階的場景,鴻鵠本身已經(jīng)包裝好了部分函數(shù)(包括python函數(shù)、java函數(shù)、C++函數(shù)等)供用戶使用,大大降低了用戶的開發(fā)門檻。