Apache Eagle搭建測試

eagle服務器需提前安裝npm。

1、官網下載src包
http://eagle.apache.org/docs/download.html
2、編譯,按照官網的操作。
這裏寫圖片描述
編譯成功後,在eagle-assembly/target下找到 apache-eagle-0.4.0-incubating-bin.tar.gz
3、安裝eagle
將第二步中獲得的tar包拷貝到安裝路徑下解壓即可
4、修改配置文件
a 、eagle.env.sh 在bin目錄下
這裏寫圖片描述
主要修改java路徑以及storm nimbus地址以及eagle服務地址和端口,其它可不做修改。
b、eagle-scheduler.conf 在conf目錄下
這裏寫圖片描述 修改內容如上,包括url、nimbushost、jarFile。下面的mailHost是郵件服務器地址,當eagle全部搭建完畢後可以對監控項目告警發郵件,這裏就是配置的郵件服務器地址。這裏要注意下配置的郵件服務器的host要更新到storm集羣的節點中去(嚴格的說是storm啓動計算任務的節點即可,後面會提到提交拓補,提交完後在storm UI上找一個計算節點,要保證這臺計算節點的/etc/hosts配置了郵件服務器,否則發不出郵件)。其它用戶名密碼等可以不做修改。
c、eagle-service.conf 在conf目錄下
這裏寫圖片描述
這裏可以配置hbase或者mysql。配置hbase的話後面會有問題沒解決,且不容易查看數據。所以配置成mysql。這裏storage-connection-url最好配置爲”jdbc:mysql://ip:port/database?autoReconnect=true”,,因爲測試過程中第一天沒問題,第二天來就會出現mysql斷開連接的現象。如果出現斷開連接現象,註銷登錄再次登錄即可。
d、eagle-topology-init.sh 在bin目錄下
這裏寫圖片描述
我這裏只修改了這兩項。在文件開始就可以找到這兩項。主要修改了hdfs的地址和hbase的zookeeper。當然,也可以不在這裏設置。等環境安裝完畢後,可以在頁面中設置。這裏涉及到namenode的HA問題,後面會提到。

5、啓動服務。
bin目錄下執行 ./eagle-service.sh start
./eagle-topoloty-init.sh
完後已經可以從瀏覽器中查看,且mysql中建立了很多表。但是頁面中沒有內容,需要後續添加。

6、進入到apache-eagle-0.4.0-incubating下的example文件夾下 找到eagle-sandbox-starter.sh。官網中直接就執行了該shell腳本,可以看到腳本中默認認爲storm程序安裝在本機上,所以如果storm是集羣的話,且nimbus不在這檯安裝eagle的機器上的話,是無法執行成功的。所以我們這裏打開該腳本,運行其中部分操作即可。當然前提是storm、kafka都安裝好了。
這裏寫圖片描述

