不得不学!从零到一搭建ELK日志,在Docker环境下部署 Filebeat 日志收集工具

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 最近在玩 ELK 日志平台,它是 Elastic 公司推出的一整套日志收集、分析和展示的解决方案。

前言

大家好,我是小郭,最近在玩 ELK 日志平台,它是 Elastic 公司推出的一整套日志收集、分析和展示的解决方案。

只有学习了,操作了才能算真正的学会使用了,虽然看起来简单,但是里面的流程步骤还是很多的,将步骤和遇到的问

题记录和总结下,今天主要分享下在Docker环境下部署 Filebeat 日志收集工具。

# 从零到一搭建ELK日志,在Docker环境下部署 Elasticsearch 数据库

# 从零到一搭建ELK日志,在Docker环境下部署 logstash 工具

# 从零到一搭建ELK日志,在Docker环境下部署 Kibana 可视化工具

什么是 Filebeat?

轻量型日志采集器,用于转发和集中日志数据

Filebeat 监控您指定的日志文件或位置,收集日志事件,并将它们转发到Elasticsearch或 Logstash生成索引

工作原理

启动 Filebeat 时,它会启动一个或多个输入,这些输入会在您为日志数据指定的位置中查找

对于 Filebeat 定位的每个日志,Filebeat 都会启动一个收割机。每个harvester 读取单个日志以获取新内容并将新日志数据发送到libbeat,libbeat 聚合事件并将聚合数据发送到您为Filebeat 配置的输出。

网络异常,图片无法展示
|

输入

