1 filebeat介绍
Filebeat是Elastic Stack(以前称为ELK Stack)的一部分,是一个轻量级日志文件数据船(shipper)。它被用于监控日志文件或者日志目录,收集这些日志并将其发送到Logstash进行进一步处理,或者直接发送到Elasticsearch进行索引。Filebeat是使用Go语言编写的,专为可靠性和低延迟而设计。
Filebeat是一个强大的日志数据收集工具,特别适用于在分布式系统和微服务架构中收集日志。它是Elastic Stack的重要组成部分,与Elasticsearch、Logstash和Kibana协同工作,提供了从数据收集到分析的完整解决方案。随着日志数据量的增长和日志管理需求的复杂化,Filebeat在现代的日志管理策略中扮演着越来越重要的角色。
1.1 核心功能
- 日志收集: Filebeat可以监控和收集指定路径中的日志文件,包括新增的日志和现有日志文件的更新。
- 轻量级和高效: 作为轻量级的数据采集工具,Filebeat在系统资源占用方面进行了优化,确保最小的性能影响。
- 数据前处理: Filebeat提供了一些基本的日志数据前处理功能,比如多行处理和解码。
- 负载均衡: 支持将数据发送到多个目的地进行负载均衡,提高数据传输的可靠性。
- 安全传输: 支持SSL/TLS加密,确保数据在传输过程中的安全。
- 集成Elastic Stack: 与Elasticsearch、Logstash和Kibana无缝集成,提供完整的日志处理流程。
1.2 架构和工作原理
- 输入类型: Filebeat支持多种类型的输入,如日志文件、syslog、Redis等。
- Harvester: 每个文件由一个Harvester进行处理,负责读取文件内容。
- Prospector: 负责查找并启动Harvester,定位哪些文件需要读取。
- 输出: Filebeat支持多种输出,如Logstash、Elasticsearch、Kafka等。
- Registry文件: Filebeat维护一个Registry文件来记录每个文件的读取进度,以便于在重启后继续从上次停止的位置读取。
1.3 配置和使用
- 配置文件: Filebeat的配置通过YAML文件进行,可以定义输入、输出以及其他处理规则。
- 部署: 可以在不同的操作系统上部署Filebeat,包括Linux、Windows和macOS。
- 使用场景: 适用于收集各种类型的日志数据,如服务器日志、应用程序日志和系统日志。
1.4 性能优化
- 资源管理: Filebeat设计时考虑了资源使用,确保在资源有限的环境下仍然高效运行。
- 数据压缩: 支持对发送到Elasticsearch或Logstash的数据进行压缩。
- 调整配置: 可以根据具体需求调整配置,如增加或减少Harvester数量。
1.5 安全性和管理
- SSL/TLS加密: 支持使用SSL/TLS加密数据传输。
- 访问控制: 可以与Elasticsearch的安全特性(如X-Pack Security)集成,实现访问控制。
1.6 社区和生态系统
- 开源社区: Filebeat是一个开源项目,拥有活跃的社区支持。
- 文档和资源: 提供了丰富的文档和指南,帮助用户配置和使用Filebeat。
- 插件和集成: 可以与多种日志处理和分析工具集成,提供灵活的日志处理解决方案。
2 认证设置
根据elastic上的说法:
Filebeat is a lightweight, open source shipper for log file data. As the next-generation Logstash Forwarder, Filebeat tails logs and quickly sends this information to Logstash for further parsing and enrichment or to Elasticsearch for centralized storage and analysis.
Filebeat比Logstash貌似更好,是下一代的日志收集器,ELK(Elastic +Logstash + Kibana)以后估计要改名成EFK。
2.1 下载最新的filebeat
地址:Download Filebeat • Lightweight Log Analysis | Elastic 然后解压到任意目录
2.2 修改filebeat下的filebeat.yml文件
参考以下内容:
filebeat:
prospectors:
-
paths:
- "/var/log/nginx/*.log"
input_type: log
document_type: nginx-access
-
paths:
- "/data/log/order/*.log"
input_type: log
document_type: order-service
-
paths:
- "/opt/service/zhifu/logs/*.log"
input_type: log
document_type: zhifu-service
output:
elasticsearch:
hosts: ["localhost:9200"]
logging:
files:
rotateeverybytes: 10485760
里面hosts里的内容,改成实际elasticsearch的地址。
2.3 设置elasticsearch的filebeat模板
curl -XPUT 'http://localhost:9200/_template/filebeat?pretty'-d@/etc/filebeat/filebeat.template.json
注:上面localhost:9200改成实际的elasticsearch的地址,后面的一串为filebeat根目录下的filebeat.template.json的完整路径,顺利的话,会返回:
{
"acknowledged": true
}
表示模板已被接收。
2.4 启动
./filebeat-e -c filebeat.yml -d "Publish"
如果能看到一堆东西输出,表示正在向elastic search发送日志。可以浏览:http://192.168.1.111:9200/_search?pretty 如果有新内容返回,表示ok
测试正常后,Ctrl+C结束,然后用
nohup ./filebeat -e -c filebeat.yml >/dev/null2>&1 &
转入后台运行,最后到kibana里,创建一个索引,注意pattern为:filebeat-*
3 kibana的登录认证问题
kibana是nodejs开发的,本身并没有任何安全限制,直接浏览url就能访问,如果公网环境非常不安全,可以通过nginx请求转发增加认证,方法如下:
tips:kibana没有重启命令,要重启,只能ps -ef|grep node 查找nodejs进程,干掉重来。
3.1 参考以下内容,修改配置文件
server {
listen 80;
server_name elk.yjmyzz.com;
location / {
auth_basic"secret";
auth_basic_user_file /data/nginx/db/passwd.db;
proxy_pass http://localhost:5601;
proxy_set_header Host $host:5601;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Via"nginx";
}
access_log off;
}
上面的配置表示将elk.yjmyzz.com的请求,转发到服务器的5601端口,同时使用最基本的用户名、密码来认证。
3.2 配置登录用户名,密码
htpasswd -c /data/nginx/db/passwd.db user1
注意passwd.db的路径要跟nginx配置中的一致,最后的user1为用户名,可以随便改,输入完该命令后,系统会提示输入密码,搞定后passwd.db中就有加密后的密码了,有兴趣的可以cat看下。
提示:htpasswd是apache自带的小工具,如果找不到该命令,尝试用yum install httpd安装
3.3 关掉kibana端口的外网访问
用nginx转发后,一定要记得配置iptables之类的防火墙,禁止外部直接访问5601端口,这样就只能通过nginx来访问了。