分类 系统运维 下的文章

dstat 是一个可以取代vmstat,iostat,netstat和ifstat这些命令的多功能产品。dstat克服了这些命令的局限并增加了一些另外的功能,增加了监控项,也变得更灵活了。dstat可以很方便监控系统运行状况并用于基准测试和排除故障。

dstat可以让你实时地看到所有系统资源,例如,你能够通过统计IDE控制器当前状态来比较磁盘利用率,或者直接通过网络带宽数值来比较磁盘的吞吐率(在相同的时间间隔内)。

dstat将以列表的形式为你提供选项信息并清晰地告诉你是在何种幅度和单位显示输出。这样更好地避免了信息混乱和误报。更重要的是,它可以让你更容易编写插件来收集你想要的数据信息,以从未有过的方式进行扩展。

Dstat的默认输出是专门为人们实时查看而设计的,不过你也可以将详细信息通过CSV输出到一个文件,并导入到Gnumeric或者Excel生成表格中。

特性

  • 结合了vmstat,iostat,ifstat,netstat以及更多的信息
  • 实时显示统计情况
  • 在分析和排障时可以通过启用监控项并排序
  • 模块化设计
  • 使用python编写的,更方便扩展现有的工作任务
  • 容易扩展和添加你的计数器(请为此做出贡献)
  • 包含的许多扩展插件充分说明了增加新的监控项目是很方便的
  • 可以分组统计块设备/网络设备,并给出总数
  • 可以显示每台设备的当前状态
  • 极准确的时间精度,即便是系统负荷较高也不会延迟显示
  • 显示准确地单位和和限制转换误差范围
  • 用不同的颜色显示不同的单位
  • 显示中间结果延时小于1秒
  • 支持输出CSV格式报表,并能导入到Gnumeric和Excel以生成图形

安装方法

Ubuntu/Mint和Debin系统:

本地软件库中有相关安装包,你可以用下面命令安装:

# sudo apt-get install dstat

RHEL/Centos和Fedora系统:

你可以在romforge软件库中添加有相关安装包,参照指导,使用如下命令很简单就能进行安装:

# yum install dstat

ArchLinux系统:

相关软件包在社区资源库中,你可以用这个命令来安装:

# pacman -S dstat

使用方法

dstat的基本用法就是输入dstat命令,输出如下:

这是默认输出显示的信息:

CPU状态:CPU的使用率。这项报告更有趣的部分是显示了用户,系统和空闲部分,这更好地分析了CPU当前的使用状况。如果你看到"wait"一栏中,CPU的状态是一个高使用率值,那说明系统存在一些其它问题。当CPU的状态处在"waits"时,那是因为它正在等待I/O设备(例如内存,磁盘或者网络)的响应而且还没有收到。

磁盘统计:磁盘的读写操作,这一栏显示磁盘的读、写总数。

网络统计:网络设备发送和接受的数据,这一栏显示的网络收、发数据总数。

分页统计:系统的分页活动。分页指的是一种内存管理技术用于查找系统场景,一个较大的分页表明系统正在使用大量的交换空间,或者说内存非常分散,大多数情况下你都希望看到page in(换入)和page out(换出)的值是0 0。

系统统计:这一项显示的是中断(int)和上下文切换(csw)。这项统计仅在有比较基线时才有意义。这一栏中较高的统计值通常表示大量的进程造成拥塞,需要对CPU进行关注。你的服务器一般情况下都会运行运行一些程序,所以这项总是显示一些数值。

默认情况下,dstat每秒都会刷新数据。如果想退出dstat,你可以按"CTRL-C"键。

需要注意的是报告的第一行,通常这里所有的统计都不显示数值的。

这是由于dstat会通过上一次的报告来给出一个总结,所以第一次运行时是没有平均值和总值的相关数据。

但是dstat可以通过传递2个参数运行来控制报告间隔和报告数量。例如,如果你想要dstat输出默认监控、报表输出的时间间隔为3秒钟,并且报表中输出10个结果,你可以运行如下命令:

dstat 3 10

在dstat命令中有很多参数可选,你可以通过man dstat命令查看,大多数常用的参数有这些:

  • -l :显示负载统计量
  • -m :显示内存使用率(包括used,buffer,cache,free值)
  • -r :显示I/O统计
  • -s :显示交换分区使用情况
  • -t :将当前时间显示在第一行
  • –fs :显示文件系统统计数据(包括文件总数量和inodes值)
  • –nocolor :不显示颜色(有时候有用)
  • –socket :显示网络统计数据
  • –tcp :显示常用的TCP统计
  • –udp :显示监听的UDP接口及其当前用量的一些动态数据

当然不止这些用法,dstat附带了一些插件很大程度地扩展了它的功能。你可以通过查看/usr/share/dstat目录来查看它们的一些使用方法,常用的有这些:

  • -–disk-util :显示某一时间磁盘的忙碌状况
  • -–freespace :显示当前磁盘空间使用率
  • -–proc-count :显示正在运行的程序数量
  • -–top-bio :指出块I/O最大的进程
  • -–top-cpu :图形化显示CPU占用最大的进程
  • -–top-io :显示正常I/O最大的进程
  • -–top-mem :显示占用最多内存的进程

举一些例子:

查看全部内存都有谁在占用:

dstat -g -l -m -s --top-mem

显示一些关于CPU资源损耗的数据:

dstat -c -y -l --proc-count --top-cpu

如何输出一个csv文件

想输出一个csv格式的文件用于以后,可以通过下面的命令:

