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源创计划”,欢迎正在阅读的你也加入,一起分享。

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