Skip to main content

本流程通过对JSON数据提取 IP 字段,结合编排计数器,分析日志文件中公网IP的个数,以便做数据统计和数据分析

适用场景

◇ 业务日志以JSON格式存储,且按行存储在文件中(换行符标识不限)

◇ 当需要分析业务日志,且业务日志数据量较大

◇ 要分析的字段有多少种类型未知,需要动态调整

实现方式

◇ 定义一个 GetFile入口(读取日志文件)

◇ 通过SplitText将日志文件按行拆分

EvaluateJsonPath提取需要分析的字段(JSON Path)

◇ 然后通过RouteOnAttribute判断是否为公网IP(可以动态新增,不知道日志中有多少公网 IP 的情况下比较方便)

◇ 最后,通过UpdateCounter更新计数器,对最终的公网 IP 数量进行统计

编排流程

实现步骤

  1. GetFile配置获取的日志文件路径和文件名

    image-20211109171348311

    注意:这里`保留源文件`属性,如果不设置为保留,则组件执行一次就会把日志文件删除,所以需要注意
  2. SplitText将日志文件内容按行拆分

    image-20211109171506070

    拆分出来的单条日志数据如下:

    {
    "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": ""
    }
  3. EvaluateJsonPath提取 JSON 数据中指定部分的值

    image-202

    • 将数据提取到数据流属性里面,方便后面做路由判断
    • 需要提取的数据通过右上角「+」号新增属性,然后属性值写JsonPath表达式去取 Json 数据里面的值
    • 数据返回类型默认是和目标输出关联,也可以手动指定
  4. RouteOnAttribute组件用来判断提取到的 IP 是否为公网 IP (这里仅做简单比较,实际场景可以根据需求调整)image-20211109172759095

    通过新增动态属性,属性命任意(会作为满足条件的输出连线名称),属性值为布尔表达式,表示当该表达式结果为TRUE时,数据会走该属性所定义的连线image-20211109173145625

  5. 最后,通过UpdateCounter将计数器进行累加

image-20211109173741534

  • 计数器的值可以通过画布右上角菜单中的计数器选择进行查看和重置
  • 计数器仅在平台当前生命周期内有效,当平台重启之后,计数器会自动重置

流程模板

下载模板