# dstat –output /tmp/sampleoutput.csv -cdn

via: http://linuxaria.com/howto/linux-terminal-dstat-monitoring-tools

译者:disylee 校对:wxy

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

当你在终端或者控制台工作时,你可能想要记录在终端中所做的一切。这些记录可以用来当作史料,保存终端所发生的一切。比如说,你和一些Linux管理员们同时管理着相同的机器,或者你让某人远程登陆到了你的服务器上,你可能记录想要终端里发生的一切。要实现这个目标,你可以使用script命令。

script是什么

scirpt就是一个命令,可以制作一份记录输出到终端的记录。对于那些想要真实记录终端会话的人来说,这很有用。该记录可以保存并在以后再打印出来。

怎么用

默认情况下,我们可以通过在终端中输入script来启动scirpt命令。

pungki@dev-machine:~$ script
Script started, file is typescript
pungki@dev-machine:~$

你也可以指定目标文件名来记录打印结果。

pungki@dev-machine:~$ script myfile

Define script file

当你再次见到命令提示符,这意味着终端将记录打印到终端的任何东西。

你会看到当前目录,有个名为myscript的文件。(LCTT译注,此处原文有误。这里指定了记录文件名为myfile,而不是默认的 typescript。)

为什么我们要用script命令

因为在之前已经提到过,script命令的主要功能是记录所有的东西。下面给出了两个使用该命令的场景。

和同事共事时

当和同事一起工作时,我们可以通过script来记录你的活动。

比如,我们会使用名为collaborate的打印文件,来完成打印:

$ script collaborate

Create collaborate file

然后,在完成一些任务后,假如你需要把你干的活发给另外一个工程师,那就把那文件发给他。所以当另外一个工程师需要复查所做的事情,他只要用文本编辑器打开这个文件就行了。

如果他想要更新该文件(以增加他的工作部分),可以使用-a选项。

$ script -a collaborate

Append the file

记录某人在终端中的所作所为

你可能让你的工程师或者某个人远程访问你的系统,要确保你的工程师正在干正确的事,你可以记录下他在你系统上的所作所为。要让script命令在登录时自动运行,我们可以把它添加进shell环境配置文件中。如果你正在使用bash shell,把这一行加进你的bash环境配置文件中。

$ vi ~/.profile

# run the script command to record everything
# use -q for quite and -a option to append the script
#
/usr/bin/script -qa /usr/local/script/log_record_script

Add script to bash profile

然后保存。下次他登录进你的系统时,script命令就会自动运行,并把日志记录进/usr/local/script/logrecordscript

Script without notification

-q选项可以让scirpt命令以静默模式运行,登录进来的用户不会知道script命令已经运行了。而-a选项将会让记录附加到文件中,而不会擦除先前的记录。

如果不使用-q选项,那么当用户登录进来时,他会收到像下图中这样的通知。

Script with notification

退出记录

要退出记录活动,我们可以在终端中按下Ctrl+D,或者输入exit。在退出script前,你会发现记录文件的大小为0 Kb,而在退出之后,文件大小会发生改变。

结尾

Script命令在你需要记录或者存档终端活动时可能很有用,记录文件会存储为文本文件,所以可以很方便地用文本编辑器打开。跟平常一样,我们都可以通过输入man script或者scirpt -h来显示帮助页并查看更多详细用法。


via: http://linoxide.com/linux-command/script-command-recorder/

译者:GOLinux 校对:wxy

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

通常,网络或系统管理员有责任来管理其所管理的网络下的一个或多个子网。例如,当一个网段分配了/24子网,那么该子网就有254个IP地址可以用于不同用途。要跟踪某个IP被分配到了哪个主机,就需要通过某种方式记录下来。最简单的方法,就是使用一个电子表格,如Excel来记录IP地址的分配信息。此方法对于只有一个管理员,并且网络很小的情况下比较奏效。然而,对于多个大型网络而言,依赖于电子表格并不方便,而且十分容易出错。更糟糕的是,如果有多个管理员参与管理,更新电子表格就十分麻烦了,因为每个管理员可能生成各种不同版本的文档记录。

一种系统地管理IP地址分配的方式是使用网络化的IP地址管理工具。不仅仅是因为网络化管理工具能在任何地方访问并管理,而且其后端数据库也能保证所有更新能正确同步并实时生效。尽管有许多可用的网络化应用工具,但我们将在此教程中关注如何来安装phpIPAM(IP Address Manager IP地址管理工具)。phpIPAM是一个开源、高效的IP地址管理应用软件,有着以下一些特性。

  • 同时支持IPv4和IPv6(和其它工具不同,它对IPv6支持得很好)
  • 内建的IPv4和IPv6计算器
  • 支持无类域间路由(CIDR)标记
  • 支持MySQL数据库
  • 子网嵌套
  • 基于用户/组权限
  • 可视化报表工具
  • 使用.xls文件导入/导出
  • 支持设备、VRF和VLAN
  • 强大的搜索引擎
  • 电子邮件标记
  • 支持基于AD/LDAP的验证

可访问http://demo.phpipam.net查看phpIPAM演示网站。

在本教程中,我们将在Ubuntu环境中使用Apache来配置phpIPAM

在Ubuntu上安装phpIPAM

首先,使用apt-get来安装需要的软件包。

# apt-get install apache2 mysql-server php5 php5-gmp php-pear php5-mysql php5-ldap wget

如果MySQL是首次安装,请使用以下命令来设置root密码。

# mysqladmin -u root password NEWPASSWORD 

