当前位置: 首页 > article >正文

「码动四季·开源同行」go语言:如何使用 ELK 进行日志采集以及统一处理?

在前面的一系列文章中我们介绍了微服务各个组件的相关实践从本文开始我们将会介绍微服务日常开发的一些利器”这些工具会帮助我们构建更加健壮的微服务系统并帮助排查解决微服务系统中的问题与性能瓶颈等。ELK 技术栈本文将重点介绍微服务架构中的日志收集方案 ELKELK 是 Elasticsearch、Logstash 和 Kibana 的简称准确地说是 ELKB即 ELKFilebeat其中Filebeat 是用于转发和集中日志数据的轻量级传送工具。为什么需要分布式日志系统在以前的项目中如果想要在生产环境中通过日志定位业务服务的 Bug 或者性能问题则需要运维人员使用命令挨个服务实例去查询日志文件这样导致的结果就是排查问题的效率非常低。在微服务架构中服务多实例部署在不同的物理机上各个微服务的日志也被分散储存在不同的物理机。集群足够大的话使用上述传统的方式查阅日志就变得非常不合适。因此需要集中化管理分布式系统中的日志其中有开源的组件如 Syslog用于将所有服务器上的日志收集汇总。然而集中化日志文件之后我们面临的是对这些日志文件进行统计和检索比如哪些服务有报警和异常这些都需要有详细的统计。所以在以前出现线上故障时经常会看到开发和运维人员下载服务的日志并基于Linux 下的一些命令如 grep、awk 和 wc 等进行检索和统计。这样的方式不仅工作量大、效率低而且对于要求更高的查询、排序和统计等操作以及庞大的机器数量难免会有点力不从心”无法很好地胜任。ELKB分布式日志系统ELKB 是一个完整的分布式日志收集系统很好地解决了上述提到的日志收集难、检索和分析难的问题。ELKB 分别是指 Elasticsearch、Logstash、Kibana 和 Filebeat。Elastic 提供的一整套组件可以看作是MVC 模型Logstash 对应逻辑控制 Controller 层Elasticsearch 是一个数据模型 Model 层而Kibana 则是视图 View 层。Logstash 和 Elasticsearch 是基于Java 编写实现的Kibana 则使用的是Nodejs 框架。下面我们就来依次介绍这几个组件的功能以及它们在日志采集系统中的作用。Elasticsearch 的安装与使用Elasticsearch 是分布式系统中的实时搜索分析引擎使用Java 语言实现基于 Apache Lucene 搜索引擎库构建可以用来进行全文检索、结构化搜索、分析以及这三个功能的组合。Elasticsearch 支持数百个节点的扩展能够存储 PB 级别的数据。另外Elasticsearch 是面向文档的它可以存储和搜索整个对象或文档。在 Elasticsearch中你可以对整个文档进行索引、检索、排序和过滤这不同于传统的关系型数据库对行列数据进行操作。为了方便我们直接使用 Docker 安装 Elasticsearch:$ docker run -d --name elasticsearch docker.elastic.co/elasticsearch/elasticsearch:5.4.0需要注意的是Elasticsearch 启动之后需要进行简单的设置xpack.security.enabled 默认是开启的但我们为了方便测试就取消登录认证将该配置设置为false。登入容器内部执行如下的命令:#进入启动好的容器 $ docker exec -it elasticsearch bash #编辑配置文件 $ vim config/elasticsearch.yml cluster.name: docker-cluster network.host: 0.0.0.0 http.cors.enabled: true http.cors.allow-origin: xpack.security.enabled: false # minimum_master_nodes need to be explicitly set when bound on a public IP # set to 1 to allow single node clusters # Detai1s: https://github.com/elastic/elasticsearch/pul1/17288 discovery .zen.minimum_master_nodes: 1修改好配置文件之后退出容器再重启容器即可完成配置。我们为了后面使用时能够保留配置就需要从该容器创建一个新的镜像。首先获取到该容器对应的Containerld然后基于该容器提交成一个新的镜像。$ docker commit -a add config -m dev a404c6c174a2 es:latest sha256:5cb8c995ca819765323e76cccea8f55b423a6fa2eecd9c1048b2787818c1a994这样我们就得到了一个新的镜像 es:latest。我们运行新的镜像docker run -d --name es -p 9200:9200 -p 9300:9300 -e discovery. typesingle-node es:latest通过访问Elasticsearch 提供的内置端点我们检查 Elasticsearch 是否安装成功。$ curl http://1ocalhost:9200/_nodes/http?pretty { _nodes: { total : 1, successful : 1, failed : 0 }#集群大小 cluster_namedocker-cluster#设置的集群名称 nodes{ # 节点的详细信息 8iH5v9C-Q9GA3aSupm4caw : { name :8iH5v9C, transport_address : 10.0.1.14:9300, host:10.0.1.14, ip: 10.0.1.14, version : 5.4.0, bui1d_hash: 780f8c4, roles :[ master, data, ingest ], attributes: { ml.enabled:true }, http{ #绑定的 http 端口 bound_address:[ [::]:9200 ], pub1ish_address : 10.0.1.14:9200, max_content_length_in_bytes : 104857600 } } } }可以看到我们成功安装了Elasticsearch。另外为了方便查看数据我们需要安装Elasticsearch的可视化工具elasticsearch-head。这个安装方法就很简单了$ docker run -p 9100:9100 mobz/elasticsearch-head:5elasticsearch-head 是一款 Elasticsearch 可视化工具能夠显示 Elasticsearch 状态除了数据可视化还可以执行增、删、改、查等操作。安装之后的界面如下所示:Logstash的安装与使用Logstash 是一个数据分析软件主要用于分析Log日志。其工作原理如下所示数据源首先将数据传给Logstash这里我们使用的是 Filebeat 传输日志数据它主要包括Input 数据输入、Filter 数据源过滤和 Output 数据输出三部分。Logstash 可以对数据进行处理包括数据的过滤和格式化之后发送到Elasticsearch 存储并在Elasticsearch中建立相应的索引。下面我们就来安装和使用Logstash。首先下载并解压 Logstash:#下载 logstash wget https://artifacts.elastic.co/downloads/logstash/1ogstash-5.4.3.tar.gz#解压 logstash $ tar -zxvf 1ogstash-5.4.3.tar.gz下载速度可能比较慢如果你想速度稍微快点可以选择国内的镜像源。解压成功之后我们需要配置Logstash主要就是我们前面所提到的输入、过滤和输出。$ vi logstash-5.4.3/client.conf input { #输入的设置使用filebeat beats { port 5044 codec json } } output{#输出到Es中 elasticsearch { hosts [127.0.0.1:9200] index logstash-app-error-%{YYYY.MM.dd} } stdout {codec rubydebug} }输入支持文件、Syslog 和 Beats我们在配置时只能选择其中一种。这里我们配置了Filebeats 方式。过滤则用于处理一些特定的行为如匹配特定规则的事件流。常见的 filters 有geoip 添加地理信息、drop 丢弃部分事件和 mutate 修改文档等。如下是一个 filter 使用的示例:filter { #定义客户端的IP是哪个字段 geoip { source clientIp } }输出支持 Elasticsearch、File、Graphite 和 StatsD默认情况下将过滤的数据输出到Elasticsearch当我们不需要输出到Elasticsearch 时就需要特别声明输出的方式是哪一种。Logstash 支持同时配置多个输出源。我们在配置中将日志信息输出到Elasticsearch。配置文件搞定之后我们开始启动Logstash:根据控制台输出的日志我们知道Logstash已经正常启动。Elasticsearch的数据实现可视化就需要结合 Kibana提供前端的页面视图你可以在 Kibana页面进行搜索使得结果变成图表可视化。Kibana的安装与使用介绍完 Elasticsearch 和 Logstash下面我们再来了解下 Kibana 的相关概念。Kibana 用于搜索、分析和可视化存储在 Elasticsearch 指标中的日志数据是一个 Web 网页。Kibana 利用Elasticsearch 的REST接口来检索数据调用Elasticsearch 存储的数据将其可视化。它不仅允许用户自定义视图还支持以特殊的方式查询和过滤数据。Kibana的安装比较简单基于Docker安装即可docker run --name kibana -e ELASTICSEARCH_URLhttp://127.0.0.1:9200 -p 5601:5601 -d kibana:5.6.9我们在启动命令中指定了ELASTICSEARCH的环境变量就是本地的127.0.0.19200。Fillebeat的安装与使用ELKB 中的 Filebeat 是最后研发的并剥离出 Logstash 的数据转发功能。Filebeat 基于 Go语言开发是用于转发和集中日志数据的轻量级传送工具。通过配置Filebeat我们可以监听日志文件或位置、收集日志事件并将这些文件转发到Logstash、Kafka、Redis 等当然也可以直接转发到Elasticsearch进行索引。下面我们就按照如下命令开始安装和配置Filebeat#下载 filebeat $ wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.4.3-linux- x86_64.tar.gz $ tar -zxvf filebeat-5.4.3-1inux-x86_64.tar.gz $ mv filebeat-5.4.3-1inux-x86_64 filebeat #进入目录 $ cd filebeat #配置 filebeat $ vi filebeat/client.yml filebeat.prospectors: - input_type: log paths: - /var/1og/*.1og output.logstash: hosts: [localhost:5044]在Filebeat 的配置中input_type 支持从 Log、Syslog、Stdin、Redis、UDP、Docker、TCP、NetFlow输入。上述命令配置了从Log中读取日志信息并且配置了只输入Var/log/目录下的日志文件output 将Filebeat 配置为使用 Logstash 作为输出并且使用Logstash 对 Filebeat 收集的数据执行过滤等处理。配置好之后我们启动Filebeat:Filebeat 将启动一个或多个输入日志或文件位置这些输入将在日志数据指定的位置中查找。除此之外Filebeat 还会将监听到的数据发送到其预先配置好的指定输出源。ELKB的使用实践安装好ELKB 组件之后我们开始整合这些组件。首先看下ELKB 收集日志的流程:Filebeat 监听应用的日志文件随后将数据发送给 LogstashLogstash 会对数据进行过滤和格式化如jSON 格式化之后将处理好的日志数据发送给 ElasticsearchElasticsearch 存储并建立搜索的索引Kibana则会调用Elasticsearch 的存储为用户提供可视化的视图页面。我们运行所有的组件之后首先看下 elasticsearch-head 中的索引变化:可以看到多了一个fi1ebeat-2020.10.12的索引l这说明ELKB分布式日志收集框架搭建成功。访问http://localhost:9100我们来具体看下索引中的具体数据从上面截图可以看到/Vvar/log/目录下的 mysqld.log 文件中产生了新的日志数据这些数据非常多我们在生产环境中需要根据实际的业务进行过滤并处理相应的日志格式。elasticsearch-head 仅仅是一个简单的 Elasticsearch 客户端为了更加完整地统计和搜索需求就需要借助于 KibanaKibana 具有很强大的分析能力。上面的 Kibana访问http://localhost:5601运行截图展示了Filebeat 监听到的 mysql日志图中可以看到这些日志信息。基于 ElasticsearchKibana 可以友好地展示海量日志的统计视图并根据结果生成折线图、直方图和饼图等这里就不一一展示了。小结本文主要介绍了分布式日志采集系统 ELKB。日志主要用来记录离散的事件包含程序执行到某一点或某一阶段的详细信息。ELKB很好地解决了微服务架构下服务实例众多且分散、日志难以收集和分析的问题。限于篇幅本文只介绍了ELKB 的安装和使用其实 Go 微服务中一般使用日志框架如logrus、zap 等按照一定的格式将日志输出到指定的位置这里就交给你自行构建一个微服务进行实践了。

