(关心具体部署的同学,可以移步我的另外一篇《Centos部署Loki日志聚合系统》Centos部署Loki日志聚合系统 - 锅叔 - 博客园)

一、啥是日志, 为啥要聚合

  面试初级同学常问的问题之一就是,一个在线运行的生产系统,如果出现了一些在测试环境复现不了的bug该如何处理啊?错误回答:“我们的系统从没有出过问题”,正确回答:“加日志”。

  对于不能稳定复现,或者不方便调试的场景, 通过在程序的执行路径上增加一些文字的记录,输出为文件,供后续分析查看程序的执行过程,是谓之日志。日志可以24小时,无人值守的忠实记录程序的执行过程,是排查偶发问题,以及运维监控利器。

  日志一般都存在级别(error,warn,info,debug)的概念,详尽程度依次递增, 因为写日志本身也会产生磁盘IO,占用系统资源,所以在生产环境一般不会输出debug级别日志。日志文件的扩展名通常为.log.

if(a>1){log.i("a>1");//日志
}else{log.i("a不大于1");  //日志
}

——日志

  那为啥是日志聚合呢?实际场景中,日志文件通常不会是简简单单的一份, 例如现在流行的微服务,或者分布式部署。一个系统各个模块被运行在不同的系统进程,甚至于不同的物理服务器上。这样就会产生数个日志文件, 分布在不同的文件夹或者不同的计算机上。 如果我想完整的跟踪一个用户操作(如下订单),如果这不是一个简单的单进程服务器,那我只能去依次打开,各个模块所输出的日志文件,然后根据时间人肉拼凑在一起看。由于系统是多线程多用户的,在多个日志文件中关联追踪一笔业务的发生过程,会非常繁琐。

——模拟多线程,多用户系统的日志文件内容

  聚合就可以理解为把这些分散的日志文件,合并到一起,可以统一的查询,过滤。

二、日志收集系统原理组成

  如何可以把日志收集到一起,并方便查看呢? 比如一个简单直接的想法就是各模块都把日志存储到一个统一的数据库中,这样就可以统一存储,查询了。其实日志收集系统的基本原理也是如此。基本分为

  收集器 —— 可以看做数据库的客户端驱动,读取日志文件,通过网络发送给存储中心。

  日志存储(数据库)—— 可以看做数据库,把收集器收集到的文件存储下来,并提供查询功能。通常支持特定的简单查询语言,可以通过编写脚本的方式查询。

  查询界面 —— 类似于图形界面的数据库查询工具,提供直观的操作交互,比黑洞洞的控制台体验好的多。

——日志被自下而上收集,用户通过图形界面统一查询

三、全文索引与轻量化

  在日志收集的这三个角色中,日志收集器与图形界面都相对简单,容易理解,而日志的存储查询部分则要复杂一些。

  日志通常条数众多,一个有一定有户数的WEB系统,每天产生个几千上万个W条数的日志,都是毫不意外地。对于这样多的日志数据,如何提供快速查询能力,是要想点特殊的办法的。简单的记事本字符串查询的方式,等结果可能会到天荒地老。

  全文索引 —— 就是对一段特定的文本进行预处理,生成一个处理结果,这个结果记录了,每个文字/单词,在文档中出现的位置,并将这个结果存储起来,后续利用这个预处理结果,当你想查找一个文字/单词时,就可以快速的给出,包含这个字词的行数。

  第一行:我很丑可是我很温柔第二行:我很丑可是我有音乐和啤酒索引我: 第一行,第二行丑:第一行,第二行音乐:第二行。……

——全文索引简单原理说明,搜索我时,则可以快速的定位到第一第二行。

  从上面的简单介绍可以看出,如何分词是有很有技术含量的,分词方法会影响索引结果的大小,进而与查询效率有关。而通常索引文件都是大于被索引的内容本身的。

  对日志内容进行全文索引,优点是可以提供较好的查询效率,缺点则是需要更多的存储空间,更大的磁盘,更好的硬件则意味更多的¥ :-)  。著名的ELK日志聚合解决方案中的存储部分Elasticsearch就是采用全文索引技术,提供搜索优化的

  轻量化 —— 如果没有¥,但是有时间,也是有解决方案的。比如我有多套开发,测试,联测环境,用ELK这类全文索引类的存储太占地方。不做全文索引,用蛮力进行字符串搜索的方案也是存在的,如Grafana Labs 的 Loki。像标称的那样,的确很轻量化,安装简单,配置简单,不需要太多的存储空间,在处理的日志不是太多时,搜索效率完全可以接受。更多信息:Grafana Loki | Grafana Labs

四、滚(Rolling)

  只要程序在运行,日志就会源源不断产生。于是终于有一天会占满全部硬盘,然后就没有然后了。所以日志文件的生成,要记得配置滚动周期,让超期的日志文件自动删除。这点对于日志聚合系统来说也非常重要,可能更加重要,因为毕竟是一个存储中心,会存储多个收集器同步的日志文件,不定时清理,会很快被塞满。

