推荐网言网语架构师:90行代码,搞定你的日志监控框架!

Posted 网事参考

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了推荐网言网语架构师:90行代码,搞定你的日志监控框架!相关的知识,希望对你有一定的参考价值。

网事参考

    活在昨天的人迷惑活在明天的人等待活在今天的人踏实关注网事参考,为您提供最快最新最重要最有用的信息化解决方案。微信ID:NET_jiangshan888

【推荐】网言网语架构师:90行代码,搞定你的日志监控框架!

【推荐】网言网语架构师:90行代码,搞定你的日志监控框架!

网事参考>>网言网语架构师:90行代码,搞定你的日志监控框架!

【推荐】网言网语架构师:90行代码,搞定你的日志监控框架!


——网事参考

当前浏览器不支持播放音乐或语音,请在微信或其他浏览器中播放 【推荐】网言网语架构师:90行代码,搞定你的日志监控框架! 【推荐】网言网语架构师:90行代码,搞定你的日志监控框架!

【推荐】网言网语架构师:90行代码,搞定你的日志监控框架!

【推荐】网言网语架构师:90行代码,搞定你的日志监控框架!

如上图,以模块名为优先组织目录

  • 根目录下,有das,entry,logic三个模块目录

  • 在模块目录下,又分别有存放可执行文件,配置文件,日志文件的bin目录,conf目录,以及log目录

 

什么是功能优先的目录规范?

【推荐】网言网语架构师:90行代码,搞定你的日志监控框架!

如上图,以功能为优先组织目录

  • 根目录下,二进制目录bin,配置文件目录conf,日志目录log

  • 功能目录下,有das,entry,logic等不同模块的目录

 

楼主旗帜鲜明的推荐第二种,功能优先的目录规范,对二进制备份,配置备份,日志清理都非常方便。

 

三点二、日志规范

日志规范化不但对日志监控,对大数据体系建设都极为重要,需要考虑规范:

  • 日志分级规范:不同级别的日志理应打到不同的文件中,例如FATAL级,ERROR级,WARM级,LOG级,INFO级,DEBUG级

fatal.log

error.log

info.log

debug.log

  • 日志切分规范:运维应该提供自动化的日志切分工具,支持小时级别,或者天级别的日志切分,曾经看过一个120G的access日志,从日志中grep出某个uid的日志,是极其低效的

daojia.log.2018012800

daojia.log.2018012801

daojia.log.2018012823

  • 日志格式规范:日志格式规范是一个可展开的话题,必要性很强,挖个坑下回细说

画外音:是不是有小伙伴在思考,ca,自己怎么没有这三类规范呢?

 

四、通用可扩展日志监控平台/框架思路

制订了目录规范,日志规范之后,要建立日志监控平台/框架,实施异常与正常的日志监控,就简单多了,主要有集中式监控,分散式监控两类思路。

 

四点一、集中式

【推荐】网言网语架构师:90行代码,搞定你的日志监控框架!

集中式的日志监控,最流行的莫过于ELK:

  • 各个机器节点上部署logstash,收集日志

  • 收集的日志汇总到ES

  • 通过Kibana做统一分析和展现

运维的同学对这一套集中式日志监控系统非常熟悉。

 

四点二、分散式

ELK有点重,三套系统搭建与运维起来比较麻烦,如果只是为了实现ERROR日志的监控,异常关键字监控,正常关键字监控,有点杀鸡用牛刀了。

 

与集中式的日志监控相比,分散式的日志监控,就显得轻量级许多,非常适用与早期的创业型公司,其思路为:

【推荐】网言网语架构师:90行代码,搞定你的日志监控框架!

  • 通过日志监控后台,对不同集群,进行ERROR日志阈值设置,进行异常关键字设置,正常关键字设置

  • 日志监控中心,进行统一调度,将配置分发到不同机器的agent节点上

  • agent节点,并不统一收集日志,而是接收到监控中心分发的log监控配置,在各个机器上实施日志监控,如果触发日志监控策略,立刻发起告警

 

与ELK相比,这个日志平台会简单的多,而且扩展性非常好。

 

额,创业型公司没有时间和人员研发agent,没有资源研发日志监控中心服务,没有人力研发日志监控后台,还有没有更简洁但可扩展的方案呢?

和《》的思路一样,没有服务,没有后台,没有agent,初期完全可以用配置文件来替代

 

五、100行搞定日志监控平台

【推荐】网言网语架构师:90行代码,搞定你的日志监控框架!

