ELK · Filebeat的使用

一、ElasticStack的组成

在这里插入图片描述

二、FileBeat

1、简介

beats 是一个免费且开放的平台,集合了多种单一用途数据采集器。它们从成百上千或成千上万台机器和系统向 Logstash 或 Elasticsearch 发送数据。

这边我们使用beat下面的FileBeat日志采集工具

FileBeat轻量型日志采集器

当您要面对成百上千、甚至成千上万的服务器、虚拟机和容器生成的日志时,请告别 SSH 吧。Filebeat 将为您提供一种轻量型方法,用于转发和汇总日志与文件,让简单的事情不再繁杂。

汇总、“tail -f”和搜索

启动 Filebeat 后,打开 Logs UI,直接在 Kibana 中观看对您的文件进行 tail 操作的过程。通过搜索栏按照服务、应用程序、主机、数据中心或者其他条件进行筛选,以跟踪您的全部汇总日志中的异常行为。

性能稳健,不错过任何检测信号

无论在任何环境中,随时都潜伏着应用程序中断的风险。Filebeat 能够读取并转发日志行,如果出现中断,还会在一切恢复正常后,从中断前停止的位置继续开始。

Filebeat 让简单的事情简单化

Filebeat 内置有多种模块(Apache、Cisco ASA、Microsoft Azure、NGINX、MySQL 等等),可针对常见格式的日志大大简化收集、解析和可视化过程,只需一条命令即可。之所以能实现这一点,是因为它将自动默认路径(因操作系统而异)与 Elasticsearch 采集节点管道的定义和 Kibana 仪表板组合在一起。不仅如此,数个 Filebeat 模块还包括预配置的 Machine Learning 任务。

它不会导致您的管道过载

当将数据发送到 Logstash 或 Elasticsearch 时,Filebeat 使用背压敏感协议,以应对更多的数据量。如果 Logstash 正在忙于处理数据,则会告诉 Filebeat 减慢读取速度。一旦拥堵得到解决,Filebeat 就会恢复到原来的步伐并继续传输数据。

输送至 Elasticsearch 或 Logstash。在 Kibana 中实现可视化。

Filebeat 是 Elastic Stack 的一部分,因此能够与 Logstash、Elasticsearch 和 Kibana 无缝协作。无论您要使用 Logstash 转换或充实日志和文件,还是在 Elasticsearch 中随意处理一些数据分析,亦或在 Kibana 中构建和分享仪表板,Filebeat 都能轻松地将您的数据发送至最关键的地方。

在这里插入图片描述

2、部署运行

mkdir /opt/software/beats 
tar -xvf filebeat-6.2.2-linux-x86_64.tar.gz 
cd filebeat-6.2.2-linux-x86_64 

#创建如下配置文件 test.yml 
filebeat.prospectors: 
- type: stdin 
  enabled: true 
setup.template.settings: 
  index.number_of_shards: 3 
output.console: 
  pretty: true 
  enable: true 
  
#启动filebeat 
./filebeat -e -c test.yml 

#输入hello运行结果如下: 
hello 
{ 
	"@timestamp": "2019-01-12T12:50:03.585Z", 
	"@metadata": { #元数据信息 
		"beat": "filebeat", 
		"type": "doc", 
		"version": "6.2.2" 
	},
	"source": "", 
	"offset": 0, 
	"message": "hello", #输入的内容 
	"prospector": { #标准输入勘探器 
		"type": "stdin" 
	},
	"input": { #控制台标准输入 
	"	type": "stdin" 
	},
	"beat": { #beat版本以及主机信息 
		"name": "itcast01", 
		"hostname": "itcast01", 
		"version": "6.2.2" 
	},
	"host": { 
		"name": "itcast01" 
	} 
} 

3、读取文件