phpIPAM可以安装在任何Web服务器目录中,我们将会安装到Apache Web服务器的根目录下的/phpipam/子目录中。

下载phpIPAM软件包。

# wget http://kent.dl.sourceforge.net/project/phpipam/phpipam-1.0.tar

将软件包解压到Web服务器相应目录。

# cp phpipam-1.0.tar /var/www/
# cp /var/www/
# tar xvf phpipam-1.0.tar
# rm phpipam-1.0.tar 

现在来指定MySQL的用户名和密码,同时指定基准目录。

# vim /var/www/phpipam/config.php 

$db['host'] = "localhost";

## MySQL user for ipam ##
$db['user'] = "phpipam";

## password for the MySQL user ##
$db['pass'] = "phpipamadmin";

## database for MySQL ##
$db['name'] = "phpipam";

## base directory ##
define('BASE', "/phpipam/");

需要在提供的.htaccess文件中指定基准目录。

# vim /var/www/phpipam/.htaccess 
RewriteBase /phpipam/

准备Apache Web服务器

phpIPAM的运行需要Apache 的 Rewrite模块,该模块可以在Ubuntu或Debian机器上使用以下命令来启用。

# a2enmod rewrite 

接下来,需要修改Apache的默认配置。请添加/修改你的配置,使它看起来像下面这样。

# vim /etc/apache2/sites-enabled/000-default 
<Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride all
        Order allow,deny
        allow from all
</Directory>

最后,重启Apache Web服务。

# service apache2 restart 

完成安装

我们可以使用浏览器来完成phpIPAM的安装。将浏览器地址指向URL: http:///phpIPAM,将会显示以下phpIPAM安装页面。我们可以开始自动化数据库安装。

现在,phpIPAM应该已经起来,并正在运行了,我们可以使用以下默认用户来登录。

  • URL: http:///phpipam
  • User: Admin
  • Pass: ipamadmin

使用phpIPAM管理IP地址

在本教程的剩下部分,我们将引领你进入phpIPAM的子网和IP地址管理。

创建区域

让我们从为我们的网络创建区域开始吧。点击“管理” > “区域”。

点击“添加区域”。现在我们可以为我们的添加的区域取个你想要的名称了(如:"Our Network"),填上区域的详细情况。

]3

创建子网

接下来,在上面场景的区域“Our Network”下添加一个新的子网172.16.1.0/24。点击“Our Network” > “添加子网”

现在,我们可以很容易地在子网中添加IP地址了。一种方法是逐个来添加它们,phpIPAM提供了一个可选的方法:扫描所有主机并自动添加,这一点都不麻烦。它可以扫描位于同一广播域下的本地子网,也可以通过路由扫描到远程子网。在选择一个子网后,像下面这样点击“扫描子网中的新主机”来扫描IP地址。

]4

在扫描完成后,发现的IP地址可以通过点击底部“添加发现的主机”按钮来将IP地址添加到数据库。

创建IPv6子网

可以通过相似的步骤来创建IPv6子网,像下面截图中展示的那样来指定IPv6网络。

所有用于IPv4的工具也可以用于IPv6.

创建嵌套子网

phpIPAM也提供了创建嵌套子网的选项,可以用于IPv4和IPv6。例如,我们将172.16.1.0/24 IP区块划分成4个更小的子网(/26),每个子网用于组织内特定的部门。在选择/24子网后,我们可以使用“添加新的嵌套子网”按钮来创建嵌套子网。截图中展示了添加嵌套子网的图标。

5

在所有的子网创建完毕后,我们应该有相同的输出。以下是嵌套子网预览窗口。

6

添加用户和组

首先,我们将为区域“Our Network”创建一个具有读/写权限的组。这项工作可以通过选择“管理” > “组” > “创建组”来完成。

既然组已经被创建完成,那么我们来修改区域权限,选择“管理” > “区域”,然后编辑区域。

7

我们将创建一个名为“user1”的用户,添加该用户到“演示组”,以便该用户能从该组集成有所必要的权限。我们从点击“管理” > “用户” > “创建用户”开始。

现在,我们能以该用户身份登录,并添加/修改“我们的网络”下的IP地址。

最后小结,phpIPAM是一个多样化的IP地址管理工具,可以用于IPv4和IPv6。本教程仅关注基本内容,以帮助你开始使用该工具。你一定要测试所有可用的特性,如使用IP地址计算器,添加设备,VLAN和VRF,以及使用.xls导入/导出。

希望本教程对你有所帮助。


via: http://xmodulo.com/2014/05/manage-ip-addresses-subnets-phpipam.html

译者:GOLinux 校对:wxy

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

一般来说,服务器非常慢可能原因是多方面的,有可能是配置错误,脚本错误或者是一些奇诡的硬件。当然也有可能是有人对你的服务器进行 Dos (拒绝服务攻击)或者 DDOS (分布式拒绝服务攻击)。

Dos攻击或者DDos攻击目的是使服务器或者网络资源耗尽,使其他用户无法使用。一般来说,这种攻击主要针对重要的网站或服务,比如银行、信用卡支付网关甚至是根域名服务器。Dos攻击主要通过强制目标主机重启或大量消耗其主机资源,使得目标主机无法提供服务或者妨害主机和用户之间的通信的手段,使得主机无法提供正常的服务的。

在本文中你将知道如何在终端中使用netstat命令判断服务器是否遭受Dos攻击。

netstat命令的用户手册描述其作用是用来显示网络连接、路由表、接口统计、伪连接和组播成员的。