相关文章:

「码动四季·开源同行」go语言:如何使用 ELK 进行日志采集以及统一处理?

在前面的一系列文章中,我们介绍了微服务各个组件的相关实践,从本文开始我们将会介绍微服务日常开发的一些"利器”,这些工具会帮助我们构建更加健壮的微服务系统,并帮助排查解决微服务系统中的问题与性能瓶颈等。ELK 技术栈本…...

【LLMs篇】Qwen模型家族:从架构设计到多模态应用的全面解析

1. Qwen模型家族的技术架构演进 第一次接触Qwen模型时,最让我惊讶的是它在保持Transformer基础架构的同时,通过一系列精妙改进实现了性能突破。作为阿里云推出的开源大模型家族,Qwen从7B到72B参数规模的版本都采用了类似的架构设计理念&#…...

Leather Dress Collection效果展示:12款皮革服饰LoRA高清生成作品集

Leather Dress Collection效果展示:12款皮革服饰LoRA高清生成作品集 1. 项目介绍 Leather Dress Collection 是一个基于Stable Diffusion 1.5的LoRA模型集合,专门用于生成各种皮革服装风格的图像。这个系列包含了12种不同风格的皮革服饰模型&#xff0…...

2026年国内企业AI私有化部署服务商测评盘点

2026年国内企业AI应用落地进入规模化阶段,据信通院《2026年企业AI应用发展报告》数据,62.7%的中大型企业将私有化部署作为AI落地的首选方式,核心驱动因素为数据安全合规要求、业务系统适配需求、长期成本控制优势。本次盘点基于技术自研能力、…...

