ElastAlert教程8章:filebeat简单使用

filebeat安装好了,我们开始使用吧。


前台启动 filebeat

在控制台启动filebeat,只需要执行一个命令,这样启动的一个好处是方便调试:

./filebeat -e -c filebeat.yml
  • filebeat.yml 是默认的配置文件。
  • -c 表示指定配置文件
  • -e 输出到标准输出,默认输出到syslog和logs下

启动完成后,输出以下内容,表示成功:

2021-01-17T22:09:57.290+0800    INFO    registrar/migrate.go:112        Initialize registry meta file
2021-01-17T22:09:57.296+0800    INFO    registrar/registrar.go:108      No registry file found under: /root/filebeat-7.1.1-linux-x86_64/data/registry/filebeat/data.json. Creating a new registry file.
2021-01-17T22:09:57.302+0800    INFO    registrar/registrar.go:145      Loading registrar data from /root/filebeat-7.1.1-linux-x86_64/data/registry/filebeat/data.json
2021-01-17T22:09:57.302+0800    INFO    registrar/registrar.go:152      States Loaded from registrar: 0
2021-01-17T22:09:57.302+0800    INFO    crawler/crawler.go:72   Loading Inputs: 1
2021-01-17T22:09:57.302+0800    INFO    crawler/crawler.go:106  Loading and starting Inputs completed. Enabled inputs: 0
2021-01-17T22:09:57.302+0800    INFO    cfgfile/reload.go:150   Config reloader started
2021-01-17T22:09:57.302+0800    INFO    cfgfile/reload.go:205   Loading of config files completed.
2021-01-17T22:09:57.476+0800    INFO    add_cloud_metadata/add_cloud_metadata.go:350    add_cloud_metadata: hosting provider type detected as openstack, metadata={"availability_zone":"cn-southwest-203a","instance":{"id":"i-00035d00","name":"ecs-51a6.novalocal"},"machine":{"type":"s3.large.2"},"provider":"openstack"}

后台启动filebeat

调试完成,需要后台启动,执行如下命令:

nohup ./filebeat -e -c filebeat.yml > /dev/null &

测试 filebeat 能否正常采集数据

接下来,我们试验 filebeat 是怎么接受标准输入的数据的。所有的配置文件可以在git上下载: https://gitee.com/guguo33/log-alarm-component.git

  1. 新建一个配置文件 test1.yml
  2. 启动 filebeat
  3. 在标准输入中打印内容
filebeat.inputs: 
- type: stdin 
  enabled: true 
output.console: 
  pretty: true
  enable: true

这个配置文件的意思是:

  • filebeat.inputs 输入配置
  • type 为 stdio 表示从标准输入中采集数据
  • enabled 表示要是否使用这个配置,为true,表示从标准输入获取数据
  • output.console 表示输出配置
  • pretty: true 表示对输出进行美化,如果为false,那么打印出来的内容就不好看
  • enable 同样表示是否使用这个配置

更改后,重新执行 filebeat 启动命令。

./filebeat -e -c test1.yml

启动后,可以如下:

2021-01-17T20:29:48.387+0800    INFO    [monitoring]    log/log.go:144  Non-zero metrics in the last 30s        {"monitoring": {"metrics": {"beat":{"cpu":{"system":{"ticks":20},"total":{"ticks":70,"time":{"ms":2},"value":70},"user":{"ticks":50,"time":{"ms":2}}},"handles":{"limit":{"hard":65535,"soft":65535},"open":5},"info":{"ephemeral_id":"14705141-e937-438e-9c9b-58db65ca9b2e","uptime":{"ms":660013}},"memstats":{"gc_next":4194304,"memory_alloc":2170296,"memory_total":12280368}},"filebeat":{"harvester":{"open_files":0,"running":1}},"libbeat":{"config":{"module":{"running":0}},"pipeline":{"clients":1,"events":{"active":0}}},"registrar":{"states":{"current":0}},"system":{"load":{"1":0.01,"15":0.05,"5":0.02,"norm":{"1":0.005,"15":0.025,"5":0.01}}}}}}

