1.需要一个log系统,以记录数据线上服务的每一个细节以便分析整个系统的运行,以便查错调试。
2.所有log都推送到redis的若干个队列。
原因:各种log收集系统,要么太复杂,要么不能同时适应windows和linxu,要么both。因此,用redis的队列是最好的。可以将一个log事件发送到不同的队列。
2.每一条log记录是一个log事件,需要记录如下信息:
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
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