【Elastic (ELK) Stack 实战教程】05、Filebeat 日志收集实践(上)

目录

一、Filebeat 基本介绍

1.1 Filebeat 是什么

1.2 Filebeat 主要组件

1.3 Filebeat 工作流

1.4 Filebeat 配置说明

​二、Filebeat 基本使用 

2.1 Filebeat 安装

2.2 Filebeat 配置

2.3 Filebeat 从文件读取

2.4 Filebeat 输出至 ES 集群

2.5 Filebeat 自定义索引名称

三、Filebeat 收集系统日志实践

3.1 系统日志有哪些

3.2 系统日志收集思路

3.3 系统日志收集架构图

3.4 系统日志收集实践

3.4.1 环境准备

3.4.2 配置 rsyslog 

3.4.3 配置 filebeat

3.4.4 配置 Kibana

3.4.5 优化 filebeat


一、Filebeat 基本介绍

1.1 Filebeat 是什么

        Filebeat 是用于“转发”和“集中日志数据”的“轻量型数据采集器”Filebeat会监视指定的日志文件路径,收集日志事件并将数据转发到 ElasticSearch、Logstash、Redis、Kafka 存储服务器。

Filebeat 官网传送门:Filebeat overview | Filebeat Reference [8.6] | Elastic

1.2 Filebeat 主要组件

        Filebeat 包含两个主要组件,输入和收割机,两个组件协同工作将文件尾部最新数据发送出去。

  1. 输入 Input:输入负责管理收割机从哪个路径查找所有可读取的资源。

  2. 收割机 Harvester:负责逐行读取单个文件的内容,然后将内容发送到输出。 

1.3 Filebeat 工作流

        当 filebeat 启动后,filebeat 过 Input 读取指定的日志路径,然后为该日志启动一个收割进程harvester,每一个收割进程读取一个日志文件的新内容,并发送这些新的日志数据到处理程序spooler,处理程序会集合这些事件,最后 filebeat 会发送集合的数据到你指定的位置。 

1.4 Filebeat 配置说明

二、Filebeat 基本使用 

2.1 Filebeat 安装

Filebeat 7.8.1 下载地址:Filebeat 7.8.1 | Elastic

# 可以安装在任意节点(生产环境中则安装在需要收集日志的机器中)
[root@se-node3 ~]# rpm -ivh filebeat-7.8.1-x86_64.rpm 

[root@se-node3 ~]# systemctl enable --now filebeat.service 

2.2 Filebeat 配置

配置 Filebeat 从终端读入,从终端输出:

[root@se-node3 ~]# vim /etc/filebeat/test1.yml
filebeat.inputs:
- type: stdin
  enabled: true
output.console:
  pretty: true
  enable: true

输出一条测试语句:

[root@se-node3 ~]# filebeat -e -c /etc/filebeat/test1.yml 

# -e:指定 Filebeat 在启动后将日志输出到控制台(标准输出)。
# -c:指定 Filebeat 加载配置文件的路径。

2.3 Filebeat 从文件读取

配置 filebeat 从文件中读取数据:

[root@se-node3 ~]# vim /etc/filebeat/test2.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/*.log

output.console:
  pretty: true
  enable: true

[root@se-node3 ~]# filebeat -e -c /etc/filebeat/test2.yml 

新开一个终端,写入一个文件:

[root@se-node3 ~]# echo 123 >> /var/log/test2.log

可以看到收集到日志内容了:

2.4 Filebeat 输出至 ES 集群

输出读取内容至 ETasticsearch:

