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

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
日志服务 SLS,月写入数据量 50GB 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月前
|
存储 监控 C++
11 个必备 Docker 工具
11 个必备 Docker 工具
479 11
11 个必备 Docker 工具
|
2月前
|
存储 Prometheus 监控
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
75 5
|
2月前
|
负载均衡 网络协议 算法
Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式
本文探讨了Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式,以及软件负载均衡器、云服务负载均衡、容器编排工具等实现手段,强调两者结合的重要性及面临挑战的应对措施。
108 3
|
2月前
|
存储 安全 数据中心
Docker 容器凭借轻量级和高效的特性,成为应用部署的重要工具
Docker 容器凭借轻量级和高效的特性,成为应用部署的重要工具。本文探讨了 Docker 如何通过 Namespace 和 Cgroups 实现 CPU、内存、网络和存储资源的隔离,提高系统安全性和资源利用率,以及面临的挑战和应对策略。
61 1
|
3月前
|
SQL 关系型数据库 数据库
国产数据实战之docker部署MyWebSQL数据库管理工具
【10月更文挑战第23天】国产数据实战之docker部署MyWebSQL数据库管理工具
242 4
国产数据实战之docker部署MyWebSQL数据库管理工具
|
3月前
|
存储 JSON 网络协议
Docker面试整理-如何查看和管理Docker容器的日志?
通过本文的介绍,我们了解了如何查看和管理Docker容器的日志,包括使用 `docker logs`命令、配置日志驱动、设置日志选项和集中日志管理。掌握这些技能,不仅可以在面试中展示专业水平,也能在实际工作中高效
469 3
|
3月前
|
存储 监控 安全
|
3月前
|
存储 Linux Docker
centos系统清理docker日志文件
通过以上方法,可以有效清理和管理CentOS系统中的Docker日志文件,防止日志文件占用过多磁盘空间。选择合适的方法取决于具体的应用场景和需求,可以结合手动清理、logrotate和调整日志驱动等多种方式,确保系统的高效运行。
258 2
|
3月前
|
存储 缓存 Kubernetes
docker的替代工具有哪些?
【10月更文挑战第28天】docker的替代工具有哪些?
293 1
|
3月前
|
关系型数据库 MySQL Docker
docker环境下mysql镜像启动后权限更改问题的解决
在Docker环境下运行MySQL容器时,权限问题是一个常见的困扰。通过正确设置目录和文件的权限,可以确保MySQL容器顺利启动并正常运行。本文提供了多种解决方案,包括在主机上设置正确的权限、使用Dockerfile和Docker Compose进行配置、在容器启动后手动更改权限以及使用 `init`脚本自动更改权限。根据实际情况选择合适的方法,可以有效解决MySQL容器启动后的权限问题。希望本文对您在Docker环境下运行MySQL容器有所帮助。
505 1