• 热门
  • 基础
  • 数据库
  • 安全
  • 大数据
  • 人工智能
  • 混合云
  • 开发与运维
  • 企业应用

应用服务

行业引擎

全部文档
当前文档

暂无内容

如果没有找到您期望的内容,请尝试其他搜索词

文档中心

klog-filebeat

最近更新时间:2022-07-12 20:15:59

klog-filebeat介绍

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

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

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

前提条件

  1. 已创建工程和日志池。更多信息,请参见工程日志池
  2. 已开通服务器的80端口和443端口。
  3. 已完成Klog-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。内容示例:

[klog]
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
  credential:
    path: credential.ini
    check_interval: 60
  targets:
    - project_name: yourProjectName
      pool_name: yourPoolName
      fields:
        - key: message

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

注意:在输出到klog的情况下,filebeatmodules功能无法使用。
内网endpoint:http://klog-cn-beijing-internal.ksyun.com

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

  # 最大批量条数,默认为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+"

  • 说明:数据解析时,如果存在需要跳过的字符,对字符做解析后不设置字段名称即可,具体示例如下。
    原始日志数据内容如下:
127.0.0.1 - - [26/Mar/2020:19:09:19 -0400] "GET / HTTP/1.1" 401 - "" "Mozilla/5.0 Gecko" "-"

数据解析表达式如下:

pattern: "%{IPORHOST}\s-\s-\s\[%{HTTPDATE:timestamp}\]"

通过如上表达式,只解析出timestamp字段对应的内容”26/Mar/2020:19:09:19 -0400“。

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"等形式表示事件的字段。

纯净模式常规模式

纯净模式

点击可全屏预览文档内容

鼠标选中内容,快速反馈问题

如果在文档使用中出现问题,可选中有问题的部分进行快速反馈,我们将跟进处理。
不再提示
好的,我知道了

聆听反馈