使用DSL加工函数过滤VPC流日志公网流量
虚拟私有云VPC提供流日志功能,可以帮您采集指定VPC内网络实例的流量信息,包括入方向和出方向的流量。创建流日志后,您可以在配置的日志组中查看流日志记录。更多VPC流信息请参考VPC流日志概述。
在虚拟私有云VPC控制台上创建VPC流日志功能后,VPC流日志将被采集到云日志服务中,您可以通过云日志服务对VPC流日志进行查询、分析和排查网络故障。本文介绍通过云日志服务数据加工对VPC流日志进行公网流量过滤的操作方法。
DSL加工的功能在邀测中,仅支持华北-北京四、华东-上海一、华南-广州局点的内测用户使用,其他局点暂不支持。
前提条件
- VPC流日志已接入LTS,详细请参见虚拟私有云VPC接入LTS。
- 已在LTS控制台创建日志组和日志流,用于保存数据加工后的VPC流日志公网流量日志。
使用场景
例如,VPC流日志已接入LTS,采集到云日志服务中的日志示例如下:
{ "content": "1 5f67944957444bd6bb4fe3b367de8f3d 1d515d18-1b36-47dc-a983-bd6512aed4bd 192.168.0.154 192.168.3.25 38929 53 17 1 96 1548752136 1548752736 ACCEPT OK", "version": 1, "project_id": "5f67944957444bd6bb4fe3b367de8f3d", "interface_id": "1d515d18-1b36-47dc-a983-bd6512aed4bd", "srcaddr": "192.168.0.154", "dstaddr": "192.168.3.25", "srcport": 38929, "dstport": 53, "protocol": 17, "packets": 1, "bytes": 96, "start": 1548752136, "end": 1548752736, "action": "ACCEPT", "log_status": "ok" }
在对VPC流日志查询和分析过程中,为便于分析公网流量,您需要对原始日志做以下处理:
- 如果srcaddr和dstaddr字段不存在,则丢弃该日志。
- 如果是私网之间互通的流量,则丢弃该日志。
基于以上需求,您可以通过DSL日志加工,对采集到的VPC流日志进行日志加工,便于问题分析。
操作步骤
- VPC流日志已接入LTS,详细请参见虚拟私有云VPC接入LTS。
- 在云日志服务控制台的左侧导航栏中选择“日志加工>DSL加工”,单击“新建DSL加工任务” 。
- 在基本信息页面中,完成如下配置。
- 任务名称:DSL加工任务的名称,例如test-vpc。
- 启用状态:默认开启。
- 源日志流:选择已完成结构化配置的日志组、日志流,即VPC流日志接入LTS时创建的日志组和日志流。
- 目标日志流:单击“添加目标日志流”,填写目标日志流名称(目标日志流在数据加工函数中作为入参时的代称),选择日志组和日志流,用于存储通过DSL加工处理后的日志。
- 加工范围:数据加工的时间范围,本示例选择“所有”:从源日志流按收到第一条日志的时间开始数据加工任务,直到加工任务被手动停止。
- 高级配置:本示例不设置。
- 然后单击“下一步”,在加工规则下方输入加工语句:
# 如果srcaddr和dstaddr字段不存在,丢弃。 e_if(e_not_has("srcaddr"), e_drop()) e_if(e_not_has("dstaddr"), e_drop()) # 如果srcaddr和dstaddr不符合IP地址格式,丢弃。 e_if(op_not(e_match("srcaddr", r'^(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$')), e_drop()) e_if(op_not(e_match("dstaddr", r'^(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$')), e_drop()) # 如果是内网之间互通的流量,丢弃。 e_if(op_and( op_or(ip_cidrmatch("10.0.0.0/8", v("srcaddr")), ip_cidrmatch("172.16.0.0/12", v("srcaddr")), ip_cidrmatch("192.168.0.0/16", v("srcaddr")) ), op_or(ip_cidrmatch("10.0.0.0/8", v("dstaddr")), ip_cidrmatch("172.16.0.0/12", v("dstaddr")), ip_cidrmatch("192.168.0.0/16", v("dstaddr")) )),e_drop())
- 在“测试数据”页签输入测试数据,参考如下:(以下示例仅供参考,请以实际上报的数据为准)
模拟测试时需要将srcaddr的值改为公网IP。
{ "content": "1 5f67944957444bd6bb4fe3b367de8f3d 1d515d18-1b36-47dc-a983-bd6512aed4bd 192.168.0.154 192.168.3.25 38929 53 17 1 96 1548752136 1548752736 ACCEPT OK", "version": 1, "project_id": "5f67944957444bd6bb4fe3b367de8f3d", "interface_id": "1d515d18-1b36-47dc-a983-bd6512aed4bd", "srcaddr": "192.168.0.154", "dstaddr": "192.168.3.25", "srcport": 38929, "dstport": 53, "protocol": 17, "packets": 1, "bytes": 96, "start": 1548752136, "end": 1548752736, "action": "ACCEPT", "log_status": "ok" }
单击“执行预览”,您可以看到原始日志只保留了公共流量的流日志。结果预览如下:
结果预览里的srcaddr的ip值为修改后的公网地址。
{ "srcaddr":"ip", "dstport":53, "start":"1548752136", "dstaddr":"192.168.3.25", "version":1, "content":"1 5f67944957444bd6bb4fe3b367de8f3d 1d515d18-1b36-47dc-a983-bd6512aed4bd 192.168.0.154 192.168.3.25 38929 53 17 1 96 1548752136 1548752736 ACCEPT OK", "packets":1, "protocol":17, "interface_id":"1d515d18-1b36-47dc-a983-bd6512aed4bd", "log_status":"ok", "project_id":"5f67944957444bd6bb4fe3b367de8f3d", "bytes":96, "srcport":"38929", "action":"ACCEPT", "end":"1548752736" }
- 单击“确定”保存加工任务,创建成功后在DSL加工页面生成一条任务明细。