一些例子和解释

netstat -na

该命令将显示所有活动的网络连接。

netstat -an | grep :80 | sort

显示所有80端口的网络连接并排序。这里的80端口是http端口,所以可以用来监控web服务。如果看到同一个IP有大量连接的话就可以判定单点流量攻击了。

netstat -n -p|grep SYN_REC | wc -l

这个命令可以查找出当前服务器有多少个活动的 SYNC\_REC 连接。正常来说这个值很小,最好小于5。 当有Dos攻击或者邮件炸弹的时候,这个值相当的高。尽管如此,这个值和系统有很大关系,有的服务器值就很高,也是正常现象。

netstat -n -p | grep SYN_REC | sort -u

列出所有连接过的IP地址。

netstat -n -p | grep SYN_REC | awk '{print $5}' | awk -F: '{print $1}'

列出所有发送SYN\_REC连接节点的IP地址。

netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

使用netstat命令计算每个主机连接到本机的连接数。

netstat -anp |grep 'tcp|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

列出所有连接到本机的UDP或者TCP连接的IP数量。

netstat -ntu | grep ESTAB | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr

检查 ESTABLISHED 连接并且列出每个IP地址的连接数量。

netstat -plan|grep :80|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort -nk 1

列出所有连接到本机80端口的IP地址和其连接数。80端口一般是用来处理HTTP网页请求。

如何减少DOS攻击

一旦你获得攻击服务器的IP地址你就可以使用以下命令拒绝此IP的所有连接。

iptables -A INPUT 1 -s $IPADRESS -j DROP/REJECT

注意,你需要将 $IPADRESS 替换成需要拒绝连接的IP地址。

执行完以上命令后,使用以下命令结束所有的httpd连接以清理系统。

killall -KILL httpd

然后执行以下命令重启httpd服务。

service httpd start           #RedHat 系统 
/etc/init/d/apache2 restart   #Debian 系统

via: http://linuxaria.com/howto/how-to-verify-ddos-attack-with-netstat-command-on-linux-terminal

译者:shipsw 校对:wxy

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

对于一个 Linux 系统管理员来说确保自己管理的系统处于一个良好的状态是其首要责任。Linux 系统管理员可以找到有很多工具来帮助自己监控和显示系统中的进程,例如 top 和 htop ,但是这些工具都不能与 collectl 相媲美。

Collectl: Linux Performance Monitoring

collectl是一款非常优秀并且有着丰富的命令行功能的实用程序,你可以用它来采集描述当前系统状态的性能数据。不同于大多数其它的系统监控工具,collectl 并非仅局限于有限的系统度量,相反,它可以收集许多不同类型系统资源的相关信息,如 cpu 、disk、memory 、network 、sockets 、 tcp 、inodes 、infiniband 、 lustre 、memory、nfs、processes、quadrics、slabs和buddyinfo等。

使用 collectl 的另一个好处就是它可以替代那些特定用途的工具如: top、ps、iotop 等等其它工具。那么 collectl 有什么特性而使其成为一个有用的工具呢?

经过许多研究后,我总结了 collectl 的命令行功能的一些非常重要的特性。

Collectl 特性

  • 可以交互式地运行或作为一个守护进程,或同时二者兼备地运行。
  • 可以以多种格式显示输出。
  • 可以监控几乎所有的子系统。
  • 可以替代许多工具如 ps、top、iotop、vmstat。
  • 可以记录并回放捕获的数据。
  • 可以将数据导出成多种数据格式。(这在你想用外部工具分析数据时非常有用)
  • 可以作为一个服务来监控远程机或者整个服务器集群。
  • 可以在终端显示数据,写入数据到文件或者一个套接字。

如何在Linux上安装collectl

collectl可以在所有的 Linux 发行版上运行,唯一需要的就是 perl 语言,所以在安装 collectl 之前,一定要确保你的电脑上已经安装了Perl

对于Debian/Ubuntu/Linux Mint

下面的命令可以用来在以 Debian 为基础的设备如 Ubuntu 上安装 collectl。

$ sudo apt-get install collectl

对于RHEL/CentOS/Fedora

如果你正在使用基于红帽的发行版,你可以用 yum 命令轻松获取它。

# yum install collectl

一些关于collectl的实例

collectl 工具安装完成之后,你可以轻松地在终端运行它,你甚至不需要指定任何选项。下面的命令将会以简短易读的格式显示cpu、硬盘和网络信息。

# collectl

waiting for 1 second sample...
#
#cpu sys inter  ctxsw KBRead  Reads KBWrit Writes   KBIn  PktIn  KBOut  PktOut 
  13   5   790   1322      0      0     92      7      4     13      0       5 
  10   2   719   1186      0      0      0      0      3      9      0       4 
  12   0   753   1188      0      0     52      3      2      5      0       6 
  13   2   733   1063      0      0      0      0      1      1      0       1 
  25   2   834   1375      0      0      0      0      1      1      0       1 
  28   2   870   1424      0      0     36      7      1      1      0       1 
  19   3   949   2271      0      0     44      3      1      1      0       1 
  17   2   809   1384      0      0      0      0      1      6      0       6 
  16   2   732   1348      0      0      0      0      1      1      0       1 
  22   4   993   1615      0      0     56      3      1      2      0       3

正如上面终端上所显示的,我们很容易观察该命令输出的系统度量值,因为它每次以一行显示。

不加任何参数执行 collectl 会显示下面子系统的信息

  • cpu
  • 磁盘
  • 网络

