klog-filebeat

最近更新时间:2020-10-10 15:58:53

klog-filebeat介绍

Filebeat是由Elastic开发的一款开源日志采集软件,使用者可以将其部署到需要采集日志的机器上对日志进行采集,并输出到指定的日志接收端如elasticsearch、kafka、logstash等等。KLog团队对开源Filebeat进行了二次开发并提供新增特性,我们称之klog-filebeat,其新增特性如下:

  • 支持输出日志到klog:
    • 支持输出到多个项目和日志池
    • 可为每个日志池配置过滤器,让只有符合条件的日志条目输出到对应的日志池
    • 可选择仅输出部分字段
    • 支持动态加载access_key、secret_key
  • 支持通过grok方式解析日志,将普通文本解析为json对象。

关于Filebeat自身的详细特性,可以参考filebeat官方文档

下载

  • 最新Linux版本的klog-filebeat可以点击此处下载
  • 或直接在您的服务器上下载:
wget "https://ks3-cn-beijing.ksyun.com/klog/filebeat/klog-filebeat.latest.tar.gz"

安装

安装比较简单,解压缩到您需要的路径即可:

tar xvf klog-filebeat.latest.tar.gz

运行

执行如下命令,运行klog-filebeat。

./filebeat -e

采集器配置

klog-filebeat需要2个配置文件,分别是filebeat.ymlcredential.ini,这两个配置文件均在klog-filebeat压缩包中,解压后即可看到。

credential.ini

这个配置文件的内容是您的金山云access_keysecret_key。内容示例:

access_key = AKLT6-bcdesfg-ajsIjfiejI9
secret_key = Jf2390j9E9finfiDIOFJFD8483+dfsDVdOCTFazCnDEAw+mxA/7Lfeh3ugErwoKKb5wNOIei==

filebeat.yml

这个是主配置文件,内容示例如下:

filebeat.inputs:
- type: log
  enabled: true
  paths:
    # 需要采集的日志文件
    - /var/log/*.log

output.klog:
  endpoint: https://klog-cn-beijing.ksyun.com
  region: BEIJING
  credential:
    path: credential.ini
    check_interval: 60
  targets:
    - project_name: yourProjectName
      pool_name: yourPoolName
      fields:
        - key: message

关于output.klog的详细配置说明可参考下面的yml文件完整配置。其余详细配置可参考filebeat官方文档

注意:在输出到klog的情况下,filebeatmodules功能无法使用。

yml文件完整配置

文件完整示例以及配置项含义分别如下:

# ------------------------------ Filebeat Input ----------------------------
filebeat.inputs:
- type: log
  enabled: true

  # 需要采集的日志文件
  paths:
    - /your/app/log/path.log

  # 如果您的日志是以json形式打印的,则可设为true或false,这样filebeat会自动解析json内容。
  # 设置为false时,解析出来的map对象存在于filebeat事件对象的名为json的字段中。
  # 设置为true时,解析出来的map对象的各字段直接存在于filebeat事件对象中。
  # 删除这个配置项时,日志作为普通文本,存在于filebeat事件对象的message字段中。
  json.keys_under_root: false

# ------------------------------ KLog Output -------------------------------

# klog-filebeat特有配置。表示将采集到的日志发送到klog服务端。
output.klog:
  # klog服务的日志接收地址。如果使用内网域名,请使用http协议
  endpoint: https://klog-cn-beijing.ksyun.com
  region: BEIJING

  # 最大批量条数,默认为2048
  bulk_max_size: 2048

  # 用于发送的协程数,默认为1
  worker_num: 1

  # 发送时使用的压缩传输方式,默认为lz4。取消压缩写none
  compress_method: lz4

  # 从哪个文件读取您在金山云的 access_key 和 secret_key
  credential:
    # 文件路径
    path: credential.ini

    # 每隔多少秒检查一次ini文件的修改时间。如果发生改变,则重新加载ini
    check_interval: 60

  # 发送到指定的klog项目和日志池。每个target代表一对项目和日志池。
  # 可以设置多个target, 各target之间支持重复设置项目和日志池。
  targets:
      # 目标项目名称
    - project_name: yourProjectName

      # 使用字段yourField1的值作为目标项目名称。
      # project_name和project_name_from_field可以只配置其中一项。如果两项同时配置,则优先使用project_name_from_field。
      # project_name_from_field: yourField1

      # 目标日志池名称
      pool_name: yourPoolName

      # 使用字段yourField2的值作为目标日志池名称。
      # pool_name和pool_name_from_field可以只配置其中一项。如果两项同时配置,则优先使用pool_name_from_field。
      # pool_name_from_field: yourField2

      # 需要发送的段,可以设置多个,不设置则为发送事件的所有字段。
      fields:

        # 需要发送的字段名。字段名里面不可有"."
        - key: message

          # 该字段是map类型时,如果设置为true,则表示只发送它的后代字段。默认为false。
          skip_root: false

      # 过滤器。可以设置多个。匹配所有过滤器的日志条目将会发送到该target。未配置filters的,会全部发送。
      filters:
          # 对哪个字段过滤
        - key: message

          # 阈值。支持字符串和数值。所有数值在内部都转换成float64
          value: ""

          # 比较符。支持的计算有:>, >=, <, <=, ==, !=, exists, not_exists, contains(仅字符串), not_contain(仅字符串)
          operator: "!="

# ------------------------------ Klog新增的处理器 --------------------------
  processors:

  #grok处理器可以把普通文本日志解析为json对象。
  #由于grok是基于正则表达式的,所以开启该选项会增加filebeat的资源消耗。
  - grok:
      # 解析哪个字段
      source_field: message

      # 解析结果保存到哪个字段
      target_field: yourField3

      # 用于解析的表达式
      pattern: "%{IPORHOST:client} %{WORD:method} %{URIPATHPARAM:request} %{INT:size} %{NUMBER:duration}"

      # 用于解析的自定义表达式,不是必填的
      patterns:
        MYPATTERN: "\d+"

filebeat事件

filebeat事件是原生Filebeat数据处理过程中的重要概念。

Filebeat采集到的每条日志,在Filebeat内部都表示为一条事件数据。 Filebeat对日志数据字段的读取、转换和新增都是对事件字段的操作。一条简单的事件数据如下:

{
    "@timestamp": "2020-09-21T03:08:07.682Z",
    "@metadata": {
        "beat": "filebeat",
        "type": "_doc",
        "version": "7.9.1"
    },
    "log": {
        "offset": 423019,
        "file": {
            "path": "/path/to/your.log"
        }
    },
    "message": "2020-09-21 03:08:07.682 [INFO][47] ipsets.go 304: Finished resync family=\"inet\" numInconsistenciesFound=0 resyncDuration=2.18885ms",
    "input": {
        "type": "log"
    },
    "ecs": {
        "version": "1.5.0"
    },
    "host": {
        "name": "filebeat-cwssh"
    },
    "agent": {
        "name": "filebeat-cwssh",
        "type": "filebeat",
        "version": "7.9.1",
        "hostname": "filebeat-cwssh",
        "ephemeral_id": "decf7010-9f78-41f7-85b6-7a0cc5ba4115",
        "id": "7b2bc79a-9da8-4038-ba55-993af4d9ac71"
    }
}

filebeat使用字段massage保存日志原始内容。 在配置filebeat.yml时,可以使用诸如"message"、"log.file.path"、"host.name"、"json.field1"等形式表示事件的字段。

金山云,开启您的云计算之旅

免费注册