Linux系统日常管理--监控系统的状态+排查是否正被攻击

系统 Linux
工作中有时领导会说明天有业务,让你去检查下服务器,监控下系统的状态是不是正常的,这时候我们需要查看哪些信息呢?

[[262055]]

概述

工作中有时领导会说明天有业务,让你去检查下服务器,监控下系统的状态是不是正常的,这时候我们需要查看哪些信息呢?下面从负载、进程、内存、网络、网卡等几个方面来介绍下怎么去监控>

1. w查看当前系统的负载

linux系统日常管理--监控系统的状态+排查是否正被<span><span><span><i style=攻击" src="https://s3.51cto.com/oss/201904/11/d188525e772459418613695a19f2c4af.jpeg" _fcksavedurl="https://s3.51cto.com/oss/201904/11/d188525e772459418613695a19f2c4af.jpeg" _fcksavedurl="https://s3.51cto.com/oss/201904/11/d188525e772459418613695a19f2c4af.jpeg" width="645" height="85">

参数说明:

第一行从左面开始显示的信息依次为:时间,系统运行时间,登录用户数,平均负载。

第二行开始以及下面所有的行,告诉我们的信息是,当前登录的都有哪些用户,以及他们是从哪里登录的等等。其实,在这些信息当中,我们最应该关注的应该是第一行中的 ‘load average:’ 后面的三个数值。

  • 第一个数值表示1分钟内系统的平均负载值;
  • 第二个数值表示5分钟内系统的平均负载值;
  • 第三个数值表示15分钟系统的平均负载值。

这个值的意义是,单位时间段内CPU活动进程数。

当然这个值越大就说明你的服务器压力越大。一般情况下这个值只要不超过服务器的cpu数量就没有关系。

2. vmstat 监控系统的状态

linux系统日常管理--监控系统的状态+排查是否正被<span><span><span><i style=攻击" src="https://s5.51cto.com/oss/201904/11/4ce8de4337dfc1a8c2092af36ad636ba.jpeg" _fcksavedurl="https://s5.51cto.com/oss/201904/11/4ce8de4337dfc1a8c2092af36ad636ba.jpeg" _fcksavedurl="https://s5.51cto.com/oss/201904/11/4ce8de4337dfc1a8c2092af36ad636ba.jpeg" width="755" height="86">

上面讲的 w 查看的是系统整体上的负载,通过看那个数值可以知道当前系统有没有压力,但是具体是哪里(CPU, 内存,磁盘等)有压力就无法判断了。通过 vmstat 就可以知道具体是哪里有压力。vmstat命令打印的结果共分为6部分:procs, memory, swap, io, system, cpu. 请重点关注一下r b si so bi bo几列。

2.1、procs 显示进程相关信息

  • r :表示运行和等待cpu时间片的进程数,如果长期大于服务器cpu的个数,则说明cpu不够用了;
  • b :表示等待资源的进程数,比如等待I/O, 内存等,这列的值如果长时间大于1,则需要关注一下了;

2.2、memory 内存相关信息

  • swpd :表示切换到交换分区中的内存数量 ;
  • free :当前空闲的内存数量;buff :缓冲大小,(即将写入磁盘的);
  • cache :缓存大小,(从磁盘中读取的);

2.3、swap 内存交换情况

  • si :由交换区写入到内存的数据量;
  • so :由内存写入到交换区的数据量;

2.4、io 磁盘使用情况

  • bi :从块设备读取数据的量(读磁盘);
  • bo: 从块设备写入数据的量(写磁盘);

2.5、system 显示采集间隔内发生的中断次数

  • in :表示在某一时间间隔中观测到的每秒设备中断数;
  • cs :表示每秒产生的上下文切换次数;

2.6、CPU 显示cpu的使用状态

  • us :显示了用户下所花费 cpu 时间的百分比;
  • sy :显示系统花费cpu时间百分比;id :表示cpu处于空闲状态的时间百分比;
  • wa :表示I/O等待所占用cpu时间百分比;
  • st :表示被偷走的cpu所占百分比(一般都为0,不用关注);

以上所介绍的各个参数中,我一般主要关注r列,b列,和wa列,三列代表的含义在上边说得已经很清楚。IO部分的bi以及bo也是要经常参考的对象。如果磁盘io压力很大时,这两列的数值会比较高。另外当si, so两列的数值比较高,并且在不断变化时,说明内存不够了,内存中的数据频繁交换到交换分区中,这往往对系统性能影响极大。

注意:一般使用 vmstat 查看系统状态的时候,通常都是使用这样的形式来看的:

# vmstat 1 5

 

