本文为您介绍如何采集审计日志。
步骤一:日志服务开通
若您购买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格式。
将自定义的字段列另存为快速查询。
通过快速查询入口,方便搜索审计日志。