分类 系统运维 下的文章

我们在之前的教程中创建的DNS服务器是一个开放DNS解析器。开放解析器不会过滤任何来源请求,并会接受来自所有IP的查询。

不幸的是,开放解析器很容易成为一个攻击目标。比如,攻击者可以对开放DNS服务器发起一个拒绝服务攻击(DoS)或者更糟的分布式拒绝服务攻击(DDoS)。这些也可与IP欺骗结合,将应答包指向受害者被欺骗的IP地址。在另外的场合下称作DNS放大攻击,开放的DNS服务器很容易就会成为攻击的对象。

根据openresolverproject.org,除非有必要,运行一个开放解析器是不明智的。大多数公司要让它们的DNS服务器仅对他们的客户开放。本篇教程会只要集中于如何配置一个DNS服务器来使它停止开放解析且仅对有效的客户响应。

调整防火墙

由于DNS运行在UDP的53端口上,系统管理可能试图仅允许来自53端口的客户端IP地址,并阻止剩余的因特网端口。虽然这可以工作,但是也会有一些问题。既然根服务器与DNS服务器的通信也用53端口,我们不得不在防火墙内也确保UDP 53端口被允许。

一个防火墙示例如下所示。对于生产服务器,确保你的规则匹配你的要求并遵守与公司安全制度。

# vim firewall-script 

## existing rules are flushed to start with a new set of rules ##
iptables -F

iptables -A INPUT -s A.A.A.A/X -p udp --dport 53 -j ACCEPT
iptables -A INPUT -s B.B.B.B/Y -p udp --dport 53 -j ACCEPT
iptables -A INPUT -s C.C.C.C/Z -p udp --dport 53 -j ACCEPT

iptables -A INPUT -p udp --dport 53 -j DROP

## making the rules persistent ##
service iptables save

让脚本可执行并运行它。

# chmod +x firewall-script
# ./firewall-script 

阻止递归查询

DNS查询主要可以分为递归查询和迭代查询。对于递归查询,服务器会响应客户端应答或者错误信息。如果应答不在服务器的缓存中,服务器会与根服务器通信并获得授权域名服务器。服务器会不停查询知道获得结果,或者请求超时。对于迭代查询,另一个方面讲,服务器会将客户端指向另外一个可能可以处理的服务器上,那么就会减少服务器自身的处理。

我们可以控制运行递归查询的IP地址。我们修改位于/etc/named.conf的配置文件并增加/修改下面的参数。

# vim /etc/named.conf

## we define ACLs to specify the source address/es ##
acl customer-a{ A.A.A.A/X; };
acl customer-b { B.B.B.B/Y; C.C.C.C/Z; };

## we call the ACLs under options directive ##
options {
        directory "/var/named";
        allow-recursion { customer-a; customer-b; };
};

调整用于开放解析器的防火墙

如果你必须运行一个开放解析器,建议你适当调节一下你的服务器,这样就不会被利用了。smurfmonitor 仓库提供了强大的一组可以用于开放解析器的iptables规则,比如阻止来自DNS放大攻击的域名解析请求。这个仓库会定期地更新,强烈建议DNS服务器管理员使用它。

总的来说,对于开放DNS解析器的攻击是很常见的,特别是对于没有适当安全防护的DNS服务器而言。这个教程延时了如何禁止一个开放DNS服务器。我们同样看到了如何使用iptables在一个开放DNS服务器上加上一层安全防护。

希望这对你有用。


via: http://xmodulo.com/2014/04/close-open-dns-resolver.html

译者:geekpi 校对:校对者ID

本文由 LCTT 原创翻译,Linux中国 荣誉推出

这次发布的Ubuntu 14.04,代号Trusty Tahr(值得信赖的塔尔羊),将会给服务器版用户带来新的自动化,虚拟化和存储相关特性。

Ubuntu 14.04, 是由Canonical推出的基于Linux的开源操作系统最新版本,没有为PC和移动用户带来太大改动,对他们来说仅仅是较少的更新。而对服务器用户,这次最新的最重大的Ubuntu版本更新带来了更多功能,特别在自动化,云计算,以及虚拟化等方面。

对桌面和移动用户来说,这次即将在4月17日正式露面的Ubuntu14.04的最重大的改动是,它带来了AppArmor安全系统的更新。这个在桌面/移动版本中最重要的新特性,是一个运行在后台的内核强化包,那些在个人电脑,手机或者平板上使用Ubuntu的人们在Ubuntu 14.04版本中也许根本感觉不到什么大的改动。

