sar 的图形化

用了这么多小巧的监控工具,发现还是 sar 最强大,系统级别的 metric 是应有尽有,不管是实时的秒级监控还是历史数据,对分析近期(比如前一天或者前几天)出现的问题非常有帮助,这比不管是 Zabbix,Nagios 之类的「系统」要强大的多,典型的开相即用的好工具。默认是 10min 一次数据,这个不能完全满足我们的需求,目前我们有部分机器将 interval 缩小到了 1min 一次,并且将默认的 7d 的保存时间延长到了 90d。除此之外,就剩下出图了。
要是闲的蛋疼,可以使用 gnuplot 来把自己关心的所有 metric 全部画出来,但是这个比较麻烦,之前我自己用 gnuplut 玩了几天,对于 mission critical 场景不适用,有时候是等不及你把脚本一个一个写好再运行的。
后来找到了一个叫 Ksar 的工具,非常的方便,导入 sarxx 文件即可自动出图,到目前为止没有找到比他更方便更简单的方式了。唯一的不足是没有把 sar -A 列出来的所有 metric 都画出来,不过对于一般的问题,Ksar 出的图足够用了。Ksar 的启动图是不是很像 CS 中的场景。

对于昨天以及之前的数据,可以直接到 sa/sarxx 去取,但是对于只有 saxx(比如当天的数据或者由于某些原因 sarxxx 文件丢失了) 的文件,首先需要通过 sar 获得 sarxx  文件,然后需要将 12 小时制转换成 24h 制的才可以丢到 ksar 里面出图:
# LC_TIME="POSIX" sar -f sa30 -A  | tee sar30

注意LC_TIME 这个环境变量。另外,阿里在此基础上搞了个 tsar,个人不是很看好,原因见这里

 

ref:
http://honglus.blogspot.com/2011/02/graphing-sar-output.html
http://brablc.com/2011/06/06/how-to-change-sar-output-time-format-to-24/

nethogs 以及 jnettop 的使用

nethogs 可以用来监控进程消耗的带宽,而 jnettop 则使用来记录每个 IP 的带宽的使用情况。

nethogs 安装很简单,通过包管理工具均可安装:
# apt-get install nethogs
# yum install nethogs

使用也很简单,使用 root 执行:
# nethogs ethx

使用 m 切换总流量以及当前速度。该工具可以快速定位到当前哪个进程在消耗的带宽。

还有个叫 jnettop 的工具,跟之前介绍的 iftop 类似,有个比较独特的地方是可以以 CVS,TSV 等格式导出,方便分析,root 执行:
# jnettop --display text -t 5 --format CSV

或者定义变量来或许需要的信息:
# jnettop -i eth1 --display text -t 5 --format '$srcname$,$srcport$,$dstname$,$dstport$,$totalbps$

iftop

Ubuntu 和 CentOS 可用各自的包管理器安装:

# yum install iftop ncurses-devel
# apt-get install iftop libncurses5-dev

下面是几个常用的参数。

iftop 在没有使用 -i 指定的情况下,默认会使用 eth0 作为监控的接口。
以一台 nat 为例来说明 iftop 的用法,默认 eth1 配置私网 IP,eth0 配置公网 IP。

如果监控 eth1 接口,左右两边分别会显示内网的 IP 以及这些 IP 所访问的公网 IP;而如果监控 eth0 接口的话,有一端将始终是 eth0 的公网 IP。所以监控 eth1 接口更好。

iftop 作为精确的流量监控并不是最佳的选择,他默认是使用刻度的方式在大致的描绘目前每个连接的流量。但是作为普通的应用,这个应该足够了,比如我们只想看看有没有人在进行大流量的下载,通过一个简单的排序就可以看出结论了。

启动 iftop,监控 eth1,使用 byte 为单位,可以控制某个网段或者单个的 IP:

# iftop -i eth1 -B [-F 10.18.101.0/255.255.255.0]

启动之后可以通过下面的常见的按键来控制显示输出。

s/d:是否隐藏本地或者远程的主机
n:是否通过 dns 解析

p:是否显示两端的端口号
S/D:是否显示端口号
N:是否解析端口号与对应的服务

t:如何显示流量的收发
L:刻度变化
1/2/3:根据右边三栏流量进行排序
l:进行过滤
P:暂停   

下面具体讲讲怎么抓取内网的狂下片的同学。

1.iptop -i eth1
2.按 B 来切换成 40s 内的流量值
3.按 3 再按 T 来排序
4.按 t 来过滤下载的那部分流量

这样下来基本上就可以判定出是哪位同学占用了大家的宝贵带宽了。

可以将初始的命令放到默认的 ~/.iftoprc 文件中:
interface:eth0
hide-source:no
hide-destination: no
dns-resolution:yes
port-display:on
port-resolution:yes
show-bars:yes
sort:2s
show-totals:yes
use-bytes: yes
line-display: two-line
show-totals: yes
log-scale:yes
# 注意,这个默认的单位是 bits
max-bandwidth:20M

详细解释请查看男人。
 

The Advanced Usage of Sed

这里总结的是 sed 的“高级”用法,主要集中在 patten space 和 hold space。

注意:在进行一些文本处理前,需要注意文本行数的奇偶性,这个会影响到最终的结果。

首先描述下 sed 这个流编辑器的工作流程:

1.从标准输入/文件中读取一行
2.去除改行的换行符\n
3.将该行放入 pattern buffer(模式空间,或者 patten space)
4.根据 sed 提供的命令修改 pattern buffer
5.打印 pattern buffer 至标准输出
Continue reading

收集的一些 grep/sed/awk 范例

$ cat datafile
Steve Blenheim:238-923-7366:95 Latham Lane, Easton, PA 83755:11/12/56:20300
Betty Boop:245-836-8357:635 Cutesy Lane, Hollywood, CA 91464:6/23/23:14500
Jose Santiago:385-898-8357:38 Fife Way, Abilene, TX 39673:1/5/58:95600
Tommy Savage:408-724-0140:1222 Oxbow Court, Sunnyvale, CA 94087:5/19/66:34200
Yukio Takeshida:387-827-1095:13 Uno Lane, Ashville, NC 23556:7/1/29:57000
Vinh Tranh:438-910-7449:8235 Maple Street, Wilmington, VM 29085:9/23/63:68900
Continue reading

exec/xargs in find

查找当前目录下以 anaconda 开头的文件,并查找其中的 evince 字符串
# find . -name "anaconda*" -exec grep -i evince {} \;

查找当前目录下的 install.log 文件,并做 md5 校验
# find . -name "install.log" -exec md5sum {} \;

查找 /var/log 下的 error 日志,将其移除
# find /var/log/ -name "error*" -exec mv {} /trash \;
Continue reading