搭建日志系统ELK(二)

搭建日志系统ELK(二)

架构设计

在搭建以ELK为核心的日志系统时,Logstash作为日志采集的核心组件,负责将各个服务的日志数据采集、清洗、过滤。然而缺点也很明显:

  • 占用较多的服务器资源。
  • 配置复杂,学习曲线陡峭。
  • 处理大数据量时性能下降。

在我们设计架构时,尽量会选择减少主机使用资源,轻量,高性能,又能满足日志采集的需求。有没有这么一个开源服务呢?答案便是go-stash

特性/服务logstashgo-stash
定义ElasticStack 的一部分,用于日志收集和处理。高效的数据处理和存储工具,Go 语言实现。
性能灵活性高,但可能在处理大数据量时性能下降。高吞吐量,性能是 logstash 的5倍左右
资源消耗占用较多的服务器资源。节省了2/3的服务器资源。
易用性配置复杂,学习曲线陡峭。易用性高,配置更简洁直观。
过滤器系统强大的过滤器系统,支持多种数据处理方式。内置一套丰富的过滤器,允许自定义处理逻辑。

架构图

log-collect

各服务功能

  • filebeatFilebeat是用于转发和集中日志数据的轻量级传送工具。Filebeat监视您指定的日志文件或位置,收集日志事件,并将它们转发到kafka进行索引。
  • Kafka: Kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。
  • go-stash: go-stash是一个高效的从Kafka获取,根据配置的规则进行处理,然后发送到ElasticSearch集群的工具。
  • Elasticsearch:一个基于Lucene的搜索引擎,提供快速的全文搜索能力,适合处理大规模数据集,并且具备高可扩展性。
  • Kibana:一个开源的数据分析和可视化平台,能够让用户通过图表、地图等各种方式直观地理解Elasticsearch中的数据。

流程概述

日志数据的流动遵循从产生到消费的流程。

  1. 使用docker部署的服务容器,服务产生的日志以json格式会存储在 /var/lib/docker/containers/**/*-json.log
  2. 部署filebeat服务,采集容器日志并将它们转发到kafka进行索引
  3. go-stash是一个高效的从Kafka获取,根据配置的规则进行处理,然后发送到ElasticSearch集群中进行索引和存储。
  4. Kibana作为前端界面,从Elasticsearch检索数据,并提供数据可视化。

部署

文件目录

log-collect

|-- deploy
|   |-- filebeat
|   |   -- conf
|   |       -- filebeat.yml
|   -- go-stash
|       -- etc
|           -- config.yaml
|-- docker-compose.yaml

配置文件

filebeat.yml