提示:在这里,一个子系统就是每一种可以测量的系统资源。

你也可以显示除slabs以外各个子系统的统计数据,这要结合下面的 -all 选项来实现。

# collectl --all

waiting for 1 second sample...
#
#cpu sys inter  ctxsw Cpu0 Cpu1 Free Buff Cach Inac Slab  Map   Fragments KBRead  Reads KBWrit Writes   KBIn  PktIn  KBOut  PktOut   IP  Tcp  Udp Icmp  Tcp  Udp  Raw Frag Handle Inodes  Reads Writes Meta Comm 
  16   3   817   1542  430  390   1G 175M   1G 683M 193M   1G nsslkjjebbk      0      0     24      3      1      1      0       1    0    0    0    0  623    0    0    0   8160 240829      0      0    0    0 
  11   1   745   1324  316  426   1G 175M   1G 683M 193M   1G nsslkjjebbk      0      0      0      0      0      3      0       2    0    0    0    0  622    0    0    0   8160 240828      0      0    0    0 
  15   2   793   1683  371  424   1G 175M   1G 683M 193M   1G ssslkjjebbk      0      0      0      0      1      1      0       1    0    0    0    0  622    0    0    0   8160 240829      0      0    0    0 
  16   2   872   1875  427  446   1G 175M   1G 683M 193M   1G ssslkjjebbk      0      0     24      3      1      1      0       1    0    0    0    0  622    0    0    0   8160 240828      0      0    0    0 
  24   2   842   1383  473  368   1G 175M   1G 683M 193M   1G ssslkjjebbk      0      0    168      6      1      1      0       1    0    0    0    0  622    0    0    0   8160 240828      0      0    0    0 
  27   3   844   1099  478  365   1G 175M   1G 683M 193M   1G nsslkjjebbk      0      0      0      0      1      6      1       9    0    0    0    0  622    0    0    0   8160 240828      0      0    0    0 
  26   5   823   1238  396  428   1G 175M   1G 683M 193M   1G ssslkjjebbk      0      0      0      0      2     11      3       9    0    0    0    0  622    0    0    0   8160 240828      0      0    0    0 
  15   1   753   1276  361  391   1G 175M   1G 683M 193M   1G ssslkjjebbk      0      0     40      3      1      2      0       3    0    0    0    0  623    0    0    0   8160 240829      0      0    0    0

但是,你如何用它来监控 cpu 的使用情况呢? ‘-s’ 选项可以用来控制哪个子系统的数据需要收集和回放。

例如下面的命令可以用来对cpu使用情况进行一个总结。

# collectl -sc

waiting for 1 second sample...
#
#cpu sys inter  ctxsw 
  15   2   749   1155 
  16   3   772   1445 
  14   2   793   1247 
  27   4   887   1292 
  24   1   796   1258 
  16   1   743   1113 
  15   1   743   1179 
  14   1   706   1078 
  15   1   764   1268

当你将这个命令与“scdn”结合时会发生什么呢?学习命令行工具最好的方式就是多加练习,所以在终端运行下面的命令看看会发生什么吧。

# collectl -scdn

waiting for 1 second sample...
#
#cpu sys inter  ctxsw KBRead  Reads KBWrit Writes   KBIn  PktIn  KBOut  PktOut 
  25   4   943   3333      0      0      0      0      1      1      0       2 
  27   3   825   2910      0      0      0      0      1      1      0       1 
  27   5   886   2531      0      0      0      0      0      0      0       1 
  20   4   872   2406      0      0      0      0      1      1      0       1 
  26   1   854   2091      0      0     20      2      1      1      0       1 
  39   4  1004   3398      0      0      0      0      2      8      3       6 
  41   6   955   2464      0      0     40      3      1      2      0       3 
  25   7   890   1609      0      0      0      0      1      1      0       1 
  16   2   814   1165      0      0    796     43      2      2      0       2 
  14   1   779   1383      0      0     48      6      1      1      0       1 
  11   2   795   1285      0      0      0      0      2     14      1      14

你可以很容易就明白默认选项是“cdn”,它代表cpu、硬盘和网络数据。运行带这个选项的 collectl 命令的输出和“collectl -scn”的输出一样。

如果你想采集内存的数据,用下面的命令。

# collectl -sm

waiting for 1 second sample...
#
#Free Buff Cach Inac Slab  Map 
   1G 177M   1G 684M 193M   1G 
   1G 177M   1G 684M 193M   1G 
   1G 177M   1G 684M 193M   1G 
   1G 177M   1G 684M 193M   1G 
   1G 177M   1G 684M 193M   1G 
   1G 177M   1G 684M 193M   1G 
   1G 177M   1G 684M 193M   1G 
   1G 177M   1G 684M 193M   1G

当你想要进一步了解内存使用信息、空闲的内存或者与你系统性能有关的重要资料时,上面的输出将是非常有用的。

如果想搜集一点儿 tcp 的数据呢?使用下面的命令来实现吧。

# collectl -st

waiting for 1 second sample...
#
#  IP  Tcp  Udp Icmp 
    0    0    0    0 
    0    0    0    0 
    0    0    0    0 
    0    0    0    0 
    0    0    0    0 
    0    0    0    0 
    0    0    0    0 
    0    0    0    0 
    0    0    0    0 
    0    0    0    0 
    0    0    0    0

当你熟练到一定程度时,你就可以很轻松地得到你想要的结果了。例如你可以将关于 tcp 的“t”选项和关于 cpu 的“c”选项组合到一起。下面的命令就是如此。

# collectl -stc