其中有4個shell腳本。前兩個已經執行過了,所以只要執行後兩個就行。執行完畢後,再次刷新web頁面,就會發現多了很多東西。單機右上角的admin,選擇management可以看到以下頁面
這裏寫圖片描述
這裏有點擊hdfsAuditLog前面的設置符號,就可以設置參數,與之前的eagle-topology-init.sh中的項對應,之前說的就是這裏修改。我在這裏是寫死了defaultFs的(classification.fs.defaultFS=hdfs://test-nn1:9000),因爲配置成HA的需要添加如下內容

classification.fs.defaultFS=hdfs://pin-cluster1
classification.dfs.nameservices=pin-cluster1
classification.dfs.ha.namenodes.pin-cluster1=testnn1,testnn2
classification.dfs.namenode.rpc-address.pin-cluster1.testnn1=test-nn1:9000
classification.dfs.namenode.rpc-address.pin-cluster1.testnn2=test-nn2:9000
classification.dfs.client.failover.proxy.provider.pin-cluster1=org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider

這裏會出現問題,系統不認識”-“,所以我就寫死了。

hiveQueryLog中配置:
classification.accessType=metastoredb_jdbc
classification.password=123456
classification.user=root
classification.jdbcDriverClassName=com.mysql.jdbc.Driver
classification.jdbcUrl=jdbc:mysql://10.140.60.53:3306/hive?createDatabaseIfNotExist=true

hbaseQueryLog中配置:
classification.hbase.zookeeper.property.clientPort=21818
classification.hbase.zookeeper.quorum=rm1,rm2,10-140-60-50

oozie沒用到所以沒配置

7、將namenode審計日誌打入kafka
可以採用修改log4j或者安裝logstash的方式。
log4j文件在${HADOOP_HOME}/etc/hadoop下。在該文件中添加:

log4j.appender.KAFKA_HDFS_AUDIT=org.apache.eagle.log4j.kafka.KafkaLog4jAppender
log4j.appender.KAFKA_HDFS_AUDIT.Topic=hdfslog
log4j.appender.KAFKA_HDFS_AUDIT.BrokerList=rm1:9092,rm2:9092,test-nn1:9092,test-nn2:9092,test:9092
log4j.appender.KAFKA_HDFS_AUDIT.KeyClass=org.apache.eagle.log4j.kafka.hadoop.AuditLogKeyer
log4j.appender.KAFKA_HDFS_AUDIT.Layout=org.apache.log4j.PatternLayout
log4j.appender.KAFKA_HDFS_AUDIT.Layout.ConversionPattern=%d{ISO8601} %p %c{2}: %m%n
log4j.appender.KAFKA_HDFS_AUDIT.ProducerType=async

其次在hadoop-env.sh中的HADOOP_NAMENODE_OPTS中加入:
-Dhdfs.audit.logger=INFO,DRFAAUDIT,KAFKA_HDFS_AUDIT

完後重啓即可。
這裏要記下Topic的名字,後面需要用到。BrokerList最好也寫全部的kafka服務器。
修改log4j的方式的缺點就是原來的審計日誌不再落盤而是直接進kafka,還有namenode需要重啓,對於集羣規模較大的情況,重啓需要很久。

另外一種手段是使用logstash來收集日誌。
下載logstash安裝包。我使用的是logstash-2.4.0.tar.gz,直接解壓就可以使用。需要在active的namenode上安裝logstash軟件。解壓後cd到conf目錄下,新增加一個配置文件hdfs-audit.conf並編輯,加入如下內容:

input {  
      file {  
       type => "hdfs-audit"  
           path => "/data/hadoop/data12/hadoop-logs/hdfs-audit.log"
           start_position => beginning
           ignore_older => 0
           sincedb_path => "/data/hadoop/data12/hadoop-logs/logstash"
       }  
  }  

  output {  
      if [type] == "hdfs-audit" {  
          kafka {  
              bootstrap_servers => "rm1:9092,rm2:9092,test-nn1:9092,test-nn2:9092,test:9092"  
              topic_id => "hdfslog" 
              timeout_ms => 10000  
              retries => 3  
              client_id => "hdfs-audit"
              workers => 4
          } 
                   # stdout { codec => rubydebug }
      }  
  }

input參數:
path表示審計日誌目錄(可以不寫到文件,只寫路徑,這樣的話會收集目錄下所有文件。這種情況下可以配合下面的ignore_older參數,表示多久之前的文件不收集)
start_position表示收集日誌的起始位置。beginning表示從頭開始收集,end表示從末尾收集最新的
sincedb_path會記錄logstash收集日誌處理到的位置信息

output參數:
bootstrap_servers表示kafka集羣機器ip和端口,有多少寫多少

另外建立topic的時候,一開始指定分區數是2,output中沒有加worker參數,出現了丟數的問題,也就是審計日誌並沒有全部打入kafka。後來將分區數變爲了1,worker參數也沒有設置,解決了這個問題。

使用logstash的好處是,不用重啓namenode,且原來的審計日誌依然會落盤。缺點就是增加了維護成本,需要額外維護logstash進程。

8、進入 conf文件夾下,打開sandbox-hdfsAuditLog-application.conf文件,尤其注意topic要和之前log4j中的一致。郵箱服務器如果要配置這裏也可以配置。不過這裏得多加內容,即郵箱服務器認證的用戶名和密碼以及開啓認證,系統默認的配置文件中不包含這三項項,需要自己手動添加。還有其它的添加項可以去AlertEmailSender.java類中查看。之前提到過的,再強調一下下,eagle系統中發送郵件的代碼在storm計算節點執行的,而不是在搭建eagle的服務器上執行的,所以一定要在計算節點上配置/etc/hosts。
{
“envContextConfig” : {
“env” : “storm”,
“mode” : “cluster”,
“topologyName” : “test3-hdfsAuditLog-topology”,
“stormConfigFile” : “storm.yaml”,
“parallelismConfig” : {
“kafkaMsgConsumer” : 1,
“hdfsAuditLogAlertExecutor*” : 1
}
},
“dataSourceConfig”: {
“topic” : “hdfslog”,
“zkConnection” : “rm1:21818,rm2:21818,test:21818/kafka-rm”,
“brokerZkPath” : “/brokers”,
“zkConnectionTimeoutMS” : 15000,
“fetchSize” : 1048586,
“deserializerClass” : “org.apache.eagle.security.auditlog.HdfsAuditLogKafkaDeserializer”,
“transactionZKServers” : “rm1,rm2,test”,
“transactionZKPort” : 21818,
“transactionZKRoot” : “/consumers”,
“consumerGroupId” : “eagle.hdfsaudit.consumer”,
“transactionStateUpdateMS” : 2000
},
“alertExecutorConfigs” : {
“hdfsAuditLogAlertExecutor” : {
“parallelism” : 1,
“partitioner” : “org.apache.eagle.policy.DefaultPolicyPartitioner”,
“needValidation” : “true”
}
},
“eagleProps” : {
“site” : “sandbox”,
“application”: “hdfsAuditLog”,
“dataJoinPollIntervalSec” : 30,
“mailHost” : “mailHost.com”,
“mailSmtpPort”:”25”,
“mailDebug” : “true”,
“mailSmtpAuth”: “true”,
“mailSmtpUser”:”username”,
“mailSmtpPassword”:”password”,
“eagleService”: {
“host”: “rm1”, —-eagle部署的服務器地址,不能寫成Localhost
“port”: 9099
“username”: “admin”,
“password”: “secret”
}
},
“dynamicConfigSource” : {
“enabled” : true,
“initDelayMillis” : 0,
“delayMillis” : 30000
}
}

修改完畢後進入bin文件夾,執行./eagle-topology.sh start 該命令默認執行hdfsAuditLog拓補。
查看storm web頁面,查看kafka topic。使用 kafka-console-consumer.sh –zookeeper rm1:21818/kafka-rm –topic hdfslog命令(zookeeper需要修改成自己的zookeeper地址),發現審計日誌已經打入topic。

這裏寫圖片描述
storm頁面中也正確。
這裏寫圖片描述
9、測試
進入eagle的home頁面,點擊DAM下的HDFS,則出現hdfs相關的policy。
這裏寫圖片描述
點擊policy name進入可以修改該policy,根據自己的需求完成告警任務,如:
這裏寫圖片描述
我在這裏設置了cmd爲open或者mkdirs,目錄爲/tmp/a.txt /tmp/private /aa/write sensititityType爲PRIVATE

點擊next出現下圖設置。這裏的Notification可以選擇eagleStore或者郵件或者kafka。選擇第一個,就會在系統中的Alerts(左側導航欄點擊Alerts)中生成記錄查看,第二個會發郵件,第三個進kafka。我選擇了第一個。 這裏一定要選擇一個,否則無法收到任何報警,會讓人錯認爲系統未搭建成功。
這裏寫圖片描述
這樣當命令行執行hadoop fs -cat /tmp/a.txt這樣的命令時,就會產生告警
在左側導航欄的Alerts中可以查看
這裏寫圖片描述
其中sensitityType可以在頁面中設置,點擊左側導航欄的Classification,會出現hdfs層面的目錄,比如,進入/tmp文件夾下,可以設置文件。點擊最右邊的眼睛圖標可以設置。
這裏寫圖片描述
10、其它
上面寫的是hdfs層面的命令操作,hive這塊大體差不多。
需要修改的conf文件變成了 sandbox-hiveQueryLog-application.conf

{
“envContextConfig” : {
“env” : “storm”,
“mode” : “cluster”,
“topologyName” : “sandbox-hiveQueryRunning-topology”,
“stormConfigFile” : “storm.yaml”,
“parallelismConfig” : {
“msgConsumer” : 2
}
},
“dataSourceConfig”: {
“flavor” : “stormrunning”,
“zkQuorum” : “rm1:21818,rm2:21818,test:21818/kafka-rm”,
“zkRoot” : “/jobrunning”,
“zkSessionTimeoutMs” : 15000,
“zkRetryTimes” : 3,
“zkRetryInterval” : 2000,
“RMEndPoints” : “http://rm1:50030/“, ——resourcemanager地址
“HSEndPoint” : “http://rm2:19888/“, ——jobhistory地址
“partitionerCls” : “org.apache.eagle.job.DefaultJobPartitionerImpl”
},
“eagleProps” : {
“site” : “sandbox”,
“application” : “hiveQueryLog”,
“mailHost” : “atom.xyz.com”,
“mailSmtpPort”:”25”,
“mailDebug” : “true”,
“eagleService”: {
“host”: “rm1”,
“port”: 9099,
“username”: “admin”,
“password”: “secret”
}
},
“alertExecutorConfigs” : {
“hiveAccessAlertByRunningJob” : {
“parallelism” : 1,
“partitioner” : “org.apache.eagle.policy.DefaultPolicyPartitioner”,
“needValidation” : “true”
}
},
“dynamicConfigSource” : {
“enabled” : true,
“initDelayMillis” : 0,
“delayMillis” : 30000,
“ignoreDeleteFromSource” : true
}
}

storm中建立拓補需要指定類,之前提到默認是hdfs。到bin目錄下執行:
./eagle-topology.sh –main org.apache.eagle.security.hive.jobrunning.HiveJobRunningMonitoringMain –config ${EAGLE_HOME}/conf/sandbox-hiveQueryLog-application.conf start 。

測試操作同理,進入eagle的home頁面,DAM下選擇hive,出現hive的policy(如果沒有可以新建立),修改設置方法同hdfs policy。
policy設置完之後,可以進入hive客戶端,執行命令查看Alerts

最後,在審計日誌收集這塊,最後還將打入kafka中的審計日誌存入到了es中,並使用kibana展示。挑選了另外一臺服務器安裝另外一個logstash來實現。步驟與namenode上的logstash安裝步驟一致,配置文件內容需要修改成如下:

input {  
      kafka { 
           zk_connect => "test:21818,rm1:21818,rm2:21818/kafka-rm"
           topic_id => "hdfslog"
           codec => plain
           reset_beginning => false # boolean (optional), default: false
           consumer_threads => 5  # number (optional), default: 1
           decorate_events => true # boolean (optional), default: false
       }  
  }  

output {
          elasticsearch {
              hosts => "elasticsearch-cluster:9200"
              index => "sdf-hdfs-audit-%{+YYYY.MM.dd}"
          }
          #stdout { codec => rubydebug } 
  }  

具體參數意義就不解釋了。啓動方式也相同。就是注意zk_connect的配置需要跟sandbox-hdfsAuditLog-application.conf配置文件中的zkConnect相同。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章