终极风扇控制指南:3个步骤实现Windows系统智能温控与静音优化

终极风扇控制指南:3个步骤实现Windows系统智能温控与静音优化 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Tren…...

libhv实战:从零构建一个可扩展的微型HTTP服务器

1. 为什么选择libhv构建微型HTTP服务器 第一次接触libhv这个网络库时,我正为一个物联网项目寻找轻量级的HTTP解决方案。当时试过不少开源框架,要么太臃肿,要么性能不达标,直到发现libhv的tinyhttpd示例——不到400行代码就实现了完…...

解决Lumerical(FDTD)中lumapi模块导入失败的完整指南

1. 为什么会出现lumapi导入失败的问题 第一次遇到import lumapi报错的时候,我也是一头雾水。明明按照官方文档安装了Lumerical软件和lumopt扩展包,怎么Python就找不到这个模块呢?后来经过多次实践和排查,发现这个问题在Windows系统…...

vLLM运行XVERSE-13B-256K报错?可能是tokenizer版本不兼容(附降级解决方案)

解决vLLM运行XVERSE-13B-256K时的Tokenizer版本冲突问题 当你在Linux环境下使用vLLM框架加载XVERSE-13B-256K大模型时,可能会遇到一个令人困惑的错误:"data did not match any variant of untagged enum PyPreTokenizerTypeWrapper"。这个错误…...