waiting for 1 second sample...
#
#cpu sys inter  ctxsw   IP  Tcp  Udp Icmp 
  23   8   961   3136    0    0    0    0 
  24   5   916   3662    0    0    0    0 
  21   8   848   2408    0    0    0    0 
  30  10   916   2674    0    0    0    0 
  38   3   826   1752    0    0    0    0 
  31   3   820   1408    0    0    0    0 
  15   5   781   1335    0    0    0    0 
  17   3   802   1314    0    0    0    0 
  17   3   755   1218    0    0    0    0 
  14   2   788   1321    0    0    0    0

对于我们普通大众来说记住这些选项很困难,所以在这里,我整理出了一个列表来总结这个工具支持的选项。

  • 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 (系统对象缓存)

对于一个系统管理员或者一个 Linux 用户来说很重要的一种数据就是硬盘的使用情况。下面的命令可以帮你监控硬盘使用情况。

# collectl -sd

waiting for 1 second sample...
#
#KBRead  Reads KBWrit Writes 
      0      0      0      0 
      0      0      0      0 
      0      0     92      7 
      0      0      0      0 
      0      0     36      3 
      0      0      0      0 
      0      0      0      0 
      0      0    100      7 
      0      0      0      0

你也可以使用“-sD”选项来采集单个硬盘的数据,不过你必须知道这就不会显示全部硬盘的信息。

# collectl -sD

waiting for 1 second sample...

# DISK STATISTICS (/sec)
#           Pct
#Name       KBytes Merged  IOs Size  KBytes Merged  IOs Size  RWSize  QLen  Wait SvcTim Util
sda              0      0    0    0      52     11    2   26      26     1     8      8    1
sda              0      0    0    0       0      0    0    0       0     0     0      0    0
sda              0      0    0    0      24      0    2   12      12     0     0      0    0
sda              0      0    0    0     152      0    4   38      38     0     0      0    0
sda              0      0    0    0     192     45    3   64      64     1    20     20    5
sda              0      0    0    0     204      0    2  102     102     0     0      0    0
sda              0      0    0    0       0      0    0    0       0     0     0      0    0
sda              0      0    0    0     116     26    3   39      38     1    16     16    4
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              0      0    0    0      32      5    3   11      10     1    16     16    4
sda              0      0    0    0       0      0    0    0       0     0     0      0    0

你也可以使用其它详细的子系统来采集详细的数据。下面是详细子系统的一个列表。

  • 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
  • N – Networks
  • T – 65 TCP counters only available in plot format
  • X – Interconnect
  • Y – Slabs (system object caches)
  • Z – Processes

collectl 工具中有许多选项,但是仅用一篇文章来介绍肯定是介绍不过来的。然而如果将它当作 topps 工具来使用还是值得一提的。

很容易将 collectl 当作 top 来使用,只要在 Linux 系统的终端运行下面的命令你就会看到和 top 工具类似的输出。

# collectl --top

# TOP PROCESSES sorted by time (counters are /sec) 13:11:02
# PID  User     PR  PPID THRD S   VSZ   RSS CP  SysT  UsrT Pct  AccuTime  RKB  WKB MajF MinF Command
^COuch!tecmint  20     1   40 R    1G  626M  0  0.01  0.14  15  28:48.24    0    0    0  109 /usr/lib/firefox/firefox 
 3403  tecmint  20     1   40 R    1G  626M  1  0.00  0.20  20  28:48.44    0    0    0  600 /usr/lib/firefox/firefox 
 5851  tecmint  20  4666    0 R   17M   13M  0  0.02  0.06   8  00:01.28    0    0    0    0 /usr/bin/perl 
 1682  root     20  1666    2 R  211M   55M  1  0.02  0.01   3  03:10.24    0    0    0   95 /usr/bin/X 
 3454  tecmint  20  3403    8 S  216M   45M  1  0.01  0.02   3  01:23.32    0    0    0    0 /usr/lib/firefox/plugin-container 
 4658  tecmint  20  4657    3 S  207M   17M  1  0.00  0.02   2  00:08.23    0    0    0  142 gnome-terminal 
 2890  tecmint  20  2571    3 S  340M   68M  0  0.00  0.01   1  01:19.95    0    0    0    0 compiz 
 3521  tecmint  20     1   24 S  710M  148M  1  0.01  0.00   1  01:47.84    0    0    0    0 skype 
    1  root     20     0    0 S    3M    2M  0  0.00  0.00   0  00:02.57    0    0    0    0 /sbin/init 
    2  root     20     0    0 S     0     0  1  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.60    0    0    0    0 ksoftirqd/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      0     2    0 S     0     0  0  0.00  0.00   0  00:00.00    0    0    0    0 kworker/u:0H 
    8  root     RT     2    0 S     0     0  0  0.00  0.00   0  00:04.42    0    0    0    0 migration/0 
    9  root     20     2    0 S     0     0  0  0.00  0.00   0  00:00.00    0    0    0    0 rcu_bh 
   10  root     20     2    0 R     0     0  0  0.00  0.00   0  00:02.22    0    0    0    0 rcu_sched 
   11  root     RT     2    0 S     0     0  0  0.00  0.00   0  00:00.05    0    0    0    0 watchdog/0 
   12  root     RT     2    0 S     0     0  1  0.00  0.00   0  00:00.07    0    0    0    0 watchdog/1 
   13  root     20     2    0 S     0     0  1  0.00  0.00   0  00:00.73    0    0    0    0 ksoftirqd/1 
   14  root     RT     2    0 S     0     0  1  0.00  0.00   0  00:01.96    0    0    0    0 migration/1 
   16  root      0     2    0 S     0     0  1  0.00  0.00   0  00:00.00    0    0    0    0 kworker/1:0H 
   17  root      0     2    0 S     0     0  1  0.00  0.00   0  00:00.00    0    0    0    0 cpuset

