通过Shell和Redis来实现集群业务中日志的实时收集分析

在统计项目中,最难实施的就是日志数据的收集。日志分布在全国各个机房,而且数据量比较大,像rsync+inotify这种方式显然不能满足快速日志同步的要求。 当然大家也可以用fluentd和flume采集日志数据,除了这个我们也可以自己写一套简单的。

通过Shell和Redis来实现集群业务中日志的实时收集分析

我写的这个日志分析系统 流程是:

在客户端收集数据,然后通过redis pub方式把数据发给服务端

服务器端是redis的sub    他会把数据统一存放在一个文件,或者当前就过滤出来

客户端收集日志的更新数据

  1. #!/bin/bash
  2. DATE=`date +%s`
  3. LOGFILE=$1
  4. if [ ! -f $1 ];then
  5. echo "LOG file did not give or it's not a file"
  6. fi
  7. sleep_time="2"
  8. count_init=`wc -l ${LOGFILE}|awk '{print $1}'`
  9. while true
  10. do
  11. DATE_NEW=`date +%s`
  12. # DATE=$(date +%s)
  13. count_new=`wc -l ${LOGFILE}|awk '{print $1}'`
  14. add_count=$((${count_new} - ${count_init}))
  15. count_init=${count_new}
  16. if [ ! -n "${add_count}" ]
  17. then
  18. add_count=0
  19. fi
  20. QPS=$((${add_count}/${sleep_time}))
  21. info=`tail -n ${add_count} ${LOGFILE}`
  22. echo $info
  23. # 我们可以把info这个值传出去
  24. echo " Then QPS at `date -d "1970-01-01 UTC ${DATE_NEW} seconds" +"%Y-%m-%d %H:%M:%S"` is "${QPS}
  25. # echo " DATE_NEW: " $DATE_NEW " DATE_PLUS :" $DATE_PLUS
  26. sleep $sleep_time
  27. done

通过Shell和Redis来实现集群业务中日志的实时收集分析

把实时的日志也打印出来

通过Shell和Redis来实现集群业务中日志的实时收集分析

相关推荐