分布式下如何实现统一日志系统?

在业务系统开发中,日志的收集和分析很重要,特别是在进行故障分析时,日志记录得好,可以帮我们快速定位问题原因。在互联网分布式系统下,日志变得越来越分散,数据规模也越来越大,如何更好地收集和分析日志,就变成了一个特别重要的问题。

传统的日志查看

查看日志对工程师来说最简单不过了,虽然有了各类日志分析工具,但还是要熟悉命令行语句的操作,特别是在很多大型公司的面试中,都会考察求职者对 Linux 基本指令的应用和熟悉程度。下面我们一起来回顾一下。

Linux 查看日志的命令有多种:tail、cat、head、more 等,这里介绍几种常用的方法。

  • tail 和 head 命令

tail 是我最常用的一种查看方式,典型的应用是查看日志尾部最后几行的日志,一般会结合 grep 进行搜索应用:

tail -n 10 test.log
tail -fn 1000 test.log | grep 'test'

head 和 tail 相反,是查看日志文件的前几行日志,其他应用和 tail 类似:

head -n 10 test.log

  • more 和 less

more 命令可以按照分页的方式现实日志内容,并且可以进行快速地翻页操作,除了 more 命令以外,常用的还有 less 命令,和 more 的应用类似。

  • cat

cat 命令用于查看全部文件,是由第一行到最后一行连续显示在屏幕上,一次显示整个文件,一般也会结合 grep 等管道进行搜索。

除了基本的指令以外,还有 AWK 和 SED 命令,用于比较复杂的日志分析,例如,sed 命令可以指定对日志文件的一部分进行查找,根据时间范围,或者根据行号等搜索。关于 AWK 和 SED 详细的应用说明,你可以结合 help 指令查看命令示例。不过呢,我的建议是只要了解基本操作就可以,一些比较复杂的语法可以通过查看手册或者搜索类似的命令行应用来实现:

  • The GNU Awk User’s Guide

  • sed, a stream editor

为什么需要统一日志系统

使用上面的 Linux 指令进行日志查看与分析,在单机单节点下是可以应用的,但是如果扩展到分布式环境下,当你需要查看几十上百台机器的日志时,需要不停地切换机器进行查看,就会变得力不从心了。

你可以思考一下,在分布式场景下,除了不方便查看集群日志以外,传统日志收集都存在哪些问题?

  • 无法实现日志的快速搜索

传统的查找是基于文件的,搜索效率比较低,并且很难对日志文件之间的关系进行聚合,无法从全局上梳理日志,也很难进行调用链路的分析。

  • 日志的集中收集和存储困难

当有上千个节点的时候,日志是分布在许多机器上的,如果要获取这些日志的文件,不可能一台一台地去查看,所以这就是很明显的一个问题。

  • 日志分析聚合及可视化

由于日志文件分布在不同的服务器上,因此进行相关的分析和聚合非常困难,也不利于展开整体的数据分析工作。

除了这些,还有日志安全问题,以电商场景为例,很多业务日志都是敏感数据,比如用户下单数据、账户信息等,如何管理这些数据的安全性,也是一个很关键的问题。

ELK 统一日志系统

我在之前的工作中,曾经负责搭建了业务系统的 ELK 日志系统,在第 25 课时我们介绍 ElasticSearch 技术栈时中曾经提到过 ELK Stack,就是下面要说的 ELK(ElasticSearch Logstash Kibana)日志收集系统。

ElasticSearch 内核使用 Lucene 实现,实现了一套用于搜索的 API,可以实现各种定制化的检索功能,和大多数搜索系统一样,ElasticSearch 使用了倒排索引实现,我们在第 25 课时中有过介绍,你可以温习一下。

Logstash 同样是 ElasticSearch 公司的产品,用来做数据源的收集,是 ELK 中日志收集的组件。

image (5).png

Logstash 的数据流图如上图所示,你可以把 Logstash 想象成一个通用的输入和输出接口,定义了多种输入和输出源,可以把日志收集到多种文件存储中,输出源除了 ElasticSearch,还可以是 MySQL、Redis、Kakfa、HDFS、Lucene 等。

Kibana 其实就是一个在 ElasticSearch 之上封装了一个可视化的界面,但是 Kibana 实现的不只是可视化的查询,还针对实际业务场景,提供了多种数据分析功能,支持各种日志数据聚合的操作。

ELK 系统进行日志收集的过程可以分为三个环节,如下图所示:

image (6).png

  • 使用 Logstash 日志收集,导入 ElasticSearch