[root@se-node3 ~]# vim /etc/filebeat/test3.yml
filebeat.inputs:
- type: log                    # 收集日志的类型
  enabled: true                # 启用日志收集
  paths:
    - /var/log/*.log           # 日志所在路径

output.elasticsearch:          # 输出日志至 es
  hosts: ["192.168.170.132:9200", "192.168.170.133:9200", "192.168.170.134:9200"]   # es 集群 ip 和端口
  enabled: true

[root@se-node3 ~]# filebeat -e -c /etc/filebeat/test3.yml 

# 在另一个终端输入
[root@se-node3 ~]# echo 567 >> /var/log/test3.log
[root@se-node3 ~]# echo 567890 >> /var/log/test3.log

查看数据:

2.5 Filebeat 自定义索引名称

默认 Filebeat 写入 ES 的索引名称为 filebeat-*,如果希望修改索引名称:

  1. 修改 filebeat 配置文件;

  2. 删除 ES 的索引;删除 kibana 的索引;

  3. 重启 filebeat 服务重新产生新的索引。

# 备份原来的文件
[root@se-node3 ~]# cp /etc/filebeat/filebeat.yml /etc/filebeat/filebeat.yml_bak

[root@se-node3 ~]# vim /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log                    # 收集日志的类型
  enabled: true                # 启用日志收集
  paths:
    - /var/log/*.log           # 日志所在路径

output.elasticsearch:          # 输出日志至 es
  hosts: ["192.168.170.132:9200", "192.168.170.133:9200", "192.168.170.134:9200"]   # es 集群 ip 和端口
  enabled: true
  index: "system-%{[agent.version]}-%{+yyyy.MM.dd}"     # 自定义索引名称
setup.ilm.enabled: false                                # 索引生命周期 ilm 功能默认开启,开启情况下索引名称只能为 filebeat-*
setup.template.name: "system"                           # 定义模板名称
setup.template.pattern: "system-*"                      # 定义模板的匹配索引名称

[root@se-node3 ~]# systemctl restart filebeat.service 

默认情况下 Filebeat 写入到 ES 的索引分片为 1,如果需要修订分片,可以通过如下两种方式:

方式一:修改 filebeat 配置文件,增加如下内容然后删除索引的模板,以及索引,重新产生数据:

setup.template.settings:
  index.number_of_shards: 3            # 主分片数量
  index.number_of_replicas: 1          # 副本数量

方式二:使用 cerebro web页面修改

  1. 修改模板 settings 配置,调整分片以及副本;

  2. 删除模板关联的索引;

  3. 重启 filebeat 产生新的索引。

三、Filebeat 收集系统日志实践

3.1 系统日志有哪些

系统日志其实很宽泛、通常我们说的是 messagessecure、cron、dmesg、ssh、boot 等日志。

3.2 系统日志收集思路

        系统中有很多日志,挨个配置收集就变得非常麻烦了。所以我们需要对这些日志进行统一、集中的管理。可以通过 rsyslog 将本地所有类型的日志都写入 /var/1og/xxx.log 文件中,然后使用 filebeat 对该文件进行收集即可。

3.3 系统日志收集架构图

rsyslog+filebeat --> elasticsearch 集群 --> kibana

3.4 系统日志收集实践

3.4.1 环境准备

主机名称 IP 已安装服务
es-node1 192.168.170.132 es、cerebro
es-node2 192.168.170.133 es、Kibana
es-node3 192.168.170.134 es、Filebeat

3.4.2 配置 rsyslog 

[root@es-node3 ~]# vim /etc/rsyslog.conf 
*.*  /var/log/allapp.log        # 将本地所有类型的日志都保存到指定路径的文件里

[root@es-node3 ~]# systemctl restart rsyslog.service 

3.4.3 配置 filebeat

编辑 filebeat 配置文件,将本地 /var/log./allapp.log 日志采集至 elasticsearch 集群中。

[root@se-node3 ~]# vim /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log                    # 收集日志的类型
  enabled: true                # 启用日志收集
  paths:
    - /var/log/allapp.log           # 日志所在路径

output.elasticsearch:          # 输出日志至 es
  hosts: ["192.168.170.132:9200", "192.168.170.133:9200", "192.168.170.134:9200"]   # es 集群 ip 和端口
  enabled: true
  index: "system-%{[agent.version]}-%{+yyyy.MM.dd}"     # 自定义索引名称
setup.ilm.enabled: false                                # 索引生命周期 ilm 功能默认开启,开启情况下索引名称只能为 filebeat-*
setup.template.name: "system"                           # 定义模板名称
setup.template.pattern: "system-*"                      # 定义模板的匹配索引名称

[root@se-node3 ~]# systemctl restart filebeat.service 

3.4.4 配置 Kibana

配置 kibana 读取 elasticsearch 索引中的数据,然后进行展示。

[root@es-node2 ~]# rpm -ivh kibana-7.8.1-x86_64.rpm 

[root@es-node2 ~]# vim /etc/kibana/kibana.yml 
# kibana 默认监听端口
server.port: 5601
# kibana 监听地址段
server.host: "0.0.0.0"
# kibana 内部域名
server.name: "elk.kibana"
# kibana 从 es 集群获取数据
elasticsearch.hosts: 
  - "http://192.168.170.132:9200"
  - "http://192.168.170.133:9200"
  - "http://192.168.170.134:9200"

# kibana 汉化
i18n.locale: "zh-CN"

[root@es-node2 ~]# systemctl enable --now kibana.service 

配置 kibana,创建索引:

配置索引筛选名称:

点击 discover 查看索引的日志数据:

3.4.5 优化 filebeat

        kibana 展示的结果上有很多 Debug 消息,其实该类消息无需收集,所以我们可以对收集的日志内容进行优化,只收集警告 WARN、ERR、sshd 相关的日志。

1. 修改 filebeat 配置文件如下:

[root@se-node3 ~]# vim /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log                    # 收集日志的类型
  enabled: true                # 启用日志收集
  paths:
    - /var/log/allapp.log           # 日志所在路径
  include_lines: ['^WARN', '^ERR', 'sshd', '^CROND', '^systemd']    # 只收集 warn、err、sshd 类型的日志格式

output.elasticsearch:          # 输出日志至 es
  hosts: ["192.168.170.132:9200", "192.168.170.133:9200", "192.168.170.134:9200"]   # es 集群 ip 和端口
  enabled: true
  index: "system-%{[agent.version]}-%{+yyyy.MM.dd}"     # 自定义索引名称
setup.ilm.enabled: false                                # 索引生命周期 ilm 功能默认开启,开启情况下索引名称只能为 filebeat-*
setup.template.name: "system"                           # 定义模板名称
setup.template.pattern: "system-*"                      # 定义模板的匹配索引名称

[root@se-node3 ~]# systemctl restart filebeat.service 

2. 删除 ES 以及 kibana 的索引,然后重新生成 ES、Kibana 的索引:

重新创建 kibana 索引:

再次查看,数据只有 sshd 的了:

上一篇文章:【Elastic (ELK) Stack 实战教程】04、ElasticSearch 集群进阶及优化_Stars.Sky的博客-CSDN博客

下一篇文章:【Elastic (ELK) Stack 实战教程】06、Filebeat 日志收集实践(下)_Stars.Sky的博客-CSDN博客

猜你喜欢

转载自blog.csdn.net/weixin_46560589/article/details/129792850