放弃HAL库硬件IIC吧!手把手教你用STM32F103C8T6 GPIO模拟IIC读取MT6701角度(附完整工程)

STM32 GPIO模拟IIC驱动MT6701磁编码器实战指南 在嵌入式开发中,IIC总线因其简单性和多设备支持能力而广受欢迎。然而,许多开发者在使用STM32 HAL库的硬件IIC时都遇到过稳定性问题——从莫名其妙的通信失败到难以调试的时序错误。这些问题在需要高精度角度…...

TranslucentTB安装故障排除指南:从问题诊断到系统修复

TranslucentTB安装故障排除指南:从问题诊断到系统修复 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 当你尝试安装Transluce…...

网络设备唯一身份证:MAC地址原理与作用全网最详解析

网络设备唯一身份证:MAC地址原理与作用全网最详解析 前言一、MAC地址:核心定义1.1 标准定义1.2 通俗理解1.3 核心特性 二、MAC地址:表示格式2.1 标准格式2.2 组成结构(两大部分)2.3 结构流程图 三、MAC地址&#xff1a…...

揭秘银行核心系统C++内存池崩溃真相:基于真实生产环境的17GB/日内存碎片数据复盘

第一章:银行核心系统C内存池崩溃事件全景概览某大型商业银行在一次日终批量交易高峰期,核心账务系统突发大规模服务中断,平均响应延迟飙升至12秒以上,部分交易返回“内存分配失败”错误码。事后根因分析确认:问题源于自…...

技术奇点移民局:人类文明延续证书申领指南

当测试思维遇见文明延续在软件测试领域,我们日复一日地构建测试用例、执行回归测试、提交缺陷报告,核心目标是为确保软件系统的稳定性、安全性与可持续性。如果将这一专业视角放大至人类文明的尺度,我们所面临的,正是一场空前规模…...

作业3.7

10.import math# 输入三条边a float(input("请输入三角形的边A:"))b float(input("请输入三角形的边B:"))c float(input("请输入三角形的边C:"))# 判断是否能构成三角形if a > 0 and b > 0 and c >…...

QuickBMS终极指南:解密游戏资源的完整解决方案

QuickBMS终极指南:解密游戏资源的完整解决方案 【免费下载链接】QuickBMS QuickBMS by aluigi - Github Mirror 项目地址: https://gitcode.com/gh_mirrors/qui/QuickBMS QuickBMS是一款功能强大的开源游戏资源提取工具,能够处理数百种压缩和加密…...

ok-ww:用智能自动化重构鸣潮游戏体验

ok-ww:用智能自动化重构鸣潮游戏体验 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸 一键日常 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves 痛点解析:当代游戏玩家…...

告别性能焦虑:5个被忽略的华硕设备优化神器隐藏功能

告别性能焦虑:5个被忽略的华硕设备优化神器隐藏功能 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, Scar…...

终极E-Hentai漫画下载指南:一键批量保存你的数字收藏

终极E-Hentai漫画下载指南:一键批量保存你的数字收藏 【免费下载链接】E-Hentai-Downloader Download E-Hentai archive as zip file 项目地址: https://gitcode.com/gh_mirrors/eh/E-Hentai-Downloader 你是否曾在E-Hentai上发现心仪的漫画,却为…...

