wonder监控系统-日志监控介绍

Posted 360云计算

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wonder监控系统-日志监控介绍相关的知识,希望对你有一定的参考价值。


wonder监控系统-日志监控介绍


女主宣言

鉴于小主这几天收到很多小伙伴询问wonder监控系统关于日志监控方面的问题,于是便催促相关同学总结一下日志监控的话题,小主的要求是只要干货不要讲"概念",毕竟还是希望能和更多的小伙伴交流一下心得,今天就为大家奉上这篇关于日志监控的方案分享。

PS:丰富的一线技术、多元化的表现形式,尽在“HULK一线技术杂谈”,点关注哦!


背景简介

日志监控顾名思义就是对应用程序运行的日志进行监控,然后获取出我们感兴趣的信息数据,并根据这些数据设置报警策略、从而对数据进行判断,如果触发阈值,就会产生报警。下面就会介绍一下关于日志监控模块的采集周期,监控项,监控策略等相关的设计思路。


Wonder监控系统秉承HULK私有云平台服务化、产品化的理念。解决用户根本问题的同时,更注重用户体验基于open-falcon改造的wonder监控系统,想了解更多的同学可以翻阅一下历史文章。


架构设计图:

wonder监控系统-日志监控介绍



日志监控类型

日志监控分为滚动数目字符串匹配数字匹配三种类型,采集后的数据均是数字。


滚动数目

场景:"滚动数目"主要应用于监控日志的条目变化,比如QPS变化的报警。


方法:获取日志一个周期内日志滚动的条数。监控类型选择滚动数目,日志路径选择你需要监控的日志,监控频率为监控项采集的周期。


如下图所示:

wonder监控系统-日志监控介绍


字符串匹配

场景:"字符串匹配"可以针对日志中的关键字进行匹配报警,应用场景比较广泛,适合大部分类型的应用程序日志。


方法:分为精确匹配和正则匹配。

  • 精确匹配指匹配日志在一个周期内精确匹配到的一条字符串的次数;

  • 正则匹配指匹配日志在一个周期内正则匹配到的一个正则表达式的次数。


监控类型选择字符串匹配,匹配规则按照需求选择正则匹配还是精确匹配。是否重复指一条日志若出现匹配的字符串多次,是否只算做一次处理。匹配内容指待匹配的精确字符串。日志路径选择你需要进行监控的日志路径。监控频率为监控项采集的周期。


如下图所示:

wonder监控系统-日志监控介绍


数字匹配

场景:"数字匹配"可以针对日志中整型类型的字段进行范围匹配,并且可以进行sum、min、max、avg的计算,比如可以对nginx中的request_time进行报警,当avg值大于10s进行报警。


方法:指在一个周期内匹配指定规则的所有数字,计算出匹配到的所有数字的最大值、最小值、平均值和总和。


监控类型选择数字匹配,匹配规则分为最大、最小、平均和总和。是否重复指一条日志若出现匹配的字符串多次,是否只算做一次处理。匹配内容指待匹配的正则表达式。数字匹配需要配置开始和结束字符串,中间会默认加上(-?\d+\.?\d*),最后获取括号里面的数字。日志路径选择你需要监控的日志。监控频率为监控项采集的周期。

如下图所示:

wonder监控系统-日志监控介绍


日志监控原理

1. 日志读取


根据配置进行初始化操作(为了保证性能,直接配置读取文件最后一行):

t, err := tail.TailFile(filename,tail.Config{Follow: true, ReOpen: true, Debug: debug, Poll: true, Location:&tail.SeekInfo{Whence: os.SEEK_END}})

并且开启一个Goroutine 循环读取日志,将读取日志丢到FormateMsg函数中。


for line := range t.Lines {

                   _, err := t.Tell()

                   if err != nil {

                            if g.Config().Debug{

                                     log.Println(err)

                            }

                            return

                   }

                   FormateMsg(w, line.Text)

         }



2. 在FormateMsg函数中,会将日志根据类型和配置进行处理,将处理后的值写入到事先声明的队列中。


w.Queue.PushFront(r)


3. 日志初始化中会开启另一个Goroutine,定期将处理后的数据再处理,最后将结果push到transfer。


go func() {
                   for {
                            select {
                            case<-this.Ticker.C:
                                     RunTask(this.Log)
                            case <-this.Quit:
                                     this.Ticker.Stop()
                                     return
                            }
                   }
         }()


4. Push到Transfer的数据,由于需要支持在一个日志监控配置中配置多条日志,所以需要在tags上标明日志的路径。


日志监控展示:

wonder监控系统-日志监控介绍                            


总结

目前日志监控的功能满足了业务的基本需求,之后会增加一些诸如日志文件按日期匹配的功能。这种模式的日志监控模式随着日志的大小,所耗的CPU资源也会相应增加,这点要注意下。大文件的日志可以选择通过SDK由应用程序主动push的方式进行上报数据,类似ELK的方式统一收集之后再进行计算和处理。


扫描下方
二维码
了解更多内容

以上是关于wonder监控系统-日志监控介绍的主要内容,如果未能解决你的问题,请参考以下文章

zabbix之日志监控

日志监控告警系统

zabbix之日志文件监控

微服务海量日志监控平台

微服务海量日志监控平台

使用 Loki 实现 Kubernetes 容器日志监控