由于配置文件是从标准输出读取数据的,所以,你现在可以任意输入点什么,可以获得相应的格式化后的数据:

aaa
{
  "@timestamp": "2021-01-17T03:31:08.305Z",
  "@metadata": {
    "beat": "filebeat",
    "type": "_doc",
    "version": "7.1.1"
  },
  "agent": {
    "ephemeral_id": "14705141-e937-438e-9c9b-58db65ca9b2e",
    "hostname": "k8s-nfs",
    "id": "ae9b8e29-1935-4551-8e13-e1f38c74ee45",
    "version": "7.1.1",
    "type": "filebeat"
  },
  "ecs": {
    "version": "1.0.0"
  },
  "log": {
    "file": {
      "path": ""
    },
    "offset": 0
  },
  "message": "aaa",
  "input": {
    "type": "stdin"
  },
  "host": {
    "name": "my-node"
  }
}

这段输出中 ,aaa 是我输入的,后面的json是 filebeat 格式化我的输入之后的结果。


让输出格式不那么好看

把配置文件改一下,就能让输出不是那么好看。

filebeat.inputs: 
- type: stdin 
  enabled: true 
output.console: 
  pretty: false
  enable: true

改动配置文件后,重启filebeat,就能得到如下结果:

a
{"@timestamp":"2021-01-15T03:44:35.250Z","@metadata":{"beat":"filebeat","type":"_doc","version":"7.1.1"},"log":{"offset":0,"file":{"path":""}},"message":"a","input":{"type":"stdin"},"host":{"name":"k8s-nfs"},"agent":{"ephemeral_id":"977f0d9b-1178-4eca-b44b-8092e01334d3","hostname":"k8s-nfs","id":"ae9b8e29-1935-4551-8e13-e1f38c74ee45","version":"7.1.1","type":"filebeat"},"ecs":{"version":"1.0.0"}}

让 filebeat 接受日志内容

接下来,我们试验 filebeat 是怎么接受日志文件的内容的。

  1. 新建一个日志目录 /root/logs
  2. 新建一个配置文件
  3. 在 /root/logs 创建日志文件
  4. filebeat 收集日志

将 filebeat.yml 文件中的 paths 改为 /root/logs/* , 这样就可以收集日志了。

filebeat.inputs: 
- type: log
  enabled: true
  paths: ["/root/logs/*.log"]
output.console: 
  pretty: true
  enable: true

这个配置详细解释如下: - type 为log ,这个很重要,这表示从日志文件中获取,不是从标准输入中获取 - paths 是一个数组,代表需要收集的文件的路径,可以用 * 号表示通配符,收集多个文件

启动filebeat,命令如下:

./filebeat -e -c test3.yml

等待有输出后,我们向 /root/logs/ 中加一点日志

echo aaa >> /root/logs/1.log

输出结果如下:

{
  "@timestamp": "2021-01-17T04:05:26.743Z",
  "@metadata": {
    "beat": "filebeat",
    "type": "_doc",
    "version": "7.1.1"
  },
  "message": "aaa",
  "input": {
    "type": "log"
  },
  "ecs": {
    "version": "1.0.0"
  },
  "host": {
    "name": "my-node"
  },
  "agent": {
    "version": "7.1.1",
    "type": "filebeat",
    "ephemeral_id": "0079d729-6696-405c-b850-78ad3143404f",
    "hostname": "my-node",
    "id": "ae9b8e29-1935-4551-8e13-e1f38c74ee45"
  },
  "log": {
    "file": {
      "path": "/root/logs/a.log"
    },
    "offset": 36
  }
}

注意: - "message": "aaa" , 其中aaa就是获取的日志信息 - 其他字段代码什么意思,我们后续在解释

更多字段的翻译,我们在下节课讲解。