BepInEx插件框架:让Unity游戏模组化变得如此简单

BepInEx插件框架:让Unity游戏模组化变得如此简单 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx 你是否曾经想过为心爱的游戏添加新功能或修改游戏体验?Bep…...

FPGA新手必看:用Riffa框架快速搭建PCIe测试环境(附避坑指南)

FPGA新手必看:Riffa框架实战指南——从零构建PCIe测试环境 第一次接触PCIe开发的FPGA工程师,往往会被复杂的协议栈和软硬件协同问题吓退。三年前我刚接手一个高速数据采集项目时,面对Xilinx官方文档里成百上千页的PCIe规范说明,整…...

01-16-15 模板方法模式 - Activity生命周期的模板方法

01-16-15 模板方法模式 - Activity生命周期的模板方法 模式定义 模板方法模式(Template Method Pattern)属于行为型设计模式,其核心思想是:在父类中定义一个算法的骨架,将某些步骤的具体实现延迟到子类。子类在不改变…...

Open UI5 源代码解析之878:ObjectAttribute.js

源代码仓库: https://github.com/SAP/openui5 源代码位置:src\sap.m\src\sap\m\ObjectAttribute.js ObjectAttribute.js 深度分析与项目作用说明 文件定位与整体结论 ObjectAttribute.js 位于 sap.m 库内部,是 sap.m.ObjectAttribute 控件的核心实现文件。它的职责并不…...

5分钟搞定:vLLM部署GLM-4-9B-Chat-1M,快速搭建你的AI聊天机器人

5分钟搞定:vLLM部署GLM-4-9B-Chat-1M,快速搭建你的AI聊天机器人 1. 为什么选择GLM-4-9B-Chat-1M? GLM-4-9B-Chat-1M是智谱AI推出的最新一代开源对话模型,在多项基准测试中表现优异。这个模型有几个突出特点值得关注:…...

C# 异步编程在 AI 应用中的最佳实践

一、引言 AI 应用开发中的异步需求 在当今的人工智能应用开发领域,异步编程已经成为不可或缺的核心技术。当我们与 AI 大模型进行交互时,网络请求的延迟、流式响应的处理、并发调用多个模型——这些场景无不对程序的响应能力和吞吐量提出了极高要求。传统的同步编程模式在面…...

突破性AI医疗诊断方案:基于深度学习的开源心电图分类实战指南

突破性AI医疗诊断方案:基于深度学习的开源心电图分类实战指南 【免费下载链接】ecg-classification Code for training and test machine learning classifiers on MIT-BIH Arrhyhtmia database 项目地址: https://gitcode.com/gh_mirrors/ec/ecg-classification …...

焦点国际冲刺港股:年营收5.3亿 利润8091万 周航夫妇控制99%股权

雷递网 雷建平 4月5日焦点国际有限公司(简称:“焦点国际”)日前更新招股书,准备在港交所上市。年营收5.3亿 利润8091万焦点国际成立于2014年,主要从事制造及销售吸收性卫生产品,以及销售卫生产品材料。最初…...

Android OkHtttp 流程分析

文章目录概述核心类执行流程请求发起拦截器链连接池异步任务调度器概述 OkHttp 是一个由 Square 公司开发的高效、简洁的 HTTP 客户端库。 OkHttp 包含一个连接池,可以复用 TCP 连接,避免了多次握手的开销。自动处理 GZip、HTTP 缓存、响应重试。 核心…...

如何用clawPDF高效解决日常办公中的5大文档处理难题?

如何用clawPDF高效解决日常办公中的5大文档处理难题? 【免费下载链接】clawPDF Open Source Virtual (Network) Printer for Windows that allows you to create PDFs, OCR text, and print images, with advanced features usually available only in enterprise s…...

企业级消息保留技术实现:3大核心机制深度解析与完整部署方案

企业级消息保留技术实现:3大核心机制深度解析与完整部署方案 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: https://gitc…...

告别手动造数据!用JMeter JSR223预处理程序+Groovy脚本,5分钟搞定接口签名和AES加密

告别手动造数据!用JMeter JSR223预处理程序Groovy脚本,5分钟搞定接口签名和AES加密 性能测试工程师最头疼的莫过于每次执行测试前,都要手动计算接口签名、拼接参数、加密敏感数据。这种重复性工作不仅耗时耗力,还容易出错。想象一…...