Elasticsearch 本身并不直接收集目标服务器的日志,它主要用于存储、搜索和分析数据。要收集目标服务器的日志,通常会借助其他工具,并且一般不需要在目标服务器上安装 Elasticsearch 软件,常见的日志收集方案:
Filebeat(收集日志) + Logstash(传输日志到ES) + Elasticsearch(分析日志) + Kibana(展示分析结果,且可视化)
工作原理
Filebeat:
这是一个轻量级的日志收集器,用于在目标服务器上收集日志文件。它会监控指定的日志文件或目录,当有新的日志数据产生时,Filebeat 会将这些数据收集起来,并发送到 Logstash 或直接发送到 Elasticsearch。
Filebeat 本身并没有固定必须使用的端口
Logstash:(不过也有一些公司会用kafka)
作为数据处理和传输的中间层,Logstash 接收来自 Filebeat 的数据,对其进行过滤、转换和格式化等操作,然后将处理后的数据发送到 Elasticsearch。
当使用 Filebeat 等 Beats 工具向 Logstash 发送数据时,Logstash 通常监听 5044 端口。
Elasticsearch:
负责存储和索引从 Logstash 或 Filebeat 接收到的日志数据,以便后续的搜索和分析。
Elasticsearch对外的端口是9200,如果你有一个ES群组,那么这个群组之间通过9300端口互相连接。
Kibana:
提供可视化界面,让用户可以方便地查询、分析和展示存储在 Elasticsearch 中的日志数据。
端口一般是5601,它的下游一般就是Elasticsearch,Elasticsearch把数据传给kibana来展示。
- 注:Kafka 跟Logstash 同样具有数据传输和缓冲的功能,Kafka 会将数据传输到 Elasticsearch 进行存储和分析。然后Kibana用于展示。kafka端口一般是9092
filebeat 配置文件如下,这里采用的是kafka来传输数据
filebeat.inputs:
- type: logenabled: true# 根据日志文件编码格式 gbk utf-8encoding: utf-8# 对于线上已有大量日志,第一次部署filebeat。tail_files: true只会收集filebeat运行后的动态增加的日志,不会收集运行前的日志.# 等运行一段时间后,再修改tail_files: false,以防因为filebeat不运行时日志的丢失tail_files: truefields:hostName: 1.1.1.1 # 就是filebeat所在的服务器ippaths:# 你想分析哪些日志,就是在这里定义- /vdb/zhuaqian/tomcat9_90/logs/logback/*/*.log- /vdb/zhuaqian/jarDir/logs/FindBestWay/*/*.logmultiline.pattern: '^20[1-9]{2}'multiline.negate: truemultiline.match: afterfilebeat.config.modules:path: ${path.config}/modules.d/*.ymlreload.enabled: falseoutput.kafka:
#这里写的是kafka的IP和端口hosts: ["2.2.2.2:9092","3.3.3.3:9092","4.4.4.4:9092"]topic: java-simTrade-logpartition.round_robin:reachable_only: falserequired_acks: 1# 一行消息大于 8M 就会被丢弃message.max.bytes: 8192max_procs: 1
processors:
- add_host_metadata:netinfo.enabled: true
- drop_fields:fields: ["host.id","host.containerized","host.architecture","host.os","prospector","input","beat","log","offset","@metadata"]
compression: gziplogging.level: info
logging.to_files: true
logging.files:path: /vdb/filebeat_logname: filebeat.logpermissions: 0644keepfiles: 2