然而,在服务器世界里,最新版的Ubuntu带来了更实质性的改动。特别是,它将Puppet升级到了第3版,Puppet是一个用来自动化IT基础设施管理的开源平台。这是个重要的更新,能够为部署大型Ubuntu服务器网络的人们带来便利(不过是在他们解决好Puppet早期版本和最新版之间的兼容性问题之后,新旧版本之间并不互相完全兼容)。

Ubuntu 14.04还将带来开源的虚拟化管理程序Xen的4.4版本。这次改动,对于旧版的Xen部署环境也需要做一些必要的调整,才可以切换到新版本上。不过,它提供了更多的新特性,而且可以协助管理Ubuntu服务器上虚拟环境的多样性,包括众多的虚拟化管理程序,VMware (VMW),KVM,Xen等等。

最后,Ubuntu 14.04的内核基于Linux 3.13,也带来了比如更好的固态硬盘(SSD)性能等新特性。这也是很受服务器用户欢迎的,特别是那些在云和大数据领域里对性能有很高要求的用户。

这次的Ubuntu 14.04是一个长期支持(LTS)版本,这也是服务器用户最有可能长期使用于生产环境的版本,而非LTS版本对于实际生产环境来说没有任何意义。尽管Canonical持续地集中精力于在PC和移动设备上"统一"的努力,这次Ubuntu带来的自动化,虚拟化和存储软件的更新在合适的时间点推出,有利于维持Ubuntu在服务器市场的竞争力。


via: http://thevarguy.com/servers/041514/ubuntu-1404-server-brings-virtualization-automation-storage-updates

译者:zpl1025 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