Logstash 的应用非常简单,核心配置就是一个包含 input{}、filter{}、output{} 的文件,分别用来配置输入源、过滤规则和配置输出。下面的配置是一个典型的实例:

input {
file {
path => "/Users/test/log"
start_position => beginning
}
}
filter {
grok {
match => { "message" => "%{COMBINE}"}
}
}
output {
ElasticSearch {}
stdout {}
}
  • 在 ElasticSearch 中实现索引处理

日志数据导入到 ElasticSearch 中以后,实现索引,在这一步中,可以针对不同日志的索引字段进行定制。

  • 通过 Kibana 进行可视化操作、查询等

作为一个商业化产品,Kibana 已经支持了非常丰富的日志分析功能,并且可以选择应用一些机器学习的插件,可以在 Kibana 的官方文档中了解更多。

在我之前的系统设计中,是使用 Flume 进行容器内的日志收集,并且将日志消息通过 Kakfa 传送给 Logstash,最后在 Kibana 中展示。这里分享我之前的一篇关于 ELK 的技术文章,作为补充阅读:ELK 统一日志系统的应用。

总结

今天分享了业务开发中关于日志收集的一些知识,包括常用的日志分析命令、传统日志收集方式在分布式系统下的问题,以及应用 ELK 技术栈进行日志收集的流程。

日志作为系统稳定性的重要抓手,除了今天介绍的日志分析和统一日志系统,在业务开发中进行日志收集时,还有很多细节需要注意。比如 Java 开发中,在使用 Log4j 等框架在高并发的场景下写日志可能会出现的日志丢失,以及线程阻塞问题,还有日志产生过快,导致的磁盘空间不足报警处理等。

你在开发中有哪些日志收集和应用的心得体会,欢迎留言进行分享。

如果你觉得内容不错,从中有所收获的话,不要忘了推荐给身边的朋友哦。前路漫漫,一起加油~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

现代 NLP:详细概述,第 1 部分:transformer

阿比吉特罗伊 一、说明 近五年来,随着 BERT 和 GPT 等思想的引入,我们在自然语言处理领域取得了巨大的成就。在本文中,我们的目标是逐步深入研究改进的细节,并了解它们带来的演变。 二、关注就是你所需要的 2017 年,来…

环保行业的物联网升级:采用钡铼技术R10

随着环境保护意识的增强和可持续发展的迫切需求,物联网技术在环保行业中扮演着越来越重要的角色。为了满足环保监测和数据采集的需求,钡铼技术R10在物联网应用中具有独特的优势。本文将探讨R10的参数和功能,并阐述其在环保行业中的应用前景。…

主流级显卡的新选择,Sparkle(撼与科技)Intel Arc A750兽人体验分享

▼前言 对于玩家而言,英特尔独显的出现不仅打破了NVIDIA与AMD双雄天下的局面,而且旗下的Arc A系列显卡还拥有不俗的做工性能以及颇具优势的价格,无论是升级或者是装新机都非常合适。如果要在Arc A系列当中选一个性能不俗,能够满足…

anaconda prompt进入虚拟环境 打开spyder

目录 1.查看有多少虚拟环境 2.conda create 指令创建新的虚拟环境 3.进入虚拟环境 4.spyder进入虚拟环境 5.退出虚拟环境 6.删除虚拟环境 1.查看有多少虚拟环境 打开anaconda prompt,输入 conda env list 2.conda create 指令创建新的虚拟环境 conda cre…

LinkedList与链表

[本节目标] 1.ArrayList的缺陷 2.链表 3.链表相关oj题 4.LinkedList的模拟实现 5.LinkedList的使用 6.ArratList和LinkedList的区别 1. ArrayList的缺陷 上篇博客已经熟悉了ArrayList的使用,并且进行了简单模拟实现,ArrayList底层使用数组来储存元素: public class Ar…

K8S 中对 Windows 节点的利用

目录 漏洞概述 漏洞详情 ​编辑 漏洞验证 补丁分析 在集群中探索 参考资料 在许多组织中,所运行的很大一部分服务和应用是 Windows 应用。Windows 容器提供了一种封装进程和包依赖项的方式,从而简化了 DevOps 实践,令 Windows 应用程序…

深入探究MongoDB:从基础到实战,一个全面的指南

MongoDB:海量数据库的介绍 定义与命名由来: MongoDB源自词“humongous”,意味着“巨大无比”。因此,MongoDB可译为“海量数据库”。类型: MongoDB是一种非关系型(NoSQL)数据库。与传统的关系型数据库相比,它的显著特点是不使用SQL语句。数据结构更灵活,没有固定的数据类…

装饰模式(单一责任)

