[bigdata-119] 一个基于redis的简单分布式log系统

1.需要一个log系统,以记录数据线上服务的每一个细节以便分析整个系统的运行,以便查错调试。


2.所有log都推送到redis的若干个队列。
原因:各种log收集系统,要么太复杂,要么不能同时适应windows和linxu,要么both。因此,用redis的队列是最好的。可以将一个log事件发送到不同的队列。


2.每一条log记录是一个log事件,需要记录如下信息:

log时间(格式形如"2017-10-18 13:45:38.789")|log所在的主机ip|log所在主机名|log的应用名|log进程名|log进程id|log线程名|log事件名|log事件参数|用户自定义信息字符串1|用户自定义信息字符串2|用户自定义信息字符串3|用户自定义信息字符串4|用户自定义信息字符串5


其中,"|"是分隔符,因此每个字段里不能再出现"|"符号,以免出现切分错误。"用户自定义信息字符串",是用户自己想写入的任意内容,可以自行增加若干个字段。


3.在阿里云上,有一台ECS服务器,充当log服务主机,这个主机上有一个应用,负责从redis的各log队列取log记录,然后写入到一个log文件里。这个文件,可以按天切,也可以按大小切。(logstash的方案)


4. 任何人需要查任何信息,都可以登录到这个log服务器上,用grep进行查询。(logstash方案)


5. 风险
5.1 阿里云内网不通,导致log不能发送到redis(概率小),这个kafka和flue等分布式log系统也有这个风险,不可避免。
5.2 redis服务器内存占用过大,导致log不能记录,log队列是随时被取走的,所以相对比较空,如果pop应用出错,至少可以支持1亿条记录缓存,概率小。可以使用redis双机热备集群或者切片集群。
5.3 log服务器磁盘占用太大,或者磁盘错误导致log丢求,有一定概率,因此最好多备份。这块基于hdfs的log系统几乎没有这个风险。


6.优势
搭建成本小,需要服务器少,架构,细节可控。


6. 需要每个应用的开发人员实现
6.1 用户自定义的log函数,能同时将log保存在本地文件以及redis的队列
6.2 本地文件和redis队列,至少有一个能存储,否则报警。
6.3 不要求将本地log同步到redis队列。
6.4 其中,第3步骤可由我以py实现,工作量很少,大概一天可以搞定。


6. 参考文献
http://blog.jobbole.com/96823/
http://www.cnblogs.com/wq920/p/3454301.html
http://www.sohu.com/a/169131440_465914
https://www.tuicool.com/articles/QfUva2a







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值