整个框架设计如上,大致分为三个部分:

  • 被监控集群

  • 基础信息与服务

         cluster.info.xml:存储集群信息

         owner.info.xml:存储集群责任人信息

         mail.service/SM.service:发邮件,发短信的基础服务

  • 日志监控框架

 

集群信息与负责人信息,与前文描述的一样。

集群配置cluster.info.conf

[daojia_main]

ip.list : ip1, ip2, ip3

log.path : /home/work/log/daojia_main/

owner.list : shenjian, zhangsan

 

[daojia_user]

ip.list : ip4, ip5, ip6

log.path : /home/work/log/daojia_user/

owner.list : shenjian

 

责任人配置owner.info.conf

[shenjian]

email : XX@XX.com

phone :15912345678

 

[zhangsan]

email : YY@YY.com

phone :18611220099

 

日志监控框架又分为两个模块:

  • 可扩展监控配置文件log.monitor.conf

[log.monitor.item]

cluster.name : daojia_main

# error日志监控,每分钟超过此阈值就告警

error.log. threshold : 10

# 异常关键字监控,日志出现这些关键字就告警

bad.key : exeption | timeout | coredump

# 正常关键字监控,日志每分钟不出现这些关键字就告警

good.key : login | user | click

 

[log.monitor.item]

cluster.name : daojia_user

error.log.threshold : 10

 

日志监控调度框架,这里需要编码啦,100行的伪代码如下:

Array[log-monitor] A1= Parse(log.monitor.config);

Array[cluster-info] A2= Parse(cluster.info.config);

Array[owner-info] A3= Parse(owner.info.config);

 

// 遍历所有监控项

for(each item in A1){

         //取出监控项的集群名,阈值,异常/正常关键词

         clusterName= item.clusterName;

         threshold= item.threshold;

         badKey= item.badkey;

         goodKey= item.goodkey;

 

         //由集群名,获取集群信息

         clusterInfo= A2[clusterName];

         //获取日志目录,集群ip列表,集群负责人列表

         logPath= clusterInfo.path;

         List<String>ips = clusterInfo.ip;

         List<String>owners = clusterinfo.owner;

        

         //集群内的每一个ip实例,都需要日志监控

         for(eachip in ips){

                   //登录到这一台机器

                   ssh $ip

                   //跳到相关的目录下

                   cd $logPath

                   //查看近一分钟error日志数量

                   $count= `grep $time error.log | wc -l`

                   //查看badkey与goodkey

                   $boolBad= `grep $badkey *`

                   $boolGood= `grep $goodkey *`

 

                   if($count< threshold && 

                        $boolBad==NO &&

                         $boolGood==YES){

                            //正常,继续监控

                            continue;

                  }

 

                  // 否则,对所有集群负责人发送告警

                  for(each owner in owners){

                           // 略…

                  }

         }

}

 

就是一个简单的调度框架,看明白了吗?


六、调研

调研一、对于日志,你的感触是

  • ca,啥是日志,什么是grep

  • 日志不全,查问题的时候需要加日志再发布系统

  • 日志全,但查问题的时候才上去grep一把

  • 日志成体系,日志有监控,有后台不需要grep

 

调研二、对于日志切分,你的感触是

  • ca,啥是日志切分,就一个access.log呀

  • 额,研发自己切分,没有规范

  • 不同团队切分规范不同

  • 运维提供工具统一规范切分

 

调研三、对于日志监控,你的感触是

  • ca,啥是日志监控,没有哇

  • ELK,集中式

  • 日志监控平台,分散式

  • 日志监控框架,分散式


调研四:你见过120G的日志文件么?


嗯,你觉得有道理,就转发吧

【推荐】网言网语架构师:90行代码,搞定你的日志监控框架!

【推荐】网言网语架构师:90行代码,搞定你的日志监控框架!

手工酿造,拒绝污染。绿色健康,生态有机。苏苏农家小院,私人定制,特色美味小食,诚信经营,欢迎选购。美味小吃视频,请在Wifi环境下欣赏。


【推荐】网言网语架构师:90行代码,搞定你的日志监控框架!

以上是关于推荐网言网语架构师:90行代码,搞定你的日志监控框架!的主要内容,如果未能解决你的问题,请参考以下文章

90行代码,搞定日志监控框架

DEVOPS架构师 -- 04Kubernetes集群的日志及监控-更新版

剑指架构师系列-Logstash分布式系统的日志监控

@程序员,让8年京东架构师为你解析云原生监控和日志解决方案!

Elasticsearch + Logstash + Filebeat + Kibana搭建ELK日志分析平台(官方推荐的BEATS架构)

阿里年薪破百架构师推荐:鸟哥的Linux私房菜,搭配面试题,真香