获取最近几分钟的日志 - Xavier's Blog



获取最近几分钟的日志 - Xavier's Blog

最近在整理对于各个模块的监控,需要有一定的实时性。比如,需要获取最近几分钟内的日志,然后看某些请求的数量以及响应时间是否符合要求。但是,线上服务的日志,通常都是按照小时粒度进行切分的,你不可能对一个文件进行直接的过滤操作。在此之前需要解决一个问题:在一份文件中,获取最近一段时间的日志

当然,还有一个最最基础的问题:你的日志内容里面是表示时间的字段的。(不打时间和请求ID的日志简直就是耍流氓!)

我一开始的想法是:估算平均请求压力下,每5分钟的日志会有多少条,然后直接将cat替换为tail -n XXX就可以了。虽然修改起来很方便,但是是有明显缺陷的:

  1. 随着流量变化,tail出来的日志的时间粒度是不一样的。如果用来监控实时请求响应时间还算能接受,用来监控请求量就不行了;
  2. 如果以后模块升级,增加或者减少了请求日志,tail出来的数字需要不断调整。

看来还是要精确的获取某个时间段的日志才行。其实思路还是比较清晰的:

  1. 计算出开始时间结束时间两个字段
  2. 提取日志行中的日志时间
  3. 比较三个值,如果日志行的时间符合要求,则将其打印,作为过滤程序的输入
  4. 执行数日志数量或者统计请求响应时间的命令

对于步骤1,使用date命令就可以获取,这个简单。

对于步骤2,一般日志中的时间都会比较在日志前面几个字段,比较好提取,也不难。

步骤4嘛,就看需求是什么了,如果是获取请求数目,直接用grepwc -l就OK了。如果涉及到提取日志字段,简单的也可以用cut搞定,复杂就得用grep或者awk了。

最关键是步骤3如何实现,我想到的是在awk中进行逻辑判断,获取日志中的时间字段不难,但是如果时间字段是通过多个字段拼接而来的,比如2014-05-0217:25:00,怎么把他们放到一个变量里面呢?要是有像sprintf这样的函数就好了,没想到,还真有!类似于下面这样:


Read full article from 获取最近几分钟的日志 - Xavier's Blog


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts