1 filebeat介绍

Filebeat是Elastic Stack(以前称为ELK Stack)的一部分,是一个轻量级日志文件数据船(shipper)。它被用于监控日志文件或者日志目录,收集这些日志并将其发送到Logstash进行进一步处理,或者直接发送到Elasticsearch进行索引。Filebeat是使用Go语言编写的,专为可靠性和低延迟而设计。

filebeat容器有root权限_filebeat容器有root权限

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-*

filebeat容器有root权限_filebeat_02

  

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来访问了。

filebeat容器有root权限_Elastic_03