一个系统管理员可能会同时管理着多台服务器,这些服务器也许会放在不同的地方。要亲自一台一台的去访问来管理它们显然不是最好的方法,通过远程控制的方法应该是最有效的。远程访问最通用的一款应用程序就是 SSH(什么?你还用telnet?....$%@%&W@$##)。

SSH 是什么

SSH(全称 Secure Shell)是一种加密的网络协议。使用该协议的数据将被加密,如果在传输中间数据泄漏,也可以确保没有人能读取出有用信息。要使用 SSH,目标机器应该安装 SSH 服务端应用程序,因为 SSH 是基于客户-服务模式的。 当你想安全的远程连接到主机,可中间的网络(比如因特网)并不安全,通常这种情况下就会使用 SSH。

安装 SSH

的 Linux 系统默认已经安装了 SSH。如果碰巧你的机器没装(译注:我能吐槽么?没有不装ssh的Linux服务器吧,不过,大家要记得升级你的ssh服务器),我们可以手工来安装一下。最简单的方式就是使用 Linux 包管理器。

基于 Debian / Ubuntu 的系统 :

安装 ssh-client

$ sudo apt-get install openssh-client

安装 ssh-server

$ sudo apt-get install openssh-server

基于 RedHat / CentOS 的系统 :

# yum install openssh-server openssh-clients

SSH 一旦安装上,我们就可以在终端下输入 ssh 来检查下安装的是否正常。

An ssh client

使用 SSH

提供了许多可使用的选项。这篇文章会介绍一些我们在日常操作中经常使用的选项。

1. 无选项参数运行 SSH

通常使用 SSH 的方式就是不加任何选项参数,仅仅输入 "ssh"。下面是示例:

$ ssh 192.168.0.103

SSH connecti confirmation

第一次连接目标主机时,ssh 会让你确认目标主机的真实性。如果你回答的是 NO,SSH 将不会继续连接,只有回答 Yes 才会继续(译注:会加入RSA key的指纹作为记录,如果下次连接发现指纹变化,会提示你)。

Connecting to SSH

下一次再登陆此主机时,SSH 就不会提示确认消息了。对此主机的真实验证信息已经默认保存在每个用户的 /home/user/.ssh 文件里。

2. 指定登陆用户

默认的,ssh 会尝试用当前用户作为用户名来连接。在上面的示例命令中,ssh 会尝试用用户名叫 pungki 的用户身份来登入服务器,这是因为用户 pungki 正在客户机上使用 ssh 客户端软件。

假如目标主机上没有叫 pungki 的用户呢?这时你就必须提供一个目标主机上存在的用户名。从一开始就要指定用户名的,可以使用 -l 选项参数。

$ ssh -l leni 192.168.0.103

Ssh using -l option

我们也可以这样输入:

$ ssh [email protected]

Another way to supply username

3. 指定端口

SSH 默认使用的端口号是 22。大多现代的 Linux 系统 22 端口都是开放的。如果你运行 ssh 程序而没有指定端口号,它直接就是通过 22 端口发送请求的。

一些系统管理员会改变 SSH 的默认端口号。让我们试试,现在端口号是 1234.要连上那主机,就要使用 -p 选项,后面在加上 SSH 端口号。

$ ssh 192.168.0.103 -p 1234

要改变端口号,我们需要修改 /etc/ssh/ssh\_config 文件,找到此行:

Port 22

把它换成其他的端口号,比如上面示例的 1234 端口,然后重启 SSH 服务。

4.对所有数据请求压缩

有了这个选项,所有通过 SSH 发送或接收的数据将会被压缩,并且任然是加密的。要使用 SSH 的压缩功能,使用 -C 选项。

$ ssh -C 192.168.0.103

如果你的连网速度很慢的话,比如用 modem 上网,这个选项非常有用。但如果你使用的是像 LAN 或其它更高级网络的话,压缩反而会降低你的传输速度。可以使用 -o 选项加上压缩级别参数来控制压缩的级别,但这个选项仅仅只在 SSH-1 下起作用。

5. 指定一个加密算法

SSH 提供了一些可用的加密算法。可以在 /etc/ssh/ssh\_config~/.ssh/config 文件中看到(如果存在的话)。

SSH cipher configuration example

让我们试试比如你想使用 blowfish 算法来加密你的 SSH 会话,那么你只要把这一行加入你的 /etc/ssh/ssh\_config~/.ssh/config 文件就可以:

Cipher blowfish

默认的,SSH 会使用 3des 算法。

6. 打开调试模式

因为某些原因,我们想要追踪调试我们建立的 SSH 连接情况。SSH 提供的 -v 选项参数正是为此而设的。

$ ssh -v 192.168.0.103

debug ssh connection

7. 绑定源地址

如果你的客户端有多于两个以上的 IP 地址,你就不可能分得清楚在使用哪一个 IP 连接到 SSH 服务器。

More than 1 IP Address

为了解决这种情况,我们可以使用 -b 选项来指定一个IP 地址。这个 IP 将会被使用做建立连接的源地址。

$ ssh -b 192.168.0.200 -l leni 192.168.0.103

服务端,我们可以使用 netstat 命令来检查到服务的连接是否建立。可以看到 IP 为 192.168.0.200 的连接已经建立。

Bind address using SSH

8. 使用其他配置文件

默认情况下,ssh 会使用位于 /etc/ssh/ssh\_config 的配置文件。这个配置文件作用于系统的所有用户。但你想要为特定的用户指定特殊的设置的话,可以把配置放入 ~/.ssh/config 文件中。如果此文件不存在,可以手工创建一个。

下面是一个通用 ssh\_config 文件配置的例子。这配置文件位于 /home/pungki 目录下。

Host 192.168.0.*
ForwardX11 yes
PasswordAuthentication yes
ConnectTimeout 10
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc
Protocol 2
HashKnownHosts yes

要使用指定的配置文件,可以使用 -F 选项。

$ ssh -F /home/pungki/my_ssh_config 192.168.0.101

Specify your ssh_config

9. 使用 SSH X11 Forwarding

某些时候,你可能想把服务端的 X11 应用程序显示到客户端计算机上,SSH 提供了 -X 选项。但要启用这功能,我们需要做些准备,下面是它的设置:

在服务器端,你需要使 /etc/ssh/ssh\_config 文件中的行设置成 ForwardX11 yes 或者 X11Forwad yes,以启用 X11 Forwarding,重启 SSH 服务程序。

然后在客户端,输入 ssh -X user@host:

$ ssh -X [email protected]

一旦登陆,可以输入:

$ echo $DISPLAY

来检查,你应该可以看到向如下所示的

localhost:10:0

随后就可以运行应用了,仅仅只能输入应用程序的命令。让我们试试,比如想运行 xclock 程序,输入:

$ xclock

Use X11 Formading

它就运行起来了,xclock 确实是运行在远端系统的,但它在你的本地系统里显示了。

xclock

10. 可信任的 X11 转发

如果你敢肯定你的网络是安全的,那么你可以使用可信任的 X11 转发机制。这意味着远程的 X11 客户端可以完全的访问源 X11 显示内容。要使用此功能,可以使用 -Y 选项。

$ ssh -Y [email protected]

SSH _Y for trusted connection

结论

我们相信 SSH 的使用范围非常之广。SSH 给用户提供了网络连接的极大安全性和灵活性。通常我们都会输入 man sshman ssh\_config 来显示它的用户手册及查看更多的细节。

(译注补充:建议使用ssh的协议版本2,因此请修改 ssh\_config 文件的 Protocol 字段为:2,而将对协议1的支持取消。)


via: http://linoxide.com/linux-command/learn-ssh-connection-options/

译者:runningwater 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

你们都知道什么是IP地址,是吧?它们被分配给网络上的设备来代表它们。它们通过DHCP服务器分配并且会经常改变。现在有两种IP地址。动态的一种会经常改变(几天一次),而静态的就如它的名字那样是静态的,意味着它们不会改变。

有时这会引发一些冲突。当一个动态IP被分配了并且有另外一台网络设备已经拥有了相同的IP。或者在相同网络子网上有多台分配IP的DHCP服务器。如果你有连通问题并且假设它是由于IP冲突造成的,那么你可以使用一个工具称作arp-scan来扫描它们。

这个工具会在本地网络发送ARP(Address Resolution Protocol)(地址解析协议)包来收集地址。如果有多个MAC地址声称拥有相同的IP地址,那么这里就存在冲突。

要在Ubuntu或者Debian上安装arp-scan则输入:

$ sudo apt-get install arp-scan

对于Fedora,CentOS或者RedHat:

$ sudo yum install arp-scan

要检测IP冲突,运行下面的命令:

$ sudo arp-scan –I eth0 -l

输出示例:

192.168.1.10   00:1b:a9:63:a2:4c       BROTHER INDUSTRIES, LTD.
192.168.1.30   00:1e:8f:58:ec:49       CANON INC.
192.168.1.33   00:25:4b:1b:10:20       Apple, Inc
192.168.1.37   10:9a:dd:55:d7:95       Apple Inc
192.168.1.38   20:c9:d0:27:8d:56       (Unknown)
192.168.1.39   d4:85:64:4d:35:be       Hewlett Packard
192.168.1.39   00:0b:46:e4:8e:6d       Cisco (DUP: 2)
192.168.1.40   90:2b:34:18:59:c0       (Unknown)

在本例中,192.168.1.39这个IP冲突了,因为它出现了两次。


via: http://www.unixmen.com/find-ip-conflicts-linux/

译者:geekpi 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

如果你想在命令行界面监控网络吞吐量,nload 应用程序是个不错的选择。它是一个实时监控网络流量和带宽使用的控制台应用程序,使用两个图表可视化地展示接收和发送的流量,并提供诸如数据交换总量、最小/最大网络带宽使用量等附加信息。

安装

在 CentOS/RHEL/Red Hat/Fedora Linux 上安装 nload

首先在 CentOS 或者基于 RHEL 的操作系统上启用 EPEL 仓库,然后键入 yum 命令安装 nload:

# yum install nload

在 Debian 或者 Ubuntu Linux 上安装 nload

键入 apt-get 命令

$ sudo apt-get install nload

在 FreeBSD 操作系统上安装 nload

通过 port 安装 nload,键入:

# cd /usr/ports/net/nload/ && make install clean

或者添加包

# pkg install net/nload

在 OpenBSD 操作系统上安装 nload

键入下列命令:

$ sudo pkg_add -i nload

在类 Unix 操作系统上从源代码安装 nload

首先,使用 wget 或者 curl 命令获取源代码:

$ cd /tmp
$ wget http://www.roland-riegel.de/nload/nload-0.7.4.tar.gz

使用 tar 命令解压缩名为 nload-0.7.4.tar.gz 的 tar 包,键入:

$ tar xvf nload-0.7.4.tar.gz

使用 cd 命令进入 nload 源代码所在目录:

$ cd nload*

然后键入 ./configure 为你的操作系统配置安装包:

$ sh ./configure

或者

$ ./configure

运行 configure 命令需要一点时间。完成后,使用 make 命令编译 nload:

$ make

最后,键入 make install 命令以 root 用户身份安装 nload 应用程序和相关文件:

$ sudo make install

或者

# make install

使用

如何使用 nload 显示当前网络使用量呢?

基本语法是:

nload
nload device
nload [options] device1 device2

键入下列命令:

$ nload
$ nload eth0
$ nload em0 em2

会得到输出:

Fig. 01: nload command in action

图01: 使用 nload 命令

操控 nload 应用程序

nload 命令一旦执行就会开始监控网络设备,你可以使用下列快捷键操控 nload 应用程序。

  1. 你可以按键盘上的 ← → 或者 Enter/Tab 键在设备间切换。
  2. 按 F2 显示选项窗口。
  3. 按 F5 将当前设置保存到用户配置文件。
  4. 按 F6 从配置文件重新加载设置。
  5. 按 q 或者 Ctrl+C 退出 nload。

设置显示刷新间隔

默认每 100 毫秒刷新一次显示数值,下面的例子将时间间隔设置成 500 毫秒:

$ nload -t {interval_number_in_millisec}
$ nload -t 500

输出:

Animated gif 01 - nload command in action

GIF 动画 01 - 使用 nload 命令

设置流量数值显示的单位

语法如下:

$ nload -u h|H|b|B|k|K|m|M|g|G
$ nload -U h|H|b|B|k|K|m|M|g|G
$ nload -u h
$ nload -u G
$ nload -U G

释义:

  • 小写选项 -u: h 意为自动格式化为人类易读的单位,b 意为 Bit/s,k 意为 kBit/s,m 意为 MBit/s,g 意为 GBit/s。大写字母意为使用 Byte 替代 Bit。默认为 k。
  • 大写选项 -U 与小写选项 -u 非常相似,不同之处在于它展示的是数据量,比如 Bit, kByte, GBit 等等。(没有 "/s")。默认值是 M。

结论

我觉得 nload 是一个稳定可靠的应用程序,如果你喜欢 nload,你可能也想试试 Linux 和其他类 Unix 操作系统环境下的 vnstat 与 iftop 工具。


译自: http://www.cyberciti.biz/networking/nload-linux-command-to-monitor-network-traffic-bandwidth-usage/

译者:blueabysm 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

系统资源监控

为使系统良好运转,Linux系统管理员经常需要监测cpu,内存,磁盘,网络等系统信息。Linux上已有iotop,top,free,htop,sar等丰富的常规工具来实现监测功能。今天让我们走进Collectl来了解这个集测试/监控/分析系统性能为一体的Linux工具。

Collectl作为一个轻量级的监控工具,在同类工具中是功能最全的。用户可监测不同的复杂系统矩阵值,并可保留数据以做之后的分析。不同于其他只用来监测特定系统参数的工具,Collectl可以同时监测不同的变量,并以合适的方式记录它们。

摘自Collectl官网 ...

不同于或聚焦于一小组统计数据、采用唯一输出方式,或采用迭代、作为守护进程运行的大部分监测工具,collectl可以同时全部实现。用户可选择各种子系统中的任一系统来监测包括内存,CPU,磁盘,索引节点,无线带宽,lustre,内存,网络,网络文件系统,进程,二次型,slabs,套接口及TCP等信息。

深入学习前让我们先看以下命令。

$ collectl
waiting for 1 second sample...
#<--------CPU--------><----------Disks-----------><----------Network---------->
#cpu sys inter  ctxsw KBRead  Reads KBWrit Writes   KBIn  PktIn  KBOut  PktOut 
   0   0   864   1772      0      0      0      0      0      1      0       0 
   5   2  1338   2734      0      0      8      2      0      0      0       1 
   1   0  1222   2647      0      0     92      3      0      2      0       1 
   1   0   763   1722      0      0     80      3      0      1      0       2

CPU使用率,磁盘输入输出和网络活动以每秒为单位来加载。对可以理解这些数据的人来说这些信息很容易读懂。这项列表在给定的时间间隔里会持续增加,并可直接形成一项文件跟踪日志。collectl工具提供了各种命令来对这些数据进行记录,查找及做其他处理。

安装collectl工具

对Ubuntu/Debian用户来说Collectl是默认资源,所以使用apt命令便可获取。

$ sudo apt-get install collectl

Fedora/CentOS用户使用yum命令便可获取。

$ yum install collectl

使用

必要的了解 - Collectl子系统

子系统是可检测到的不同系统资源类型。像CPU,内存,带宽等等都可构成一个子系统。只运行collectl命令将以批处理模式输出CPU,磁盘和网络子系统信息,我们在上文已看到相关内容。

从操作说明可以看到,Collectl可以识别以下子系统。

总计子系统

b - buddy info (内存片段)
c - CPU
d - Disk
f - NFS V3 Data
i - Inode and File System
j - Interrupts
l - Lustre
m - Memory
n - Networks
s - Sockets
t - TCP
x - Interconnect
y - Slabs (system object caches)

细节子系统

这是一系列的详细信息,大部分情况下都会由相应的总计数据衍生出来。目前“环境变量”和“进程”2类没有相应的总计数据。如果有3个磁盘,选择-sd,将只会看到3个磁盘组合出的单一信息。如果选择-sD,将会分别显示各磁盘信息。

C - CPU
D - Disk
E - Environmental data (fan, power, temp),  via ipmitool
F - NFS Data
J - Interrupts
L - Lustre OST detail OR client Filesystem detail
M - Memory node data, which is also known as numa data
N - Networks
T - 65 TCP counters only available in plot format
X - Interconnect
Y - Slabs (system object caches)
Z - Processes

使用“-s”来监测特定的子系统并向其添加子系统的识别项。现在让我们举几个例子。

1. 监测cpu使用率

用“-sc”实现CPU总使用率的监测

$ collectl -sc
waiting for 1 second sample...
#<--------CPU-------->
#cpu sys inter  ctxsw 
   3   0  1800   3729 
   3   0  1767   3599

使用“-C”观察各个单独的CPU使用情况。结果将会输出多行,分别对应一个CPU。

   $ collectl -sC
waiting for 1 second sample...

# SINGLE CPU STATISTICS

#   Cpu  User Nice  Sys Wait IRQ  Soft Steal Idle
      0     3    0    0    0    0    0     0   96
      1     3    0    0    0    0    0     0   96
      2     2    0    0    0    0    0     0   97
      3     1    0    0    0    0    0     0   98
      0     2    0    0    0    0    0     0   97
      1     2    0    2    0    0    0     0   95
      2     1    0    0    0    0    0     0   98
      3     4    0    1    0    0    0     0   95

如果需要,可以同时使用C和c来获取单项CPU监测数据和汇总数据。

2. 内存监测

使用m子系统查看内存。

$ collectl -sm
waiting for 1 second sample...
#<-----------Memory----------->
#Free Buff Cach Inac Slab  Map 
   2G 220M   1G   1G 210M   3G 
   2G 220M   1G   1G 210M   3G 
   2G 220M   1G   1G 210M   3G

不难解释。 M用来查看更多内存的详细信息。

$ collectl -sM
waiting for 1 second sample...

# MEMORY STATISTICS 

# Node    Total     Used     Free     Slab   Mapped     Anon   Locked    Inact Hit%
     0    7975M    5939M    2036M  215720K  372184K        0    6652K    1434M    0
     0    7975M    5939M    2036M  215720K  372072K        0    6652K    1433M    0

这类似于免费报告吗?

3. 查看磁盘使用情况

d和D可以查看磁盘使用的概况和详细情况。

$ collectl -sd
waiting for 1 second sample...
#<----------Disks----------->
#KBRead  Reads KBWrit Writes 
      4      1    136     24 
      0      0     80     13

$ collectl -sD
waiting for 1 second sample...

# DISK STATISTICS (/sec)
#          <---------reads---------><---------writes---------><--------averages--------> Pct
#Name       KBytes Merged  IOs Size  KBytes Merged  IOs Size  RWSize  QLen  Wait SvcTim Util
sda              0      0    0    0       0      0    0    0       0     0     0      0    0
sda              0      0    0    0       0      0    0    0       0     0     0      0    0
sda              1      0    2    1      17      1    5    3       2     2     6      2    1
sda              0      0    0    0      92     11    5   18      18     1    12     12    5

“--verbose”命令可以用来查看附加信息。和D命令不同,它将概况扩展,包含了更多信息。

$ collectl -sd --verbose

4. 同时报告多系统情况

如果想要同时得到CPU,内存和磁盘报告,那么同时使用子命令组合来实现。

$ collectl -scmd
waiting for 1 second sample...
#<--------CPU--------><-----------Memory-----------><----------Disks----------->
#cpu sys inter  ctxsw Free Buff Cach Inac Slab  Map KBRead  Reads KBWrit Writes 
   4   0  2187   4334   1G 221M   1G   1G 210M   3G      0      0      0      0 
   3   0  1896   4065   1G 221M   1G   1G 210M   3G      0      0     20      5

5. 显示统计时间

若要将每行的监测信息和时间一同显示,使用T选项。通过在“-o”参数来指定。

$ collectl -scmd -oT
waiting for 1 second sample...
#         <--------CPU--------><-----------Memory-----------><----------Disks----------->
#Time     cpu sys inter  ctxsw Free Buff Cach Inac Slab  Map KBRead  Reads KBWrit Writes 
12:03:05    3   0  1961   4013   1G 225M   1G   1G 212M   3G      0      0      0      0 
12:03:06    3   0  1884   3810   1G 225M   1G   1G 212M   3G      0      0      0      0 
12:03:07    3   0  2011   4060   1G 225M   1G   1G 212M   3G      0      0      0      0

使用“-oTm”可将时间换成毫秒显示。

6. 改变样本计数

collectl报告的每行都是一份快照或样本,它通常设定定期间隔如1秒来取样。i可用来设置时间间隔,c用来设置样本计数。

$ collectl -c1 -sm
waiting for 1 second sample...
#<-----------Memory----------->
#Free Buff Cach Inac Slab  Map 
   1G 261M   1G   1G 228M   3G

使用i命令可改变更新时间间隔。

$ collectl -sm -i2
waiting for 2 second sample...
#<-----------Memory----------->
#Free Buff Cach Inac Slab  Map 
   1G 261M   1G   1G 229M   3G

上面的命令设定每2秒收集一次内存信息。

7. 像iotop一样使用collectl

top命令将collectl像iostat/top工具一样进行智能统计。列表会持续更新,且可以使用不同字段实现排序。

$ collectl --top iokb

输出如下

# TOP PROCESSES sorted by iokb (counters are /sec) 09:44:57
# PID  User     PR  PPID THRD S   VSZ   RSS CP  SysT  UsrT Pct  AccuTime  RKB  WKB MajF MinF Command
 3104  enlighte 20  2683    3 S  938M   33M  0  0.00  0.00   0  00:09.16    0    4    0    0 /usr/bin/ktorrent 
    1  root     20     0    0 S   26M    3M  2  0.00  0.00   0  00:01.30    0    0    0    0 /sbin/init 
    2  root     20     0    0 S     0     0  3  0.00  0.00   0  00:00.00    0    0    0    0 kthreadd 
    3  root     20     2    0 S     0     0  0  0.00  0.00   0  00:00.02    0    0    0    0 ksoftirqd/0 
    4  root     20     2    0 S     0     0  0  0.00  0.00   0  00:00.00    0    0    0    0 kworker/0:0 
    5  root      0     2    0 S     0     0  0  0.00  0.00   0  00:00.00    0    0    0    0 kworker/0:0H 
    7  root     RT     2    0 S     0     0  0  0.00  0.00   0  00:00.08    0    0    0    0 migration/0 
    8  root     20     2    0 S     0     0  2  0.00  0.00   0  00:00.00    0    0    0    0 rcu_bh 
    9  root     20     2    0 S     0     0  0  0.00  0.00   0  00:00.00    0    0    0    0 rcuob/0

上面的输出很像top命令,并且它以磁盘数量降序排列进程。

若只想显示上面的5项进程,可用以下命令实现

$ collectl --top iokb,5

若想学习上面的列表里哪些字段可以排序,使用如下命令

$ collectl --showtopopts

下面是应用于进程或数据的最高排序类型列表。某些情况下你可能会使用某一字段进行排序,但它并非显示的一部分。

TOP PROCESS SORT FIELDS
进程排序字段

Memory
  vsz    virtual memory
  rss    resident (physical) memory

Time
  syst   system time
  usrt   user time
  time   total time
  accum  accumulated time

I/O
  rkb    KB read
  wkb    KB written
  iokb   total I/O KB

  rkbc   KB read from pagecache
  wkbc   KB written to pagecache
  iokbc  total pagecacge I/O
  ioall  total I/O KB (iokb+iokbc)

  rsys   read system calls
  wsys   write system calls
  iosys  total system calls

  iocncl Cancelled write bytes

Page Faults
  majf   major page faults
  minf   minor page faults
  flt    total page faults

Context Switches
  vctx   volunary context switches
  nctx   non-voluntary context switches

Miscellaneous (best when used with --procfilt)
  cpu    cpu number
  pid    process pid
  thread total process threads (not counting main)

TOP SLAB SORT FIELDS

  numobj    total number of slab objects
  actobj    active slab objects
  objsize   sizes of slab objects
  numslab   number of slabs
  objslab   number of objects in a slab
  totsize   total memory sizes taken by slabs
  totchg    change in memory sizes
  totpct    percent change in memory sizes
  name      slab names

8. 像top一样使用collectl

为使collectl像top,我们只需以CPU使用率排序输出进程。

$ collectl --top

输出如下

# TOP PROCESSES sorted by time (counters are /sec) 14:08:46
# PID  User     PR  PPID THRD S   VSZ   RSS CP  SysT  UsrT Pct  AccuTime  RKB  WKB MajF MinF Command
 9471  enlighte 20  9102    0 R   63M   22M  3  0.03  0.10  13  00:00.81    0    0    0    3 /usr/bin/perl 
 3076  enlighte 20  2683    2 S  521M   40M  2  0.00  0.03   3  00:55.14    0    0    0    2 /usr/bin/yakuake 
 3877  enlighte 20  3356   41 S    1G  218M  1  0.00  0.03   3  10:10.50    0    0    0    0 /opt/google/chrome/chrome 
 4625  enlighte 20  2895   36 S    1G  241M  2  0.00  0.02   2  08:24.39    0    0    0   12 /usr/lib/firefox/firefox 
 5638  enlighte 20  3356    3 S    1G  265M  1  0.00  0.02   2  09:55.04    0    0    0    2 /opt/google/chrome/chrome 
 1186  root     20  1152    4 S  502M   76M  0  0.00  0.01   1  03:02.96    0    0    0    0 /usr/bin/X 
 1334  www-data 20  1329    0 S   87M    1M  2  0.00  0.01   1  00:00.85    0    0    0    0 nginx:

上面的命令也可用于显示子系统信息。

$ collectl --top -scm

9. 像ps一样列出进程

为像ps命令一样列出所有进程且没有后续更新,用“c”命令让其计数至1. $ collectl -c1 -sZ -i:1

上面的命令将会列出类似“ps -e”命令的所有进程。“procfilt”用于从所有进程中过滤出特定的进程信息。“procopts”用于指定另一组微调进程列表显示的命令。

10. 像vmstat一样使用collectl

Collectl有内置命令来完成像vmstat一样的功能。

$ collectl --vmstat
waiting for 1 second sample...
#procs ---------------memory (KB)--------------- --swaps-- -----io---- --system-- ----cpu-----
# r  b   swpd   free   buff  cache  inact active   si   so    bi    bo   in    cs us sy  id wa
  1  0      0  1733M   242M  1922M  1137M   710M    0    0     0   108 1982  3918  2  0  95  1
  1  0      0  1733M   242M  1922M  1137M   710M    0    0     0     0 1906  3886  1  0  98  0
  1  0      0  1733M   242M  1922M  1137M   710M    0    0     0     0 1739  3480  3  0  96  0

11. 子系统的详细信息

下面的命令以一秒为间隔,统计5次CPU信息并和时间一起显示出详细信息(冗长)。

$ collectl -sc -c5 -i1 --verbose -oT
waiting for 1 second sample...

# CPU SUMMARY (INTR, CTXSW & PROC /sec)
#Time      User  Nice   Sys  Wait   IRQ  Soft Steal  Idle  CPUs  Intr  Ctxsw  Proc  RunQ   Run   Avg1  Avg5 Avg15 RunT BlkT
14:22:10     11     0     0     0     0     0     0    87     4  1312   2691     0   866     1   0.78  0.86  0.78    1    0
14:22:11     15     0     0     0     0     0     0    84     4  1283   2496     0   866     1   0.78  0.86  0.78    1    0
14:22:12     17     0     0     0     0     0     0    82     4  1342   2658     0   866     0   0.78  0.86  0.78    0    0
14:22:13     15     0     0     0     0     0     0    84     4  1241   2429     0   866     1   0.78  0.86  0.78    1    0
14:22:14     11     0     0     0     0     0     0    88     4  1270   2488     0   866     0   0.80  0.87  0.78    0    0

改变"-s"变量查看不同的子系统。

总结

本文的介绍不过是对collectl这个强大工具的一些浅见。本文本希望展示它有多灵活,其实通过以上的讨论让我们了解了包括记录及回寻捕获的数据,以多种文件格式导出数据并将数据转换为可被广泛的工具分析的格式等等功能的实现。

collectl提供的另一大功能便是像服务一样运行,对远程Linux机器或完整的服务器集群提供远程监控,其表现堪称完美。

Collectl同另一批可用于处理分析收集数据的名为Collectl实用工具 (colmux, colgui, colplot)的功能相契合。如果有机会,我们在之后的文章中会介绍它们。

为更详细的了解Collectl工具,请登录它的主页来学习更多的功能。笔者建议查看FAQs来快速了解collectl,读取collectl文档获取深层次的例子。等价命令表也可定位至更多的像sar,iostat,netstat,top等和collectl功能部分等价的常用工具。


via: http://www.binarytides.com/collectl-monitor-system-resources-linux/

译者:icybreaker 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出