欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~
介绍
Sysdig是一个全面的开源系统活动监控,捕获和分析应用程序。它具有强大的过滤语言和可自定义的输出,以及可以使用称为chisels 的Lua脚本扩展的核心功能。
应用程序通过访问内核来工作, 内核允许它查看每个系统调用以及通过内核传递的所有信息。这也使其成为监视和分析系统上运行的应用程序容器生成的系统活动和事件的出色工具。
核心Sysdig应用程序监视其安装的服务器。但是,该项目背后的公司提供了一个名为Sysdig Cloud的托管版本,可以远程监控任意数量的服务器。
独立应用程序可在大多数Linux发行版上使用,但在Windows和macOS上也可用,功能更为有限。除了sysdig命令行工具,Sysdig还带有一个csysdig带有类似选项的交互式UI 。
在本教程中,您将安装并使用Sysdig来监视Ubuntu 16.04服务器。您将流式传输实时事件,将事件保存到文件,过滤结果以及浏览csysdig交互式UI。
准备
要完成本教程,您需要:
一台Ubuntu 16.04 的服务器,已经设置好一个可以使用sudo命令的非root的账户。
第1步 - 使用官方脚本安装Sysdig
在Ubuntu存储库中有一个Sysdig包,但它通常是当前版本的一两个版本。例如,在发布时,使用Ubuntu的软件包管理器安装Sysdig将为您提供Sysdig 0.8.0。但是,您可以使用项目开发页面中的官方脚本来安装它,这是推荐的安装方法。这是我们将使用的方法。
但首先,更新包数据库以确保您拥有最新的可用包列表:
$ sudo apt-get update
现在curl使用以下命令下载Sysdig的安装脚本:
$ curl https://s3.amazonaws.com/download.draios.com/stable/install-sysdig -o install-sysdig
这会将安装脚本下载install-sysdig到当前文件夹的文件中。您需要使用提升的权限执行此脚本,并且运行从Internet下载的脚本是危险的。在执行脚本之前,通过在文本编辑器中打开它或使用less命令在屏幕上显示内容来审核其内容:
$ less ./install-sysdig
一旦您熟悉脚本将运行的命令,请使用以下命令执行脚本:
$ cat ./install-sysdig | sudo bash
命令将安装所有依赖项,包括内核头文件和模块。安装的输出类似于以下内容:
* Detecting operating system
* Installing Sysdig public key
OK
* Installing sysdig repository
* Installing kernel headers
* Installing sysdig
...
sysdig-probe:
Running module version sanity check.
- Original module
- No original module exists within this kernel
- Installation
- Installing to /lib/modules/4.4.0-59-generic/updates/dkms/
depmod....
DKMS: install completed.
Processing triggers for libc-bin (2.23-0ubuntu5) ...
现在您已经安装了Sysdig,让我们看一下使用它的一些方法。
第2步 - 实时监控您的系统
在本节中,您将使用 sysdig命令查看Ubuntu 16.04服务器上的某些事件。 sysdig命令需要root权限才能运行,并且它需要任意数量的选项和过滤器。运行 命令最简单的方法是不带任何参数。这将为您提供每两秒刷新一次的系统数据的实时视图:
$ sudo sysdig
但是,正如您在运行命令时所看到的那样,分析正在写入屏幕的数据可能很困难,因为它会持续流动,并且您的服务器上发生了很多事件。按下CTRL+C停止sysdig。
在我们使用一些选项再次运行命令之前,让我们通过查看命令的示例输出来熟悉输出:
253566 11:16:42.808339958 0 sshd (12392) > rt_sigprocmask
253567 11:16:42.808340777 0 sshd (12392) < rt_sigprocmask
253568 11:16:42.808341072 0 sshd (12392) > rt_sigprocmask
253569 11:16:42.808341377 0 sshd (12392) < rt_sigprocmask
253570 11:16:42.808342432 0 sshd (12392) > clock_gettime
253571 11:16:42.808343127 0 sshd (12392) < clock_gettime
253572 11:16:42.808344269 0 sshd (12392) > read fd=10(/dev/ptmx) size=16384
253573 11:16:42.808346955 0 sshd (12392) < read res=2 data=..
输出的列是:
%evt.num %evt.outputtime %evt.cpu %proc.name (%thread.tid) %evt.dir %evt.type %evt.info
以下是每列的含义:
evt.num是增量事件编号。
evt.outputtime是事件时间戳,您可以自定义。
evt.cpu是捕获事件的CPU编号。在上面的输出中,evt.cpu为0,这是服务器的第一个CPU。
proc.name是生成事件的进程的名称。
thread.tid是生成事件的TID,它对应于单线程进程的PID。
evt.dir是事件方向。您将看到>用于输入事件和
evt.type是事件的名称,例如'open','read','write'等。
evt.info是事件参数列表。在系统调用的情况下,这些往往对应于系统调用参数,但情况并非总是如此:出于简单性或性能原因,排除了一些系统调用参数。
像上一个sysdig命令一样,运行几乎没有任何价值,因为流入的信息太多了。但是您可以使用以下语法对命令应用选项和过滤器:
$ sudo sysdig [option] [filter]
您可以使用以下方法查看可用过滤