跳转至

日志 Pipeline 使用手册


Pipeline 支持对不同格式的日志数据进行文本解析,通过编写 Pipeline 脚本,可以自定义切割出符合要求的结构化日志,并把切割出来的字段作为属性使用。通过属性字段,我们可以快速筛选相关日志、进行数据关联分析,帮助我们快速去定位问题并解决问题。

观测云提供 Pipeline 官方脚本库,内置多种日志解析 Pipeline。同时支持用户创建自定义 Pipeline 脚本。接下来为您介绍如何使用自定义 Pipeline 功能。

前置条件

  1. 您需要先创建一个观测云账号,并在您的主机上 安装 DataKit;
  2. 开启日志采集器,并在配置文件中打开 Pipeline 功能;

自定义 Pipeline 脚本文件

步骤一:开启日志采集器(以 DataKit 日志为例)

主机安装 Datakit 以后,在 /usr/local/datakit/conf.d/log 目录下,复制 logging.conf.sample 并命名为 logging.conf,编辑 logging.conf,配置存放 DataKit 日志的路径和日志来源。如:

  • logfiles = ["/var/log/datakit/log"]
  • source = "datakit"

注意:在日志采集器中,Pipeline 功能默认开启,其中 Pipeline = ""中可以不填写具体的 Pipeline 脚本名称,我们会自动匹配跟 source 同名的脚本文件。若日志来源和 Pipeline 文件名称不一致,则需要在日志采集器配置 Pipeline = "xxxxxx.p"。

[[inputs.logging]]
  ## required
  logfiles = [
    "/var/log/datakit/log",
  ]
  # only two protocols are supported:TCP and UDP
  # sockets = [
  #      "tcp://0.0.0.0:9530",
  #      "udp://0.0.0.0:9531",
  # ]
  ## glob filteer
  ignore = [""]

  ## your logging source, if it's empty, use 'default'
  source = "datakit"

  ## add service tag, if it's empty, use $source.
  service = ""

  ## grok pipeline script name
  ## 如果 pipeline 未指定具体,则会自动寻找跟 source 同名的脚本
  pipeline = ""

配置完成后,使用命令行 datakit --restart 重启 DataKit 使配置生效。

步骤二:根据采集的日志,确定切割字段

开启日志采集器后,即可在观测云工作空间查看采集到的 DataKit 日志。观察和分析 DataKit 日志,确定日志切割的字段,如日志产生的时间、日志等级、日志模块、模块内容以及日志的内容等。

步骤三:创建自定义 Pipeline

在观测云工作空间日志 > Pipelines,点击新建 Pipeline 创建一个新的 Pipeline 文件。

过滤日志

日志来源选择 “datakit”,根据你所选日志来源自动生成同名 Pipeline。

定义解析规则

定义日志的解析规则,支持多种脚本函数。编辑区默认显示源码,可切换到流程图查看分支和循环的处理关系,或切换到步骤模式逐条阅读脚本。三种模式共用同一份脚本,点击函数库可查看函数说明和语法格式。

在流程图或步骤模式中点击节点,可修改参数或节点源码,点击应用后同步到完整脚本;也可插入、删除、上下移动或在同一代码块内拖拽排序。具体操作和使用限制见编辑解析规则。

本示例中基于对日志的观察结果,就可以编写 Pipeline 脚本文件。我们可以通过 add_pattern() 脚本函数先自定义 pattern, 并在 Grok 中引用自定义的 pattern,对日志进行切割。示例如下,其中 rename 和 default_time 是优化切割出来的字段。

add_pattern('_dklog_date', '%{YEAR}-%{MONTHNUM}-%{MONTHDAY}T%{HOUR}:%{MINUTE}:%{SECOND}%{INT}')
add_pattern('_dklog_level', '(DEBUG|INFO|WARN|ERROR|FATAL)')
add_pattern('_dklog_mod', '%{WORD}')
add_pattern('_dklog_source_file', '(/?[\\w_%!$@:.,-]?/?)(\\S+)?')
add_pattern('_dklog_msg', '%{GREEDYDATA}')

grok(_, '%{_dklog_date:log_time}%{SPACE}%{_dklog_level:level}%{SPACE}%{_dklog_mod:module}%{SPACE}%{_dklog_source_file:code}%{SPACE}%{_dklog_msg:msg}')
rename("time", log_time) # 将 log_time 重名命名为 time
default_time(time)       # 将 time 字段作为输出数据的时间戳

更多 Pipeline 解析规则可参考文档 文本数据处理(Pipeline)。

日志样本测试

脚本规则编写完成后,在测试样本中手动输入日志或点击一键获取样本。日志样本支持仅 Message、全部字段(JSON)和全部字段(行协议)三种格式。

点击新增样本可增加样本,最多 3 条,通过标签切换编辑。点击开始测试会执行全部非空样本,结果在编辑区右侧的独立浮层中按样本展示,可关闭后通过查看结果重新打开,也可放大、复制或固定后拖动。

修改脚本或样本后,旧结果会标记为待重新测试,请重新执行以确认当前解析结果。更多操作见测试样本和查看测试结果。

注意:

  • 日志样本测试为非必填项;
  • 自定义 Pipeline 保存后,日志样本测试数据同步保存;
  • JSON 样本须为合法对象,测试和保存前会校验所有样本,包括当前未选中的标签页。