linux系统日常管理--监控系统的状态+排查是否正被<span><span><span><i style=攻击" src="https://s5.51cto.com/oss/201904/11/da6bd2e16bb3d19806f62a847619ec63.jpeg" _fcksavedurl="https://s5.51cto.com/oss/201904/11/da6bd2e16bb3d19806f62a847619ec63.jpeg" _fcksavedurl="https://s5.51cto.com/oss/201904/11/da6bd2e16bb3d19806f62a847619ec63.jpeg" width="745" height="164">

 

说明:每隔一秒钟打印一次状态,共打印5次。

3. top 显示进程所占系统资源

 

linux系统日常管理--监控系统的状态+排查是否正被<span><span><span><i style=攻击" src="https://s1.51cto.com/oss/201904/11/02ed9fab57efc705c72ed83c222a6f32.jpeg" _fcksavedurl="https://s1.51cto.com/oss/201904/11/02ed9fab57efc705c72ed83c222a6f32.jpeg" _fcksavedurl="https://s1.51cto.com/oss/201904/11/02ed9fab57efc705c72ed83c222a6f32.jpeg" width="640" height="537">

 

这个命令用于动态监控进程所占系统资源,每隔3秒变一次。这个命令的特点是把占用系统资源(CPU,内存,磁盘IO等)最高的进程放到最前面。top命令打印出了很多信息,包括系统负载(loadaverage)、进程数(Tasks)、cpu使用情况、内存使用情况以及交换分区使用情况。其实上面这些内容可以通过其他命令来查看,所以用top重点查看的还是下面的进程使用系统资源详细状况。这部分东西反映的东西还是比较多的。

PS:分享下我经常用的一个命令 top -bn1 它表示非动态打印系统资源使用情况,可以用在shell脚本中:

 

linux系统日常管理--监控系统的状态+排查是否正被<span><span><span><i style=攻击" src="https://s2.51cto.com/oss/201904/11/33d7fd474dd827c5a835bc353a63c00c.jpeg" _fcksavedurl="https://s2.51cto.com/oss/201904/11/33d7fd474dd827c5a835bc353a63c00c.jpeg" _fcksavedurl="https://s2.51cto.com/oss/201904/11/33d7fd474dd827c5a835bc353a63c00c.jpeg" width="640" height="576">

 

和 top 命令唯一的区别就是,它一次性全部把所有信息输出出来而非动态显示。

4. sar监控系统状态

sar 命令很强大,它可以监控系统所有资源状态,比如平均负载、网卡流量、磁盘状态、内存使用等等。它不同于其他系统状态监控工具的地方在于,它可以打印历史信息,可以显示当天从零点开始到当前时刻的系统状态信息。如果你系统没有安装这个命令,请使用 yum install -y sysstat (或者apt-get install -y sysstat)命令安装。初次使用sar命令会报错,那是因为sar工具还没有生成相应的数据库文件(时时监控就不会了,因为不用去查询那个库文件)。它的数据库文件在 “/var/log/sa/” 目录下,默认保存一个月。因为这个命令太过复杂,所以我只介绍几个。

 

linux系统日常管理--监控系统的状态+排查是否正被<span><span><span><i style=攻击" src="https://s5.51cto.com/oss/201904/11/3e0764675f9352d37e7d6f1889edbd9d.jpeg" _fcksavedurl="https://s5.51cto.com/oss/201904/11/3e0764675f9352d37e7d6f1889edbd9d.jpeg" _fcksavedurl="https://s5.51cto.com/oss/201904/11/3e0764675f9352d37e7d6f1889edbd9d.jpeg" width="813" height="159">

 

4.1、查看网卡流量 sar -n DEV

 

linux系统日常管理--监控系统的状态+排查是否正被<span><span><span><i style=攻击" src="https://s1.51cto.com/oss/201904/11/13e08c77d28c702977a9ab3f97975c62.jpeg" _fcksavedurl="https://s1.51cto.com/oss/201904/11/13e08c77d28c702977a9ab3f97975c62.jpeg" _fcksavedurl="https://s1.51cto.com/oss/201904/11/13e08c77d28c702977a9ab3f97975c62.jpeg" width="640" height="218">

 

参数说明: IFACE这列表示设备名称,rxpck/s 表示每秒进入收取的包的数量,txpck/s 表示每秒发送出去的包的数量,rxbyt/s 表示每秒收取的数据量(单位Byte),txbyt/s表示每秒发送的数据量。后面几列不需要关注。

如果有一天你所管理的服务器丢包非常严重,那么你就应该看一看这个网卡流量是否异常了,如果rxpck/s 那一列的数值大于4000,或者rxbyt/s那列大于5,000,000则很有可能是被攻击了,正常的服务器网卡流量不会高于这么多,除非是你自己在拷贝数据。

