——网事参考
当前浏览器不支持播放音乐或语音,请在微信或其他浏览器中播放
如上图,以模块名为优先组织目录:
什么是功能优先的目录规范?
如上图,以功能为优先组织目录:
楼主旗帜鲜明的推荐第二种,功能优先的目录规范,对二进制备份,配置备份,日志清理都非常方便。
三点二、日志规范
日志规范化不但对日志监控,对大数据体系建设都极为重要,需要考虑规范:
fatal.log
error.log
info.log
debug.log
…
daojia.log.2018012800
daojia.log.2018012801
…
daojia.log.2018012823
画外音:是不是有小伙伴在思考,ca,自己怎么没有这三类规范呢?
四、通用可扩展日志监控平台/框架思路
制订了目录规范,日志规范之后,要建立日志监控平台/框架,实施异常与正常的日志监控,就简单多了,主要有集中式监控,分散式监控两类思路。
四点一、集中式
集中式的日志监控,最流行的莫过于ELK:
各个机器节点上部署logstash,收集日志
收集的日志汇总到ES
通过Kibana做统一分析和展现
运维的同学对这一套集中式日志监控系统非常熟悉。
四点二、分散式
ELK有点重,三套系统搭建与运维起来比较麻烦,如果只是为了实现ERROR日志的监控,异常关键字监控,正常关键字监控,有点杀鸡用牛刀了。
与集中式的日志监控相比,分散式的日志监控,就显得轻量级许多,非常适用与早期的创业型公司,其思路为:
通过日志监控后台,对不同集群,进行ERROR日志阈值设置,进行异常关键字设置,正常关键字设置
日志监控中心,进行统一调度,将配置分发到不同机器的agent节点上
agent节点,并不统一收集日志,而是接收到监控中心分发的log监控配置,在各个机器上实施日志监控,如果触发日志监控策略,立刻发起告警
与ELK相比,这个日志平台会简单的多,而且扩展性非常好。
额,创业型公司没有时间和人员研发agent,没有资源研发日志监控中心服务,没有人力研发日志监控后台,还有没有更简洁但可扩展的方案呢?
和《》的思路一样,没有服务,没有后台,没有agent,初期完全可以用配置文件来替代。
五、100行搞定日志监控平台
整个框架设计如上,大致分为三个部分:
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.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的日志文件么?
嗯,你觉得有道理,就转发吧。
手工酿造,拒绝污染。绿色健康,生态有机。苏苏农家小院,私人定制,特色美味小食,诚信经营,欢迎选购。美味小吃视频,请在Wifi环境下欣赏。