~~最后, 希望能帮助入门的同学,愿世界和平~~~!

编程入门之日志聚合系统相关推荐

  1. python编程求圆的面积案例_Python实用案例编程入门:第七章 调式手段

    本章的主题为调试手段,这是程序开发必不可少的步骤,也是占用时间最多的环节.在程序员的正常开发工作中,调试工作至少占据1/3的时间,而实际编码工作相对占用实际比较少.因此,无论您是初学者,还是编程兴趣爱 ...

  2. python编程下载安卓版-python编程入门

    python编程是一款专业的编程入门学习App,致力于帮助初学者入门及提升程序员开发效率,目前已提供1000+常见编程语言教程和免费技术文档,涵盖前端开发/Python/Java/PHP等热门编程语言 ...

  3. 大数据之hadoop伪集群搭建与MapReduce编程入门

    一.理论知识预热 一句话介绍hadoop: Hadoop的核心由分布式文件系统HDFS与Map/Reduce计算模型组成. (1)HDFS分布式文件系统 HDFS由三个角色构成: 1)NameNode ...

  4. Oracle编程入门经典 第12章 事务处理和并发控制

    目录 12.1          什么是事务处理... 1 12.2          事务处理控制语句... 1 12.2.1       COMMIT处理... 2 12.2.2       RO ...

  5. Oracle编程入门经典 第11章 过程、函数和程序包

    目录 11.1          优势和利益... 1 11.2          过程... 1 11.2.1       语法... 2 11.2.2       建立或者替换... 2 11.2 ...

  6. Oracle编程入门经典 第7章 表

    表是在行和列中存储数据的基本结构.而且,就如同Oracle向数据库整体增加特性一样,随着时间失衡,它也增强了表的概念,以适应更加复杂的应用要求.在本章中,我们将要讨论: Oracle中最常用的表类型, ...

  7. Oracle编程入门经典 第6章 在Oracle中处理语句

    6.1     SQL语句类别 DDL:数据定义语言语句.这样的语句有CREATE.TRUNCATE和ALTER,它们用于建立数据库中的结构,设置许可等.用户可以使用它们维护Oracle数据词典. D ...

  8. Oracle编程入门经典 第1章 了解Oracle

    基本概念.什么是数据库?什么是实例?什么是模式?Oracle的基本术语?什么是SYS和SYSTEM? Oracle数据库的一些变化版本 1.1   Oracle基本术语 1.1.1          ...

  9. python编程入门视频推荐_Python编程入门2021攻略,书籍推荐,视频推荐,每天更新...

    写这篇文章的初衷 2018年我大学毕业,和很多人一样.大学里的世界,我也是整天LOL.打了4年,确还只是个黄金守门员.恋爱也想都不敢想.不过,话说回来,我拿了三年的奖学金.真的不是因为我学习认真,而是 ...

最新文章

  1. 即时通讯音视频开发(二):视频编解码之数字视频介绍
  2. 计算机pc软盘不能数字,老人把遗嘱存5寸软盘难坏家人 老电脑终未读出
  3. 【Java多线程】sleep与yield的辨析
  4. [渝粤教育] 平顶山学院 传播理论与技巧 参考 资料
  5. 如何通过BBED找回删除数据
  6. 减少.NET应用程序内存占用的一则实践
  7. 熊猫烧香病毒样本分析
  8. 3.2、如何通过JLINK下载程序(附JLINK驱动)
  9. 简述计算机维修 维护的基本原则是什么,计算机硬件维护的四大原则
  10. Turnitin查重原理是什么?
  11. npm安装ionic相关设置
  12. OpenSSL爆出严重bug漏洞 Heartbleed bug CVE-2014-0160
  13. 计算机长时间休眠后无法唤醒,win7电脑休眠后无法唤醒解决方法
  14. Android系统开发 ----- 系统服务开发
  15. Maven 指定 Java 编译版本
  16. 平面设计中的插画设计技巧
  17. 7-20 | 打印九九口诀表
  18. 统计学习方法chapter1
  19. 拼多多——多多的数字组合
  20. ctfshow sql注入 web171-web253 wp

热门文章

  1. ElasticSearch系列 - SpringBoot整合ES:实现分页搜索 from+size、search after、scroll
  2. 简单实用的腿部按摩工具,HEAD海德环形夹腿器
  3. iOS手动旋转屏幕、自动旋转屏幕
  4. USB NETWORK SERVER 简介
  5. 与师生谈人工智能5:强人工智能
  6. [OpenCV_GrubCut]实现交互式图像分割提取前景--Python抠图
  7. 移动安全--7--JVM / Dalvik / ART虚拟机
  8. 第100篇博客——用Python爬取我前99篇博客内容,分词并生成词云图
  9. css怎么设置字体颜色渐变
  10. MySQL 主从时间字段相差1秒深度揭密