使用写入处理器处理云产品日志

由于云产品日志通常由系统自动生成,用户无法直接控制其内容,因此可以通过配置写入处理器来处理这些日志。文中列举了部分常用的数据处理方式作为参考。

前提条件

已创建Project、标准型Logstore并完成日志采集配置。具体操作,请参见创建项目Project创建Logstore数据采集概述

说明

写入处理器使用步骤请参见创建写入处理器

ACK

审计日志仅保留写操作

  • 需求描述

    ACK的审计日志包含读写操作,具体通过verb字段来区分,取值包括create / get / list / patch / update / watch等。如果希望仅保留写操作从而减少数据存储量,可以配置写入处理器进行处理。

  • SPL语句

    * | where verb not in ('get', 'watch', 'list')

控制平面日志字段提取

  • 需求描述

    希望对 content 字段进行字段提取。

  • 原始日志

    _container_name_: kube-controller-manager
    _source_: stderr
    _time_: 2024-12-19T11:10:16.251374622+08:00
    content: I1219 11:10:16.251299       1 httplog.go:134] "HTTP" verb="GET" URI="/healthz" latency="45.911µs" userAgent="kube-probe/1.30+" audit-ID="" srcIP="7.8.44.1:40092" resp=200 contentType="text/plain; charset=utf-8" resp=200
  • SPL语句

    *
    | parse-regexp content, '\S+\s+\S+\s+\S+\s+(\S+)\]\s+"([^"]+)"\s+(.*)' as caller, msg, kvs
    | parse-kv -regexp kvs, '([\S+]+)="?([^"]*)"?(?:\s+|$)' 
    | project-away content, kvs
  • 处理结果

    _container_name_: kube-controller-manager
    _source_: stderr
    _time_: 2024-12-19T11:10:16.251374622+08:00
    URI: /healthz
    audit-ID:
    caller: httplog.go:134
    contentType: text/plain; charset=utf-8
    latency: 45.911µs
    msg: HTTP
    resp: 200
    srcIP: 7.8.44.1:40092
    userAgent: kube-probe/1.30+
    verb: GET

OSS

保留满足特定条件的数据

  • 需求描述

    仅保留 Object 相关操作的日志。

  • SPL语句

    * | where operation like '%Object%'

objectrequest_uri进行 URL 解码

  • 需求描述

    OSS 访问日志中,objectrequest_uri默认是做了URL编码的,希望对这两个字段进行URL解码。

  • 原始日志

    object: image%2Flogo.png
    request_uri: /image%2Flogo.png HTTP/1.1
  • SPL语句

    * | extend object=url_decode(object), request_uri=url_decode(request_uri)
  • 处理结果

    object: image/logo.png
    request_uri: /image/logo.png HTTP/1.1

负载均衡

仅保留失败请求的日志

  • 需求描述

    ALB访问日志中,status字段表示了请求的状态码,希望仅保留失败请求的日志。

  • SPL语句

    * | where cast(status as bigint) >= 400

七层访问日志request_uri脱敏

  • 需求描述

    ALB 访问日志中,request_uri字段是包含完整的请求路径和请求参数,希望移除请求参数部分,仅保留请求路径。

  • 原始日志

    request_uri: /api/v1/some-resource?token=xxxxxxx
  • SPL语句

    * | extend request_uri=url_extract_path(request_uri)
  • 处理结果

    request_uri: /api/v1/some-resource