采集审计日志

本文为您介绍如何采集审计日志。

步骤一:日志服务开通

说明
  1. 通过CloudShell连接Kubernetes集群,如何连接,请参见在CloudShell上通过kubectl管理Kubernetes集群

  2. 在CloudShell中获取您的主账号aliuid,执行如下命令:

    echo $ALIBABA_CLOUD_ACCOUNT_ID。

  3. 在执行以下安装命令前,需替换${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。

  4. 在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
  5. 在k8smaster集群执行以下的命令验证服务是否开启。

    [root@k8s-master-03 logservice]# helm get alibaba-log-controller | grep CHART
    CHART: alibaba-cloud-log-0.1.3 #结果表明开通成功
    说明

    若执行命令时报错,提示helm没有安装,请先安装helm。

步骤二:接入审计日志

  1. 创建项目。

    1. 在日志服务控制台,单击创建Project,进入创建Project弹框。

      image

    2. 创建Project弹框,配置参数。

      image

      参数

      描述

      所属地域

      根据日志来源等信息选择合适的阿里云地域。创建Project后,您无法修改其所属地域,且日志服务不支持跨地域迁移Project。如果您要采集ECS日志,建议选择与ECS相同的地域,实现通过阿里云内网采集日志,加快日志采集速度。

      Project名称

      Project名称在阿里云地域内全局唯一,创建后不可修改。

      Project注释

      根据业务场景对Project项目进行说明。

      • 不支持尖括号(<>)、撇号(')、反斜线(\)、双引号(")和两个反斜线(\\)。

      • 不超过64个字符。

      开通日志

      支持详细日志重要日志任务运行日志三种开通方式。

      • 详细日志:完整的操作日志,按量收费。

      • 重要日志:计量、消费组延迟和Logtail心跳日志等,免费开通。

      • 任务运行日志:数据导入、定时SQL、投递任务的运行日志,免费开通。

      日志存储位置

      支持自动创建(推荐)当前Project两种存储方式。

      说明

      自动创建名称为log-service-{用户ID}-{region}的Project,建议将同一Region的日志都保存到该Project中。

    3. 单击创建,完成Project项目创建。

  2. 添加日志采集点。

    1. 单击Project列表的Project名称,进入日志库

    2. 按照下图指引,创建Logstore。

      Logstore名称:建议使用audit-log。

      image

    3. 单击数据接入向导

      image

    4. 选择Kubernetes文件,创建采集配置。

      image

    5. 配置详情页面,配置参数。

      配置名称和路径

      image

      参数

      描述

      配置名称

      audit。

      日志路径

      请填写/home/admin/logs与audit.log。

      Docker文件配置

      image..png

      • 是否为Docker文件:开启。

      • 是否部署于k8s:开启。

        • K8s Namespace正则匹配为dataphin.*, 若您不确定,可与Dataphin运维团队确认。

      image..png

      模式:选择完整正则模式。

      单行模式:关闭。

      日志样例

      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命名。更多详情请参见步骤三:字段列设置及配置快速查询

      image.png

      高级选项配置:对base64进行解析,需开启启用插件处理,详情请参见添加日志解析Plugin

      路径:打开创建的日志服务项目 > 数据接入 > Logtail配置 > audit-log,可以看到包含processor_base64_decoding的插件配置项。

      image

      {
        "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"
              ]
            }
          }
        ]
      }
    6. 点击下一步按钮后,选择机器组,并点击应用到机器组,后续操作根据默认选项,单击确定

      如果是容器服务关联的Logtail,则列表中会初始化有机器组信息,直接选择即可。

  3. 添加日志解析Plugin。

    1. 执行以下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))
    2. 执行脚本:python sls_plugin.py,出现如下结果说明配置正确。

      image

    3. 复制橙框中的aliyunlog命令,执行后plugin生效(主要是解码)。

  4. 升级Logtail版本。

    1. 在容器服务ACK集群列表中,按照下图指引,进入编辑页。

      image

    2. 选择镜像tag,点击更新

      image

    3. 点击守护进程集的名称,检查当前进程运行镜像版本与目标版本是否保持一致(进程数与机器数保持一致,每台机器有一个进程)。

      image

步骤三:字段列设置及配置快速查询

  1. 自定义字段列与审计日志原始字段说明。

    点击日志名称(audit),选择字段列设置,设置需要展示的字段,审计日志原始字段和含义如下:

    image

    字段名称

    描述

    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格式。

  2. 将自定义的字段列另存为快速查询。

    image

  3. 通过快速查询入口,方便搜索审计日志。

    image