关于Logtop
如何在Linux系统上分析以日志文件作为输入的在线速率(频率)?如何定位Debian/Ubuntu等系统上Apache/Nginx/Lighttpd等web服务器受到的IP Flooding的IP地址?这里我们可以使用Logtop。Logtop可以显示标准输入收到字符串的实时计数,是一款非常基础但功能强大的实时日志(或任何文本)分析器。系统管理员可以用它来实时分析日志的写入相关,在标准输入(stdin)读取并打印一个不断更新的结果,打印输出格式显示:
Line line/rank(行数), count(计数), frequency(频率), and the actual line(实际行)
Logtop安装
Debian/Ubuntu安装:
$ sudo apt-get install logtop 或者
sudo aptitude install logtop
其他Linux发行版安装:
$ sudo git clone https://github.com/JulienPalard/logtop.git #logtop.tar.gz/logtop.zip
$ sudo apt-get install libc6 libncurses5 libncurses5-dev uthash-dev libtinfo5 #Debian/Ubuntu
$ sudo yum install gcc ncurses ncurses-devel uthash-devel #CentOS/RHEL
$ sudo chmod +x logtop/ -R && cd logtop/
$ sudo make && sudo make install
$ logtop --help
Usage: tail -f something | logtop [OPTIONS]
-s, --size=NUM Number of log line to keep in memory
Defaults to : 10000
-q, --quiet Quiet, only display a top 10 at exit.
-l, --line-by-line=NUM Print result line by line
in a machine friendly format,
NUM: quantity of result by line.
-i, --interval=NUM Interval between graphical updates,
in seconds. Defaults to 1.
Line by line format is : [%d %f %s\t]*\n
%d : Number of occurences
%f : Frequency of apparition
%s : String (Control chars replaced by dots).
Logtop的功能及使用
Logtop能做到的:
- 显示实时的获取信息(类似top)
- 显示行等级、频率、计数和实际线路
- 如果想通过“无头(headless)”模式运行,有C和Python的开放的API
Logtop做不到的:
- 占用你所有的CPU和RAM:logtop设计运行在生产服务器并对他们没有影响
- 理解或分析你的日志格式,这需要结合cut或者awk命令
- 打开日志文件,使用tail -f(or -F)命令
你需要通过tail然后解析日志(应为实时产生的日志),logtop将汇总,并计算它们的频率。
为了可读性,我会在例子中使用cut命令。小心注意cut缓冲区溢出,所以如果你的源是缓慢的,logtop会得到爆发性的数据。你可能会喜欢像这样每行通过awk显式刷新:
我们先从一些简单的例子开始,如果你想测试logtop NCSA日志格式(使用apache、nginx、varnish、..。):
tail -f access.log | awk '{print $9; fflush();}' | logtop |
获取请求server的IP:
tail -f access.log | cut -d' ' -f1 | logtop |
获取请求server的URL:
tail -f access.log | cut -d' ' -f7 | logtop |
显示server回复的状态代码:
tail -f access.log | cut -d' ' -f9 | logtop |
显示请求server的用户代理:
tail -f access.log | cut -d' ' -f12- | logtop |
使用语法:
logtop [OPTIONS][FILE]command| logtop
command1 | filter | logtop
command1 | filter | logtop [options][file] |
显示LAMP受到IP Flooding的IP地址:
tail -f app_access.log|cut -d' ' -f1|logtop |
获取squid缓存HIT和MISS日志:
tail-f cache.log |grep-o"HIT\|MISS"| logtop |
要从一些缓存软件日志得到实时命中/丢失中比对信息,输入命令:
tail -f access.log | cut -d' ' -f1 | logtop -s 20000
这里的'-s'选项(--size=NUM)用于修改logtop运行时可保存在内存中的行数,默认为10000
Blog
http://julienpalard.github.io/logtop/
Julien Palard
Awk using
http://my.oschina.net/HeAlvin/blog/659003