Decorator(装饰模式:单一责任模式) 链接:装饰模式实例代码 解析 目的 在某些情况下我们可能会“过度地使用继承来扩展对象的功能”,由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性&#xff…

【C语言】指针详解(四)

目录 1.assert断言 2.指针的使用和传址调用 2.1strlen的模拟使用 2.2传值调用和传址调用 1.assert断言 assert.h头文件定义了宏 assert(),用于在运行时确保程序符合指定条件,如果不符合,就报错终止运行。这个宏常常被称为“断言”。 例如…

【Azure 架构师学习笔记】- Power Platform(1) - 简介

本文属于【Azure 架构师学习笔记】系列。 本文属于【Power Platform】系列。 Power Platform 它是一个SaaS平台,支持和延伸M365, Dynamics 365和Azure甚至其他第三方服务。主要提供低代码,自动化,数据驱动和定制化业务逻辑的服务…

NFC物联网一次性口令认证解决方案

物联网是由无线传感器网络、射频识别(RadioFrequency Identificalion,RFID)网络、互联网等构成的一种复合型网络,具有部分终端设备体积小、存储和计算处理能力弱的特点。顾名思义,物联网就是“物物相连的互联网”,也就是说,物联网…

Spark与Hadoop的关系和区别

在大数据领域,Spark和Hadoop是两个备受欢迎的分布式数据处理框架,它们在处理大规模数据时都具有重要作用。本文将深入探讨Spark与Hadoop之间的关系和区别,以帮助大家的功能和用途。 Spark和Hadoop简介 1 Hadoop Hadoop是一个由Apache基金会…

工具系列:TimeGPT_(1)获取token方式和初步使用

文章目录 介绍获取Token用法数据的重要要求使用DateTime索引推断频率。 介绍 Nixtla的TimeGPT是一种用于时间序列数据的生成式预训练预测模型。TimeGPT可以在没有训练的情况下,仅使用历史值作为输入,为新的时间序列生成准确的预测。TimeGPT可以用于各种…

亚马逊云科技 re:Invent 大会 - ElastiCache Serverless 模式来袭

大会介绍 亚马逊云科技的 re:Invent 大会是一年一度的,面向全球技术开发者科技盛会。几乎每次都会发布云科技、云计算等相关领域的产品重磅更新,不但将时下主流热门的技术不断整合,也未将来的发展标明了方向。 亚马逊云科技开发者社区为开发…

安卓系统和鸿蒙系统,哪个更适合老人使用

安卓系统和鸿蒙系统各有优势,但总体来说,鸿蒙系统可能更适合老人使用。以下是几个原因: 1.易用性: 鸿蒙系统针对老年人的使用习惯和需求进行了优化设计。它采用了更加直观、简洁的界面设计,降低复杂度并提升操作效率。…

Vue在页面上添加水印

第一步:在自己的项目里创建一个js文件;如图所示我在在watermark文件中创建了一个名为waterMark.js文件。 waterMark.js /** 水印添加方法 */ let setWatermark (str1, str2) > {let id 1.23452384164.123412415if (document.getElementById(id) …

为什么深度学习神经网络可以学习任何东西

下图你所看到的,是著名的曼德尔布罗特集,我们可以见证这个集合呈现出的复杂形态: 要理解神经网络如何学习曼德尔布罗特集,我们首先需要从最基础的数学概念讲起:什么是函数?函数本质上是一个将输入转化为输出…

AR智慧校园三维主电子沙盘系统研究及应用

一 、概述 易图讯科技(www.3dgis.top)自主研发的智慧校园三维主电子沙盘系统,采用B/S架构模式,采用自主可控高性能WebGIS可视化引擎,支持多用户客户端通过网络请求访问服务器地图和专题数据,提供地理信息数据、专题数据的并发访问…

问题解决 | Ubuntu重启无法进入系统

Ubuntu18.04重启无法进入系统,重开后如图 一直在加载系统内核4.15.0-213-generic,无法加载 错误原因 原本的系统是Ubuntu16.04,使用命令升级到Ubuntu18.04版本,升级重启后,远程无法连接! 错误解决 第一步:进入GRUB…

java爬虫(jsoup)如何设置HTTP代理ip爬数据

目录 前言 什么是HTTP代理IP 使用Jsoup设置HTTP代理IP的步骤 1. 导入Jsoup依赖 2. 创建HttpProxy类 3. 设置代理服务器 4. 使用Jsoup进行爬取 结论 前言 在Java中使用Jsoup进行网络爬虫操作时,有时需要使用HTTP代理IP来爬取数据。本文将介绍如何使用Jsoup设…
最新文章