filebeat.inputs:- type: logenabled: truepaths:- /var/lib/docker/containers/*/*-json.logfilebeat.config:modules:path: ${path.config}/modules.d/*.ymlreload.enabled: falseprocessors:- add_cloud_metadata: ~- add_docker_metadata: ~output.kafka:enabled: truehosts: ["kafka:9092"]#要提前创建topictopic: "openui-log"partition.hash:reachable_only: truecompression: gzipmax_message_bytes: 1000000required_acks: 1

go-stash.yml

Clusters:- Input:Kafka:Name: gostashBrokers:- "kafka:9092"Topics:- openui-logGroup: proConsumers: 16Filters:- Action: dropConditions:- Key: k8s_container_nameValue: "-rpc"Type: contains- Key: levelValue: infoType: matchOp: and- Action: remove_fieldFields:# - message- _source- _type- _score- _id- "@version"- topic- index- beat- docker_container- offset- prospector- source- stream- "@metadata"- Action: transferField: messageTarget: dataOutput:ElasticSearch:Hosts:- "http://elasticsearch:9200"Index: "openui-{{yyyy-MM-dd}}"Username: "elastic"Password: "tester"

部署

docker-compose.yaml

version: '3'services:elasticsearch:image: elasticsearch:7.13.4container_name: elasticsearchuser: rootenvironment:- discovery.type=single-node- "ES_JAVA_OPTS=-Xms512m -Xmx512m"- TZ=Asia/Shanghaivolumes:- ./data/elasticsearch/data:/usr/share/elasticsearch/data- ./data/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.ymlrestart: alwaysports:- 9200:9200- 9300:9300networks:- openui_net#查看elasticsearch数据 - Kibana to view Elasticsearch datakibana:image: kibana:7.13.4container_name: kibanaenvironment:- elasticsearch.hosts=http://elasticsearch:9200- elasticsearch.username="elastic"- elasticsearch.password="tester"- TZ=Asia/Shanghairestart: alwaysnetworks:- openui_netports:- "5601:5601"depends_on:- elasticsearch#elasticsearch UIelastichd:container_name: elastichdimage: containerize/elastichdrestart: alwaysnetworks:- openui_netports:- "9800:9800"depends_on:- elasticsearchkafka-ui:container_name: kafka-uiimage: provectuslabs/kafka-ui:latestports:- 9090:8080environment:DYNAMIC_CONFIG_ENABLED: 'true'KAFKA_CLUSTERS_0_NAME: kafka-workKAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka:9092depends_on:- kafkanetworks:- openui_net#消费kafka中filebeat收集的数据输出到es - The data output collected by FileBeat in Kafka is output to ESgo-stash:image: eilinge/go-stash # golang:v1.22container_name: go-stashenvironment:# 时区上海 - Time zone Shanghai (Change if needed)TZ: Asia/Shanghaiuser: rootrestart: alwaysvolumes:- ./deploy/go-stash/etc:/app/etcnetworks:- openui_netdepends_on:- elasticsearch- kafka#收集业务数据 - Collect business datafilebeat:image: elastic/filebeat:7.13.4container_name: filebeatenvironment:# 时区上海 - Time zone Shanghai (Change if needed)TZ: Asia/Shanghaiuser: rootrestart: alwaysentrypoint: "filebeat -e -strict.perms=false"  #解决配置文件权限问题 - Solving the configuration file permissionsvolumes:- ./deploy/filebeat/conf/filebeat.yml:/usr/share/filebeat/filebeat.yml- /var/lib/docker/containers:/var/lib/docker/containersnetworks:- openui_netdepends_on:- kafka#zookeeper是kafka的依赖 - Zookeeper is the dependencies of Kafkazookeeper:image: wurstmeister/zookeepercontainer_name: zookeeperenvironment:# 时区上海 - Time zone Shanghai (Change if needed)TZ: Asia/Shanghairestart: alwaysports:- 2181:2181networks:- openui_net#消息队列 - Message queuekafka:image: wurstmeister/kafkacontainer_name: kafkaports:- 9092:9092environment:- KAFKA_ADVERTISED_HOST_NAME=kafka- KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181- KAFKA_AUTO_CREATE_TOPICS_ENABLE=false- TZ=Asia/Shanghairestart: alwaysvolumes:- /var/run/docker.sock:/var/run/docker.socknetworks:- openui_netdepends_on:- zookeepernetworks:openui_net:driver: bridgeipam:config:- subnet: 172.16.0.0/16

环境服务搭建

[root@master log-collect]# docker-compose ps
NAME                COMMAND                  SERVICE             STATUS              PORTS
elastichd           "ElasticHD"              elastichd           running             0.0.0.0:9800->9800/tcp, :::9800->9800/tcp
elasticsearch       "/bin/tini -- /usr/l…"   elasticsearch       running             0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9200->9200/tcp, :::9300->9300/tcp
filebeat            "filebeat -e -strict…"   filebeat            running             
go-stash            "./stash -f etc/conf…"   go-stash            running             
kafka               "start-kafka.sh"         kafka               running             0.0.0.0:9092->9092/tcp, :::9092->9092/tcp
kafka-ui            "/bin/sh -c 'java --…"   kafka-ui            running             0.0.0.0:9090->8080/tcp, :::9090->8080/tcp
kibana              "/bin/tini -- /usr/l…"   kibana              running             0.0.0.0:5601->5601/tcp, :::5601->5601/tcp
zookeeper           "/bin/sh -c '/usr/sb…"   zookeeper           running             0.0.0.0:2181->2181/tcp, :::2181->2181/tcp

检查各服务是否正常运行

elastic-cluster

elastic-cluster

kafka-cluster

kafka-cluster

kafka-topic

kafka-topic

kibana

kibana

劣势分析

通过部署文件,很明显的存在一些劣势:

  • 依赖性过高: 容器之间各自负责不同的功能,学习成本增加。
  • 资源消耗:每个容器可能需要额外的资源,如内存和CPU。
  • 复杂性:容器编排和管理需要一定的学习和运维成本。
  • 网络配置:容器间的网络通信需要合理配置,以确保数据流畅。

ISSUE

在上述部署的过程,也不是一番风顺,有些错误对一个接触相关服务较少的同学而言,就容易退缩。还好出现的常见问题在网上都能找到解决方法,主要还是需要我们保持一颗热爱学习的心

  1. Kibana的Stack Monitoring显示节点offline

  2. ElasticSearch+Kibana设置用户名密码

  3. ES开启密码安全认证后,elastichd的连接方式

  4. go-stash 依赖json-iterator版本较低
    使用我基于golang:v1.22最新构建的 go-stash镜像

  5. elasticSearch 文件权限不足,启动失败

项目地址

Log-Collect

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/388907.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FPGA开发——呼吸灯的另一种实现方式

一、概述 关于呼吸灯的设计其实在前面的文章中就已经提到过,这篇文章更多的针对前面的实现方式进行一个改良。在前面的呼吸灯的设计使用的是us、ms、s的三级计数器进行功能实现,这种实现方法应该是我们最后理解也是最常用的方式。但经过蜂鸣器的音乐播放…

2024第18届中国西部体育博览会诚邀代理招展

2024第18届中国西部体育博览会诚邀代理招展 2024第18届中国西部体育博览会诚邀全国各关联商会、协会,联盟、各专业会展公司、各关联产业园区、各关联网站报纸杂志及平台等资源方组团参展,组委会将给予最优惠的代理招展政策,群策群力共同把中…

2024年音频剪辑必备:五大最佳音频编辑软件精选!

在数字时代,音频剪辑已成为创意表达的重要工具。无论是音乐制作、播客编辑还是视频后期,一款优秀的音频剪辑软件都是不可或缺的。推荐五款备受推崇的音频剪辑工具。 福昕音频剪辑 链接:https://www.foxitsoftware.cn/audio-clip/ 福昕音频…

关于DynamoRIO处理多线程程序时候的问题

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…

Java数据结构(五)——栈和队列

文章目录 栈和队列栈基本概念栈的模拟实现集合框架中的栈栈的创建栈的方法栈的遍历 栈的应用及相关练习括号匹配逆波兰表达式求值出栈入栈次序匹配最小栈 几个含"栈"概念的区分 队列基本概念队列的模拟实现循环队列双端队列集合框架中的队列队列的创建队列的方法队列…

数据结构(邓俊辉)学习笔记】词典 01—— 散列

文章目录 1. 从服务到电话2. 循值访问3. 数组4. 原理5. 散列6. 冲突 1. 从服务到电话 现在进入新的一章词典。将学习实现词典 adt 的重要技术,也就是散列。我们将看到散列实际上并不是一种简单的技术,从某种意义上讲,它甚至是一种思想&#x…

记录一次环境的安装

目录 新添加的代码 代码解释 为啥ubuntu用debian软件源 为啥修改sources.list.d S权限意思 php缺少和数据库连接的模块 使用root登陆数据库1698错误 字段解释 auth_socket解释 使用root登陆数据库方法 详细解释 首先在安装的时候,有一个dockerfile文件&a…

day 18流的定位、文件IO以及Linux系统中时间的获取

流的定位 偏移量:读和写都在偏移量的位置进行 文件IO 相对于标准IO来说,文件IO直接在Linux的内核中操作,也更加的简洁精炼 对文件的操作也是三个部分 1.打开文件 open 2.读写文件 read write 3.关闭文件 close 还有一些其他的函数接口…

vue3 命令运行窗口暴露网络地址,以及修改端口号

一般情况下这里的地址是隐藏的 这里加上 --host 可以暴露网络地址,再加上--port --8080 就可以将端口号修改为8080(修改后边的数字就可以修改为你想要的端口号)

linux安装配置jdk

①下载jdk安装包,放在/opt/app/software/java下 cd /opt/app/software/java②进行解压操作 tar -zxvf jdk-8u251-linux-x64.tar.gz③解压完成之后,进行环境变量的配置,shell下执行 vi ~/.bash_profile根据jdk的安装目录,加入 …

【C++】学习笔记——智能指针

文章目录 二十一、智能指针1. 内存泄漏2. 智能指针的使用及原理RAII智能指针的原理auto_ptrunique_ptrshared_ptrshared_ptr的循环引用weak_ptr删除器 未完待续 二十一、智能指针 1. 内存泄漏 在上一章的异常中,我们了解到如果出现了异常,会中断执行流…

LocalDateTime计算两个时间之间的间隔

LocalDateTime计算两个时间之间的间隔 嘚吧嘚LocalDateTimeLocalDateLocalTime 嘚吧嘚 自从认识了LocalDateTime之后,使用的频率越来越高了,使用多了就不可避免的涉及到日期的比较、加减以及计算日期间隔这些操作。 但是我发现自己好像不会&#x1f605…

2024年钉钉杯大学生大数据挑战赛倒计时,最后冲刺

2024第三届钉钉杯大学生大数据挑战赛倒计时,小编给大家带来非常实用的最后冲刺助力【A题】,(看图资料预览): 中国烟草行业作为国家税收和财政收入的重要支柱,近年来销售收入持续增长。国家对此实行严格的专…

一键测量仪,能否彻底解决燃气灶配件缺陷问题?

燃气灶配件是指用于燃气灶的附件或零部件,用于安装、维护或改进燃气灶的功能和性能。这些配件通常包括各种零部件、附件和替换件,以确保燃气灶的正常运行和安全使用。燃气灶的火焰头是产生火焰的部件,通常根据不同的燃气类型和火力需求选择合…

ETL数据集成丨快速将MySQL数据迁移至Doris数据库

随着大数据技术的迅速发展,越来越多的企业开始寻求高效、灵活的数据存储与分析解决方案。Apache Doris(原名 Palo)作为一款高性能的MPP(大规模并行处理)分析型数据库,凭借其在OLAP场景下的卓越表现&#xf…

Minio多主机分布式 docker-compose 集群部署

参考 docker-compose搭建多主机分布式minio - 会bk的鱼 - 博客园 (cnblogs.com) 【运维】docker-compose安装minio集群-CSDN博客 Minio 是个基于 Golang 编写的开源对象存储套件,虽然轻量,却拥有着不错的性能 中文地址:MinIO | 用于AI的S3 …

SYD88xx代码复位不成功和解决办法

原来的复位代码如下: void ota_manage(void){#ifdef _OTA_if(ota_state){switch(ota_state){case 1 : #if defined(_DEBUG_) || defined(_SYD_RTT_DEBUG_)dbg_printf("start FwErase\r\n");#endifCmdFwErase();#if defined(_DEBUG_) || defined(_SYD_RTT_DEBUG_)db…

Spring Boot 动态数据源

目录 前言 前置环境 pom yml Entity Dao 枚举类 数据源 AOP Controller 启动类 演示 前言 大多数系统中,都需要数据库来持久化数据,在大多数情况下,一个系统只需要配置一个数据源便能够完成所有业务的查询,保存操作。…

为什么Transformer需要进行 Multi-head Attention?

目录 1. 前言 2. 基本概念 2.1. Word2Vec 2.2. Attention is all you need 2.3. Self-attention 2.3.1. 概述self-attention 2.3.2. 训练细节 2.4. Multi-head Attention 2.4.1. 多头理论细节 2.4.2. 多头代码实现 2.5. 总结 3. 讨论观点 3.1. 观点1: …

【工具插件类教学】vHierarchy 2工具编辑器扩展使用

目录 一、下载导入 二、使用介绍 1.便捷小工具 a.图标和颜色Icons and colors b.对象组件缩略图Component minimap c.层级线展示Hierarchy lines d.极简模式Minimal mode e.斑马条纹图案Zebra striping f.激活切换Activation toggle 2、快捷键 一、下载导入 资源官方…