本文根據高效運維專家羣友文章整理併發布。歡迎關注「高效運維」公衆號,以搶先賞閱誠意滿滿的各類原創文章。html
陳浩
Apache Eagle Committer 和 PMC 成員,eBay 分析平臺基礎架構部門高級軟件工程師,負責Eagle的產品設計、技術架構、核心實現以及開源社區推廣等。node
日前,eBay公司隆重宣佈正式向開源業界推出分佈式實時安全監控方案:Apache Eagle,該項目已於2015年10月26日正式加入Apache基金會成爲孵化器項目。ios
http://goeagle.io
Apache Eagle提供一套高效分佈式的流式策略引擎,具備高實時、可伸縮、易擴展、交互友好等特色,同時集成機器學習對歷史模型訓練創建用戶畫像以實現智能實時地保護Hadoop生態系統中大數據的安全。git
【小編補充】本文做者兼帥哥@陳浩同窗將於 GOPS 2016 全球運維大會·深圳站 就此主題作專題演講。這也是Apache Eagle首次公開演講。如需報名參加本次大會,請查閱文末相關信息。github
目前,Eagle的數據行爲監控系統已經部署到一個擁有2500多個節點的Hadoop集羣之上,用以保護數百PB數據的安全,並正計劃於今年年末以前擴展到其餘上十個Hadoop集羣上,從而覆蓋eBay全部主要Hadoop的10000多臺節點。算法
在咱們的生產環境中,咱們已針對HDFS、Hive 等集羣中的數據配置了一些基礎的安全策略,並將於年末以前不斷引入更多的策略,以確保重要數據的絕對安全。數據庫
目前,Eagle的策略涵蓋多種模式,包括從訪問模式、頻繁訪問數據集,預約義查詢類型、Hive 表和列、HBase 表以及基於機器學習模型生成的用戶Profile相關的全部策略等。apache
同時,咱們也有普遍的策略來防止數據的丟失、數據被拷貝到不安全地點、敏感數據被未受權區域訪問等。Eagle策略定義上極大的靈活性和擴展性使得咱們將來能夠輕易地繼續擴展更多更復雜的策略以支持更多多元化的用例場景。編程
隨着大數據的發展,愈來愈多的成功企業或者組織開始採起數據驅動商業的運做模式。在eBay,咱們擁有數千名工程師、分析師和數據科學家,他們天天訪問分析數PB級的數據,覺得咱們的用戶帶來無與倫比的體驗。在全球業務中,咱們也普遍地利用海量大數據來鏈接咱們數以億計的用戶。json
近年來,Hadoop已經逐漸成爲大數據分析領域最受歡迎的解決方案,eBay也一直在使用Hadoop技術從數據中挖掘價值,例如,咱們經過大數據提升用戶的搜索體驗,識別和優化精準廣告投放,充實咱們的產品目錄,以及經過點擊流分析以理解用戶如何使用咱們的在線市場平臺等。
目前,eBay的Hadoop集羣總節點數據超過10000多個,存儲容量超過170PB,活躍用戶超過2000多。如今相關規模還在不斷增加中,同時爲了支持多元化需求,咱們引入愈來愈多樣的數據存儲和分析方案,好比Hive、MapReduce、Spark和HBase等,隨之帶來的管理和監控的挑戰愈來愈嚴峻,數據安全問題亦是其中最重要的之一。
大數據時代,安全問題開始變得空前的關鍵,特別eBay做爲全球領先的電子商務公司,咱們必須保證Hadoop中用戶數據的絕對安全。
一般咱們的安全措施根據以下幾點:訪問控制、安全隔離、數據分類、數據加密以及實時數據行爲監控。
然而通過普遍的嘗試和研究,咱們意識到沒有任何已經存在的產品或者解決方案,可以充分知足咱們面臨海量實時數據流和多元化用例場景下數據行爲監控的需求。爲了逾越這道鴻溝,eBay決定從頭開始構建Eagle。
「Eagle 是開源分佈式實時Hadoop數據安全方案,支持數據行爲實時監控,能當即監測出對敏感數據的訪問或惡意的操做,並當即採起應對的措施」
咱們相信Eagle將成爲Hadoop數據安全領域的核心組件之一,所以咱們決定將它的功能分享給整個社區。
目前咱們已經將Eagle捐贈給Apache軟件基金會做爲Apache孵化器項目開源,指望可以同開源社區一同協做開發,使得Eagle不斷髮展壯大,共同知足開源社區中更普遍的需求。
Eagle的數據行爲監控方案可用於以下幾類典型場景:
監控Hadoop中的數據訪問流量
檢測非法***和違反安全規則的行爲
檢測並防止敏感數據丟失和訪問
實現基於策略的實時檢測和預警
實現基於用戶行爲模式的異常數據行爲檢測
Eagle具備以下特色:
高實時:
咱們充分理解安全監控中高度實時和快速反應的重要性,所以設計Eagle之初,咱們竭盡量地確保能在亞秒級別時間內產生告警,一旦綜合多種因素確訂爲危險操做,當即採起措施阻止非法行爲。
可伸縮:
在eBay,Eagle 被部署在多個大型Hadoop集羣上,這些集羣擁有數百PB的數據,天天有8億以上的數據訪問時間,所以Eagle必須具備處理海量實時數據的高度可伸縮能力。
簡單易用:
可用性也是Eagle產品的核心設計原則之一。經過Eagle的Sandbox,使用者僅需數分鐘即可以設置好環境並開始嘗試。爲了使得用戶體驗儘量簡單,咱們內置了許多很好的例子,只需簡單地點擊幾步鼠標,即可以輕鬆地完成策略地建立和添加。
用戶Profile:
Eagle內置提供基於機器學習算法對Hadoop中用戶行爲習慣創建用戶Profile的功能。咱們提供多種默認的機器學習算法供你選擇用於針對不一樣HDFS特徵集進行建模,經過歷史行爲模型,Eagle能夠實時地檢測異經常使用戶行爲併產生預警。
開源:
Eagle一直根據開源的標準開發,並構建於諸多大數據領域的開源產品之上,所以咱們決定以Apache許可證開源Eagle,以回饋社區,同時也期待得到社區的反饋、協做與支持。
Eagle提供高度可擴展的編程API,能夠支持將任何類型的數據源集成到Eagle的策略執行引擎中。例如:
在Eagle HDFS審計事件(Audit)監控模塊中,經過Kafka來實時接收來自Namenode Log4j Appender 或者 Logstash Agent 收集的數據;
在Eagle Hive 監控模塊中,經過YARN API 收集正在運行Job的Hive查詢日誌,並保證比較高的可伸縮性和容錯性。
流處理API(Stream Processing API):Eagle 提供獨立於物理平臺而高度抽象的流處理API,目前默認支持Apache Storm,可是也容許擴展到其餘任意流處理引擎,好比Flink 或者 Samza等。
該層抽象容許開發者在定義監控數據處理邏輯時,無需在物理執行層綁定任何特定流處理平臺,而只需經過複用、拼接和組裝例如數據轉換、過濾、外部數據Join等組件,以實現知足需求的DAG(有向無環圖),同時,開發者也能夠很容易地以編程地方式將業務邏輯流程和Eagle策略引擎框架集成起來。
Eagle框架內部會將描述業務邏輯的DAG編譯成底層流處理架構的原生應用,例如Apache Storm Topology 等,從事實現平臺的獨立。
如下是一個Eagle如何處理事件和告警的示例:
StormExecutionEnvironment env =
ExecutionEnvironmentFactory.getStorm(config); // storm env
StreamProducer producer = env.newSource(new
KafkaSourcedSpoutProvider().getSpout(config)).renameOutputFields(1)
// declare kafka source
.flatMap(new AuditLogTransformer()) // transform event
.groupBy(Arrays.asList(0)) // group by 1st field
.flatMap(new UserProfileAggregatorExecutor()); // aggregate one-hour data by user
.alertWithConsumer(「userActivity「,」userProfileExecutor「) // ML policy evaluation env.execute(); // execute stream processing and
alert
告警框架(Alerting Framework): Eagle 告警框架由流元數據API、策略引擎服務提供API、策略Partitioner API 以及預警去重框架等組成:
流元數據API:容許用戶聲明事件的Schema,包括事件由哪些屬性構成、每一個屬性的類型,以及當用戶配置策略時如何在運行時動態解析屬性的值等。
策略引擎服務提供API:容許開發者很容易地以插件的形式擴展新的策略引擎。WSO2 Siddhi CEP 引擎是Eagle 優先默認支持的策略引擎,同時機器學習算法也可做爲另外一種策略引擎執行。
擴展性:Eagle的策略引擎服務提供API容許你插入新的策略引擎
public interface PolicyEvaluatorServiceProvider { public String
getPolicyType(); // literal string to identify one type of
policy public Class<? extends PolicyEvaluator> getPolicyEvaluator();
// get policy evaluator implementation public List
getBindingModules(); // policy text with json format to object
mapping } public interface PolicyEvaluator { public void
evaluate(ValuesArray input) throws Exception; // evaluate input event
public void onPolicyUpdate(AlertDefinitionAPIEntity newAlertDef); //
invoked when policy is updated public void onPolicyDelete(); //
invoked when policy is deleted }
策略 Partitioner API:容許策略在不一樣的物理節點上並行執行。也容許你自定義策略Partitioner類。這些功能使得策略和事件徹底以分佈式的方式執行。
可伸縮性:Eagle 經過支持策略的分區接口來實現大量的策略可伸縮併發地運行
public interface PolicyPartitioner extends Serializable { int
partition(int numTotalPartitions, String policyType, String policyId);
// method to distribute policies }
a可伸縮的Eagle策略執行框架
Eagle 支持根據用戶在Hadoop平臺上歷史使用行爲習慣來定義行爲模式或用戶Profile的能力。
擁有了這個功能,不須要在系統中預先設置固定臨界值的狀況下,也能夠實現智能地檢測出異常的行爲。Eagle中用戶Profile是經過機器學習算法生成,用於在用戶當前實時行爲模式與其對應的歷史模型模式存在必定程度的差別時識別用戶行爲是否爲異常。
目前,Eagle內置提供如下兩種算法來檢測異常,分別爲特徵值分解(Eigen-Value Decomposition)和 密度估計(Density Estimation)。
這些算法從HDFS 審計日誌中讀取數據,對數據進行分割、審查、交叉分析,週期性地爲每一個用戶依次建立Profile 行爲模型。一旦模型生成,Eagle的實時流策略引擎可以近乎實時地識別出異常,分辨當前用戶的行爲可疑的或者與他們的歷史行爲模型不相符。
下圖簡單描述了目前Eagle中用戶Profile的離線訓練建模和在線實時監測的數據流:
用戶Profile 離線訓練以及異常監測架構
基於用戶 Profile的Eagle在線實時異常監測是根據Eagle的通用策略框架實現的,用戶Profile只是被定義爲Eagle系統中一個策略而已,用戶Profile的策略是經過繼承自Eagle統一策略執行接口的機器學習Evaluator來執行,其策略的定義中包括異常檢測過程當中須要的特徵向量等(在線檢測與離線訓練保持一致)。
此外,Eagle 提供自動訓練調度器,可根據文件或者UI配置的時間週期和粒度來調度這個基於Spark的離線訓練程序,用於批量建立用戶Profile和行爲模型,默認該訓練系統以每個月的頻率更新模型,模型粒度爲一分鐘。
Eagle 內置的機器學習算法基本思想以下:
該算法的基本思想是根據檢測的訓練樣本數據針對每一個用戶計算出對應的機率密度分佈函數。
首先,咱們對訓練數據集的每一個特徵均值標準化,標準化可使得全部數據集轉化爲相同尺度。而後,在咱們的隨機變量機率分佈估計中,咱們採用高斯分佈式函數來計算機率密度。假設任意特徵彼此相互獨立,那麼最終的高斯機率密度就能夠經過分解各個特徵的機率密度而計算獲得。
在線實時檢測階段,咱們能夠首先計算出每一個用戶實時行爲的機率。若是用戶出現當前行爲的可能性低於某個臨界值,咱們標識爲異常警告,而這個臨界值徹底由離線訓練程序經過稱爲「馬修斯相關係數」(Mathews Correlation Coefficient)的方法計算而得。
c 單一維度上用戶行爲直方圖
該算法中,咱們認爲生成用戶Profile的主要目的是爲了從中發現有價值的用戶行爲模式。爲了實現這個目的,咱們能夠考慮對特徵依次進行組合,而後觀察他們相互之間是如何影響的。
當數據集很是巨大時,正如一般咱們所遇到的場景,因爲正常模式的數量很是之多,以致於特徵集的異常的模式很容易被忽視。也因爲正常的行爲模式一般處於很是低維的子空間內,所以咱們也許能夠經過下降數據集的維度來更好的理解用戶的真正的行爲模式。
該方法一樣能夠對於訓練數據集進行降噪。根據對大量用戶特徵數據方差的進行運算,一般在咱們的用例場景中選取方差爲95%做爲基準,咱們能夠獲得方差爲95%的主成分的數量爲k,所以咱們將前k個主成分認爲是用戶的正常子空間,而剩下的(n-k)個主成分則被視爲異常子空間。
當線實時異常檢測時,若是用戶行爲模式位於正常子空間附近,則認爲該行爲正常,不然,若是用戶行爲模式位於異常子空間附近,則會當即報警,由於咱們相信一般用戶行爲通常應該位於正常子空間內。至於如何計算用戶當前行爲接近正常仍是異常子空間,咱們採用的是歐氏距離法(Euclidian
distance method)。
d 展現重要的用戶行爲模式成分
策略管理器:Eagle策略管理器提供交互友好的用戶界面和REST
API 供用戶輕鬆地定義和管理策略,一切只需幾回鼠標點擊而已。Eagle的用戶界面使得策略的管理、敏感元數據的標識和導入、HDFS或Hive 的資源瀏覽以及預警儀表等功能都很是易於使用。
Eagle 策略引擎默認支持WSO2的Siddhi CEP引擎和機器學習引擎,如下是幾個基於Siddi CEP的策略示例:
單一事件執行策略(用戶訪問Hive中的敏感數據列)
from hiveAccessLogStream[sensitivityType==’PHONE_NUMBER’] select *
insert into outputStream;
基於窗口的策略(用戶在10分鐘內訪問目錄 /tmp/private 多餘 5次)
hdfsAuditLogEventStream[(src ==
‘/tmp/private’)]#window.externalTime(timestamp,10 min) select user,
count(timestamp) as aggValue group by user having aggValue >= 5 insert
into outputStream;
Eagle 提供類SQL的REST API用來實現針對海量數據集的綜合計算、查詢和分析的能力,支持例如過濾、聚合、直方運算、排序、top、算術表達式以及分頁等。Eagle優先支持HBase 做爲其默認數據存儲,可是同時也支持基JDBC的關係型數據庫。
特別是當選擇以HBase做爲存儲時,Eagle便原生擁有了HBase存儲和查詢海量監控數據的能力,Eagle 查詢框架會將用戶提供的類SQL查詢語法最終編譯成爲HBase 原生的Filter 對象,並支持經過HBase Coprocessor進一步提高響應速度。
query=AlertDefinitionService[@dataSource=」hiveQueryLog」]{@policyDef}&pageSize=100000
過去兩年中,在eBay 除了被用於數據行爲監控之外,Eagle 核心框架還被普遍用於監控節點健康情況、Hadoop應用性能指標、Hadoop
核心服務以及整個Hadoop集羣的健康情況等諸多領域。
咱們還創建一系列的自動化機制,例如節點修復等,幫助咱們平臺部門極大得節省了咱們人工勞力,並有效地提高了整個集羣資源地利用率。
如下是咱們目前正在開發中地一些特性:
擴展機器學習模型對Hive和HBase支持
提供高度可擴展的API,以方便集目前業界普遍使用的其餘監控預警平臺或者工具,如Ganglia和Nagios等,同時支持敏感數據的導入,如與Dataguise
集成等。
此外,咱們正在積極整理其餘Hadoop 集羣監控模塊,指望在後續發佈中開源給社區,例如:
HBase 監控
Hadoop 做業性能監控
Hadoop 節點監控
感謝如下來自Apache Eagle社區和eBay公司的聯合做者們對本文的貢獻:
張勇,Apache Eagle Committer和首席架構師,eBay Sr. MTS 資深架構師
孫立斌,Apache Eagle Committer和PMC,eBay 軟件工程師
蔣吉林,Apache Eagle Committer和PMC,eBay 軟件工程師
趙晴雯,Apache Eagle Committer和PMC,eBay 軟件工程師
eBay 分析平臺基礎架構部(Analytics Data Infrastructure)是eBay的全球數據及分析基礎架構部門,負責eBay在數據庫、數據倉庫、Hadoop、商務智能以及機器學習等各個數據平臺開發、管理等,支持eBay全球各部門運用高端的數據分析解決方案做出及時有效的做業決策,爲遍及全球的業務用戶提供數據分析解決方案。
Apache Eagle 文檔:
http://goeagle.io
Apache Eagle 源碼:
http://github.com/ebay/eagle
Apache Eagle 項目:
http://incubator.apache.org/projects/eagle.html