目录
1 filebeat介绍
1.1 filebeat和beat的关系
filebeat是Beats中的一员。
Beats是一个轻量级日志采集器,Beats家族有6个成员,早期的ELK架构中使用Logstash收集、解析日志,但是Logstash对内存、cpu、io等资源消耗比较高。相比Logstash,Beats所占系统的CPU和内存几乎可以忽略不计。
目前Beats包含六种工具:
1、Packetbeat:网络数据(收集网络流量数据)
2、Metricbeat:指标(收集系统、进程和文件系统级别的CPU和内存使用情况等数据)
3、Filebeat:日志文件(收集文件数据)
4、Winlogbeat:windows事件日志(收集Windows事件日志数据)
5、Auditbeat:审计数据(收集审计日志)
6、Heartbeat:运行时间监控(收集系统运行时的数据)
1.2 filebeat是什么
Filebeat是用于转发和收集日志数据的轻量级传送工具。Filebeat监视你指定的日志文件或位置,收集日志事件,并将它们转发到Elasticsearch或 Logstash中。
Filebeat的工作方式如下:启动Filebeat时,它将启动一个或多个输入,这些输入将在为日志数据指定的位置中查找。对于Filebeat所找到的每个日志,Filebeat都会启动收集器。每个收集器都读取单个日志以获取新内容,并将新日志数据发送到libbeat,libbeat将聚集事件,并将聚集的数据发送到为Filebeat配置的输出。
工作的流程图如下:
Filebeat 有两个主要组件:
- harvester:一个harvester负责读取一个单个文件的内容。harvester逐行读取每个文件,并把这些内容发送到输出。每个文件启动一个harvester。
- Input:一个input负责管理harvesters,并找到所有要读取的源。如果input类型是log,则input查找驱动器上与已定义的log日志路径匹配的所有文件,并为每个文件启动一个harvester。
1.3 filebeat工作原理
在任何环境下,应用程序都有停机的可能性。 Filebeat 读取并转发日志行,如果中断,则会记住所有事件恢复联机状态时所在位置。
Filebeat带有内部模块(auditd,Apache,Nginx,System和MySQL),可通过一个指定命令来简化通用日志格式的收集,解析和可视化。
FileBeat 不会让你的管道超负荷。FileBeat 如果是向 Logstash 传输数据,当 Logstash 忙于处理数据,会通知 FileBeat 放慢读取速度。一旦拥塞得到解决,FileBeat将恢复到原来的速度并继续传播。
Filebeat保持每个文件的状态,并经常刷新注册表文件中的磁盘状态。状态用于记住harvester正在读取的最后偏移量,并确保发送所有日志行。Filebeat将每个事件的传递状态存储在注册表文件中。所以它能保证事件至少传递一次到配置的输出,没有数据丢失
1.4 传输方案
- output.elasticsearch
如果你希望使用 filebeat 直接向 elasticsearch 输出数据,需要配置 output.elasticsearch
output.elasticsearch:
hosts: ["192.168.92.10:9200"]
- output.logstash
如果使用filebeat向 logstash输出数据,然后由 logstash 再向elasticsearch 输出数据,需要配置 output.logstash。 logstash 和 filebeat 一起工作时,如果 logstash 忙于处理数据,会通知FileBeat放慢读取速度。一旦拥塞得到解决,FileBeat 将恢复到原来的速度并继续传播。这样,可以减少管道超负荷的情况。
output.logstash:
hosts: ["192.168.40.180:5044"]
- output.kafka
如果使用filebeat向kafka输出数据,然后由 logstash 作为消费者拉取kafka中的日志,并再向elasticsearch 输出数据,需要配置 output.logstash
output.kafka:
enabled: true
hosts: ["192.168.40.180:9092"]
topic: elfk8stest
2 安装
2.1 filebeat-源码包安装8.1
1、下载
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.1ls
.0-linux-x86_64.tar.gz
tar xzvf filebeat-8.1.0-linux-x86_64.tar.gz
ln -s filebeat-8.1.0-linux-x86_64 filebeat
2、创建密钥库
cd /usr/local/filebeat
# 创建密钥库
./filebeat keystore create
# 添加密钥
./filebeat keystore add ES_PWD
# 回车后输入elastic的密码
./filebeat keystore list
# 删除密钥
./filebeat keystore remove ES_PWD
3、修改filebeat配置文件
vim /usr/local/filebeat/filebeat.yml
cat filebeat.yml
filebeat.inputs:
- type: filestream
enabled: true
paths:
- /var/log/*.log
#filebeat.config.modules:
# path: ${path.config}/modules.d/*.yml
# reload.enabled: true
output.elasticsearch:
hosts: "https://192.168.92.10:9200"
username: "elastic"
password: "${ES_PWD}"
ssl.verification_mode: none
setup.kibana:
host: "https://192.168.92.10:5601"
username: "elastic"
password: "${ES_PWD}"
#username: "kibana"
#password: "zsnuTKfb_dE18YCbhTCa"
# 下面的数据先不配置
processors:
- add_host_metadata:
when.not.contains.tags: forwarded
- add_cloud_metadata: ~
- add_docker_metadata: ~
- add_kubernetes_metadata: ~
添加参数的原因:ssl.verification_mode: none
解决报错:
修改filebeat配置文件(使用模块的配置)
# 因为默认是不可用的,所以需要手动开启
./filebeat modules list
# 从安装目录中,启用一个或多个模块
./filebeat modules enable mysql
# 在配置文件filebeat.yml 中设置
- module: nginx
access:
enabled: true
var.paths: ["/var/log/nginx/access.log*"]
4、配置快速启动文件
vi /usr/lib/systemd/system/filebeat.service
[Unit]
Description=filebeat
After=network.target
[Service]
Type=simple
#LimitNOFILE=100000
#LimitNPROC=100000
Restart=no
ExecStart=/usr/local/filebeat/filebeat -c /usr/local/filebeat/filebeat.yml
PrivateTmp=true
[Install]
WantedBy=multi-user.target
注意
如果是ubuntu系统,glibc版本为2.35,启动filebeat则会报错:Fatal glibc error: rseq registration failed
# ubuntu查看glibc版本
ldd --version
# GLIBC 2.35 为glibc的版本,版本是2.35
ldd (Ubuntu GLIBC 2.35-0ubuntu3.4) 2.35
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
解决:
# 在filebeat配置文件中添加如下内容:
vim filebeat.yml
#
seccomp:
default_action: allow
# 或者以下内容:
seccomp:
default_action: errno
syscalls:
- action: allow
names:
- accept
- accept4
- access
- arch_prctl
- bind
- brk
- chmod
- chown
- clock_gettime
- clone
- clone3
- close
- connect
- dup
- dup2
- epoll_create
- epoll_create1
- epoll_ctl
- epoll_pwait
- epoll_wait
- exit
- exit_group
- fchdir
- fchmod
- fchmodat
- fchown
- fchownat
- fcntl
- fdatasync
- flock
- fstat
- fstatfs
- fsync
- ftruncate
- futex
- getcwd
- getdents
- getdents64
- geteuid
- getgid
- getpeername
- getpid
- getppid
- getrandom
- getrlimit
- getrusage
- getsockname
- getsockopt
- gettid
- gettimeofday
- getuid
- inotify_add_watch
- inotify_init1
- inotify_rm_watch
- ioctl
- kill
- listen
- lseek
- lstat
- madvise
- mincore
- mkdirat
- mmap
- mprotect
- munmap
- nanosleep
- newfstatat
- open
- openat
- pipe
- pipe2
- poll
- ppoll
- pread64
- pselect6
- pwrite64
- read
- readlink
- readlinkat
- recvfrom
- recvmmsg
- recvmsg
- rename
- renameat
- rseq
- rt_sigaction
- rt_sigprocmask
- rt_sigreturn
- sched_getaffinity
- sched_yield
- sendfile
- sendmmsg
- sendmsg
- sendto
- set_robust_list
- setitimer
- setsockopt
- shutdown
- sigaltstack
- socket
- splice
- stat
- statfs
- sysinfo
- tgkill
- time
- tkill
- uname
- unlink
- unlinkat
- wait4
- waitid
- write
- writev
5、在kibana中查看
添加
查看