0859-7.1.6-如何對Ranger審計日誌進行調優

作者:唐輝

1.文檔編寫目的



什麼是Ranger Audit?Ranger 審計功能  ,審計功能模塊可以幫助我們更好的管理集羣組件,例如 HDFS、HBase、Hive 等數據資源的訪問,更快的定位權限導致的應用問題。並且使用 Ranger 控制權限的同時也可以很好地監控、查詢用戶的歷史操作,做到有證可查,有理可依。


而在CDP目前的使用存在着部分問題需要處理,Ranger 的審計日誌信息存儲在Solr,出現如Solr數據目錄空間佔用過高,Solr shard連接超時亦或者如下數據量過大時,會導致Ranger Audit 界面加載緩慢,甚至如下圖無法加載出來情況。 


本文主要通過從Solr 存儲目錄、數據保留時長和調整ranger_audits 的shard 數量3個方面來進行Ranger Audit調優。


  • 測試環境

1.CDP7.1.6 、啓用Kerberos


2.操作步驟



2.1修改Solr存儲目錄


在CDP7.1.5之前的版本中,集羣中Solr 的索引數據文件存儲在HDFS中。雖然能夠有效的解決索引文件快速增長的問題,但是同樣因爲存在HDFS中的緣故,並且需要頻繁的更新,導致了性能上的問題(比如Ranger Audit 日誌很久的加載不出來的情況)。當集羣中的Ranger審計信息比較大時,會導致因爲寫入延遲的問題而造成spool 目錄中日誌(目錄在/var/log/[service]/audit/solr/spool)的堆積。


因此在CDP7.1.5以後,CDH中已將Solr 的數據目錄修改爲本地目錄,默認在/var/lib/solr-infra 目錄,建議在安裝的時候修改/var/lib/solr-infra 到存儲更大數據目錄中。如果集羣以及安裝好,並且數據目錄不在本地或者未修改存儲路徑,修改步驟如下,參考文檔[1]:


情況1:修改本地目錄(建議將Solr 數據放在本地)

如下圖中,當前我們CDP7.1.6 的本地數據目錄在/var/lib/solr-infra,並且已有部分數據,建議先進行備份,然後將本地的數據目錄/var/lib/solr-infra 拷貝到/data3 目錄下,然後重啓生效即可

cp -rp /var/lib/solr-infra /var/lib/solr-infra-bak


情況2:將本地存儲目錄修改到HDFS上 (從HDFS到本地只有step2 步驟配置文件有差異,其餘步驟一致。)

如果我們想把本地的數據目錄遷移到HDFS上,操作步驟如下:


step 1、創建HDFS備份數據目錄

hdfs dfs -mkdir /solr-backups 
hdfs dfs -chown solr:solr /solr-backups


step 2、導出ranger_audits 配置,並修改/tmp/ranger_audits/conf下的solrconfig.xml

solrctl instancedir --get ranger_audits /tmp/ranger_audits
#如果有使用Atlas 參考ranger_audits,本文只講述Ranger Audit,示例如下,具體可參考連接[1]
#如下是本地數據目錄找到如下配置文件,如果是HDFS到本地則配置相反,如圖片中圈出的註釋部分
  <directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}">
  <lockType>${solr.lock.type:native}</lockType>
修改爲:
<directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:org.apache.solr.core.HdfsDirectoryFactory}">
<lockType>${solr.lock.type:hdfs}</lockType>


如果配置與下圖中的配置不一致,請添加以下屬性,參考[1]


step 3、然後進行配置更新(此處只修改了ranger_audits 集合信息到HDFS上):

cd /var/run/cloudera-scm-agent/process/`ls -lrt /var/run/cloudera-scm-agent/process/ | awk '{print $9}' |grep SOLR_SERVER | tail -1`/

solrctl --jaas jaas.conf instancedir --update ranger_audits /tmp/ranger_audits

注意:重啓之前建議進行數據備份:


step 4、備份數據到HDFS 目錄上

curl -k --negotiate -u : "http://cdh02.fayson.com:8993/solr/admin/collections?action=BACKUP&name=ranger_audits_backup2&collection=ranger_audits&location=hdfs://cdh01.fayson.com:8020/solr-backups"


如果需要備份其他collection 也類似如下:


並重啓Solr Server 後發現有hdfs 中ranger_audits信息了,但是數據量目前對不上,需要先進行刪掉ranger_audits,然後從備份中恢復


step5、從備份的數據中進行恢復:

#恢復數據方法1(推薦):使用如下命令,參數解釋如下
# --restore <collection name>
# -l <location path>
# -b <backup name>
# -i <request id, 自行填,勿重複>
solrctl collection --restore ranger_audits -l hdfs://cdh01.fayson.com:8020/solr-backups -b ranger_audits_backup2 -i 1234
#恢復數據方法2:
#或者如下也可以執行恢復:
curl -k --negotiate -u : "http://cdh02.fayson.com:8993/solr/admin/collections?action=RESTORE&name=ranger_audits_backup2&location=hdfs://cdh01.fayson.com:8020/solr-backups&collection=ranger_audits"


方式1如下(推薦):執行後需要等待數據恢復


方式2如下圖:


