编程比赛题目:亿级流量实时分析(第一天)

跌跌撞撞闯进了决赛,乍一看这题目有点唬人。

 

题目主要是:网关上会有很多业务请求,需要实时或近实时采集网关请求日志,指标包括:请求频率、平均响应时间、90%响应时间、最大响应时间、请求正确率等。

每个组有固定的虚拟机资源(内存8G-CPU4C-磁盘150G),一共6台,其中2台为日志生成节点,上面部署有模拟网关的服务器,不断地生成日志文件到指定目录下,日志文件数量固定,文件写满就会覆盖,重新继续写;另外4台为计算节点,用于我们收集到日志信息后做数据汇总。

需要注意的是,模拟网关生成日志的速度会随着比赛阶段的进行而逐步提升,比如第一天为1w/QPS/单节点,第二天提高到2w/QPS/单节点。这也考验每组的方案是否有足够的抗压性和可靠性。

 

最终提供可视化实时查询界面,类似下图:

能够通过源IP目标IP请求URL这三个维度查看到以1分钟为维度的数据,包括有最大响应时间最小响应时间平均响应时间响应正确率等。

 

先看看比赛的日志文件内容,还比较规范:

2018-12-20 21:02:53 - 192.168.0.1 - 192.168.0.2 - /testDemo HTTP1.1 POST - 400 - b/*o-d - y - 94ms -

翻译一下:请求时间 - 源IP - 目标IP - 请求URL - HTTP协议 - HTTP请求方法 - 响应码 - 不知啥 - y - 响应时间 - 

 

我们组的方案:直接上ELK,用logStash进行日志解析,输出到ES中,用jetty启动一个后台工程,调用ES接口进行数据组装,然后提供一个接口给前端,前端写专门的页面来展示

大概的架构如下:

                          

 

熟悉logStash的都知道,关键是要写一个包含input、filter、output的CONF文件:

input {
    file {
        path => "/app/log*.txt"
        start_position => "endding"
    }
}
filter {
    grok {
        match => {
            "message" => "%{DATA:time} - %{IP:srcIp} - %{IP:dstIp} - %{DATA:url} %{DATA} %{DATA} - %{NUMBER:code} - %{DATA} - %{DATA} - %{NUMBER:respTime:int}ms -"
        }
        remove_field => "message"
    }
}
output {
    elasticsearch {
        codec => "json"
        hosts => ["192.168.0.3:9200", "192.168.0.4:9200", "192.168.0.5:9200"]
        index => "logs"
        document_type => "accessLog"
    }
}

1. input部分:

(1)从某个数据源去收集数据,这里是日志文件,所以是file,路径为/app下所有名字前缀为log的txt文件

(2)每个文件从文件末尾开始读取,其实内部实现是tail -f 的命令

2. filter部分:

(1)用grok正则去匹配日志内容,对于%{IP:srcIp},IP表示是用grok内嵌的IP匹配正则,srcIp是自己定义的参数名。当不知道用什么格式时,可以用DATA,匹配任意字符串。

(2)如果不知道怎么写grok正则,强烈力推 Grok Debugger,在上面调试成功之后再写到配置文件中。

http://grokdebug.herokuapp.com/

3. output部分:

(1)经过input和filter收集和处理数据后,将其输出到某种载体,可以是kafka、ES、redis、mysql。这里采用的是ES。

 

logStash有个众知的问题,脚本启动慢,网上说的原因是由于熵过低导致jruby启动缓慢。

cat /proc/sys/kernel/random/entropy_avail

即该值如果低于1000,则建议安装haveged,否则加密程序会等待系统有足够的熵。

可我安装了haveged,值已经升至2000多,依旧不生效,启动logStash脚本足足有20多分钟,相当痛苦。

 

最终日志文件已解析成功并发送到ES集群中,但ES提供的API实在晦涩,弄了半天还是无法调用其接口来整合数据,浪费了前端队友写的漂亮页面,只能临时搭个Kibana来展示数据。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值