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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 最近在玩 ELK 日志平台,它是 Elastic 公司推出的一整套日志收集、分析和展示的解决方案。

前言

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

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

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

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

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

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

什么是 logstash?

Logstash是具有实时流水线能力的开源的数据收集引擎。Logstash可以动态统一不同来源的数据,并将数据标准化到您选择的目标输出。它提供了大量插件,可帮助我们解析,丰富,转换和缓冲任何类型的数据。

工作方式

管道(Logstash Pipeline)是Logstash中独立的运行单元,每个管道都包含两个必须的元素输入(input)和输出(output),和一个可选的元素过滤器(filter),事件处理管道负责协调它们的执行。

输入和输出支持编解码器,使您可以在数据进入或退出管道时对其进行编码或解码,而不必使用单独的过滤器。如:json、multiline等

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

inputs(输入阶段):

Logstash 支持各种输入选择,可以同时从众多常用来源捕捉事件。

包括:file、kafka、beats等

filters(筛选阶段):

数据从源传输到存储库的过程中,Logstash 筛选器能够解析各个事件,识别已命名的字段以构建结构,并将它们转换成通用格式,以便进行更强大的分析和实现商业价值。

包括:

  • 利用 Grok 从非结构化数据中派生出结构
  • 简化整体处理,不受数据源、格式或架构的影响等

outputs(输出阶段):

将事件数据发送到特定的目的地,完成了所以输出处理,改事件就完成了执行。

如:elasticsearch、file、redis等

Codecs(解码器):

基本上是流过滤器,作为输入和输出的一部分进行操作,可以轻松地将消息的传输与序列化过程分开。

扩展

Logstash 采用可插拔框架,拥有 200 多个插件。您可以将不同的输入选择、筛选器和输出选择混合搭配、精心安排,让它们在管道中和谐地运行。

部署 logstash 日志收集工具

logstash的部署方式有很多种,一般情况下我们可以采用下载 logstash 安装包的方式去启动。

但是官方为我们提供了Docker的部署方式,我比较倾向于利用Docker来进行管理。

  1. 安装Logstash镜像
docker pull docker.elastic.co/logstash/logstash:7.7.1
  1. 创建文件目录和配置文件

创建文件夹

mkdir -p /data/elk/logstash/config
mkdir -p /data/elk/logstash/pipeline

创建配置文件

logstash.yml 放在/data/elk/logstash/config

touch logstash.yml
vi logstash.yml
config:
  reload:
    automatic: true
    interval: 3s
xpack:
  management.enabled: false
  monitoring.enabled: false

配置文件 pipelines.yml

放在/data/elk/logstash/config

在这里我们可以配置多个管道信息,来收集不同的信息

touch pipelines.yml
vi pipelines.yml
- pipeline.id: logstash_dev
  path.config: /usr/share/logstash/pipeline/logstash_dev.conf

配置文件 logstash_dev.conf

放在/data/elk/logstash/pipeline下

touch logstash_dev.conf
vi logstash_dev.conf
input {
  beats {
    port => 9900
  }
}
filter {
  grok {
    match => { "message" => "%{COMBINEDAPACHELOG}" }
  }
  mutate {
    convert => {
      "bytes" => "integer"
    }
  }
  geoip {
    source => "clientip"
  }
  useragent {
    source => "user_agent"
    target => "useragent"
  }
  date {
    match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"]
  }
}
output {
  stdout { }
  elasticsearch {
    hosts => ["127.0.0.1:9200"]
    index => "xiaoguo_test_example"
  }
}

注意了,在这里我们可以配置索引的名称,以方便我们后面在查看

  1. 启动容器

最重要的一个环节来了,成败在此一举

docker run -d -it --restart=always  --privileged=true  --name=logstash -p 5047:5047 -p 9600:9600 -v /data/elk/logstash/pipeline/:/usr/share/logstash/pipeline/      -v /data/elk/logstash/config/:/usr/share/logstash/config/ docker.elastic.co/logstash/logstash:7.7.1

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

启动结果:

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

  1. 验证是否启动成功

通过docker logs id 来看logstash是否启动成功

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

看到Successfully就表示成功了

  1. 修改 filebeat 配置文件

在前面的文章中我们已经将FlieBeat + Es + Kibana 的合并操作

我们只需要修改 filebeat 配置文件 filebeat.yml

将输出地址更改为我们部署的 logstash 地址

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /usr/share/filebeat/logs/*
output.logstash:
  hosts: ["ip:9900"]
  1. 查询是否生成索引
curl http://localhost:9200/_cat/indices?v 

看到自定义名称的那个索引,就表示成功了

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

  1. 上Kibana查看

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

总结

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

Filebeat 收集数据写入 logstash处理,再将数据写入 Elasticsearch 后 Kibana 进行可视化展示的全过程。


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

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
打赏
0
0
0
0
239
分享
相关文章
深入理解Docker:为你的爬虫项目提供隔离环境
本教程介绍如何使用Docker构建隔离环境,运行Python爬虫项目,采集小红书视频页面的简介和评论。主要内容包括: 1. **Docker隔离环境**:通过Docker容器化爬虫,确保环境独立、易于部署。 2. **代理IP技术**:利用亿牛云爬虫代理突破反爬限制。 3. **Cookie与User-Agent设置**:伪装请求头,模拟真实用户访问。 4. **多线程采集**:提高数据采集效率。 前置知识要求:Python基础、Docker基本操作及HTML解析(可选)。教程还涵盖常见错误解决方法和延伸练习,帮助你优化爬虫代码并避免陷阱。
深入理解Docker:为你的爬虫项目提供隔离环境
在线编程实现!如何在Java后端通过DockerClient操作Docker生成python环境
以上内容是一个简单的实现在Java后端中通过DockerClient操作Docker生成python环境并执行代码,最后销毁的案例全过程,也是实现一个简单的在线编程后端API的完整流程,你可以在此基础上添加额外的辅助功能,比如上传文件、编辑文件、查阅文件、自定义安装等功能。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
在线编程实现!如何在Java后端通过DockerClient操作Docker生成python环境
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
155 5
Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式
本文探讨了Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式,以及软件负载均衡器、云服务负载均衡、容器编排工具等实现手段,强调两者结合的重要性及面临挑战的应对措施。
164 3
Docker面试整理-如何查看和管理Docker容器的日志?
通过本文的介绍,我们了解了如何查看和管理Docker容器的日志,包括使用 `docker logs`命令、配置日志驱动、设置日志选项和集中日志管理。掌握这些技能,不仅可以在面试中展示专业水平,也能在实际工作中高效
720 3
centos系统清理docker日志文件
通过以上方法,可以有效清理和管理CentOS系统中的Docker日志文件,防止日志文件占用过多磁盘空间。选择合适的方法取决于具体的应用场景和需求,可以结合手动清理、logrotate和调整日志驱动等多种方式,确保系统的高效运行。
434 2
开源日志分析Logstash
【10月更文挑战第22天】
104 1
docker环境下mysql镜像启动后权限更改问题的解决
在Docker环境下运行MySQL容器时,权限问题是一个常见的困扰。通过正确设置目录和文件的权限,可以确保MySQL容器顺利启动并正常运行。本文提供了多种解决方案,包括在主机上设置正确的权限、使用Dockerfile和Docker Compose进行配置、在容器启动后手动更改权限以及使用 `init`脚本自动更改权限。根据实际情况选择合适的方法,可以有效解决MySQL容器启动后的权限问题。希望本文对您在Docker环境下运行MySQL容器有所帮助。
1032 1
Docker 容器的日志
【10月更文挑战第31天】
70 5