利用 Filebeat 收集日志(上)

Filebeat 是用于转发和集中日志数据的轻量级传送程序。作为服务器上的代理安装,Filebeat监视您指定的日志文件或位置,收集日志事件,并将它们转发到Elasticsearch或Logstash进行索引。
Logstash 直接收集日志,需要安装JDK,并且会占用至少500M 以上的内存
生产一般使用filebeat代替logstash,基于go开发,部署方便,重要的是只需要10M多内存,比较节约资源。
filebeat 支持从日志,Syslog,Redis,Docker,TCP,UDP,标准输入等读取数据,再输入至Elasticsearch,logstash,Redis,Kafka等

Filebeat的工作方式如下:

启动Filebeat时,它将启动一个或多个输入,这些输入将在为日志数据指定的位置中查找。对于Filebeat所找到的每个日志,Filebeat都会启动收集器。每个收集器都读取一个日志以获取新内容,并将新日志数据发送到libbeat,libbeat会汇总事件并将汇总的数据发送到为Filebeat配置的输出。

https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-overview.html
https://www.elastic.co/guide/en/beats/filebeat/current/configuring-howto-filebeat.html
图片[1]-利用 Filebeat 收集日志(上)-李佳程的个人主页

注意:Filebeat 支持多个输入,但不支持同时有多个输出

1、安装 Filebeat

root@web01:~# wget https://mirrors.tuna.tsinghua.edu.cn/elasticstack/7.x/apt/pool/main/f/filebeat/filebeat-7.17.8-amd64.deb

root@web01:~# dpkg -i filebeat-7.17.8-amd64.deb 

添加新字段的配置说明

#添加新字段
vim /etc/filebeat/filebeat.yml
- type : log
  enabled: true
  paths:
    - /var/log/syslog
  fields:
    project: test-syslog  #添加fields.project和fields.env字段,可用于区分不同的日志
    env: test
  tags: ["syslog","test"]        #添加标签,也可以用于区分不同的日志

2、案例: 从标准输入读取再输出至标准输出

2.1、创建配置

root@web01:~# vim /etc/filebeat/stdin.yml

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

2.2、执行读取

root@web01:~# filebeat -e -c /etc/filebeat/stdin.yml
.....
hello,es  #输入,回车后,输出如下
{
  "@timestamp": "2023-01-03T08:55:19.537Z",
  "@metadata": {
    "beat": "filebeat",
    "type": "_doc",
    "version": "7.17.8"
  },
  "ecs": {
    "version": "1.12.0"
  },
  "host": {
    "name": "web01.test.com"
  },
  "agent": {
    "id": "2fe34205-12d8-4f37-a3f5-39e0d42f73e6",
    "name": "web01.test.com",
    "type": "filebeat",
    "version": "7.17.8",
    "hostname": "web01.test.com",
    "ephemeral_id": "fdac9f65-ed3e-4a4a-a51b-9a56898d2629"
  },
  "log": {
    "offset": 0,
    "file": {
      "path": ""
    }
  },
  "message": "hello,es",
  "input": {
    "type": "stdin"
  }
}

3、案例: 从标准输入读取再输出至 Json 格式的文件

3.1、创建配置

root@web01:~# vim /etc/filebeat/stdout_file.yml

filebeat.inputs:
- type: stdin
  enabled: true
  json.keys_under_root: true
output.file:
  path: "/tmp"
  filename: "filebeat.log"

3.2、执行读取

root@web01:~# filebeat -e -c /etc/filebeat/stdout_file.yml
.....
# 输入
{"name" : "lijiacheng", "age" : "18", "phone" : "0123456789" }

# Json格式整理
root@web01:~# apt -y install jq
root@web01:~# tail -f /tmp/filebeat.log | jq
{
  "@timestamp": "2023-01-03T09:27:39.715Z",
  "@metadata": {
    "beat": "filebeat",
    "type": "_doc",
    "version": "7.17.8"
  },
  "input": {
    "type": "stdin"
  },
  "ecs": {
    "version": "1.12.0"
  },
  "host": {
    "name": "web01.test.com"
  },
  "agent": {
    "name": "web01.test.com",
    "type": "filebeat",
    "version": "7.17.8",
    "hostname": "web01.test.com",
    "ephemeral_id": "b2feada7-6c79-408d-bbfa-56bafa4e894b",
    "id": "2fe34205-12d8-4f37-a3f5-39e0d42f73e6"
  },
  "log": {
    "offset": 0,
    "file": {
      "path": ""
    }
  },
  "name": "lijiacheng",
  "age": "18",
  "phone": "0123456789"
}

4、案例: 从文件读取再输出至标准输出

filebeat 会将每个文件的读取数据的相关信息记录在/var/lib/filebeat/registry/filebeat/log.json文件中,可以实现日志采集的持续性,而不会重复采集。

4.1、创建配置

root@web01:~# vim /etc/filebeat/file.yml

filebeat.inputs:
- type: log
  enabled: true
  paths:
  - /var/log/syslog
output.console:
  pretty: true
  enable: true

4.2、执行读取

root@web01:~# filebeat -e -c /etc/filebeat/file.yml

# 执行生成文件内容后echo hello,lj > /var/log/filebeat.log,可以看到下面的输出信息

{
  "@timestamp": "2023-01-03T09:36:43.692Z",
  "@metadata": {
    "beat": "filebeat",
    "type": "_doc",
    "version": "7.17.8"
  },
  "input": {
    "type": "log"
  },
  "ecs": {
    "version": "1.12.0"
  },
  "host": {
    "name": "web01.test.com"
  },
  "agent": {
    "id": "2fe34205-12d8-4f37-a3f5-39e0d42f73e6",
    "name": "web01.test.com",
    "type": "filebeat",
    "version": "7.17.8",
    "hostname": "web01.test.com",
    "ephemeral_id": "80dfb517-f84f-455d-bc11-bb42cee3f9a8"
  },
  "message": "hello,lj",
  "log": {
    "offset": 0,
    "file": {
      "path": "/var/log/filebeat.log"
    }
  }
}

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享