{"value":"![image.png](https://dev-media.amazoncloud.cn/11ab9b62d9e840f1b427d503c7a86564_image.png)\n::: hljs-center\n\n本文作者:耿云涛\n\n:::\n\n![image.png](https://dev-media.amazoncloud.cn/a158aabd02f14bc6a7567bf3111faf3b_image.png)\n::: hljs-center\n\n本文作者:葛大力\n\n:::\n\n大数据技术日新月异,数据湖、数据中台、逻辑数据湖、数据编织、数据编排等数据建设理念不断出现、深化,究其根本依然是如何能够将数据规整起来,以统一的规范对数据的脉络进行梳理,形成统一的视图、统一的标准,实现业务层面的数据治理目标。\n\n对于任何一种数据建设理念,数据安全都是绕不开的话题,数据安全的保障也是一个数据平台能否真正交付使用的准入门槛。\n\n数据安全大体从4个维度展开:认证、授权、审计、加密。通过认证确保了用户的身份,严格的授权可以保护数据的访问隐私,审计数据的访问记录,发现可能的非法访问,通过加密确保数据存储持久化与数据传输链路的基础安全。\n\n数据安全的每个维度都是很广泛的主题,本篇文章主要从审计的维度,分享一些Alluxio审计的实操做法以及一些注意事项。\n\nAlluxio作为云原生数据编排平台,可以在面向异构基础设施环境(本地、混合云、公有云)的时候实现高效的数据统一管理编排,服务大数据与AI应用,Alluxio已经被广泛的应用在数据湖、数据中台、逻辑数据湖、数据编织等数据平台的建设架构中,在协助企业/组织解决技术变迁导致的多平台混合架构和数据碎片化、平台适配复杂性等问题上提供了很好地助力。\n\nAlluxio往往会在新的数据平台架构上作为数据的统一访问接口服务层存在,依赖Alluxio的编排能力,实现底层散落在不同地域、不同技术的数据存储平台对上层计算/应用的接口统一、元数据统一,同时,基于Alluxio,可以进一步进行数据的统一治理能力的建设,有效的解决了数据碎片化的问题,以确保数据在应用视角的统一视图、统一标准。\n\n作为数据平台的统一访问接口服务层,Alluxio会承载数据的所有读取和写入行为,那么作为数据访问门户性质的存在,Alluxio记录用户的数据访问行为,并支撑后续对这些用户行为的审计就变得尤为重要。\n\n在开始Alluxio审计日志分析系统的构建阐述之前,首先我们来问两个问题,看看大家是否可以立刻给予答复:\n1. 现在数据湖里的3PB数据,都是经常访问的吗? 过去一周时间内,这些数据访问频率有什么变化吗?\n2. 这些数据有哪些用户在使用呢?这些使用都是合法的吗?如果要变更数据内容、格式、持久化周期,又会影响谁呢?\n上述两个问题的答案就隐含在审计日志里面,审计日志可以完美的记录每个用户每次请求的信息,这些信息是已经发生的事实,是对管理配置的有效验证和补充。有了审计日志,要真正回答上面的两个问题,还需要一套分析系统,利用分析系统对上述问题中隐藏的各项指标进行分析和展示,审计日志分析系统的整体架构图如下:\n\n![image.png](https://dev-media.amazoncloud.cn/93d6cd4e14a64784af67325b79f346b1_image.png)\n\n1. Alluxio 审计日志\nAlluxio的审计日志在整个系统中是数据源性质的存在。Alluxio 支持审计日志功能,Leader Master 通过 audit log 的方式记录用户的行为,从而满足审计、问题回溯分析、用户行为分析以及冷热数据分析等需求。虽然audit log只在Leader Master才真正有记录,但是因为Alluxio Master存在切换的可能,所以,任何一个Master都有可能会生成audit log,都需要收集、分析。\n\n2. 审计日志分析系统\n审计日志分析系统主要包含日志采集、日志存储、日志分析展示以及可能的日志治理几个模块。其中日志采集需要适配数据源,Alluxio的audit log是日志文件,因此一般采用贴着Alluxio Master部署采集Agent的方式实现;日志存储模块可以有多种技术实现方式,不过都要满足日志的明细查看、日志统计分析的存储和计算需要;日志的分析展示模块则负责提供可视化能力,可以基于用户的需要触发数据的查询和展示;日志治理模块主要负责通过数据清洗、转换等方式解决可能存在的数据质量问题,如果日志不存在质量问题,则可以省略此模块。\n\n审计日志分析系统的技术方案可以有多种技术选型,常用的主要是两种:\n\nFlume+Hive/HDFS+Impala/Presto +自定义分析展示系统\nFlume 负责实现日志采集Agent,采集 audit log 到 HDFS;Hive/HDFS+Impala/Presto负责日志的存储和查询计算;自定义分析展示系统则按需实现日志的各种分析、展示的需要。\n\n此方案的优势在于更加灵活、开放,Hive/HDFS的存储,可以承载更加定制化的数据结构、存储格式,也可以承载更加灵活的数据治理、数据计算/分析的需要。\n\n因为要写入Hive/HDFS,以及需要相应的数据转换等,此方案的时效性相对较差,一般用在定时批量模式下,比如小时级的分析等。\n\nELK(Elasticsearch+Logstash+Kibana)\nELK是一套使用比较广的开源日志管理方案,Logstash 负责实现日志采集Agent,采集 audit log 到Elasticsearch;Elasticsearch作为非常优秀的搜索引擎,可以实现写入日志的搜索以及分析等查询计算需求;Kibana则提供日志的可视化分析能力,调用ES的相关接口实现日志的搜索以及DashBoard展示。\n\nELK方案的优势在于各组件都是开源的,不需要系统层面的额外开发,只需要针对日志的格式以及分析需要,进行相关的配置即可。并且,ELK的时效性更好,因为Elasticsearch同时也是一个非常好的OLAP引擎,数据写入后,即可以实现数据的各种分析需要。\n\n同时,ELK方案也受限于固定的组件选型,Elasticsearch可以支撑很好地搜索和OLAP分析的需要,但无法支持进行一些批量分析、算法分析等,同时,如果想进行数据结构的变更,重建索引,实现也比较麻烦。\n\n综上,两种方案有利有弊,如何选择审计日志分析系统的技术方案,一般都会结合已有平台的建设现状以及审计日志分析场景的需要,建议遵循以下几个原则:\n\n√ 充分利用已有的技术组件,尽量少引入新的技术组件。新组件的引入,会带来从资源到运维的一系列新工作量,毕竟从部署到运维监控有很多工作需要做,尽量复用现有技术体系,可以有效降低资源消耗以及运维的复杂度。\n\n√ 将审计日志的存储、分析和数据平台的整体建设融合在一起。审计日志也是一个企业/组织的非常重要的数据,特别是审计日志的分析并不仅仅是为了日志的归档和回放,而是拥有丰富分析价值的数据资产,因此,建议和数据平台的整体建设融合在一起,作为一个企业/组织的数据湖、数据仓库建设的一部分。\n\n**# 部署详情**\n**1. Alluxio 开启 audit log 功能**\n```\nalluxio.master.audit.logging.enabled=true\n```\n\n**2. 日志文件格式**\n\n```\n###日志路径\nalluxio_home/logs/master_audit.log\n\n2022-09-21 06:24:11,736 INFO AUDIT_LOG - succeeded=true allowed=true ugi=root,root (AUTH=SIMPLE) ip=/172.31.19.156:54274 cmd=getFileInfo src=/default_tests_files/BASIC_NON_BYTE_BUFFER_CACHE_ASYNC_THROUGHd\nst=null perm=root:root:rw-r--r-- executionTimeUs=90 \n2022-09-21 06:24:11,737 INFO AUDIT_LOG - succeeded=true allowed=true ugi=root,root (AUTH=SIMPLE) ip=/172.31.19.156:54274 cmd=getFileInfo src=/default_tests_files/BASIC_CACHE_ASYNC_THROUGH dst=null p\nerm=root:root:rw-r--r-- executionTimeUs=82\n```\n\n**3. 下载并配置 flume**\n\n```\npro.sources = s1 \npro.channels = c1 \npro.sinks = k1 \n\npro.sources.s1.type = exec \npro.sources.s1.command = tail -F -c +0 /mnt/alluxio/log/master_audit.log \n\npro.sources.s1.interceptors = i1 \npro.sources.s1.interceptors.i1.type = search_replace \n\n#多个空格替换成 | 统一数据分割符 \npro.sources.s1.interceptors.i1.searchPattern = \\\\s+ \npro.sources.s1.interceptors.i1.replaceString = | \npro.sources.s1.interceptors.i1.charset = UTF-8 \n\npro.channels.c1.type = memory \npro.channels.c1.capacity = 1000 \npro.channels.c1.transactionCapacity = 100 \n\n\npro.sinks.k1.hdfs.useLocalTimeStamp = true \npro.sinks.k1.type = hdfs \npro.sinks.k1.hdfs.path = hdfs://ip-172-31-25-105.us-west-2.compute.internal:8020/flume/daytime=%Y-%m-%d \npro.sinks.k1.hdfs.filePrefix = events- \npro.sinks.k1.hdfs.fileType = DataStream \npro.sinks.k1.hdfs.round = true \npro.sinks.k1.hdfs.roundValue = 10 \npro.sinks.k1.hdfs.minBlockReplicas=1 \npro.sinks.k1.hdfs.roundUnit = minute \n\n\npro.sources.s1.channels = c1 \npro.sinks.k1.channel = c1\n```\n\n**4. Hive 创建外部分区表**\n\n```\nCREATE EXTERNAL TABLE IF NOT EXISTS auditlogs(\nday string,\ntime string,\nloglevel string,\nlogtype string,\nreserved string,\nsucceeded string,\nallowed string,\nugi string,\nugitype string,\nip string,\ncmd string,\nsrc string,\ndst string,\nperm string,\nexetime string\n)PARTITIONED BY (daytime string)\nROW FORMAT DELIMITED FIELDS TERMINATED BY '|' \nSTORED AS TEXTFILE;\n```\n\n**5. 将数据拷贝到hive外部表中**\n\n```\nhdfs dfs -cp /flume/daytime=2022-09-21 /user/hive/warehouse/logsdb.db/auditlogs\n```\n\n**6. Hive 查询结果**\n![image.png](https://dev-media.amazoncloud.cn/bf149b9dec904268a653abe10e5a43d4_image.png)\n\n**注意事项:**\n\nAlluxio 审计日志格式 key=value 的形式,并且数据分割符不统一(包含一个空格符和多个空格符),需要 flume 通过自定义的 interceptors 对审计日志加工处理,去掉冗余字段,统一分割符。测试案例只用 flume 内置的 search_replace 拦截器。\n\n> 延伸阅读:\nAlluxio 审计日志格式:https://docs.alluxio.io/os/user/stable/cn/operation/Security.html\nFlume HDFS Sink:https://flume.apache.org/FlumeUserGuide.html#hdfs-sink\nFlime Interceptors:https://flume.apache.org/FlumeUserGuide.html#flume-interceptors\n\n想要了解更多关于Alluxio的干货文章、热门活动、专家分享,可点击进入[【Alluxio智库】](https://page.ma.scrmtech.com/landing-page/index?pf_uid=27086_2062&id=13197):\n![image.png](https://dev-media.amazoncloud.cn/a56021abee08462db36a28c226f8c12b_image.png)","render":"<p><img src=\"https://dev-media.amazoncloud.cn/11ab9b62d9e840f1b427d503c7a86564_image.png\" alt=\"image.png\" /></p>\n<div class=\"hljs-center\">\n<p>本文作者:耿云涛</p>\n</div>\n<p><img src=\"https://dev-media.amazoncloud.cn/a158aabd02f14bc6a7567bf3111faf3b_image.png\" alt=\"image.png\" /></p>\n<div class=\"hljs-center\">\n<p>本文作者:葛大力</p>\n</div>\n<p>大数据技术日新月异,数据湖、数据中台、逻辑数据湖、数据编织、数据编排等数据建设理念不断出现、深化,究其根本依然是如何能够将数据规整起来,以统一的规范对数据的脉络进行梳理,形成统一的视图、统一的标准,实现业务层面的数据治理目标。</p>\n<p>对于任何一种数据建设理念,数据安全都是绕不开的话题,数据安全的保障也是一个数据平台能否真正交付使用的准入门槛。</p>\n<p>数据安全大体从4个维度展开:认证、授权、审计、加密。通过认证确保了用户的身份,严格的授权可以保护数据的访问隐私,审计数据的访问记录,发现可能的非法访问,通过加密确保数据存储持久化与数据传输链路的基础安全。</p>\n<p>数据安全的每个维度都是很广泛的主题,本篇文章主要从审计的维度,分享一些Alluxio审计的实操做法以及一些注意事项。</p>\n<p>Alluxio作为云原生数据编排平台,可以在面向异构基础设施环境(本地、混合云、公有云)的时候实现高效的数据统一管理编排,服务大数据与AI应用,Alluxio已经被广泛的应用在数据湖、数据中台、逻辑数据湖、数据编织等数据平台的建设架构中,在协助企业/组织解决技术变迁导致的多平台混合架构和数据碎片化、平台适配复杂性等问题上提供了很好地助力。</p>\n<p>Alluxio往往会在新的数据平台架构上作为数据的统一访问接口服务层存在,依赖Alluxio的编排能力,实现底层散落在不同地域、不同技术的数据存储平台对上层计算/应用的接口统一、元数据统一,同时,基于Alluxio,可以进一步进行数据的统一治理能力的建设,有效的解决了数据碎片化的问题,以确保数据在应用视角的统一视图、统一标准。</p>\n<p>作为数据平台的统一访问接口服务层,Alluxio会承载数据的所有读取和写入行为,那么作为数据访问门户性质的存在,Alluxio记录用户的数据访问行为,并支撑后续对这些用户行为的审计就变得尤为重要。</p>\n<p>在开始Alluxio审计日志分析系统的构建阐述之前,首先我们来问两个问题,看看大家是否可以立刻给予答复:</p>\n<ol>\n<li>现在数据湖里的3PB数据,都是经常访问的吗? 过去一周时间内,这些数据访问频率有什么变化吗?</li>\n<li>这些数据有哪些用户在使用呢?这些使用都是合法的吗?如果要变更数据内容、格式、持久化周期,又会影响谁呢?<br />\n上述两个问题的答案就隐含在审计日志里面,审计日志可以完美的记录每个用户每次请求的信息,这些信息是已经发生的事实,是对管理配置的有效验证和补充。有了审计日志,要真正回答上面的两个问题,还需要一套分析系统,利用分析系统对上述问题中隐藏的各项指标进行分析和展示,审计日志分析系统的整体架构图如下:</li>\n</ol>\n<p><img src=\"https://dev-media.amazoncloud.cn/93d6cd4e14a64784af67325b79f346b1_image.png\" alt=\"image.png\" /></p>\n<ol>\n<li>\n<p>Alluxio 审计日志<br />\nAlluxio的审计日志在整个系统中是数据源性质的存在。Alluxio 支持审计日志功能,Leader Master 通过 audit log 的方式记录用户的行为,从而满足审计、问题回溯分析、用户行为分析以及冷热数据分析等需求。虽然audit log只在Leader Master才真正有记录,但是因为Alluxio Master存在切换的可能,所以,任何一个Master都有可能会生成audit log,都需要收集、分析。</p>\n</li>\n<li>\n<p>审计日志分析系统<br />\n审计日志分析系统主要包含日志采集、日志存储、日志分析展示以及可能的日志治理几个模块。其中日志采集需要适配数据源,Alluxio的audit log是日志文件,因此一般采用贴着Alluxio Master部署采集Agent的方式实现;日志存储模块可以有多种技术实现方式,不过都要满足日志的明细查看、日志统计分析的存储和计算需要;日志的分析展示模块则负责提供可视化能力,可以基于用户的需要触发数据的查询和展示;日志治理模块主要负责通过数据清洗、转换等方式解决可能存在的数据质量问题,如果日志不存在质量问题,则可以省略此模块。</p>\n</li>\n</ol>\n<p>审计日志分析系统的技术方案可以有多种技术选型,常用的主要是两种:</p>\n<p>Flume+Hive/HDFS+Impala/Presto +自定义分析展示系统<br />\nFlume 负责实现日志采集Agent,采集 audit log 到 HDFS;Hive/HDFS+Impala/Presto负责日志的存储和查询计算;自定义分析展示系统则按需实现日志的各种分析、展示的需要。</p>\n<p>此方案的优势在于更加灵活、开放,Hive/HDFS的存储,可以承载更加定制化的数据结构、存储格式,也可以承载更加灵活的数据治理、数据计算/分析的需要。</p>\n<p>因为要写入Hive/HDFS,以及需要相应的数据转换等,此方案的时效性相对较差,一般用在定时批量模式下,比如小时级的分析等。</p>\n<p>ELK(Elasticsearch+Logstash+Kibana)<br />\nELK是一套使用比较广的开源日志管理方案,Logstash 负责实现日志采集Agent,采集 audit log 到Elasticsearch;Elasticsearch作为非常优秀的搜索引擎,可以实现写入日志的搜索以及分析等查询计算需求;Kibana则提供日志的可视化分析能力,调用ES的相关接口实现日志的搜索以及DashBoard展示。</p>\n<p>ELK方案的优势在于各组件都是开源的,不需要系统层面的额外开发,只需要针对日志的格式以及分析需要,进行相关的配置即可。并且,ELK的时效性更好,因为Elasticsearch同时也是一个非常好的OLAP引擎,数据写入后,即可以实现数据的各种分析需要。</p>\n<p>同时,ELK方案也受限于固定的组件选型,Elasticsearch可以支撑很好地搜索和OLAP分析的需要,但无法支持进行一些批量分析、算法分析等,同时,如果想进行数据结构的变更,重建索引,实现也比较麻烦。</p>\n<p>综上,两种方案有利有弊,如何选择审计日志分析系统的技术方案,一般都会结合已有平台的建设现状以及审计日志分析场景的需要,建议遵循以下几个原则:</p>\n<p>√ 充分利用已有的技术组件,尽量少引入新的技术组件。新组件的引入,会带来从资源到运维的一系列新工作量,毕竟从部署到运维监控有很多工作需要做,尽量复用现有技术体系,可以有效降低资源消耗以及运维的复杂度。</p>\n<p>√ 将审计日志的存储、分析和数据平台的整体建设融合在一起。审计日志也是一个企业/组织的非常重要的数据,特别是审计日志的分析并不仅仅是为了日志的归档和回放,而是拥有丰富分析价值的数据资产,因此,建议和数据平台的整体建设融合在一起,作为一个企业/组织的数据湖、数据仓库建设的一部分。</p>\n<p><strong># 部署详情</strong><br />\n<strong>1. Alluxio 开启 audit log 功能</strong></p>\n<pre><code class=\"lang-\">alluxio.master.audit.logging.enabled=true\n</code></pre>\n<p><strong>2. 日志文件格式</strong></p>\n<pre><code class=\"lang-\">###日志路径\nalluxio_home/logs/master_audit.log\n\n2022-09-21 06:24:11,736 INFO AUDIT_LOG - succeeded=true allowed=true ugi=root,root (AUTH=SIMPLE) ip=/172.31.19.156:54274 cmd=getFileInfo src=/default_tests_files/BASIC_NON_BYTE_BUFFER_CACHE_ASYNC_THROUGHd\nst=null perm=root:root:rw-r--r-- executionTimeUs=90 \n2022-09-21 06:24:11,737 INFO AUDIT_LOG - succeeded=true allowed=true ugi=root,root (AUTH=SIMPLE) ip=/172.31.19.156:54274 cmd=getFileInfo src=/default_tests_files/BASIC_CACHE_ASYNC_THROUGH dst=null p\nerm=root:root:rw-r--r-- executionTimeUs=82\n</code></pre>\n<p><strong>3. 下载并配置 flume</strong></p>\n<pre><code class=\"lang-\">pro.sources = s1 \npro.channels = c1 \npro.sinks = k1 \n\npro.sources.s1.type = exec \npro.sources.s1.command = tail -F -c +0 /mnt/alluxio/log/master_audit.log \n\npro.sources.s1.interceptors = i1 \npro.sources.s1.interceptors.i1.type = search_replace \n\n#多个空格替换成 | 统一数据分割符 \npro.sources.s1.interceptors.i1.searchPattern = \\\\s+ \npro.sources.s1.interceptors.i1.replaceString = | \npro.sources.s1.interceptors.i1.charset = UTF-8 \n\npro.channels.c1.type = memory \npro.channels.c1.capacity = 1000 \npro.channels.c1.transactionCapacity = 100 \n\n\npro.sinks.k1.hdfs.useLocalTimeStamp = true \npro.sinks.k1.type = hdfs \npro.sinks.k1.hdfs.path = hdfs://ip-172-31-25-105.us-west-2.compute.internal:8020/flume/daytime=%Y-%m-%d \npro.sinks.k1.hdfs.filePrefix = events- \npro.sinks.k1.hdfs.fileType = DataStream \npro.sinks.k1.hdfs.round = true \npro.sinks.k1.hdfs.roundValue = 10 \npro.sinks.k1.hdfs.minBlockReplicas=1 \npro.sinks.k1.hdfs.roundUnit = minute \n\n\npro.sources.s1.channels = c1 \npro.sinks.k1.channel = c1\n</code></pre>\n<p><strong>4. Hive 创建外部分区表</strong></p>\n<pre><code class=\"lang-\">CREATE EXTERNAL TABLE IF NOT EXISTS auditlogs(\nday string,\ntime string,\nloglevel string,\nlogtype string,\nreserved string,\nsucceeded string,\nallowed string,\nugi string,\nugitype string,\nip string,\ncmd string,\nsrc string,\ndst string,\nperm string,\nexetime string\n)PARTITIONED BY (daytime string)\nROW FORMAT DELIMITED FIELDS TERMINATED BY '|' \nSTORED AS TEXTFILE;\n</code></pre>\n<p><strong>5. 将数据拷贝到hive外部表中</strong></p>\n<pre><code class=\"lang-\">hdfs dfs -cp /flume/daytime=2022-09-21 /user/hive/warehouse/logsdb.db/auditlogs\n</code></pre>\n<p><strong>6. Hive 查询结果</strong><br />\n<img src=\"https://dev-media.amazoncloud.cn/bf149b9dec904268a653abe10e5a43d4_image.png\" alt=\"image.png\" /></p>\n<p><strong>注意事项:</strong></p>\n<p>Alluxio 审计日志格式 key=value 的形式,并且数据分割符不统一(包含一个空格符和多个空格符),需要 flume 通过自定义的 interceptors 对审计日志加工处理,去掉冗余字段,统一分割符。测试案例只用 flume 内置的 search_replace 拦截器。</p>\n<blockquote>\n<p>延伸阅读:<br />\nAlluxio 审计日志格式:https://docs.alluxio.io/os/user/stable/cn/operation/Security.html<br />\nFlume HDFS Sink:https://flume.apache.org/FlumeUserGuide.html#hdfs-sink<br />\nFlime Interceptors:https://flume.apache.org/FlumeUserGuide.html#flume-interceptors</p>\n</blockquote>\n<p>想要了解更多关于Alluxio的干货文章、热门活动、专家分享,可点击进入<a href=\"https://page.ma.scrmtech.com/landing-page/index?pf_uid=27086_2062&id=13197\" target=\"_blank\">【Alluxio智库】</a>:<br />\n<img src=\"https://dev-media.amazoncloud.cn/a56021abee08462db36a28c226f8c12b_image.png\" alt=\"image.png\" /></p>\n"}