监控服务器非常重要。无论是在部署或调试生产服务器时,及时在测试环境中发现问题。这些需要管理员访问服务器上的内容,以便能够辨识出错的地方。
在更早的时候,监视服务器是一个非常困难的过程,依赖于人来靠手工检查问题,包括有哪些人登录到服务器,打开日志,运行单个命令,查看上述任何一个的输出是否产生预期的结果。幸运的是,工具发展到今天,让这个过程变得简便和集中化,但我们仍然需要弄清楚需要收集哪些服务器的信息。
虽然可以直接潜入并检查服务器的每次故障,但为了自己的时间价值与故障排除能力,退后一步制定希望获得的信息。以下是一些较重要的汇总:
了解应用程序
在设置应用程序时,应该确保对所期望的行为有一个非常好的了解。具体来说,当内存,CPU,磁盘或其他系统资源变少时,你应该非常清楚应用程序的执行方式。它会变慢吗?它会变得迟钝吗?它会不加载吗?这些行为的阈值是什么?“blip”(如CPU峰值)和真正的问题之间有什么区别?
这些都不是容易回答的问题,但是我们需要知道期望什么以及防止过敏的警报系统。
迎接变化的需求
随着时间的推移,我们的需求会发生变化,可能会实现新功能,删除无用功能或其他可能会改变应用程序预期行为的转换等。当发生这种情况时,您需要重新评估应用程序在服务器上运行的方式,以便了解使用的资源以及在这些资源减少时可以预测的处理和行为。
贴着地面跑
当我们监控*nix服务器时,通常会查看以下之内容:
CPU使用率:检查CPU使用情况,查看正在处理器使用的百分比。根据具体需求,你可能需要了解CPU总体使用情况以及按流程或用户划分的细节,查看流程和用户的额外颗粒度,在问题出现时更容易进行故障排除。
内存使用情况:总共用了多少内存以及单个进程和用户进和。根据需要,可以按百分比和/或GB/MB监控内存之使用情况。
磁盘使用情况:使用了多少磁盘空间。与内存使用情况类似,可以按百分比或空间来监控磁盘使用情况。还应该跟踪inode的使用情况,Inode用于存储*ix系统中文件系统对象的信息。耗尽inode不常见,但还是要检查一下,如果你碰巧知道服务器上运行的应用程序往往有很多小文件,就像一些CI/CD工具那样。
页面错误:简单地说,页面是一块虚拟内存。如果您正在监视由云服务提供商(例如AWS,GCP,Azure,DigitalOcean或Linode,Aliyun,TengCent Cloud)托管的服务器,那么服务器正在使用分页系统将服务器实例的虚拟内存映射到物理内存来托管它的硬件。页面错误本质上是当操作系统尝试从物理内存向虚拟内存加载某些内容时,不存在与该对象关联的物理内存地址时发生的情况。虽然操作系统有一个内置的页面错误处理程序来管理少量的页面错误并不少见,但是如果你经常看到页面错误,该是开始寻找更深层次问题的时候了。
正常运行时间:对于虚拟服务器,正常运行时间是服务器运行的时间。监控主要是为了查看服务器是否经历了意外重启。
网络活动:监控网络流量需要哪些精确度,取决于服务器托管的内容。在通常情况下,即使运行静态站点但未主动访问的服务器也会看到运行在其上的其他进程的I/O,服务器网络不应该降到0。
Swap使用:Swap交换空间是保留的磁盘空间,是在可用内存不足时补充内存使用量。你的系统如何积极地使用交换空间取决于如何在1(低)到100(高)的范围内配置它的“swappiness”。如果要在系统内出现内存问题时允许进行一些交换而不完全禁用它(为0),使用10或更小的值是一个常态。当查看“交换空间使用情况”时,我们通常会看交换空间使用情况是否显著上升。如果真是如此,需要查内存和其他资源,看看自己是否可以挖掘到原因。
使用命令行
经常在管理服务器时,除了使用的任何监视警报工具之外,更多时候要使用命令行。考虑到这一点,我们总结出一些命令行工具,可以使用这些来查看刚才说的一些信息。需要注意的是,并非所有这些命令都安装在所有Linux发行版中,你可能需要使用软件包安装程序或源代码来安装,具体取决于你用的Linux发行版本。
top - 一个很方便的工具,允许我们查看正常运行时间,内存使用情况,CPU使用情况以及交换空间等内容。我们还可以查看其它信息:包括其它正在运行的进程,用于运行该进程的命令等。通过按q键退出top命令行。
htop - htop 是Linux系统中的一个互动的进程查看器,一个文本模式的应用程序(在控制台或者X终端中),需要ncurses。与传统的top相比,htop更加人性化。它可让用户交互式操作,支持颜色主题,可横向或纵向滚动浏览进程列表,并支持鼠标操作。
与top相比,htop有如下的优点:
可以横向或纵向滚动浏览进程列表,以便看到所有的进程和完整的命令行。
在启动上,比top 更快。
杀进程时不需要输入进程号。
htop 支持鼠标操作。
top 有那么一点老了。。。与top类似,可以通过按q键退出。
tcpdump - 这是一个监控网络数据包的强大工具。例如,我们可以使用它来侦听服务器实例上的所有网络流量,或限制为仅侦听来自特定源和/或目标端口的流量。可以使用ctrl + C退出。
netstat - 允许我们查看服务器上的网络连接的内容和方式,包括将表信息路由为TCP/UDP连接及其进程。后者的常见组合是-tlnpu。如果你需要,还可以使用-c运行命令以进行连续监控。
nmon - a.k.a. Nigel的监控器,允许我们查看有关服务器的更详细的信息。与htop命令类似,nmon也是交互式的,因此需要通过一系列菜单来查看有关CPU处理器,磁盘等的信息。退出时,请使用q或ctrl + C。
uptime - 查看服务器运行时间的简便方法。如果你希望查看持续时间的正常运行时间而不是服务器启动的时间戳,请使用 -pretty参数。
/proc/meminfo - 可以使用自己喜欢的编辑器来查看此文件,能够深入了解当前的活动/可用内存的使用情况。
free - 要查看没有进程信息的空闲与已用内存,请使用free命令。默认情况下,这些值以字节为单位,如果你希望以兆字节或千兆字节的形式查看输出,建议附加-h 参数。
df - 允许管理员查看系统上安装的所有卷的总磁盘使用情况。默认为1K块大小,建议附加-h以查看兆字节和/或千兆字节的输出结果 df -h。
du - 以指定目录中的所有对象(文件,目录)递归打印文件系统对象的磁盘使用情况。要注意:如果没有指定目录,则使用root根目录(/),结果很快超过你的终端!如果只想查看目录中项目使用了多少磁盘,请使用-sh。
再提示大家留意,根据不同的Linux发行版,你可能需要在软件包管理器中手动安装一些工具。