恢復數據前需要先刪掉ranger_audits 集合,如果已存在ranger_audits會提示如下異常


通過監控圖表也可以看到數據已恢復


進入Ranger Audit檢查,到此ranger_audits從本地目錄遷移到HDFS已完成


2.2修改Solr 的中ranger_audits 數據保留時長

CDP中Ranger 的審計日誌數據默認存儲在Solr 的ranger_audits  中,默認的保留時長爲90天,對於一個操作頻繁的集羣90天的保留時長的數據量會相當的大,並且數據量一大也會導致在Ranger 中查看審計信息日誌變慢,建議在縮短數據保留時長,比如7天。具體修改操作步驟如下, 參考文檔[2]:


1. 在Solr Server或者Solr Gateway主機上運行以下命令,將 Ranger 審計配置下載到 SolrServer 或 Solr Gateway主機:

 solrctl instancedir --get ranger_audits /tmp/ranger_audits


2. 在文本編輯器中打開以下文件:

 vim /tmp/ranger_audits/conf/solrconfig.xml


找到如下配置,將保留數據時長修改爲7天

<str name="fieldName">_ttl_</str> 
<str name="value">+7DAYS</str>

注意:此處還有一個配置需要修改,Ranger Audits集合的 Solr 文檔中沒有_ttl_字段和_expire_at_字段,在solrconfig.xml ranger_audits config 中設置的 updateRequestProcessorChain 中的處理器順序不正確時,會出現設置的保留 。該問題是請求處理器的順序引起的。TTL 默認邏輯放置應在runUpdateProcessorFactory 之後,它纔會實際執行更新。


修改如下配置的的順序,將如下配置文件移動到到下圖中的位置

<processor class="solr.LogUpdateProcessorFactory"/> 
<processor class="solr.DistributedUpdateProcessorFactory"/> 
<processor class="solr.RunUpdateProcessorFactory"/>


然後執行如下命令更新,注意:更新需要在Solr Server 的process 目錄下執行:

#進入最新的Solr Server process 目錄
cd /var/run/cloudera-scm-agent/process/`ls -lrt /var/run/cloudera-scm-agent/process/ | awk '{print $9}' |grep SOLR_SERVER | tail -1`/
#執行更新
solrctl --jaas jaas.conf instancedir --update ranger_audits /tmp/ranger_audits

使用 Solr 憑據(啓用了kerberos 需要進行認證,否則執行會如下報錯401)重新加載 Ranger_audits 集合,以便該集合可以通過運行以下命令來獲取修改後的配置:


  solrctl collection --reload ranger_audits


然後重啓Solr Server 生效,可以通過命令get 下來配置文件,查看是否已生效 

solrctl instancedir --get ranger_audits /tmp/ranger_audits


注意:更改配置和重新加載集合後新添加的文檔將被自動刪除。但是對於修改配置以前的數據文件需要通過命令手動刪除,如下

curl -v --negotiate -u : "http://cdh02.fayson.com:8993/solr/ranger_audits/update?commit=true" -H "Content-Type: text/xml" --data-binary "<delete><query>evtTime:[* TO NOW-7DAYS]</query></delete>"


也可以通過CM的監控頁面看到數據的減少


當我們清理完部分歷史數據重啓完成後,可以很快速的打開Ranger 的Audit 界面


並且更早之前的數據都已清理



2.3修改ranger_audits 中的shard 的數量


該步驟強烈建議在集羣安裝時配置,在CDP最新版本CDP7.1.6中,ranger_audits 的shards 數量爲1,這種情況下容易因硬件故障或者其他因素導致數據丟失的數量,因此建議配置最少配置爲2,同時Solr Server 服務也必須存在2個。


操作之前建議按照文章2.1中的step 1,進行使用HDFS備份數據,ranger_audits 的shards 數量修改需要刪除已有的ranger_audits集合。然後通過CM 重啓Ranger 自動創建ranger_audits 集合,再通過備份數據恢復。


Infra Solr中應該有2個實例,按照以下屬性設定,就可以讓 Ranger Audit collection,在2個Solr node中都各有2個 shard,互爲主備。在 CM>Ranger>配置中搜索solr 進行修改,並重啓Ranger 生效

- ranger.audit.solr.no.shards: 2
- ranger.audit.solr.max.shards.per.node: 2
- ranger.audit.solr.no.replica: 2


5.文檔總結



在CDP集羣中使用中,相信大部分人在HBase 或者Hive 服務日誌中都遇到Solr ranger_audits集合的告警信息,嚴重的甚至導致默認存放數據目錄 /var/lib/solr-infra或者/var/log/[service]/audit/solr/spool 被寫滿。或者在CDP 7.1.5之前的版本中HDFS 的/solr 目錄佔用空間大的情況。另外也強烈建議以上的配置在集羣安裝時就規劃好,通過上述文檔的調優,相信可以得到有效的解決。

參考文檔:

[1] https://my.cloudera.com/knowledge/Solr-Data-Migration-from-local-FS-to-HDFS-and-vice-versa-for?id=316420[2] https://my.cloudera.com/knowledge/ERROR-Time-to-live-configuration-for-Ranger-Audits-not-Working?id=315204


本文分享自微信公衆號 - Hadoop實操(gh_c4c535955d0f)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

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