上面的命令是查看网卡流量历史的,如何时时查看网卡流量呢?

 

linux系统日常管理--监控系统的状态+排查是否正被<span><span><span><i style=攻击" src="https://s1.51cto.com/oss/201904/11/9777fe8f561649085a2df498d32796fb.jpeg" _fcksavedurl="https://s1.51cto.com/oss/201904/11/9777fe8f561649085a2df498d32796fb.jpeg" _fcksavedurl="https://s1.51cto.com/oss/201904/11/9777fe8f561649085a2df498d32796fb.jpeg" width="640" height="424">

 

4.2、查看历史负载 sar -q

 

linux系统日常管理--监控系统的状态+排查是否正被<span><span><span><i style=攻击" src="https://s4.51cto.com/oss/201904/11/b3a5113ef4a815c77f47e27ee64926f4.jpeg" _fcksavedurl="https://s4.51cto.com/oss/201904/11/b3a5113ef4a815c77f47e27ee64926f4.jpeg" _fcksavedurl="https://s4.51cto.com/oss/201904/11/b3a5113ef4a815c77f47e27ee64926f4.jpeg" width="794" height="158">

 

这个命令可以查看服务器在过去的某个时间的负载状况。

大家重点还是用来看是不是丢包和网络情况吧!

5. free查看内存使用状况

linux系统日常管理--监控系统的状态+排查是否正被<span><span><span><i style=攻击" src="https://s3.51cto.com/oss/201904/11/c1e23994a01cb0faa88866a0eca443ce.jpeg" _fcksavedurl="https://s3.51cto.com/oss/201904/11/c1e23994a01cb0faa88866a0eca443ce.jpeg" _fcksavedurl="https://s3.51cto.com/oss/201904/11/c1e23994a01cb0faa88866a0eca443ce.jpeg" width="674" height="119">

只需要敲一个 free 然后回车就可以当前系统的总内存大小以及使用内存的情况,还可以加-m 或者-g选项分别以M或G为单位打印内存使用状况:

linux系统日常管理--监控系统的状态+排查是否正被<span><span><span><i style=攻击" src="https://s3.51cto.com/oss/201904/11/7978780ffd08875a02eb8ce6a11460ba.jpeg" _fcksavedurl="https://s3.51cto.com/oss/201904/11/7978780ffd08875a02eb8ce6a11460ba.jpeg" _fcksavedurl="https://s3.51cto.com/oss/201904/11/7978780ffd08875a02eb8ce6a11460ba.jpeg" width="685" height="110">

我一般用free -m方式查看内存占用情况(兆为单位),而系统实际可用内存以及可用内存有如下几个加减法:

  • used=total-free 即 total=used+free
  • 实际内存占用:used-buffers-cached 即 total-free-buffers-cached
  • 实际可用内存:buffers+cached+free

6. ps 查看系统进程

监控进程的话这里介绍一个专门显示系统进程的命令,主要看下是不是有异常进程:

 

linux系统日常管理--监控系统的状态+排查是否正被<span><span><span><i style=攻击" src="https://s4.51cto.com/oss/201904/11/4bae2d4d7dd5b37d4dcdda67a0546553.jpeg" _fcksavedurl="https://s4.51cto.com/oss/201904/11/4bae2d4d7dd5b37d4dcdda67a0546553.jpeg" _fcksavedurl="https://s4.51cto.com/oss/201904/11/4bae2d4d7dd5b37d4dcdda67a0546553.jpeg" width="640" height="527">

 

参数说明:

PID :进程的id,这个id很有用,在linux中内核管理进程就得靠pid来识别和管理某一个程,比如我想终止某一个进程,则用 ‘kill 进程的pid 有时并不能杀掉,则需要加一个-9选项了 kill -9 进程pid

STAT :表示进程的状态,进程状态分为以下几种(不要求记住,但要了解)

D 不能中断的进程(通常为IO)

R 正在运行中的进程

S 已经中断的进程,通常情况下,系统中大部分进程都是这个状态

T 已经停止或者暂停的进程,如果我们正在运行一个命令,比如说 sleep 10 如果我们按一下ctrl -z 让他暂停,那么我们用ps查看就会显示T这个状态

W 这个好像是说,从内核2.6xx 以后,表示为没有足够的内存页分配

X 已经死掉的进程(这个好像从来不会出现)

Z 僵尸进程,杀不掉,打不死的垃圾进程,占系统一小点资源,不过没有关系。如果太多,就有问题了。一般不会出现。

< 高优先级进程

N 低优先级进程

L 在内存中被锁了内存分页

s 主进程

l 多线程进程

+ 代表在前台运行的进程

这个ps命令是我在工作中用的非常多的命令之一,必须掌握的。关于ps命令的使用,小编经常会连同管道符一起使用,用来查看某个进程或者它的数量。

 