步骤四:保存 Pipeline 文件

所有必填项配置完成后,保存 Pipeline 文件。即可在日志 Pipelines 列表查看到自定义的 Pipeline 文件。

在观测云工作空间创建的 Pipeline 文件统一保存在 /usr/local/datakit/Pipeline_remote 目录下。

注意:DataKit 有两个 Pipeline 目录,DataKit 会自动匹配该目录下的 Pipeline 文件。

  • Pipeline:官方库的 Pipeline 文件目录;
  • Pipeline_remote:观测云工作空间自定义 Pipeline 文件目录;
  • 若两个目录下存在同名 Pipeline 文件,DataKit 会优先匹配 Pipeline_remote 下的 Pipeline 文件。

步骤五:在观测云查看切割后的字段

在观测云工作空间的日志下,选择 datakit 的日志,在日志详情页,可以看到“属性”下的字段和字段值,这个就是我们日志切割后显示的字段和字段值。如:

  • code: container/input.go:167
  • level: ERROR
  • module: container

克隆官方库 Pipeline 脚本文件

步骤一:开启 Nginx 采集器

主机安装 Datakit 以后,在 /usr/local/datakit/conf.d/nginx 目录下,复制 nginx.conf.sample 并命名为 nginx.conf,编辑 nginx.conf,开启存放 Nginx 日志的地址和 Pipeline。如:

  • files = ["/var/log/nginx/access.log","/var/log/nginx/error.log"]
  • Pipeline = "nginx.p"(其中 ""中可以不填写具体的 Pipeline 脚本名称,DataKit 会自动匹配跟 source 同名的脚本文件)

注意:Pipeline 开启后,DataKit 会自动根据日志来源来匹配 Pipeline 脚本文件。若日志来源和 Pipeline 文件名称不一致,则需要在采集器配置,如日志来源 nginx,Pipeline 文件名 nginx1.p,则需要配置Pipeline = "nginx1.p"。

[[inputs.nginx]]
        url = "http://localhost/server_status"
        # ##(optional) collection interval, default is 30s
        # interval = "30s"
        use_vts = false
        ## Optional TLS Config
        # tls_ca = "/xxx/ca.pem"
        # tls_cert = "/xxx/cert.cer"
        # tls_key = "/xxx/key.key"
        ## Use TLS but skip chain & host verification
        insecure_skip_verify = false
        # HTTP response timeout (default: 5s)
        response_timeout = "20s"

        [inputs.nginx.log]
                files = ["/var/log/nginx/access.log","/var/log/nginx/error.log"]
        #       # grok pipeline script path
                pipeline = "nginx.p"
        [inputs.nginx.tags]
        # some_tag = "some_value"
        # more_tag = "some_other_value"
        # ...

配置完成后,使用命令行 datakit --restart 重启 DataKit 使配置生效。

更多 Nginx 采集器配置,可参考 Nginx。

步骤二:根据采集的日志,确定切割字段

开启 Nginx 采集器,配置日志文件路径,开启 Pipeline 以后,即可在观测云工作空间查看采集到的 Nginx 日志,在日志详情中,可查看按照 Pipeline 文件切割的字段属性。观察和分析日志,确定是否需要优化切割的字段。

步骤三:克隆并自定义官方库 Pipeline

在观测云工作空间日志 > Pipelines,点击 Pipeline 官方库,选择查看并克隆 nginx.p 的 Pipeline 文件。

  • 在过滤日志选择 “nginx”;
  • 在定义解析规则优化解析规则;
  • 在测试样本输入 nginx 日志数据,点击开始测试,在结果浮层中核对各样本的解析结果。

注意:

  • Pipeline 官方库自带多个日志样本测试数据,在“克隆”前可选择符合自身需求的日志样本测试数据;
  • 克隆的 Pipeline 修改保存后,日志样本测试数据同步保存。
2022/02/23 14:26:19 [error] 632#632: *62 connect() failed (111: Connection refused) while connecting to upstream, client: ::1, server: _, request: "GET /server_status HTTP/1.1", upstream: "http://127.0.0.1:5000/server_status", host: "localhost"

步骤四:保存 Pipeline 文件

所有必填项配置完成后,保存 Pipeline 文件,即可在日志 Pipelines 列表查看自定义的 Pipeline 文件。

在观测云工作空间创建的 Pipeline 文件统一保存在 /usr/local/datakit/Pipeline_remote 目录下。

注意:DataKit 有两个 Pipeline 目录,DataKit 会自动匹配该目录下的 Pipeline 文件。

  • Pipeline:官方库的 Pipeline 文件目录;
  • Pipeline_remote:观测云工作空间自定义 Pipeline 文件目录;
  • 若两个目录下存在同名 Pipeline 文件,DataKit 会优先匹配 Pipeline_remote 下的 Pipeline 文件。

步骤五:在观测云查看切割后的字段

在观测云工作空间的日志下,选择 nginx 的日志,在日志详情页,可以看到“属性”下的字段和字段值,这个就是我们日志切割后显示的字段和字段值。如

  • http_method: GET
  • http_url: /server_status
  • http_version: 1.1

更多阅读

以上观测云工作空间日志 Pipeline 使用手册,更多关于 Pipeline 和 日志采集切割的内容,可参考如下文档:

文档评价

文档内容是否对您有帮助?