本流程通过对
JSON
数据提取 IP 字段,结合编排计数器,分析日志文件中公网IP的个数,以便做数据统计和数据分析
适用场景
◇ 业务日志以JSON
格式存储,且按行存储在文件中(换行符标识不限)
◇ 当需要分析业务日志,且业务日志数据量较大
◇ 要分析的字段有多少种类型未知,需要动态调整
实现方式
◇ 定义一个 GetFile
入口(读取日志文件)
◇ 通过SplitText
将日志文件按行拆分
◇ EvaluateJsonPath
提取需要分析的字段(JSON Path
)
◇ 然后通过RouteOnAttribute
判断是否为公网IP(可以动态新增,不知道日志中有多少公网 IP 的情况下比较方便)
◇ 最后,通过UpdateCounter
更新计数器,对最终的公网 IP 数量进行统计
实现步骤
GetFile
配置获取的日志文件路径和文件名注意:这里`保留源文件`③属性,如果不设置为保留,则组件执行一次就会把日志文件删除,所以需要注意
SplitText
将日志文件内容按行拆分拆分出来的单条日志数据如下:
{
"remote_addr": "139.200.148.113",
"remote_user": "-",
"time_local": "2022-11-18T03:35:44+08:00",
"http_host": "10.196.104.140",
"scheme": "http",
"api_id": "4902",
"api_path_id": "231602",
"api_a2a_backend_id": "-",
"caller_id": "0",
"method": "GET",
"request_uri": "/newsite/gxxx",
"request_time": "0.151",
"status": "200",
"request_length": "764",
"body_bytes_sent": "57",
"http_referer": "xxx",
"http_user_agent": "xxx6",
"http_x_forwarded_for": "139.200.148.113",
"http_x_real_ip": "139.200.148.113",
"hostname": "localhost.example.domain.com",
"backend_type": "d2a",
"init_time": "0.020027",
"init_router_time": "53.442955",
"route_time": "98.236084",
"validate_time": "0.027895",
"remote_request_time": "98.093033",
"response_length": "256",
"request_body": "",
"response_body": ""
}EvaluateJsonPath
提取 JSON 数据中指定部分的值- 将数据提取到数据流属性里面,方便后面做路由判断
- 需要提取的数据通过右上角「+」号新增属性,然后属性值写
JsonPath
表达式去取 Json 数据里面的值 - 数据返回类型默认是和目标输出关联,也可以手动指定
RouteOnAttribute
组件用来判断提取到的 IP 是否为公网 IP (这里仅做简单比较,实际场景可以根据需求调整)通过新增动态属性,属性命任意(会作为满足条件的输出连线名称),属性值为布尔表达式,表示当该表达式结果为
TRUE
时,数据会走该属性所定义的连线最后,通过
UpdateCounter
将计数器进行累加
- 计数器的值可以通过画布右上角菜单中的计数器选择进行查看和重置
- 计数器仅在平台当前生命周期内有效,当平台重启之后,计数器会自动重置