linux系统日常管理--监控系统的状态+排查是否正被<span><span><span><i style=攻击" src="https://s1.51cto.com/oss/201904/11/7892044de6fe20319631a5166a84f161.jpeg" _fcksavedurl="https://s1.51cto.com/oss/201904/11/7892044de6fe20319631a5166a84f161.jpeg" _fcksavedurl="https://s1.51cto.com/oss/201904/11/7892044de6fe20319631a5166a84f161.jpeg" width="836" height="89">

 

7. netstat 查看网络状况

 

linux系统日常管理--监控系统的状态+排查是否正被<span><span><span><i style=攻击" src="https://s2.51cto.com/oss/201904/11/d6c1425c067a0afbb989242f1a10fd41.jpeg" _fcksavedurl="https://s2.51cto.com/oss/201904/11/d6c1425c067a0afbb989242f1a10fd41.jpeg" _fcksavedurl="https://s2.51cto.com/oss/201904/11/d6c1425c067a0afbb989242f1a10fd41.jpeg" width="640" height="422">

 

netstat命令用来打印网络连接状况、系统所开放端口、路由表等信息。小编最常用的关于netstat的命令就是这个 netstat -nlp (打印当前系统启动哪些端口)以及 netstat -an (打印网络连接状况)这两个命令非常有用,请一定要记住。

 

linux系统日常管理--监控系统的状态+排查是否正被<span><span><span><i style=攻击" src="https://s1.51cto.com/oss/201904/11/e24d27e7f7a7731baca474eace45e5d1.jpeg" _fcksavedurl="https://s1.51cto.com/oss/201904/11/e24d27e7f7a7731baca474eace45e5d1.jpeg" _fcksavedurl="https://s1.51cto.com/oss/201904/11/e24d27e7f7a7731baca474eace45e5d1.jpeg" width="640" height="522">

 

 

如果你所管理的服务器是一台提供web服务(80端口)的服务器,那么你就可以使用 netstat -an |grep 80 查看当前连接web服务的有哪些IP了,再进一步可以netstat -an|grep 80|wc -l来查看大概有多少个连接。

8、抓包工具tcpdump

有时候,也许你会有这样的需求,想监控一下某个网卡上都有哪些数据包,尤其是当你初步判定你的服务器上有流量攻击。这时,使用抓包工具来抓一下数据包,就可以知道有哪些IP在攻击你了。

 

 

linux系统日常管理--监控系统的状态+排查是否正被<span><span><span><i style=攻击" src="https://s3.51cto.com/oss/201904/11/4aaa04b6c5dd8a81059ece97b6d0b1ef.jpeg" _fcksavedurl="https://s3.51cto.com/oss/201904/11/4aaa04b6c5dd8a81059ece97b6d0b1ef.jpeg" _fcksavedurl="https://s3.51cto.com/oss/201904/11/4aaa04b6c5dd8a81059ece97b6d0b1ef.jpeg" width="640" height="395">

 

 

 

如果没有tcpdump 这个命令,需要用 yum install -y tcpdump 命令去安装一下。上例中第三列和第四列显示的信息为哪一个IP+port在连接哪一个IP+port,后面的信息是该数据包的相关信息,如果不懂也没有关系,毕竟我们不是专门搞网络的,而这里需要关注的只是第三列以及第四列。-i 选项后面跟设备名称,如果你想抓eth1网卡的包,后面则要跟eth1.至于-nn选项的作用是让第三列和第四列显示成IP+端口号的形式,如果不加-nn则显示的是主机名+服务名称。

 

责任编辑:武晓燕 来源: 今日头条
相关推荐

2010-04-23 10:20:00

Aix系统

2022-04-14 07:49:03

nmon监控Linux

2021-11-22 10:40:35

Linux脚本内存

2010-05-26 12:57:59

linux 系统监控

2022-06-20 09:01:50

SwiftUI状态管理系统

2021-05-20 10:02:50

系统Redis技巧

2019-03-29 10:22:08

Linux系统故障技巧

2013-03-27 10:32:22

2011-03-21 15:42:14

LinuxNagios

2010-05-19 11:15:24

Linux系统监控工具

2014-05-09 14:33:35

2021-08-24 16:20:38

Linux终端

2014-04-11 11:13:15

CollectlLinux系统监控

2013-08-27 14:40:03

系统监控

2011-08-25 15:23:58

Linux系统监控命令

2009-06-05 11:11:11

2009-04-28 00:44:03

2013-04-10 13:52:23

2024-01-05 09:23:09

Linux系统内存内存指标

2009-10-27 09:26:26

linux系统监控命令
点赞
收藏

51CTO技术栈公众号