公司给出一个需求,指定时间内,统计请求driver.upload.position(司机位置上报接口)中,来源是华为push(come_from=huawei_push)的数量,要求是按天统计。

看一下url格式,url中,method参数就是所请求的接口地址

  1. api10 100.116.219.186 | - | /May/::: + | GET /rest?app_ver=5.1.2.0&appkey=&come_from=huawei_push&from=internal&
    gps_timestamp=&gps_type=baidu&latitude=1.0&log_time=&longitude=1.0&mac=C8%3A94%3ABB%3A81%3AFD%3A79&
    method=driver.upload.position&milli_timestamp=&model=HUAWEI-PRA-AL00&os=HUAWEI24%2C7.&status=&
    timestamp=--%%3A00%3A15&token=&user=YZ52092&ver=&sig=1cce09da019def3a7ed9fe08749d07c1
    HTTP/1.1 | | | - | - | 0.019 | okhttp/2.5. | 122.96.41.116 | 0.019

log目录下的列表文件

由于我们的日志是按照分钟来统计单位文件,以往的查询如果统计单天的话,一条grep语句就可以解决。

  1. $ cat --* | grep 'driver.upload.position' | grep 'come_from=huawei_push'

由于文件数据量比较大,每一次grep都会耗费巨大时间,如果仅仅一两天的这个稍微耐心等一下就可以了,现在是统计2018-12-01到2019-05-17号的,耗费不起。。

第一个想到的就是shell 脚本,awk啊啥的。

不了解grep啊 awk的匹配,可以看看这个文章linux sed、awk、grep同时匹配多个条(并且 or 或者)

  1. #!/bin/sh
  2. start_date= //开始时间
  3. end_date= //结束时间
  4.  
  5. logdir=/data/logs/nginx_api //日志目录
  6. i=
  7. while true
  8. do
  9. oDate=`date -d "$start_date + $i day" "+%Y%m%d"`
  10. [ $oDate -gt $end_date ] && break
  11.  
  12. day=${oDate::}'-'${oDate::}'-'${oDate::}

count=`find $logdir/$day* | xargs grep -E "(come_from=huawei_push.*driver.upload.position|come_from=huawei_push.*driver.upload.position)" | wc -l`
          echo $day'总数量为:'$count >>days.txt   //写入指定文件

  1. let i+=
  2. done

OK。执行脚本统计结果写入文件

这里最初想到的是,通过年份获取每个月的天数,然后各种遍历操作,不小心百度发现shell还可以获取指定开始日期到指定结束日期的所有日期,皆大欢喜~所以以上内容就是这么解决的。

补充:获取当前年份的每个月天数的shell

  1. for m in {..}; do
  2. date -d "$m/1 + 1 month - 1 day" "+%b - %d days";
  3. done
  1. //输出
  2. [root@node122 logs]# ./test.sh
  3. Jan - days
  4. Feb - days
  5. Mar - days
  6. Apr - days
  7. May - days
  8. Jun - days
  9. Jul - days
  10. Aug - days
  11. Sep - days
  12. Oct - days
  13. Nov - days
  14. Dec - days

