logstash 也可以收集日志,但是数据量大时太消耗系统新能。而filebeat是轻量级的,占用系统资源极少。
Filebeat 由两个主要组件组成:harvester 和 prospector。
采集器 harvester 的主要职责是读取单个文件的内容。读取每个文件,并将内容发送到 the output。 每个文件启动一个 harvester,harvester 负责打开和关闭文件,这意味着在运行时文件描述符保持打开状态。如果文件在读取时被删除或重命名,Filebeat 将继续读取文件。
查找器 prospector 的主要职责是管理 harvester 并找到所有要读取的文件来源。如果输入类型为日志,则查找器将查找路径匹配的所有文件,并为每个文件启动一个 harvester。每个 prospector 都在自己的 Go 协程中运行。
下载地址:www.elastic.co/downloads/beats/filebeat
百度云elk
- tar -zxvf filebeat-7.9.3-linux-x86_64.tar.gz -C /usr/local
- cd /usr/local/
- mv filebeat-7.9.3-linux-x86_64 filebeat
- cd filebeat/
- [root@node1 filebeat]# ls -l
- fields.yml filebeat filebeat.reference.yml filebeat.yml kibana
- LICENSE.txt module modules.d NOTICE.txt README.md
filebeat为应用程序
cd /usr/local/filebeat/filebeat.yml 是配置文件
modules.d的目录下放置的日志收集模板,实现了模块化的日志收集
- [root@node1 modules.d]# ls
- activemq.yml.disabled coredns.yml.disabled ibmmq.yml.disabled microsoft.yml.disabled
- okta.yml.disabled squid.yml.disabled apache.yml.disabled crowdstrike.yml.disabled icinga.yml.disabled misp.yml.disabled osquery.yml.disabled suricata.yml.disabled
- auditd.yml.disabled cylance.yml.disabled iis.yml.disabled mongodb.yml.disabled
- panw.yml.disabled system.yml.disabled aws.yml.disabled elasticsearch.yml.disabled imperva.yml.disabled mssql.yml.disabled postgresql.yml.disabled tomcat.yml.disabled
- azure.yml.disabled envoyproxy.yml.disabled infoblox.yml.disabled mysql.yml.disabled
- rabbitmq.yml.disabled traefik.yml.disabled barracuda.yml.disabled f5.yml.disabled iptables.yml.disabled nats.yml.disabled radware.yml.disabled zeek.yml.disabled
- bluecoat.yml.disabled fortinet.yml.disabled juniper.yml.disabled netflow.yml.disabled
- redis.yml.disabled zscaler.yml.disabled cef.yml.disabled googlecloud.yml.disabled kafka.yml.disabled netscout.yml.disabled santa.yml.disabled
- checkpoint.yml.disabled gsuite.yml.disabled kibana.yml.disabled nginx.yml.disabled
- sonicwall.yml.disabled cisco.yml.disabled haproxy.yml.disabled logstash.yml.disabled o365.yml.disabled
- sophos.yml.disabled
配置filebeat.yml
注意 以下使用“-” 为首字母的,要求前面不能使用tab做缩进,
- filebeat.inputs: #定义日志输入的开始
- - type: log
-
- #注意格式,收集日志类型为日志,还可以是redis,UDP,TCP,docker,syslog,stdin等
- enabled: true #使用手动模式,如果false将使用modules.d目录下的模块方式
- paths: #要收集的日志的路径
- - /var/log/messages
- - /var/log/secure
- #如果日志较多,可以模糊的填写,如 - /data/nginx/logs/ngix_*.log
- # - /var/log/*.log 的配置会获取/var/log下所有子目录中以.log结尾的日志,而不会查找/var/log/目录下的.log文件。
- fields:
- log_topic:osmessages #osmessages是自己定义主体的名字
- name: "10.10.10.56" #指定名字,不配置时默认使用主机名
- output.kafka:
- eanbled: true
- hosts: ["10.10.10.71:9092","10.10.10.72:9092","10.10.10.73:9092"] #kafka集群的地址和端口号
- version: 2.0.1 #kafka的版本号
- topic: '%{[fields][log_topic]}' #也可以fields.log_topic的写法
- partition.round_robin: #采用轮询的方式
- reachable_only: true
- worker: 2
- required_acks: 1 #有1,2,3等可写,1最大限度保证
- compression: gzip
- max_message_bytes: 10000000
- logging.level: debug #info,warming,error等可写,定义 日志级别
-
- 配置里还包含一些过滤条件,如行排除,行包含,文件排除等
- exclude_lines: ['^DBG']
- include_lines: ['^ERR', '^WARN']
- exclude_files: ['.gz$']
以上配置使用了kafka作为filebeat的输出,
配置
- # ============================== Filebeat modules ==============================
-
- filebeat.config.modules:
- # Glob pattern for configuration loading
- path: ${path.config}/modules.d/*.yml
-
- # Set to true to enable config reloading
- reload.enabled: false
-
- # Period on which files under path should be checked for changes
- #reload.period: 10s
-
- # ======================= Elasticsearch template setting =======================
-
- 文档中还有一些模块的配置,如上
- 由于我们在
- filebeat.inputs:
- - type: log
- enabled: true 这里我们设置为了true,使用了手动配置的方式,屏蔽了快速模块,这里配置为false时,才使用模块配
- 置
使用./filebeat test config 或者./filebeat -c filebeat.yml -configtest 对配置文件进行格式测试。检查启动filebeat
- more filebeat.yml
-
- nohup /usr/local/filebeat/filebeat -e -c /usr/local/filebeat/filebeat.yml &
测试
tail -f nohup.out 查看收集的日志
-
- "@timestamp": "2023-08-28T07:56:14.266Z", 时间戳
- "@metadata": {
- "beat": "filebeat",
- "type": "_doc",
- "version": "7.9.3"
- },
- "log": { 类型
- "file": {
- "path": "/var/log/secure"
- },
- "offset": 508431 位置,偏移量
- },
- "message": "Aug 28 15:56:12 node1 sshd[31513]: pam_limits(sshd:session): invalid line 'End of file' -
- skipped",
- "fields": { 自定义的域
- "log_topic": "osmessages"
- },
- "input": { 类型
- "type": "log"
- },
- "agent": {
- "id": "a5a5cdf5-42f5-40a8-8c4c-068b76a2b22c",
- "name": "10.10.10.56",
- "type": "filebeat",
- "version": "7.9.3",
- "hostname": "node1",
- "ephemeral_id": "826d8757-65f0-4838-b915-409eba0cd6bf"
- },
- "ecs": {
- "version": "1.5.0"
- },
- "host": {
- "name": "10.10.10.56"
- }
- }
我们看到,很多信息都是filebeat附带的一些信息。 我们可以通过配置参数的过滤掉一些信息。
- # ================================= Processors =================================
- processors:
- # - add_host_metadata:
- # when.not.contains.tags: forwarded
- # - add_cloud_metadata: ~
- # - add_docker_metadata: ~
- # - add_kubernetes_metadata: ~
-
- - drop_fields:
- fields: ["host","input","offset","ecs","log","agent.id"]
drop_fields:所定义的就是不需要在日志中显示的filebeat自带的一些信息。
上面的配置信息agent.id ,因为agent下有很多个属性,仅过滤掉id这个属性
- "agent": {
- "id": "a5a5cdf5-42f5-40a8-8c4c-068b76a2b22c",
- "name": "10.10.10.56",
- "type": "filebeat",
- "version": "7.9.3",
- "hostname": "node1",
- "ephemeral_id":
这样配置后,将在日志文件中过滤掉 以上属性的内容,仅显示留下的内容。
通过tail -f nohup.out查看本机产生的日志
通过在kafka机器上用过消费来开传到kafka上的日志
cd /usr/local/kafka/bin
./kafka-console-consumer.sh --bootstrap-server 10.10.10.71:9092,10.10.10.72:9092,10.10.10.73:9092 --topic
osmessages