最后,当然不是说这不重要,我们在终端运行下面的命令就可以将 collectl 用作 ps 工具了。 你可以得到关于你系统进程的信息,这和在终端运行“ps”命令是一样的。

# collectl -c1 -sZ -i:1

waiting for 1 second sample...

### RECORD    1 >>> tecmint-vgn-z13gn <<< (1397979716.001) (Sun Apr 20 13:11:56 2014) ###

# PROCESS SUMMARY (counters are /sec)
# PID  User     PR  PPID THRD S   VSZ   RSS CP  SysT  UsrT Pct  AccuTime  RKB  WKB MajF MinF Command
    1  root     20     0    0 S    3M    2M  0  0.00  0.00   0  00:02.57    0    0    0    0 /sbin/init 
    2  root     20     0    0 S     0     0  1  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.60    0    0    0    0 ksoftirqd/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      0     2    0 S     0     0  0  0.00  0.00   0  00:00.00    0    0    0    0 kworker/u:0H 
    8  root     RT     2    0 S     0     0  0  0.00  0.00   0  00:04.42    0    0    0    0 migration/0 
    9  root     20     2    0 S     0     0  0  0.00  0.00   0  00:00.00    0    0    0    0 rcu_bh 
   10  root     20     2    0 S     0     0  0  0.00  0.00   0  00:02.24    0    0    0    0 rcu_sched 
   11  root     RT     2    0 S     0     0  0  0.00  0.00   0  00:00.05    0    0    0    0 watchdog/0 
   12  root     RT     2    0 S     0     0  1  0.00  0.00   0  00:00.07    0    0    0    0 watchdog/1 
   13  root     20     2    0 S     0     0  1  0.00  0.00   0  00:00.73    0    0    0    0 ksoftirqd/1 
   14  root     RT     2    0 S     0     0  1  0.00  0.00   0  00:01.96    0    0    0    0 migration/1 
   16  root      0     2    0 S     0     0  1  0.00  0.00   0  00:00.00    0    0    0    0 kworker/1:0H 
   17  root      0     2    0 S     0     0  1  0.00  0.00   0  00:00.00    0    0    0    0 cpuset 
   18  root      0     2    0 S     0     0  1  0.00  0.00   0  00:00.00    0    0    0    0 khelper 
   19  root     20     2    0 S     0     0  0  0.00  0.00   0  00:00.00    0    0    0    0 kdevtmpfs 
   20  root      0     2    0 S     0     0  0  0.00  0.00   0  00:00.00    0    0    0    0 netns 
   21  root     20     2    0 S     0     0  0  0.00  0.00   0  00:00.00    0    0    0    0 bdi-default 
   22  root      0     2    0 S     0     0  0  0.00  0.00   0  00:00.00    0    0    0    0 kintegrityd

我确信许多系统管理员将会喜欢这个工具并且在充分使用它后会感受到它的强大。如果你想增进你对 collectl 的了解,从而达到新的层面,你可以去参阅 collectl 的 man 手册并勤加练习。

在你的终端键入下面的命令开始阅读吧。

# man collectl

参考链接


via: http://www.tecmint.com/linux-performance-monitoring-with-collectl-tool/

译者:Linchenguang 校对:Caroline

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

已挂载的文件系统和设备

linux 中常用的检查已挂载的文件系统的是 mount 命令,不仅用于列出已挂载的设备,而且可以在需要的时候挂载和卸载。另外还有一个叫做 findmnt 的超赞命令,它可以用于快速查看挂载位置和选项。

安装findmnt

findmnt 命令来自 util-linux 软件包,默认安装在大多数发行版中,如 Ubuntu,Fedora,Debian

$ aptitude search util-linux
i   util-linux                     - Miscellaneous system utilities

$ yum info util-linux

使用findmnt

1. 列出文件系统

无任何选项运行 findmnt,只会以树形结构图的方式列出所有已挂载的文件系统。

$ findmnt

2. 以列表形式输出

输出可以格式化为一个简单的列表,而不是默认的树形结构,使用l(键盘u和o中间那个,不是数字1)选项使它方便阅读。

$ findmnt -l
TARGET                   SOURCE                              FSTYPE  OPTIONS
/sys                     sysfs                               sysfs   rw,nosu
/proc                    proc                                proc    rw,nosu
/dev                     udev                                devtmpf rw,rela
/dev/pts                 devpts                              devpts  rw,nosu
/run                     tmpfs                               tmpfs   rw,nosu
/                        /dev/disk/by-uuid/6fa5a72a-ba26-4588-a103-74bb6b33a763
                                                             ext4    rw,rela
/sys/fs/cgroup                                               tmpfs   rw,rela
/sys/fs/fuse/connections                                     fusectl rw,rela
/sys/kernel/debug                                            debugfs rw,rela
/sys/kernel/security                                         securit rw,rela
/run/lock                                                    tmpfs   rw,nosu
/run/shm                                                     tmpfs   rw,nosu
/run/user                                                    tmpfs   rw,nosu
/sys/fs/pstore                                               pstore  rw,rela
/media/13f35f59-f023-4d98-b06f-9dfaebefd6c1
                         /dev/sda8                           ext4    rw,nosu