filebeat.inputs: 
    - type: log 
    paths: 
    - /var/log/*.log 
    - /var/path2/*.log

输入的作用:输入负责管理收割机并查找所有要读取的源。

支持输入的类型:www.elastic.co/guide/en/be…

收割机

收割机的作用:负责打开和关闭文件,这意味着在收割机运行时文件描述符保持打开状态

如果文件在收集过程中被删除或重命名,Filebeat 会继续读取该文件。这样做的副作用是保留磁盘上的空间,直到收割机关闭

默认情况下,Filebeat 会保持文件打开,直到close_inactive到达。

存在丢失的情况:

Filebeat 的至少一次交付保证存在限制,涉及日志轮换和旧文件的删除。如果日志文件写入磁盘并旋转的速度超过了 Filebeat 处理的速度,或者如果在输出不可用时删除了文件,则数据可能会丢失

部署 Filebeat 日志收集工具

  1. 安装Filebeat镜像
docker pull docker.elastic.co/beats/filebeat:8.1.0
  1. 创建配置文件
mkdir -p /data/elk/filebeat
touch filebeat.yml

filebeat.yml配置

需要注意的坑,在filebeat.yml 配置的日志地址是配置docker里面的地址,否则会读不到

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /usr/share/filebeat/logs/*
# output.logstash:
#  hosts: ["127.0.0.1:9900"]
output.elasticsearch: 
  hosts: ["192.168.56.10:9200"]  
  1. 启动Filebeat
docker run -d -v /data/elk/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml
 -v /home/logs:/usr/share/filebeat/logs
 --name filebeat docker.elastic.co/beats/filebeat:8.1.0

指令可能存在换行的问题,执行有问题,可以先复制出来去掉换行

  1. 生成索引,有生成才算成功

通过docker logs来看Filebeats的操作

我们可以看到 Filebeats 内部启动了 go程序 去我们所配置的文件日志拉取数据

网络异常,图片无法展示
|

查询是否生成索引

curl http://localhost:9200/_cat/indices?v 

看到filebeat开头的那个索引,就表示成功了

网络异常,图片无法展示
|

  1. 上Kibana上添加索引

为了能看到日志,我们必须手动添加索引

网络异常,图片无法展示
|

再回到查询页面的时候我们就可以进行筛选的操作了

网络异常,图片无法展示
|

配置

Filebeat提供给我们的配置是非常丰富的,我们可以将收集到的数据写入很多不同的地方

这里我总结了部分常用到的,更多的配置信息我们可以到官网上去查询。

// 输出
filebeat.inputs:
// 类型
- type: filestream   
  id: my-filestream-id
  paths:
    - /var/log/*.log
// 模块配置 设置启动模块
filebeat.modules:
- module: nginx
  access:
  error:
- module: mysql
  slowlog:
// 输出到Es
output.elasticsearch:
  hosts: ["https://myEShost:9200"]
  username: "filebeat_writer"
  password: "YOUR_PASSWORD"
  index: "%{[fields.log_type]}-%{[agent.version]}-%{+yyyy.MM.dd}" 
  // 默认行为,当一个事件被 elasticsearch 明确拒绝时,它会被丢弃。
  non_indexable_policy.drop: ~
  indices:
    - index: "warning-%{[agent.version]}-%{+yyyy.MM.dd}"
      when.contains:
        message: "WARN"
    - index: "error-%{[agent.version]}-%{+yyyy.MM.dd}"
      when.contains:
        message: "ERR"
// 输出到logstash
output.logstash:
    hosts: ["localhost:5044", "localhost:5045"]
// 如果设置为 true 并且配置了多个 Logstash 主机,则输出插件会将已发布的事件负载平衡到所有 Logstash 主机上。
// 如果设置为 false,则输出插件将所有事件仅发送到一个主机(随机确定),
// 如果所选主机无响应,则将切换到另一台主机。默认值为假。
  loadbalance: true
  index: filebeat
  proxy_url: socks5://user:password@socks5-proxy:2233
  enabled: true
 output.kafka:
  # initial brokers for reading cluster metadata
  hosts: ["kafka1:9092", "kafka2:9092", "kafka3:9092"]
  # message topic selection + partitioning 用于生产事件的 Kafka 主题。
  topic: '%{[fields.log_topic]}'
  partition.round_robin:
    reachable_only: false
// 代理要求的 ACK 可靠性级别。0=无响应,1=等待本地提交,-1=等待所有副本提交。默认值为 1
  required_acks: 1
// 设置输出压缩编解码器
  compression: gzip
// JSON 编码消息的最大允许大小
  max_message_bytes: 1000000 

总结

我们主要完成在Docker环境下部署 Filebeat 日志收集工具,他是搭建ELK日志非常重要的一部分,我们利用Filebeat日志收集完成之后,将数据写入 Elasticsearch 后用 Kibana 进行可视化展示,目前我们已经完成了Fliebeat + Es +Kibana部分。


网络异常,图片无法展示
|


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
|
存储 JSON 监控
可以通过配置Filebeat来将Higress日志持久化到磁盘
【2月更文挑战第10天】可以通过配置Filebeat来将Higress日志持久化到磁盘
31 4
|
3月前
|
存储 监控 数据可视化
日志分析对决:揭示 ELK 与 GrayLog 的优势和差异
日志分析对决:揭示 ELK 与 GrayLog 的优势和差异
281 0
|
4天前
|
存储 运维 监控
【Docker专栏】Docker日志管理与监控的最佳方法
【5月更文挑战第7天】本文探讨了Docker容器的日志管理与监控,强调其在运维中的重要性。Docker默认使用`json-file`日志驱动,可通过`docker logs`命令查看。建议选择合适日志驱动,配置日志选项,并集成ELK Stack等工具进行高级分析。实时监控、设置警报、分析数据和审计日志是实践关键。最佳实践包括日志数据与容器数据分离、使用日志代理、保护敏感信息及遵守法规。关注新技术以提升系统稳定性和安全性。
【Docker专栏】Docker日志管理与监控的最佳方法
|
17天前
|
监控 Docker 容器
Docker从入门到精通:Docker log 命令学习
了解 Docker 日志管理对容器监控至关重要。`docker logs` 命令用于查看和管理容器日志,例如,`docker logs <container_name>` 显示容器日志,`-f` 或 `--follow` 实时跟踪日志,`--tail` 显示指定行数,`--timestamps` 添加时间戳,`--since` 按日期筛选。Docker 支持多种日志驱动,如 `syslog`,可通过 `--log-driver` 配置。有效管理日志能提升应用程序的稳定性和可维护性。
17 0
|
1月前
|
消息中间件 存储 运维
更优性能与性价比,从自建 ELK 迁移到 SLS 开始
本文介绍了 SLS 基本能力,并和开源自建 ELK 做了对比,可以看到 SLS 相比开源 ELK 有较大优势。
55360 145
|
2月前
|
Docker 容器
一篇文章搞懂docker日志的查看
`docker logs` 命令用于查看Docker容器的日志,支持多个选项:`-f` 跟踪实时日志,`--since` 显示指定时间后的日志,`--tail` 显示指定行数(默认全部),`-t` 显示时间戳。例如,`docker logs -f --tail=200 <容器ID/名称>` 显示最后200行实时日志。还可以结合`grep`进行过滤,或使用`--since`和`--until`指定时间范围。日志可重定向至文件,如`docker logs <容器id> > container_logs.txt`。
367 6
|
3月前
|
存储 监控 关系型数据库
ELK架构监控MySQL慢日志
ELK架构监控MySQL慢日志
|
3月前
|
应用服务中间件 API nginx
|
11月前
|
Docker 容器
docker 安装 elk
1. 使用集成镜像方式 2.使用单个镜像安装 3. 开放端口 5044 5045 5601
211 0
|
存储 数据可视化 Java
SpringBoot应用整合并使用Docker安装ELK实现日志收集
SpringBoot应用整合并使用Docker安装ELK实现日志收集
SpringBoot应用整合并使用Docker安装ELK实现日志收集