热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ELK·Filebeat的使用

目录一、ElasticStack的组成二、FileBeat1、简介FileBeat轻量型日志采集器汇总、“tail-f”和搜索性能稳健,不错过任何检测信号Filebe


目录

  • 一、ElasticStack的组成
  • 二、FileBeat
    • 1、简介
      • FileBeat轻量型日志采集器
      • 汇总、“tail -f”和搜索
      • 性能稳健,不错过任何检测信号
      • Filebeat 让简单的事情简单化
      • 它不会导致您的管道过载
      • 输送至 Elasticsearch 或 Logstash。在 Kibana 中实现可视化。
    • 2、部署运行
    • 3、自定义字段
    • 4、输出到Elasticsearch
    • 5、Filebeat工作原理
    • 6、启动命令
    • 7、Module插件
    • 8、redis的module
    • 9、redis module 配置
    • 10、修改redis的log日志功能
    • 11、配置filebeat
    • 12、通过UDP数据传输接收


一、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: udpenabled: truemax_message_size: 10KiBhost: "0.0.0.0:8080"fields:type: udp
output.console:pretty: trueenable: true#在本机测试通过 echo 你好 > /dev/udp/192.168.179.128/8080 发送数据测试

推荐阅读
  • ElasticSerach初探第一篇认识ES+环境搭建+简单MySQL数据同步+SpringBoot整合ES
    一、认识ElasticSearch是一个基于Lucene的开源搜索引擎,通过简单的RESTfulAPI来隐藏Lucene的复杂性。全文搜索,分析系统&# ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • mysql-cluster集群sql节点高可用keepalived的故障处理过程
    本文描述了mysql-cluster集群sql节点高可用keepalived的故障处理过程,包括故障发生时间、故障描述、故障分析等内容。根据keepalived的日志分析,发现bogus VRRP packet received on eth0 !!!等错误信息,进而导致vip地址失效,使得mysql-cluster的api无法访问。针对这个问题,本文提供了相应的解决方案。 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • 使用eclipse创建一个Java项目的步骤
    本文介绍了使用eclipse创建一个Java项目的步骤,包括启动eclipse、选择New Project命令、在对话框中输入项目名称等。同时还介绍了Java Settings对话框中的一些选项,以及如何修改Java程序的输出目录。 ... [详细]
  • PHP组合工具以及开发所需的工具
    本文介绍了PHP开发中常用的组合工具和开发所需的工具。对于数据分析软件,包括Excel、hihidata、SPSS、SAS、MARLAB、Eview以及各种BI与报表工具等。同时还介绍了PHP开发所需的PHP MySQL Apache集成环境,包括推荐的AppServ等版本。 ... [详细]
  • 本文介绍了在RHEL 7中的系统日志管理和网络管理。系统日志管理包括rsyslog和systemd-journal两种日志服务,分别介绍了它们的特点、配置文件和日志查询方式。网络管理主要介绍了使用nmcli命令查看和配置网络接口的方法,包括查看网卡信息、添加、修改和删除配置文件等操作。 ... [详细]
  • 项目运行环境配置及可行性分析
    本文介绍了项目运行环境配置的要求,包括Jdk1.8、Tomcat7.0、Mysql、HBuilderX等工具的使用。同时对项目的技术可行性、操作可行性、经济可行性、时间可行性和法律可行性进行了分析。通过对数据库的设计和功能模块的设计,确保系统的完整性和安全性。在系统登录、系统功能模块、管理员功能模块等方面进行了详细的介绍和展示。最后提供了JAVA毕设帮助、指导、源码分享和调试部署的服务。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 众筹商城与传统商城的区别及php众筹网站的程序源码
    本文介绍了众筹商城与传统商城的区别,包括所售产品和玩法不同以及运营方式不同。同时还提到了php众筹网站的程序源码和方维众筹的安装和环境问题。 ... [详细]
  • 企业数据应用挑战及元数据管理的重要性
    本文主要介绍了企业在日常经营管理过程中面临的数据应用挑战,包括数据找不到、数据读不懂、数据不可信等问题。针对这些挑战,通过元数据管理可以实现数据的可见、可懂、可用,帮助业务快速获取所需数据。文章提出了“灵魂”三问——元数据是什么、有什么用、又该怎么管,强调了元数据管理在企业数据治理中的基础和前提作用。 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • 腾讯安全平台部招聘安全工程师和数据分析工程师
    腾讯安全平台部正在招聘安全工程师和数据分析工程师。安全工程师负责安全问题和安全事件的跟踪和分析,提供安全测试技术支持;数据分析工程师负责安全产品相关系统数据统计和分析挖掘,通过用户行为数据建模为业务决策提供参考。招聘要求包括熟悉渗透测试和常见安全工具原理,精通Web漏洞,熟练使用多门编程语言等。有相关工作经验和在安全站点发表作品的候选人优先考虑。 ... [详细]
  • Python脚本编写创建输出数据库并添加模型和场数据的方法
    本文介绍了使用Python脚本编写创建输出数据库并添加模型数据和场数据的方法。首先导入相应模块,然后创建输出数据库并添加材料属性、截面、部件实例、分析步和帧、节点和单元等对象。接着向输出数据库中添加场数据和历程数据,本例中只添加了节点位移。最后保存数据库文件并关闭文件。文章还提供了部分代码和Abaqus操作步骤。另外,作者还建立了关于Abaqus的学习交流群,欢迎加入并提问。 ... [详细]
author-avatar
湛蓝天空jk
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有