#配置读取文件项 test-log.yml 
filebeat.prospectors: 
- type: log 
  enabled: true 
  paths: 
  - /test/beats/logs/*.log 
setup.template.settings: 
  index.number_of_shards: 3 
output.console: 
  pretty: true 
  enable: true 
#启动filebeat 
./filebeat -e -c test-log.yml 
#/opt/software/beats/logs下创建a.log文件,并输入如下内容 
hello 
world 
#观察filebeat输出 
{ 
    "@timestamp": "2019-01-12T14:16:10.192Z",
    "@metadata": { 
        "beat": "filebeat", 
        "type": "doc", 
        "version": "6.2.2" 
    },
    "host": { 
  	  "name": "itcast01" 
    },
    "source": "/test/beats/logs/a.log", 
    "offset": 0, 
    "message": "hello", 
    "prospector": { 
   		"type": "log" 
    },
    "input": { 
    	"type": "log" 
    },
    "beat": { 
        "version": "6.2.2", 
        "name": "itcast01", 
        "hostname": "itcast01" 
    } 
}
{ 
    "@timestamp": "2019-01-12T14:16:10.192Z", 
    "@metadata": { 
        "beat": "filebeat", 
        "type": "doc", 
        "version": "6.2.2" 
    },
    "prospector": { 
        "type": "log" 
    },
    "input": { 
        "type": "log" 
    },
    "beat": { 
        "version": "6.2.2", 
        "name": "itcast01", 
        "hostname": "itcast01" 
    },
    "host": { 
        "name": "itcast01" 
    },
    "source": "/test/beats/logs/a.log", 
    "offset": 6, 
    "message": "world" 
}

当a.log有变化时,会检测到日志文件有更新,会立刻读取文件的内容,并输出到控制台

3、自定义字段

#配置读取文件项 test-log.yml 
filebeat.prospectors: 
- type: log 
  enabled: true 
  paths: 
    - /opt/software/beats/logs/*.log 
  tags: ["web"] #添加自定义tag,便于后续的处理 
  fields: #添加自定义字段 
  from: test-im 
  fields_under_root: true #true为添加到根节点,false为添加到子节点中 
setup.template.settings: 
  index.number_of_shards: 3 
output.console: 
  pretty: true 
  enable: true 
#启动filebeat 
./filebeat -e -c test-log.yml 
#/opt/software/beats/logs下创建a.log文件,并输入如下内容 
123 
#执行效果 
{ 
    "@timestamp": "2019-01-12T14:37:19.845Z", 
    "@metadata": { 
        "beat": "filebeat", 
        "type": "doc", 
        "version": "6.2.2" 
    },
    "offset": 0, 
    "tags": [ 
    	"test-im" 
    ],
    "prospector": { 
   	 "type": "log" 
    },
    "beat": { 
        "name": "itcast01", 
        "hostname": "itcast01", 
        "version": "6.2.2" 
    },
    "host": { 
    	"name": "itcast01" 
    },
    "source": "/opt/software/beats/logs/a.log", 
    "message": "123", 
    "input": { 
         "type": "log" 
    },
    "from": "test-im" 
} 

4、输出到Elasticsearch

# test-log.yml 
filebeat.prospectors: 
  - type: log 
  enabled: true 
  paths: 
    - /opt/software/beats/logs/*.log 
  tags: ["test-im"] 
  fields: 
    from: test-im 
  fields_under_root: false 
setup.template.settings: 
  index.number_of_shards: 3 #指定索引的分区数 
output.elasticsearch: #指定ES的配置 
  hosts: ["192.168.1.7:9200","192.168.1.7:9201","192.168.1.7:9202"]
  
#可在Kibana后台查看到相应的数据

5、Filebeat工作原理

Filebeat由两个主要组件组成:prospector 和 harvester。

  • harvester:

    • 负责读取单个文件的内容。
    • 如果文件在读取时被删除或重命名,Filebeat将继续读取文件。
  • prospector

    • prospector 负责管理harvester并找到所有要读取的文件来源。

    • 如果输入类型为日志,则查找器将查找路径匹配的所有文件,并为每个文件启动一个harvester。

    • Filebeat目前支持两种prospector类型:log和stdin。

  • Filebeat如何保持文件的状态

    • Filebeat 保存每个文件的状态并经常将状态刷新到磁盘上的注册文件中。

    • 该状态用于记住harvester正在读取的最后偏移量,并确保发送所有日志行。

    • 如果输出(例如Elasticsearch或Logstash)无法访问,Filebeat会跟踪最后发送的行,并在输出再次可用时继续读取文件。

    • 在Filebeat运行时,每个prospector内存中也会保存的文件状态信息,当重新启动Filebeat时,将使用注册

      文件的数据来重建文件状态,Filebeat将每个harvester在从保存的最后偏移量继续读取。文件状态记录在data/registry文件中

6、启动命令

./filebeat -e -c test.yml 
./filebeat -e -c test.yml -d "publish" 
#参数说明 
-e: 输出到标准输出,默认输出到syslog和logs下 
-c: 指定配置文件 
-d: 输出debug信息 
#测试: ./filebeat -e -c test-log.yml -d "publish" 
DEBUG [publish] pipeline/processor.go:308 Publish event: { 
    "@timestamp": "2019-01-12T15:03:50.820Z", 
    "@metadata": { 
        "beat": "filebeat", 
        "type": "doc", 
        "version": "6.2.2" 
    },
    "offset": 0, 
    "tags": [ 
        "test-im" 
    ],
    "input": { 
    "type": "log" 
    },
    "prospector": { 
        "type": "log" 
    },
    "beat": { 
        "name": "itcast01", 
        "hostname": "itcast01", 
        "version": "6.2.2" 
    },
    "source": "/opt/software/beats/logs/a.log", 
    "fields": { 
        "from": "test-im" 
    },
    "host": { 
        "name": "itcast01" 
    },
	"message": "456" 
} 

7、Module插件

前面要想实现日志数据的读取以及处理都是自己手动配置的,其实,在Filebeat中,有大量的Module,可以简化我们的配置,直接就可以使用,如下:

./filebeat modules list 

Enabled: 

Disabled: 
apache2 
auditd 
elasticsearch 
haproxy 
icinga 
iis 
kafka 
kibana 
logstash 
mongodb 
mysql 
nginx 
osquery 
postgresql 
redis 
suricata 
system 
traefik 

可以看到,内置了很多的module,但是都没有启用,如果需要启用需要进行enable操作:

./filebeat modules enable redis #启动 
./filebeat modules disable redis #禁用 
Enabled: 
redis 

Disabled: 
apache2 
auditd 
elasticsearch 
haproxy 
icinga 
iis 
kafka 
kibana 
logstash 
mongodb 
mysql 
nginx 
osquery 
postgresql 
suricata 
system 
traefik 
# 可以发现,redis的module已经被启用。

8、redis的module

.
├── log #日志 
│ ├── config 
│ │ └── log.yml 
│ ├── ingest 
│ │ └── pipeline.json 
│ └── manifest.yml 
├── module.yml 
└── slowlog #慢查询日志 
├── config 
│ └── slowlog.yml 
├── ingest 
│ └── pipeline.json 
└── manifest.yml 

9、redis module 配置

cd modules.d/ 
vim redis.yml 

- module: redis 
  # Main logs 
  log:
    enabled: true 
    
	# Set custom paths for the log files. If left empty, 
	# Filebeat will choose the paths depending on your OS. 
	var.paths: ["/data/redis-data/node01/*.log"] 
	
	# Slow logs, retrieved via the Redis API (SLOWLOG) 
  slowlog: 
	enabled: false 
	# The Redis hosts to connect to. 
	#var.hosts: ["localhost:6379"] 
	# Optional, the password to use when connecting to Redis. 
	#var.password: 

10、修改redis的log日志功能

redis默认情况下,是不会输出日志的,需要进行配置,前面我们使用的容器都没有配置日志输出,下面需要配置一下。

loglevel 日志等级分为:debug、verbose、notice、warning

其中,debug 会有大量信息,对开发、测试有用;

verbose 等于log4j 中的info,有很多信息,但是不会像debug那样乱;

notice 一般信息;

warning 只有非常重要/关键的消息被记录。

docker create --name redis-node01 -v /data/redis-data/node01:/data -p 6379:6379 redis:5.0.2 --cluster-enabled yes --cluster-config-file nodes-node-01.conf --loglevel debug --logfile nodes-node-01.log 

docker create --name redis-node02 -v /data/redis-data/node02:/data -p 6380:6379 redis:5.0.2 --cluster-enabled yes --cluster-config-file nodes-node-02.conf --loglevel debug --logfile nodes-node-02.log 

docker create --name redis-node03 -v /data/redis-data/node03:/data -p 6381:6379 redis:5.0.2 --cluster-enabled yes --cluster-config-file nodes-node-03.conf --loglevel debug --logfile nodes-node-03.log

11、配置filebeat

#vim test-redis.yml 
filebeat.prospectors: 
- type: log 
  enabled: true 
  paths: 
    - /test/log/*.log 
setup.template.settings: 
  index.number_of_shards: 3 
output.console: 
  pretty: true 
  enable: true 
filebeat.config.modules: 
  path: ${path.config}/modules.d/*.yml 
  reload.enabled: false 


#运行
./filebeat -e -c test-redis.yml --modules redis

#测试发现,数据已经写入到了Elasticsearch中。

12、通过UDP数据传输接收

#vim test-udp.yml
filebeat.prospectors:
- type: udp
  enabled: true
  max_message_size: 10KiB
  host: "0.0.0.0:8080"
  fields:
    type: udp
output.console:
  pretty: true
  enable: true

#在本机测试通过 echo 你好 > /dev/udp/192.168.179.128/8080 发送数据测试
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值