王曉鋒 馬麗麗
摘? 要:數(shù)據(jù)泄漏防護系統(tǒng)可以阻止企業(yè)的重要數(shù)據(jù)從網(wǎng)絡(luò)出口違規(guī)外發(fā)。針對油田數(shù)據(jù)泄漏防護大數(shù)據(jù)平臺對各個區(qū)域、不同類型的數(shù)據(jù)采集和設(shè)備、業(yè)務(wù)監(jiān)測問題,本文首先提出依托大數(shù)據(jù)Flume(數(shù)據(jù)采集系統(tǒng))組件,采用抓取外泄事件日志JSON(一種輕量級的數(shù)據(jù)交換格式)和解析后的違規(guī)外發(fā)文件txt文本的方法,實現(xiàn)數(shù)據(jù)采集;其次依托Prometheus服務(wù)監(jiān)管系統(tǒng)Flume_exporter、Node_exporter組件和Grafana(一個跨平臺的、開源的度量分析和可視化工具),實現(xiàn)對數(shù)據(jù)泄漏防護設(shè)備信息和應(yīng)用數(shù)據(jù)的監(jiān)管;最后指出搭建采集系統(tǒng)和監(jiān)管平臺對數(shù)據(jù)泄漏防護系統(tǒng)運維的作用。
關(guān)鍵詞:Flume;Prometheus;數(shù)據(jù)采集;監(jiān)管平臺
中圖分類號:TP391? ? ?文獻標識碼:A
文章編號:2096-1472(2021)-04-43-03
Abstract: Data leakage protection system can prevent important data of enterprises from being illegally exported from networks. This paper aims to solve problems of acquiring data of different types in different regions, and monitoring equipment and business on big data system for oilfield data leakage prevention. First, based on big data Flume (data acquisition system) component, this paper proposes to adopt the method of capturing JSON (JavaScript Object Notation, a lightweight data exchange format) of the leakage event log and the parsed illegally exported TXT file to achieve data acquisition. Second, Flume_exporter (Prometheus service supervision system), Node_exporter component and Grafana (a cross-platform open source measurement analysis and visualization tool) are used to supervise equipment information and application data of data leakage prevention. Finally, this paper points out the effect of building an acquisition system and supervision platform in operation and maintenance of data leakage prevention system.
Keywords: Flume; Prometheus; data acquisition; supervision platform
1? ?引言(Introduction)
隨著信息技術(shù)的快速發(fā)展,數(shù)據(jù)量成幾何級數(shù)增長,人類進入大數(shù)據(jù)時代。在大數(shù)據(jù)分布式集群系統(tǒng)環(huán)境下,實現(xiàn)滿足每秒數(shù)百MB的日志數(shù)據(jù)采集和傳輸需求,已經(jīng)成為大數(shù)據(jù)解決方案的前提和基本保障。如何解決在復(fù)雜場景下技術(shù)實現(xiàn)高緯度數(shù)據(jù)模型、自定義語言查詢、可視化數(shù)據(jù)展示等數(shù)據(jù)監(jiān)控技術(shù)難題,也成為大數(shù)據(jù)解決方案的一項嚴峻的挑戰(zhàn)[1]。
油田企業(yè)為防護重要數(shù)據(jù)資產(chǎn)不從網(wǎng)絡(luò)出口違規(guī)泄漏,搭建了油田數(shù)據(jù)泄漏防護大數(shù)據(jù)系統(tǒng)。本文主要研究依托開源數(shù)據(jù)采集系統(tǒng)Flume,實現(xiàn)油田對網(wǎng)絡(luò)、終端敏感文件外泄事件全面數(shù)據(jù)采集,并且基于Prometheus服務(wù)監(jiān)管系統(tǒng)[2]搭建油田數(shù)據(jù)泄漏防護大數(shù)據(jù)監(jiān)管平臺,實現(xiàn)對數(shù)據(jù)泄漏防護設(shè)備基本信息和應(yīng)用數(shù)據(jù)的實時監(jiān)控、管理、分析以及健康度準確評估。
2? Flume數(shù)據(jù)采集系統(tǒng)(Flume data acquisition system)
Flume是一個高可靠、分布式、高可用的海量日志采集、聚合和傳輸系統(tǒng),將大批量不同數(shù)據(jù)源的日志數(shù)據(jù)收集、聚合、移動到HDFS進行存儲[2]。Flume分布式系統(tǒng)的核心是Agent,內(nèi)部有三個組件:Source、Channel、Sink。Source:源數(shù)據(jù)采集,通過與應(yīng)用服務(wù)接口對接以獲取數(shù)據(jù);Channel:Agent內(nèi)部的數(shù)據(jù)傳輸通道,作為臨時存儲聚合數(shù)據(jù),用于從Source將數(shù)據(jù)傳遞到Sink;Sink:從Channel消費數(shù)據(jù)并將其傳遞給目標地,最終將數(shù)據(jù)存儲到集中存儲器(HDFS)。Flume數(shù)據(jù)采集系統(tǒng)架構(gòu)圖如圖1所示。油田數(shù)據(jù)泄漏防護大數(shù)據(jù)采集系統(tǒng)就是對終端、網(wǎng)絡(luò)數(shù)據(jù)泄漏防護日志、文件通過Flume Agent采集工具,以不同的Topic形式統(tǒng)一傳輸?shù)終afka,最終存儲到HDFS中。
Flume在收集數(shù)據(jù)過程中,可以定義JMX、JSON、Custom等格式采集報告,并通過配置Web服務(wù)器展示,實現(xiàn)對傳輸數(shù)據(jù)的實時監(jiān)控。由于Flume數(shù)據(jù)采集報告Web展示端不具備大規(guī)模數(shù)據(jù)儀表盤式展示,在大數(shù)據(jù)背景下,借助Prometheus監(jiān)管平臺以圖表形式簡潔、直觀地展示并統(tǒng)計、分析采集數(shù)據(jù)。
3? Prometheus監(jiān)管平臺(Prometheus supervision platform)
Prometheus是一個開源的服務(wù)監(jiān)控系統(tǒng)和時間序列數(shù)據(jù)庫,目前已經(jīng)被廣泛應(yīng)用于數(shù)據(jù)中心監(jiān)控[3]。Prometheus可以對系統(tǒng)資源或指定業(yè)務(wù)資源實時監(jiān)控,對自定義時間段內(nèi)的數(shù)據(jù)參數(shù)進行查詢、分析,實現(xiàn)高效的系統(tǒng)維護和實時健康評估。
3.1? ?Prometheus組件介紹
Prometheus核心組件包括Prometheus Server(服務(wù)器)、Exporter(采集主機的監(jiān)控樣本數(shù)據(jù)程序)、PushGateway(數(shù)據(jù)中轉(zhuǎn)網(wǎng)關(guān))、AlertManager(告警系統(tǒng))。
Prometheus Server:負責(zé)實現(xiàn)對監(jiān)控數(shù)據(jù)的獲取、存儲及查詢。Prometheus Server可以通過靜態(tài)配置管理監(jiān)控目標,也可以配合使用Service Discovery的方式動態(tài)管理監(jiān)控目標,并從這些監(jiān)控目標中獲取數(shù)據(jù)。Storage模塊將采集的數(shù)據(jù)保存在TSDB(時序數(shù)據(jù)庫)中,最終按照時間序列的方式存儲在本地磁盤中。
Exporter:將監(jiān)控數(shù)據(jù)采集的端點(Endpoint)通過HTTP服務(wù)的形式暴露給Prometheus Server,Prometheus Server通過訪問該端點獲取到需要采集的監(jiān)控數(shù)據(jù)。
PushGateway:當網(wǎng)絡(luò)環(huán)境不允許Prometheus Server和Exporter進行通信時,可以使用PushGateway來進行中轉(zhuǎn)。PushGateway將監(jiān)控數(shù)據(jù)主動推送到Gateway中,然后Prometheus Server從PushGateway中拉取監(jiān)控數(shù)據(jù)。
AlertManager:在Prometheus Server中支持基于PromQL創(chuàng)建告警規(guī)則,如果滿足PromQL定義的規(guī)則,則會產(chǎn)生一條告警。當接收到告警后,會通過郵件、釘釘?shù)确绞桨l(fā)出告警。
Grafana是一款美觀、強大的可視化監(jiān)控指標展示工具,主要用于大規(guī)模指標數(shù)據(jù)的可視化展現(xiàn),是網(wǎng)絡(luò)架構(gòu)和應(yīng)用分析中最流行的時序數(shù)據(jù)展示工具。它將Prometheus監(jiān)控的數(shù)據(jù)源以儀表盤方式在Web面板展示。
Prometheus技術(shù)架構(gòu)圖如圖2所示。
3.2? ?Prometheus的工作流
Prometheus Server定期從Exporter中拉取數(shù)據(jù),或者接收來自PushGateway推送的數(shù)據(jù);Prometheus Server在本地存儲收集到的數(shù)據(jù),并運行定義好的告警規(guī)則,記錄新的時間序列或者向AlertManager推送警報;AlertManager根據(jù)配置文件對接收到的警報進行處理,發(fā)出告警;在Grafana圖形界面中,可視化展示數(shù)據(jù)。
4? 油田數(shù)據(jù)泄漏防護大數(shù)據(jù)采集系統(tǒng)和監(jiān)管平臺 (Big data acquisition system and supervision platform for oilfield data leakage prevention)
油田數(shù)據(jù)泄漏防護大數(shù)據(jù)采集系統(tǒng)的目標是通過Flume 1.8.0采集油田企業(yè)違規(guī)外發(fā)敏感數(shù)據(jù)產(chǎn)生的外泄事件和油田企業(yè)內(nèi)部終端資產(chǎn)信息(包括軟硬件信息、終端存儲文件信息、組織機構(gòu)信息等),根據(jù)不同類型Topic,統(tǒng)一傳輸?shù)終afka,為數(shù)據(jù)泄漏防護大數(shù)據(jù)平臺提供分析、建模的數(shù)據(jù)源,采集數(shù)據(jù)最終存儲到HDFS中。
油田數(shù)據(jù)泄漏防護大數(shù)據(jù)監(jiān)管平臺基于Prometheus監(jiān)控系統(tǒng)Flume_exporter組件采集Flume獲取數(shù)據(jù)的統(tǒng)計數(shù)量,Node_exporter組件獲取數(shù)據(jù)泄漏防護設(shè)備系統(tǒng)運行狀態(tài),AlertManager組件進行異常告警,Grafana工具在Web面板展示,實現(xiàn)數(shù)據(jù)信息的分析和監(jiān)控。油田數(shù)據(jù)泄漏防護大數(shù)據(jù)采集系統(tǒng)和監(jiān)管平臺架構(gòu)圖如圖3所示。
4.1? ?油田數(shù)據(jù)泄漏防護大數(shù)據(jù)采集系統(tǒng)
根據(jù)Flume Agent采集數(shù)據(jù)泄漏防護外泄事件和網(wǎng)絡(luò)資源業(yè)務(wù)需求,進行項目定制開發(fā),形成FileLimitrateThriftInterceptor.java,修改配置文件thrift2kafka.conf,實現(xiàn)將數(shù)據(jù)傳輸至大數(shù)據(jù)Kafka組件[4-5]。FileLimitrateThriftInterceptor.java部分代碼如下:
public FileLimitrateThriftInterceptor(Context context)
{
this.context = context;
//采集數(shù)據(jù)初始化
public void initialize() {
//根據(jù)標記iscollect決定是否啟用該通道
this.flag=context.getBoolean(ISCOLLECT, true).booleanValue();
this.secretkey = context.getString(SECRETKEY);
try {
this.aesUtils = new AesUtils(this.secretkey);
} catch (Exception e) {
e.printStackTrace();
logger.info("aesUtils initialize error");
//獲取事件方法
public Event intercept(Event event) {
ArrayList
bytes.add(addBytes(event.getBody()));
if(isUseSecret){
event.setBody(aesUtils.AESEncode(SerializableUtils.ObjectToByte(bytes)));
}else{
event.setBody(SerializableUtils.ObjectToByte
(bytes));
public List
for (Event event : events) {
intercept(event);
thrift2kafka.conf配置文件如下:
//配置Source
a1.sources.r1.type=thrift
a1.sources.r1.port=9110
a1.sources.r1.interceptors=limitrate
a1.sources.r1.interceptors.limitrate.type=src.interceptor.FileLimitrateThriftInterceptor$Builder
//配置Channel
a1.channels.c1.type=file
a1.channels.c1.checkpointDir=/mnt/checkpoint1
a1.channels.c1.dataDirs=/mnt/file-channel1
//配置Sink
a1.sinks.k1.type=org.apache.flume.sink.kafka.KafkaSink
a1.sinks.k1.kafka.topic=FILE_STORE_TOPIC
a1.sinks.k1.kafka.bootstrap.servers=kafka01.dqyt.com:9092
4.2? ?油田數(shù)據(jù)泄漏防護大數(shù)據(jù)監(jiān)管平臺
油田數(shù)據(jù)泄漏防護大數(shù)據(jù)監(jiān)管平臺建設(shè)包括三部分:Exporter組件代碼編寫;告警規(guī)則AlertRule配置,AlertManager組件進行異常處理方法配置;Grafana工具在Web面板展示方法配置[6-7]。
4.2.1? ?Exporter組件
采用Go語言開發(fā)Flume_exporter、Node_exporter組件代碼,獲取Flume端采集數(shù)據(jù)數(shù)量和服務(wù)器系統(tǒng)資源數(shù)值。Exporter部分核心代碼如下:
go func() {
defer wg.Done()
for _, url := range e.flumeMetricUrls {
m := <-channel
if m.Metrics[url] == nil {
log.Warn(">>>.receive metrics channel is nil, url: " + url)
continue
}
reg := regexp.MustCompile(`//(.*)/metrics`)
host := reg.FindStringSubmatch(url)[1]
for k, v := range m.Metrics[url] {
sMetrics := make(map[string]interface{})
sMetrics = v.(map[string]interface{})
delete(sMetrics, "Type")
if strings.HasPrefix(k, "SOURCE.") {
e.processGaugeVecs(k, host, "SOURCE", sMetrics)
} else if strings.HasPrefix(k, "CHANNEL.") {
delete(sMetrics, "Open")
e.processGaugeVecs(k, host, "CHANNEL", sMetrics)
} else if strings.HasPrefix(k, "SINK.") {
e.processGaugeVecs(k, host, "SINK", sMetrics)
4.2.2? ?Grafana界面展示
Grafana平臺配置頁面定義與Prometheus鏈接的變量后,配置展示的JSON Model。配置變量Variable如下:
Variable:
$host? label_values(host)
$channel_name
label_values(FLUME_CHANNEL_ChannelSize{host=
"$host"},name)
$sink_name
label_values(FLUME_SINK_EventDrainSuccessCount
{host="$host"},name)
$source_name
label_values(FLUME_SOURCE_OpenConnectionCount{host="$host"},name)
4.2.3? ?AlertManager告警
制定Prometheus服務(wù)器中的警報規(guī)則,規(guī)則觸發(fā)時,將警報發(fā)送到AlertManager組件。告警處理方法包括沉默、抑制、聚集和通過,例如郵件、即時通訊平臺、釘釘?shù)取?/p>
4.3? ?測試及運行結(jié)果
Flume數(shù)據(jù)采集系統(tǒng)以流處理形式采集數(shù)據(jù)泄漏防護產(chǎn)生外泄事件JSON和解析的違規(guī)文件txt,系統(tǒng)性能測試需求是找出每秒接收事務(wù)數(shù)(外泄事件JSON數(shù))峰值和Flume系統(tǒng)處理最大size文件需要的平均時間,生產(chǎn)環(huán)境要求最大文件為50 MB。測試結(jié)果為:每秒接收事務(wù)數(shù)峰值613條,處理事務(wù)數(shù)1.5 Mbps,處理50 MB大小解析文件需要30多秒。
Prometheus數(shù)據(jù)監(jiān)控系統(tǒng)批處理形式獲取數(shù)據(jù),只需對采集數(shù)據(jù)和告警功能的接口功能進行測試。
5? ?結(jié)論(Conclusion)
利用大數(shù)據(jù)組件Flume的油田數(shù)據(jù)泄漏防護大數(shù)據(jù)采集系統(tǒng)為大數(shù)據(jù)分析展示平臺提供了數(shù)據(jù)源,為油田數(shù)據(jù)泄漏防護大數(shù)據(jù)解決方案提供了數(shù)據(jù)基礎(chǔ)。搭建Prometheus監(jiān)管平臺實現(xiàn)數(shù)據(jù)泄漏防護設(shè)備基本信息和Flume采集數(shù)據(jù)實時監(jiān)控、管理、分析和健康度準確評估。在數(shù)字化油田的推動下,信息化產(chǎn)品類型更加多樣,設(shè)備數(shù)量、復(fù)雜度逐年增加,為網(wǎng)絡(luò)運維帶來巨大的挑戰(zhàn)。油田數(shù)據(jù)泄漏防護大數(shù)據(jù)監(jiān)管平臺全面監(jiān)控油田數(shù)據(jù)泄漏防護大數(shù)據(jù)系統(tǒng)下所有運行設(shè)備,大大降低了人工運維成本和設(shè)備運行風(fēng)險。
參考文獻(References)
[1] 何邦才.大數(shù)據(jù)技術(shù)下企業(yè)信息采集技術(shù)研究[J].無線互聯(lián)科技,2019(4):58-59.
[2] 方中純,趙江鵬.基于Flume和HDFS的大數(shù)據(jù)采集系統(tǒng)的研究和實現(xiàn)[N].內(nèi)蒙古科技大學(xué)學(xué)報,2018(9):153-155.
[3] 馬永,吳躍,何李囡.基于Prometheus的基礎(chǔ)軟硬件全鏈路監(jiān)控設(shè)計和實現(xiàn)[J].電子技術(shù)與軟件工程,2019(24):39-40.
[4] 林蒼.基于flume的日志收集統(tǒng)計系統(tǒng)[D].福建:廈門大學(xué),2013(7):13.
[5] 張小龍.基于Flume的XML數(shù)據(jù)自動收集系統(tǒng)[J].科學(xué)技術(shù)與工程,2013(13):9062-9064.
[6] 陳曉宇.深入淺出Prometheus:原理、應(yīng)用、源碼與拓展詳解[M].北京:電子工業(yè)出版社,2019:60-77.
[7] JULIUS V. Prometheus monitoring system best practices and common pitfalls[C]. QCon北京2018大會, 2019.
作者簡介:
王曉鋒(1989-),男,本科,工程師.研究領(lǐng)域:軟件研發(fā),大數(shù)據(jù)運維.
馬麗麗(1982-),女,本科,高級工程師.研究領(lǐng)域:軟件開發(fā).