shell 统计nginx日志中从指定日期到结束日期之间每天指定条件匹配的总次数的更多相关文章

  1. linux统计nginx日志中请求访问量命令

    Nginx 三种分配策略:轮询.权重.ip_hash(比如你登录了一个网站,登录信息已经保存到 a 机器,但当你做后续操作时的请求会到 b 机器,那么就获取不到你原来登录的信息,此时你就需要重新登录了 ...

  2. 统计nginx日志

    .根据访问IP统计UV awk '{print $1}' access.log|sort | uniq -c |wc -l .统计访问URL统计PV awk '{print $7}' access.l ...

  3. Nginx日志中的金矿 -- 好文收藏

    转:http://www.infoq.com/cn/articles/nignx-log-goldmine Nginx(读作Engine-X)是现在最流行的负载均衡和反向代理服务器之一.如果你是一名中 ...

  4. 用shell统计访问日志里每个ip访问次数【转】

    今天,要统计一个系统的每个ip访问次数,于是我找到该系统访问日志,并写脚本实现.   访问日志情况: [root@qular ~]# cd /usr/local/nginx/logs/ [root@q ...

  5. Grafana和influxdb监控nginx日志中的请求响应时间图形化监控

    监控效果如图: 监控方法: 通过logstash过滤nginx日志,然后解析出nginx日志中的request time字段 然后output到influxdb时序数据库中 通过grafana展示数据 ...

  6. nginx日志中访问最多的100个ip及访问次数

    nginx日志中访问最多的100个ip及访问次数 awk '{print $1}' /opt/software/nginx/logs/access.log| sort | uniq -c | sort ...

  7. 统计nginx日志里流量

    用awk可以,比如,我想统计nginx日志里,今天下午3点0分,这一分钟内,访问的流量(文件的大小) grep "07/Nov/2013:15:00:"  *.log|awk '{ ...

  8. PHP:获取指定日期所在月的开始日期与结束日期

    /** * 获取指定日期所在月的开始日期与结束日期 * @param string $date * @param boolean 为true返回开始日期,否则返回结束日期 * @return arra ...

  9. jquery中使用datepicker限制开始日期小于结束日期

    这里是使用Jquery插件实现的,这段代码来自于网络.感觉很实用,就做笔记记录下来. 原文:http://blog.csdn.net/tianyacao8025/article/details/707 ...

随机推荐

  1. Git笔记----Git仓库常见经典操作命令

    首次创建仓库上传项目操作在上一篇https://www.cnblogs.com/tk55/p/11795644.html ----好记性不如烂笔头 再次更新到仓库 不是首次更新内容或文件到远程仓库 g ...

  2. Java 线程与多线程

    Java是一门支持多线程的编程语言! 什么是进程? 计算机中内存.处理器.IO等资源操作都要为进程进行服务. 一个进程上可以创建多个线程,线程比进程更快的处理单元,而且所占用的资源也小,多线程的应用也 ...

  3. NumPy实现数组的拼接和分裂

    一.数组的拼接 import numpy as np x=np.array([,,]) x2=np.array([,,])np.concatenate([x,x2]) 输出:array([1, 2, ...

  4. 导入部署 hand

    差价导入部署步骤如下: 执行视图,包. 定义消息,验证的时候使用(XXC1003DFM_BI_001 到 XXC1003DFM_BI_007,含中英文). 通用导入设置: 电子表元数据管理,含导入正确 ...

  5. 使用响应的json数据判断订单查询是否成功;

    #查询中通快递import requestsrr=requests.session()headers={"User-Agent": "Mozilla/5.0 (Windo ...

  6. JVM的内存结构以及性能调优

    JVM的内存结构以及性能调优 发布时间: 2017-11-22 阅读数: 16675 JVM的内存结构以及性能调优1:JVM的结构主要包括三部分,堆,栈,非堆内存(方法区,驻留字符串)堆上面存储的是引 ...

  7. Java HashMap用法

    为了做题用Java语法替代C++map的常用语法,记录一下,剖析原理以后再补上. 1.import java.util.HashMap;//导入; 2.HashMap<K, V> map= ...

  8. Linux学习笔记-第18天 有点迷茫。。

    有点迷茫学的这些知识的实用性..但愿今天可以用得到这些吧

  9. python--小确幸

    #把手机号中间四位隐藏 def change_number(number): hiding_number=number.replace(number[3:7],'*'*4) print(hiding_ ...

  10. 第四组 团队Git现场编程实战

    组员职责分工 组员 分工 林涛(组长) 分配任务.整理数据.写博客 童圣滔 UI界面制作 林红莲 UI界面制作 潘雨佳 测评出福州最受欢迎的商圈 于瀚翔 测评出福州最受欢迎的商圈 覃鸿浩 测评出福州人 ...