/media/4668484A68483B47  /dev/sda5                           fuseblk rw,nosu
/proc/sys/fs/binfmt_misc binfmt_misc                         binfmt_ rw,nosu
/sys/fs/cgroup/systemd   systemd                             cgroup  rw,nosu
/run/user/1000/gvfs      gvfsd-fuse                          fuse.gv rw,nosu

3. df格式输出

Findmnt 可以用“-D”或“-df”选项创建一个 df 格式的输出报告空闲和已用磁盘空间。

$ findmnt -D
SOURCE                  FSTYPE       SIZE   USED   AVAIL USE% TARGET
devtmpfs                devtmpfs   994.2M      0  994.2M   0% /dev
selinuxfs               selinuxfs       0      0       0    - /sys/fs/selinux
tmpfs                   tmpfs     1001.5M    68K 1001.4M   0% /dev/shm
tmpfs                   tmpfs     1001.5M   724K 1000.8M   0% /run
tmpfs                   tmpfs     1001.5M      0 1001.5M   0% /sys/fs/cgroup
/dev/mapper/fedora-root ext4         6.5G   5.3G  811.6M  82% /
tmpfs                   tmpfs     1001.5M    60K 1001.5M   0% /tmp
/dev/sda1               ext4       476.2M 107.7M  339.6M  23% /boot

需要注意的是,以上选项 util-linux2.20 之前的版本都不可用,它正好是 Ubuntu13.10 上的最新版本

4. 从fstab读取文件系统

使用“-s”或“-fstab”选项,findmnt 将只从/etc/fstab文件和/etc/fstab.d目录读取文件系统。

$ findmnt -s
TARGET SOURCE                                    FSTYPE OPTIONS
/      /dev/mapper/fedora-root                   ext4   defaults
/boot  UUID=18cde604-1c65-4ec8-8a8d-385df50ada3b ext4   defaults
swap   /dev/mapper/fedora-swap                   swap   defaults

5. 通过类型过滤文件系统

Findmnt 可以打印出只基于类型的特定的文件系统,例如 ext4,多个系统类型可以指定一个逗号分隔。

$ findmnt -t ext4
TARGET  SOURCE                  FSTYPE OPTIONS
/       /dev/mapper/fedora-root ext4   rw,relatime,seclabel,data=ordered
└─/boot /dev/sda1               ext4   rw,relatime,seclabel,data=ordered

6. 原始输出

如果你喜欢原始风格的输出,那么使用“-r”或“--raw”选项。

$ findmnt --raw
TARGET SOURCE FSTYPE OPTIONS
/sys sysfs sysfs rw,nosuid,nodev,noexec,relatime
/proc proc proc rw,nosuid,nodev,noexec,relatime
/dev udev devtmpfs rw,relatime,size=4069060k,nr_inodes=1017265,mode=755
/dev/pts devpts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000
/run tmpfs tmpfs rw,nosuid,noexec,relatime,size=816716k,mode=755
/ /dev/disk/by-uuid/6fa5a72a-ba26-4588-a103-74bb6b33a763 ext4 rw,relatime,errors=remount-ro,data=ordered
/sys/fs/cgroup  tmpfs rw,relatime,size=4k,mode=755
/sys/fs/fuse/connections  fusectl rw,relatime
/sys/kernel/debug  debugfs rw,relatime
/sys/kernel/security  securityfs rw,relatime
/run/lock  tmpfs rw,nosuid,nodev,noexec,relatime,size=5120k
/run/shm  tmpfs rw,nosuid,nodev,relatime
/run/user  tmpfs rw,nosuid,nodev,noexec,relatime,size=102400k,mode=755
/sys/fs/pstore  pstore rw,relatime
/media/13f35f59-f023-4d98-b06f-9dfaebefd6c1 /dev/sda8 ext4 rw,nosuid,nodev,relatime,errors=remount-ro,data=ordered
/media/4668484A68483B47 /dev/sda5 fuseblk rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other,blksize=4096
/proc/sys/fs/binfmt_misc binfmt_misc binfmt_misc rw,nosuid,nodev,noexec,relatime
/sys/fs/cgroup/systemd systemd cgroup rw,nosuid,nodev,noexec,relatime,name=systemd
/run/user/1000/gvfs gvfsd-fuse fuse.gvfsd-fuse rw,nosuid,nodev,relatime,user_id=1000,group_id=1000

看起来非常整洁(译注,亲爱的读者你也这样觉得么?)。

7. 通过源设备查找

通过源设备查找文件系统,指定设备路径包括/不包括“-S”选项。

$ findmnt -S /dev/sda1
TARGET SOURCE    FSTYPE OPTIONS
/boot  /dev/sda1 ext4   rw,relatime,seclabel,data=ordered

8. 通过挂载点查找

通过挂载目录查找文件系统,指定目录包括/不包括“-T /--target”选项。

$ findmnt -T /
TARGET SOURCE                  FSTYPE OPTIONS
/      /dev/mapper/fedora-root ext4   rw,relatime,seclabel,data=ordered

$ findmnt -T /media/4668484A68483B47
TARGET                  SOURCE    FSTYPE  OPTIONS
/media/4668484A68483B47 /dev/sda5 fuseblk rw,nosuid,nodev,relatime,user_id=0

总结

这是一个 findmnt 命令的简要介绍。关于 findmnt 的更多选项可以在 man 手册页中找到。


via: http://www.binarytides.com/linux-findmnt-command/

译者:Vito 校对:Caroline

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