本文为您介绍如何采集审计日志。
步骤一:日志服务开通
- 若您购买k8s集群时勾选了日志服务,则可直接执行步骤二:接入审计日志。 
- 可通过日志服务采集Kubernetes容器日志开通日志服务,详情请参见通过日志服务采集Kubernetes容器日志。 
- 通过CloudShell连接Kubernetes集群,如何连接,请参见在CloudShell上通过kubectl管理Kubernetes集群。 
- 在CloudShell中获取您的主账号aliuid,执行如下命令: - echo $ALIBABA_CLOUD_ACCOUNT_ID。
- 在执行以下安装命令前,需替换 - ${your_k8s_cluster_id} 、{your_ali_uid}、 {your_k8s_cluster_region_id}参数。- wget https://acs-logging.oss-cn-hangzhou.aliyuncs.com/alicloud-k8s-log-installer.sh -O alicloud-k8s-log-installer.sh; chmod 744 ./alicloud-k8s-log-installer.sh; ./alicloud-k8s-log-installer.sh --cluster-id ${your_k8s_cluster_id} --ali-uid ${your_ali_uid} --region-id ${your_k8s_cluster_region_id}- 配置项 - 说明 - 示例 - your_k8s_cluster_id - Kubernetes集群ID。 - c95c84a8370924d88aa621c3b2eb2ce77。 - your_ali_uid - 在步骤二中获取的aliuid。 - 5695230200641659。 - your_k8s_cluster_region_id - Kubernetes集群所在的Region,可在地域和可用区中查看到,如在杭州,则为cn-hangzhou。 - us-west-1。 
- 在k8smaster节点安装服务日志。 - wget https://acs-logging.oss-cn-hangzhou.aliyuncs.com/alicloud-k8s-log-installer.sh -O alicloud-k8s-log-installer.sh chmod 744 ./alicloud-k8s-log-installer.sh ./alicloud-k8s-log-installer.sh --cluster-id 5695230200641659 --ali-uid c95c84a8370924d88aa621c3b2eb2ce77 --region-id us-west-1
- 在k8smaster集群执行以下的命令验证服务是否开启。 - [root@k8s-master-03 logservice]# helm get alibaba-log-controller | grep CHART CHART: alibaba-cloud-log-0.1.3 #结果表明开通成功说明- 若执行命令时报错,提示helm没有安装,请先安装helm。 
步骤二:接入审计日志
- 创建项目。 - 在日志服务控制台,单击创建Project,进入创建Project弹框。  
- 在创建Project弹框,配置参数。  - 参数 - 描述 - 所属地域 - 根据日志来源等信息选择合适的阿里云地域。创建Project后,您无法修改其所属地域,且日志服务不支持跨地域迁移Project。如果您要采集ECS日志,建议选择与ECS相同的地域,实现通过阿里云内网采集日志,加快日志采集速度。 - Project名称 - Project名称在阿里云地域内全局唯一,创建后不可修改。 - Project注释 - 根据业务场景对Project项目进行说明。 - 不支持尖括号(<>)、撇号(')、反斜线(\)、双引号(")和两个反斜线(\\)。 
- 不超过64个字符。 
 - 开通日志 - 支持详细日志、重要日志、任务运行日志三种开通方式。 - 详细日志:完整的操作日志,按量收费。 
- 重要日志:计量、消费组延迟和Logtail心跳日志等,免费开通。 
- 任务运行日志:数据导入、定时SQL、投递任务的运行日志,免费开通。 
 - 日志存储位置 - 支持自动创建(推荐)、当前Project两种存储方式。 说明- 自动创建名称为log-service-{用户ID}-{region}的Project,建议将同一Region的日志都保存到该Project中。 
- 单击创建,完成Project项目创建。 
 
- 添加日志采集点。 - 单击Project列表的Project名称,进入日志库。 
- 按照下图指引,创建Logstore。 - Logstore名称:建议使用audit-log。  
- 单击数据接入向导。  
- 选择Kubernetes文件,创建采集配置。  
- 在配置详情页面,配置参数。 - 配置名称和路径:  - 参数 - 描述 - 配置名称 - audit。 - 日志路径 - 请填写/home/admin/logs与audit.log。 - Docker文件配置:  - 是否为Docker文件:开启。 
- 是否部署于k8s:开启。 - K8s Namespace正则匹配为dataphin.*, 若您不确定,可与Dataphin运维团队确认。 
 
  - 模式:选择完整正则模式。 - 单行模式:关闭。 - 日志样例: - 2019-01-23 20:54:35.563|57152ded46d0c92f|6274972152929241391|dataphin-ide|audit|0||@@da19ad85e5bd4e8d@@-2730960908426850675@@-@@AddDataNode@@-@@-@@https://v1-4-x-odps.dataphin.aliyun.com/api/smc/project/saveNode@@SuperAdmin@dataphin:20002@@100.116.153.23, 172.22.1.130@@Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36@@[{"category":"codeManage","description":"","dirName":"/liangyc","name":"insert","operatorType":5,"projectId":30417,"rsType":1}]@@{"code":"IDE-RES-103","message"/liangyc/insert","traceId":"da19ad85e5bd4e8d"}@@FAILED@@-@@insert@@5@@com.alibaba.dt.dataphin.common.lang.exception.DataphinException: RESOURCE_ALREADY_EXIST at com.alibaba.dt.onedata.ide.service.resource.impl.ResourceServiceImpl.createResource(ResourceServiceImpl.java:256) @@-@@-@@303994917@@-@@-- 行首正则表达式: - (\d{4})-(0\d{1}|1[0-2])-(0\d{1}|[12]\d{1}|3[01])(.*)- 提取字段:开启。 - 正则: - (\d{4}-\d{2}-\d{2})\s+([^\|]+)\|([^\|]+\|[^\|]+)\|([^\|]+)\|([^\|]+)\|([^\|]+\|\|)@@([^@]+)@@([^@]+)@@([^@]+)@@([^@]+)@@([^@]+)@@([^@]+)@@([^@]+)@@([^$]+)@@([^@]+)@@([^@]+)@@([^@]+)@@([^@]+)@@([^@]+)@@([^@]+)@@([^@]+)@@([^@]+)@@([^@]+)@@([^@]+)@@([^@]+)@@([^@]+)@@([^@]+)@@(.*)- 日志抽取内容:请给Key命名。更多详情请参见步骤三:字段列设置及配置快速查询。  - 高级选项配置:对base64进行解析,需开启启用插件处理,详情请参见添加日志解析Plugin。 - 路径:打开创建的日志服务项目 > 数据接入 > Logtail配置 > audit-log,可以看到包含 - processor_base64_decoding的插件配置项。 - { "global": { "DefaultLogQueueSize": 10 }, "processors": [ { "type": "processor_split_log_regex", "detail": { "PreserveOthers": true, "SplitKey": "content", "SplitRegex": "(\\d{4})-(0\\d{1}|1[0-2])-(0\\d{1}|[12]\\d{1}|3[01])(.*)" } }, { "type": "processor_regex", "detail": { "SourceKey": "content", "Regex": "(\\d{4}-\\d{2}-\\d{2})\\s+([\\S\\s]+)\\|([\\S\\s]+\\|[\\S\\s]+)\\|([\\S\\s]+)\\|([\\S\\s]+)\\|([\\S\\s]+\\|[\\S\\s]+)@@([\\S\\s]+)@@([\\S\\s]+)@@([\\S\\s]+)@@([\\S\\s]+)@@([\\S\\s]+)@@([\\S\\s]+)@@([\\S\\s]+)@@([\\S\\s]+)@@([\\S\\s]+)@@([\\S\\s]+)@@([\\S\\s]+)@@([\\S\\s]+)@@([\\S\\s]+)@@([\\S\\s]+)@@([\\S\\s]+)@@([\\S\\s]+)@@(.*)@@(.*)@@([\\S\\s]+)@@([\\S\\s]+)@@([\\S\\s]+)", "Keys": [ "date", "time", "old_trace", "app_name", "audit", "unuseful", "trace_id", "span_id", "event_id", "event_name", "event_version", "event_type", "event_source", "user_identity", "source_ip", "user_agent", "request_parameter", "response_element", "event_status", "resource_id", "resource_name", "resource_type", "additional_event_data", "region", "log_time", "tenant_id", "request_parameter_json", "user_identity_json" ] } } ] }
- 点击下一步按钮后,选择机器组,并点击应用到机器组,后续操作根据默认选项,单击确定。 - 如果是容器服务关联的Logtail,则列表中会初始化有机器组信息,直接选择即可。 
 
- 添加日志解析Plugin。 - 执行以下Python脚本,其中: - project_name:指定为容器服务关联的日志服务Project(全局唯一)。 
- config_name:指定为刚才配置的审计日志采集名称。 
 重要- aliyunlog运行需要安装,详细请参见用户手册。 
- 安装完成后使用命令配置aliyunlog的访问信息(ak替换为有配置sls服务权限的RAM账号的ak): - aliyunlog configure access_id access_key us-west-1.log.aliyuncs.com。
 - # -*- coding:utf-8 -*- import commands import json status, output = commands.getstatusoutput( 'aliyunlog log get_logtail_config --project_name=dataphin-stage --config_name=audit-log') config = json.loads(output) print config plugin = { "processors": [ { "type": "processor_split_log_regex", "detail": { "SplitKey": "content", "SplitRegex": "\\d{4}-\\d{2}-\\d{2}.*" } }, { "type": "processor_split_string", "detail": { "SplitSep": "@@", "SplitKeys":[ "prefix", "trace_id", "span_id", "event_id", "event_name", "event_version", "event_type", "event_source", "user_identity", "source_ip", "user_agent", "request_parameter", "response_element", "event_status", "resource_id", "resource_name", "resource_type", "additional_event_data", "region", "log_time" ], "KeepSource": False, "NoKeyError": True, "NoMatchError": True } }, { "type":"processor_regex", "detail":{ "SourceKey": "prefix", "KeepSource": False, "Regex": "(\\d{4}-\\d{2}-\\d{2})\\s+([\\S\\s]+)\\|([\\S\\s]+\\|[\\S\\s]+)\\|([\\S\\s]+)\\|([\\S\\s]+)\\|([\\S \\s]+\\|[\\S\\s]+)", "keys":[ "date","time","old_trace","app_name","audit","unuseful" ], "NoKeyError": True, "NoMatchError": True } }, { "type": "processor_base64_decoding", "detail": { "SourceKey": "request_parameter", "NewKey": "request_parameter", "DecodeError": True } }, { "type": "processor_base64_decoding", "detail": { "SourceKey": "response_element", "NewKey": "response_element", "DecodeError": True } }, { "type": "processor_base64_decoding", "detail": { "SourceKey": "additional_event_data", "NewKey": "additional_event_data", "DecodeError": True } } ], } config["inputDetail"]["plugin"] = plugin print "------please execute command below------" print "aliyunlog log update_logtail_config --project_name=\"{}\"--config_detail='{}'".format("dataphin-stage", json.dumps(config))
- 执行脚本:python sls_plugin.py,出现如下结果说明配置正确。  
- 复制橙框中的aliyunlog命令,执行后plugin生效(主要是解码)。 
 
- 升级Logtail版本。 - 在容器服务ACK集群列表中,按照下图指引,进入编辑页。  
- 选择镜像tag,点击更新。  
- 点击守护进程集的名称,检查当前进程运行镜像版本与目标版本是否保持一致(进程数与机器数保持一致,每台机器有一个进程)。  
 
步骤三:字段列设置及配置快速查询
- 自定义字段列与审计日志原始字段说明。 - 点击日志名称(audit),选择字段列设置,设置需要展示的字段,审计日志原始字段和含义如下:  - 字段名称 - 描述 - log_time - 日志记录时间,包含日期和时间,等同于date + time。 - date - 日志打印的日期。 - time - 日志打印的时间。 - event_id - 事件ID。 - event_name - 事件名称。 - event_type - 事件类型。 - event_source - 事件来源机器。 - event_status - 事件状态。 - event_version - 事件版本,预留字段,目前没有使用。 - user_identity - 用户标识,内容表示:用户名:Dataphin内部用户ID:租户ID:用户原始账号ID。 - source_ip - 访问、操作来源机器IP地址。 - user_agent - 用户访问来源的userAgent信息,可为空。 - trace_id - 唯一标识一次请求的TraceId。 - span_id - 预留字段,目前没有使用。 - app_name - 输出审计日志的应用名称。 - request_parameter - 请求参数, 可为空。 - response_element - 响应信息,可为空。 - resource_id - 标识操作的对象ID,比如代码任务的ID、逻辑表的ID,如果代码里没有设置就为空。 - resource_name - 资源名称及参数。 - resource_type - 资源类型。 - region - 服务region信息。 - additional_event_data - 自由定义附加信息,默认为空。 - tenant_id - 租户ID。 - request_parameter_json - request_parameter的JSON格式。 - user_identity_json - user_identity的JSON格式。 
- 将自定义的字段列另存为快速查询。  
- 通过快速查询入口,方便搜索审计日志。 