[关闭]
@buoge 2017-12-22T17:55:33.000000Z 字数 7159 阅读 910

server-monitor 终端命令行,服务器状态指标监控

善用佳软


requestID, begin,end log

========================================================================================
查找访问频率最高的 URL 和次数:
cat access.log | awk -F '^A' '{print $10}' | sort | uniq -c

查找当前日志文件 500 错误的访问:
cat access.log | awk -F ‘^A’ ‘{if(0}’

查找当前日志文件 500 错误的数量:
cat access.log | awk -F ‘^A’ ‘{if(0}’ | wc -l

查找某一分钟内 500 错误访问的数量:
cat access.log | awk -F ‘^A’ ‘{if(0}’ | grep ’09:00’ | wc-l

查找耗时超过 1s 的慢请求:
tail -f access.log | awk -F ‘^A’ ‘{if(0}’

假如只想查看某些位:
tail -f access.log | awk -F ‘^A’ ‘{if(3″|”$4}’

查找 502 错误最多的 URL:
cat access.log | awk -F ‘^A’ ‘{if(11}’ | sort | uniq -c

查找 200 空白页
cat access.log | awk -F ‘^A’ ‘{if(5==200 &&8 < 100) print 4″|”6}’

查看实时日志数据流
tail -f access.log | cat -e

或者

tail -f access.log | tr ‘^A’ ‘|’

状态码统计
cat access.log | cut -d '"' -f3 | cut -d ' ' -f2 | sort | uniq -c | sort -r

1、查看独立IP访问
cat access.log | awk -F'-' '{ print 1 }'| uniq -c | wc -l
netstat -nat |awk '{print
6}'|sort|uniq -c|sort -rn netstat -anlp|grep 80|grep tcp|awk '{print 5}'|awk -F: '{print1}'|sort|uniq -c|sort -nr|head -n20

4.查找较多time_wait连接
netstat -n|grep TIME_WAIT|awk '{print $5}'|sort|uniq -c|sort -rn|head -n20

5.找查较多的SYN连接
netstat -an | grep SYN | awk '{print 5}' | awk -F: '{print1}' | sort | uniq -c | sort -nr | more

查看当前ip 0点时段访问最高的页面
cat access_log | grep "19/Dec/2014:00" | grep "119.5.89.181" | awk '{print $13}' | sort | uniq -c | sort -nr | head -n 10

网站日志分析篇1(Apache):

1.获得访问前10位的ip地址
cat access.log|awk '{print 1}'|sort|uniq -c|sort -nr|head -10
cat access.log|awk '{counts[
(11)]+=1}; END {for(url in counts) print counts[url], url}'

2.访问次数最多的文件或页面,取前20
cat access.log|awk '{print $11}'|sort|uniq -c|sort -nr|head -20

3.列出传输最大的几个exe文件(分析下载站的时候常用)
cat access.log |awk '(7~/\.exe/){print10 " " 4 " " $7}'|sort -nr|head -20

4.列出输出大于200000byte(约200kb)的exe文件以及对应文件发生次数
cat access.log |awk '(10 > 200000 &&7~/.exe/){print $7}'|sort -n|uniq -c|sort -nr|head -100

5.如果日志最后一列记录的是页面文件传输时间,则有列出到客户端最耗时的页面
cat access.log |awk '(7~/\.php/){printNF " " 4 " " $7}'|sort -nr|head -100

6.列出最最耗时的页面(超过60秒的)的以及对应页面发生次数
cat access.log |awk '(NF > 60 &&7~/.php/){print $7}'|sort -n|uniq -c|sort -nr|head -100

7.列出传输时间超过 30 秒的文件
cat access.log |awk '(NF > 30){print7}'|sort -n|uniq -c|sort -nr|head -20

8.统计网站流量(G)
cat access.log |awk '{sum+=$10} END {print sum/1024/1024/1024}'

9.统计404的连接
awk '(9 ~/404/)' access.log | awk '{print9,$7}' | sort

  1. 统计http status.
    cat access.log |awk '{counts[(9)]+=1}; END {for(code in counts) print code, counts[code]}'
    cat access.log |awk '{print
    9}'|sort|uniq -c|sort -rn

10.蜘蛛分析
查看是哪些蜘蛛在抓取内容。
/usr/sbin/tcpdump -i eth0 -l -s 0 -w - dst port 80 | strings | grep -i user-agent | grep -i -E 'bot|crawler|slurp|spider'

SHELL短语
1、查看当天有多少个IP访问:
awk '{print $1}' log_file|sort|uniq|wc -l

2、查看某一个页面被访问的次数:
grep "/index.php" log_file | wc -l

3、查看每一个IP访问了多少个页面:
awk '{++S[$1]} END {for (a in S) print a,S[a]}' log_file

4、将每个IP访问的页面数进行从小到大排序:
awk '{++S[$1]} END {for (a in S) print S[a],a}' log_file | sort -n

5、查看某一个IP访问了哪些页面:
grep ^111.111.111.111 log_file| awk '{print 7}'

6、去掉搜索引擎统计当天的页面:
awk '{print 1}' log_file | grep ^\"Mozilla | awk '{print $2}' |sort | uniq | wc -l

7、查看2009年6月21日14时这一个小时内有多少IP访问:
awk '{print 1}' log_file | grep 21/Jun/2009:14 | awk '{print $2}'| sort | uniq | wc -l

8,查看apache进程:
ps aux | grep httpd | grep -v grep | wc -l

9,查看80端口的tcp连接:
netstat -tan | grep "ESTABLISHED" | grep ":80" | wc -l

10,通过日志查看当天ip连接数,过滤重复:
cat access_log | grep "20/Oct/2008" | awk '{print $2}' | sort | uniq -c | sort -nr

11,当天ip连接数最高的ip都在干些什么(原来是蜘蛛):
cat access_log | grep "20/Oct/2008:00" | grep "122.102.7.212" | awk '{print $8}' | sort | uniq -c | sort -nr | head -n 10

12,当天访问页面排前10的url:
cat access_log | grep "20/Oct/2008:00" | awk '{print $8}' | sort | uniq -c | sort -nr | head -n 10

13,用tcpdump嗅探80端口的访问看看谁最高
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print 2"."4}' | sort | uniq -c | sort -nr

接着从日志里查看该ip在干嘛:
cat access_log | grep 122.102.7.212| awk '{print 8}' | sort | uniq -c | sort -nr | less

14,查看某一时间段的ip连接数:
grep "2006:0[7-8]" www20060723.log | awk '{print $2}' | sort | uniq -c| sort -nr | wc -l

======================================================================================================================================================

http://www.infoq.com/cn/articles/nignx-log-goldmine

/data2/log/resin/zaozuo-web

// 平均每秒的请求数
less main.log | awk '{sec=substr($4,2,20);reqs++;reqsBySec[sec]++;} END{print reqs/length(reqsBySec)}'
14.0963

// 峰值每秒请求数
less access.log | awk '{sec=substr($4,2,20);requests[sec]++;} END{for(s in requests){printf("%s %s\n", requests[s],s)}}' | sort -nr | head -n 3

// 请求总数
less main.log | wc -l
1080577

// 平均每秒的请求数
less access.log | awk '{sec=substr($4,2,20);reqs++;reqsBySec[sec]++;} END{print reqs/length(reqsBySec)}'
14.0963

// 峰值每秒请求数
less main.log | awk '{sec=substr($4,2,20);requests[sec]++;} END{for(s in requests){printf("%s %s\n", requests[s],s)}}' | sort -nr | head -n 3
Page Visits Response Size Time Spent/req Moment
182 10/Apr/2016:12:53:20
161 10/Apr/2016:12:54:53
160 10/Apr/2016:10:47:23

带宽的查询:

API接口等通常消耗更多的CPU资源:
less access.log | awk '{print 7}' |sed -re 's/(.*)\?.*/\1/g' -e 's/(.*)\..*/\1/g' -e 's:/[0-9]+:/*:g' | awk '{requests[1]++;time[2} END{for(url in requests){printf("%smin %ss/req %s %s\n", time [url] / 60, time[url] /requests[url], requests[url], url)}}' | sort -nr | head -n 50

应用系统没有瓶颈,是带宽的问题?快速查看一下每秒的流量
less access.log | awk '{second=substr(10;} END {for(s in bytes){printf("%sKB %s\n", bytes[s]/1024, s)}}' | more

慢查询统计

比例:
less access.log | awk -v limit=2 '{min=substr(11>limit){slowReqs[min]++}} END{for(m in slowReqs){printf("%s%s %s%s %s\n", m,slowReqs[m]/reqs[m] * 100, "%", slowReqs[m], reqs[m])}}' | more

10/Apr/2016:12:51 0.367% 7 1905
10/Apr/2016:12:52 0.638% 12 1882
10/Apr/2016:12:53 0.548% 14 2554

机型:
less access.log | awk '{upServer=12;if(upServer == "-"){upServer="Nginx"};if(upTime == "-"){upTime=0};upTimes[upServer]+=upTime;count[upServer]++;totalCount++;} END{for(server in upTimes){printf("%s %s%s %ss %s\n", count[server], count[server]/totalCount * 100, "%", upTimes[server]/count[server], server)}}' | sort -nr

相应时间超过1s的请求

access.log | awk -F '^A' '{if(0}'

awk '(NF > 2){print0}' access.log >t02_.log

20/Sep/2015:00:00:17 +0800

cat access.log | awk '4 >="[01//2014:14:37:50" &&4 <="[21/Jul/2014:14:38:00

===================================================================================

yum install iftop

iftop -B -N -n -i eth1

iftop界面相关说明
界面上面显示的是类似刻度尺的刻度范围,为显示流量图形的长条作标尺用的。

中间的<= =>这两个左右箭头,表示的是流量的方向。

TX:发送流量
RX:接收流量
TOTAL:总流量
Cumm:运行iftop到目前时间的总流量
peak:流量峰值
rates:分别表示过去 2s 10s 40s 的平均流量

常用的参数

-i设定监测的网卡,如:# iftop -i eth1

-B 以bytes为单位显示流量(默认是bits),如:# iftop -B

-n使host信息默认直接都显示IP,如:# iftop -n

-N使端口信息默认直接都显示端口号,如: # iftop -N

-F显示特定网段的进出流量,如# iftop -F 10.10.1.0/24或# iftop -F 10.10.1.0/255.255.255.0

-h(display this message),帮助,显示参数信息

-p使用这个参数后,中间的列表显示的本地主机信息,出现了本机以外的IP信息;

-b使流量图形条默认就显示;

-f这个暂时还不太会用,过滤计算包用的;

-P使host信息及端口信息默认就都显示;

-m设置界面最上边的刻度的最大值,刻度分五个大段显示,例:# iftop -m 100M

常用命令

按h切换是否显示帮助;

按n切换显示本机的IP或主机名;

按s切换是否显示本机的host信息;

按d切换是否显示远端目标主机的host信息;

按t切换显示格式为2行/1行/只显示发送流量/只显示接收流量;

按N切换显示端口号或端口服务名称;

按S切换是否显示本机的端口信息;

按D切换是否显示远端目标主机的端口信息;

按p切换是否显示端口信息;

按P切换暂停/继续显示;

按b切换是否显示平均流量图形条;

按B切换计算2秒或10秒或40秒内的平均流量;

按T切换是否显示每个连接的总流量;

按l打开屏幕过滤功能,输入要过滤的字符,比如ip,按回车后,屏幕就只显示这个IP相关的流量信息;

按L切换显示画面上边的刻度;刻度不同,流量图形条会有变化;

按j或按k可以向上或向下滚动屏幕显示的连接记录;

按1或2或3可以根据右侧显示的三列流量数据进行排序;

按<根据左边的本机名或IP排序;

按>根据远端目标主机的主机名或IP排序;

按o切换是否固定只显示当前的连接;

按f可以编辑过滤代码,这是翻译过来的说法,我还没用过这个!

按!可以使用shell命令,这个没用过!没搞明白啥命令在这好用呢!

按q退出监控。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注