设为首页 收藏本站
查看: 1980|回复: 6

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

[复制链接]

尚未签到

发表于 2013-5-3 11:24:11 | 显示全部楼层 |阅读模式

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

我写的这个日志分析系统 流程是:
1   在客户端收集数据,然后通过redis pub方式把数据发给服务端

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

客户端收集日志的更新数据
#!/bin/bash

DATE=`date +%s`
LOGFILE=$1
if [ ! -f $1 ];then
echo "LOG file did not give or it's not a file"
fi
sleep_time="2"

count_init=`wc -l ${LOGFILE}|awk '{print $1}'`
while true
do
DATE_NEW=`date +%s`
#    DATE=$(date +%s)
    count_new=`wc -l ${LOGFILE}|awk '{print $1}'`
    add_count=$((${count_new} - ${count_init}))
    count_init=${count_new}
        if [ ! -n "${add_count}" ]
        then
            add_count=0
        fi
     QPS=$((${add_count}/${sleep_time}))
     info=`tail -n ${add_count} ${LOGFILE}`     
     echo $info      
#    我们可以把info这个值传出去
     echo " Then QPS at `date -d "1970-01-01 UTC ${DATE_NEW} seconds" +"%Y-%m-%d %H:%M:%S"` is "${QPS}
#    echo " DATE_NEW: " $DATE_NEW " DATE_PLUS :" $DATE_PLUS
sleep $sleep_time
done


把实时的日志也打印出来


想传到服务端,我们只需要在脚本里面加下面这命令就ok了~
/root/redis-bash-cli -h 10.10.10.61 PUBLISH rui "$info"

redis-bash-cli   这个是客户端的脚本,可以把数据publish过去
#!/bin/bash   
source /usr/share/redis-bash/redis-bash-lib 2> /dev/null  
if [ $? -ne 0 ]; then  
  LIBFOLDER=${0%/${0##*/}}  
  source ${LIBFOLDER}/redis-bash-lib 2> /dev/null  
  if [ $? -ne 0 ]; then  
    echo "can't find redis-bash-lib in /usr/share/redis-bash or ${LIBFOLDER}"  
    exit 127   
  fi  
fi  
REDISHOST=localhost  
REDISPORT=6379  
REPEAT=1  
DELAY=0  
while getopts ":h:n:p:r:a:i:" opt  
do  
    case ${opt} in  
        h) REDISHOST=${OPTARG};;  
        n) REDISDB=${OPTARG};;  
        p) REDISPORT=${OPTARG};;  
        r) REPEAT=${OPTARG};;  
        a) AUTH=${OPTARG};;  
        i) DELAY=${OPTARG};;  
    esac  
done  
shift $((${OPTIND} - 1))  
if [ "${REDISHOST}" != "" ] && [ "${REDISPORT}" != "" ]  
then  
    exec 6<>/dev/tcp/${REDISHOST}/${REDISPORT} # open fd  
    if [ $? -ne 0 ]; then  
        exit 1  
    fi  
else  
    echo "Wrong arguments"  
    exit 255  
fi  
[ "${AUTH}" != "" ] && redis-client 6 AUTH ${AUTH} > /dev/null  
[ "${REDISDB}" != "" ] && redis-client 6 SELECT ${REDISDB} > /dev/null  
for ((z=1;z<=${REPEAT};z++))  
do  
    redis-client 6 "${@}"  
    if [ $? -ne 0 ]; then  
        exit 1  
    fi  
    [ ${DELAY} -gt 0 ] && sleep ${DELAY}  
done  
exec 6>&- #close fd  

日志服务端


redis-publish-test  这个是日志服务端,可以收到publish的数据

#!/bin/bash   
source /usr/share/redis-bash/redis-bash-lib 2> /dev/null  
if [ $? -ne 0 ]; then  
  LIBFOLDER=${0%/${0##*/}}  
  echo $LIBFOLDER  
  source ${LIBFOLDER}/redis-bash-lib 2> /dev/null  
  if [ $? -ne 0 ]; then  
    echo "can't find redis-bash-lib in /usr/share/redis-bash or ${LIBFOLDER}"  
    exit 127   
  fi  
fi  
REDISHOST=localhost  
REDISPORT=6379  
while getopts ":h:p:" opt  
do  
    case ${opt} in  
        h) REDISHOST=${OPTARG};;  
        p) REDISPORT=${OPTARG};;  
    esac  
done  
shift $((${OPTIND} - 1))  
while true  
do  
    exec 5>&-  
    if [ "${REDISHOST}" != "" ] && [ "${REDISPORT}" != "" ]  
    then  
        exec 5<>/dev/tcp/${REDISHOST}/${REDISPORT} # open fd  
    else  
        echo "Wrong arguments"  
        exit 255  
    fi  
    redis-client 5 SUBSCRIBE ${1} > /dev/null # subscribe to the pubsub channel in fd 5  
    while true  
    do  
        unset ARGV  
        OFS=${IFS};IFS=$'\n' # split the return correctly  
        ARGV=($(redis-client 5))  
        IFS=${OFS}  
        if [ "${ARGV[0]}" = "message" ] && [ "${ARGV[1]}" = "${1}" ]  
        then  
        echo ${ARGV[2]}  
        a=${ARGV[2]}  
            echo $($a)  
            echo "Message from pubsub channel: ${ARGV[2]}"  
        elif [ -z ${ARGV} ]  
        then  
            sleep 1  
            break  
        fi  
    done  
done  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-5604-1-1.html 上篇帖子: 交互式Shell脚本实现Linux物理卷管理 下篇帖子: Linux下监控磁盘的空闲空间的shell脚本
发表于 2013-5-3 11:33:10 | 显示全部楼层
床上运动也可以减肥的,你们都不知道吗?

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-5-18 16:26:04 | 显示全部楼层
女,喜甜食,甚胖!该女有一癖好:痛恨蚂蚁,见必杀之。问其故曰:这小东西,那么爱吃甜食,腰还那么细!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-5-22 06:59:26 | 显示全部楼层
女,喜甜食,甚胖!该女有一癖好:痛恨蚂蚁,见必杀之。问其故曰:这小东西,那么爱吃甜食,腰还那么细!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-5-27 20:18:15 | 显示全部楼层
走,MM,咱们化蝶去……

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-6-3 00:15:02 | 显示全部楼层
不知该说些什么。。。。。。就是谢谢

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-6-6 17:25:16 | 显示全部楼层
听君一席话,省我十本书!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表