天天看点

入门系列之使用Sysdig监视您的Ubuntu 16.04系统

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~

本文由乌鸦 发表于云+社区专栏

Sysdig是一个全面的开源系统活动监控,捕获和分析应用程序。它具有强大的过滤语言和可自定义的输出,以及可以使用称为chisels 的Lua脚本扩展的核心功能。

应用程序通过访问内核来工作, 内核允许它查看每个系统调用以及通过内核传递的所有信息。这也使其成为监视和分析系统上运行的应用程序容器生成的系统活动和事件的出色工具。

核心Sysdig应用程序监视其安装的服务器。但是,该项目背后的公司提供了一个名为Sysdig Cloud的托管版本,可以远程监控任意数量的服务器。

独立应用程序可在大多数Linux发行版上使用,但在Windows和macOS上也可用,功能更为有限。除了<code>sysdig</code>命令行工具,Sysdig还带有一个<code>csysdig</code>带有类似选项的交互式UI 。

在本教程中,您将安装并使用Sysdig来监视Ubuntu 16.04服务器。您将流式传输实时事件,将事件保存到文件,过滤结果以及浏览<code>csysdig</code>交互式UI。

要完成本教程,您需要:

一台Ubuntu 16.04 的服务器,已经设置好一个可以使用<code>sudo</code>命令的非<code>root</code>的账户。

在Ubuntu存储库中有一个Sysdig包,但它通常是当前版本的一两个版本。例如,在发布时,使用Ubuntu的软件包管理器安装Sysdig将为您提供Sysdig 0.8.0。但是,您可以使用项目开发页面中的官方脚本来安装它,这是推荐的安装方法。这是我们将使用的方法。

但首先,更新包数据库以确保您拥有最新的可用包列表:

现在<code>curl</code>使用以下命令下载Sysdig的安装脚本:

这会将安装脚本下载<code>install-sysdig</code>到当前文件夹的文件中。您需要使用提升的权限执行此脚本,并且运行从Internet下载的脚本是危险的。在执行脚本之前,通过在文本编辑器中打开它或使用<code>less</code>命令在屏幕上显示内容来审核其内容:

一旦您熟悉脚本将运行的命令,请使用以下命令执行脚本:

命令将安装所有依赖项,包括内核头文件和模块。安装的输出类似于以下内容:

现在您已经安装了Sysdig,让我们看一下使用它的一些方法。

在本节中,您将使用 <code>sysdig</code>命令查看Ubuntu 16.04服务器上的某些事件。 <code>sysdig</code>命令需要root权限才能运行,并且它需要任意数量的选项和过滤器。运行 命令最简单的方法是不带任何参数。这将为您提供每两秒刷新一次的系统数据的实时视图:

但是,正如您在运行命令时所看到的那样,分析正在写入屏幕的数据可能很困难,因为它会持续流动,并且您的服务器上发生了很多事件。按下<code>CTRL+C</code>停止<code>sysdig</code>。

在我们使用一些选项再次运行命令之前,让我们通过查看命令的示例输出来熟悉输出:

输出的列是:

以下是每列的含义:

evt.num是增量事件编号。

evt.outputtime是事件时间戳,您可以自定义。

evt.cpu是捕获事件的CPU编号。在上面的输出中,evt.cpu为0,这是服务器的第一个CPU。

proc.name是生成事件的进程的名称。

thread.tid是生成事件的TID,它对应于单线程进程的PID。

evt.dir是事件方向。您将看到&gt;用于输入事件和&lt;用于退出事件。

evt.type是事件的名称,例如'open','read','write'等。

evt.info是事件参数列表。在系统调用的情况下,这些往往对应于系统调用参数,但情况并非总是如此:出于简单性或性能原因,排除了一些系统调用参数。

像上一个<code>sysdig</code>命令一样,运行几乎没有任何价值,因为流入的信息太多了。但是您可以使用以下语法对命令应用选项和过滤器:

您可以使用以下方法查看可用过滤器的完整列表:

有一个广泛的过滤器列表,涵盖了几个类或类别。以下是一些课程:

fd:过滤文件描述符(FD)信息,如FD编号和FD名称。

process:过滤进程信息,例如生成事件的进程的id和名称。

evt:过滤事件信息,如事件编号和时间。

user:过滤用户信息,如用户ID,用户名,用户主目录或登录shell。

group:过滤组信息,例如组ID和名称。

syslog:过滤syslog信息,如设施和严重性。

fdlist:过滤轮询事件的文件描述符。

由于本教程中的每个过滤器都不实用,所以让我们尝试一下,从syslog类中的syslog.severity.str过滤器开始,它允许您查看以特定严重性级别发送到syslog的消息。此命令显示在“信息”级别发送到syslog的消息:

注意:根据服务器上的活动级别,在输入此命令后可能看不到任何输出,或者在看到任何输出之前可能需要很长时间。要强制发出问题,请打开另一个终端模拟器并执行将向syslog生成消息的操作。例如,执行包更新,升级系统或安装任何包。

按下<code>CTRL+C</code>即可终止命令。

输出应 很容易解释,看起来应 是这样的:

您还可以过滤单个流程。例如,从<code>nano</code>上查看事件,请执行以下命令:

由于此命令文件管理器已启用<code>nano</code>,您必须使用<code>nano</code>文本编辑器打开文件以查看任何输出。打开另一个终端编辑器,连接到您的服务器,然后使用<code>nano</code>打开文本文件。写几个字符并保存文件。然后返回原始终端。

然后,您将看到类似于此的一些输出:

再次,通过按下<code>CTRL+C</code>来终止命令。

获取系统事件的实时视图<code>sysdig</code>并不总是使用它的最佳方法。幸运的是,还有另一种方法 - 将事件捕获到文件中以便稍后进行分析。我们来看看如何。

使用系统事件捕获文件可以<code>sysdig</code>让您在以后分析这些事件。为了节省系统事件记录到文件中,传递<code>sysdig</code>的<code>-w</code>选项,并指定目标文件名,如下所示:

Sysdig将继续将生成的事件保存到目标文件,直到您按下为止<code>CTRL+C</code>。随着时间的推移, 文件可能会变得非常大。但是,使用<code>-n</code>选项,您可以指定希望Sysdig捕获的事件数。捕获目标事件数后,它将退出。例如,要将300个事件保存到文件,请输入:

虽然您可以使用Sysdig将指定数量的事件捕获到文件中,但更好的方法是使用-C选项将捕获分解为特定大小的较小文件。为了不淹没本地存储,您可以指示Sysdig只保留一些保存的文件。换句话说,Sysdig支持在一个命令中将事件捕获到具有文件轮换的日志。

例如,要将事件连续保存到大小不超过1 MB的文件中,并且只保留最后五个文件(这是-W选项的作用),请执行以下命令:

列出使用的文件<code>ls -l sysdig-trace*</code>,你会看到与此类似的输出,有五个日志文件:

与实时捕获一样,您可以对已保存的事件应用过滤器。例如,要保存进程生成的200个事件<code>nano</code>,请输入以下命令:

然后,在连接到服务器的另一个终端中,打开文件<code>nano</code>并通过输入文本或保存文件生成一些事件。将捕获事件<code>sysdig-trace-nano.scap</code>直到<code>sysdig</code>记录200个事件。

您将如何捕获服务器上生成的所有写入事件?你会像这样应用过滤器:

片刻之后按下<code>CTRL+C</code>退出。在将系统活动保存到文件时,您可以做更多的事情<code>sysdig</code>,但是这些示例应 让您非常清楚如何去做。我们来看看如何分析这些文件。

使用Sysdig从文件中读取捕获的数据就像将-r开关传递给<code>sysdig</code>命令一样简单,如下所示:

这会将文件的整个内容转储到屏幕上,这不是最好的方法,特别是如果文件很大的话。幸运的是,您可以在读取写入时应用的文件时应用相同的过滤器。

例如,要读取<code>sysdig-trace-nano.scap</code>您创建的跟踪文件,但只查看特定类型的事件(如写入事件),请输入以下命令:

输出应类似于:

让我们看一下您在上一节中保存的文件的内容:<code>sysdig-write-events.scap</code>文件。我们知道保存到文件中的所有事件都是写事件,所以让我们查看内容:

这是部分输出。如果捕获事件时服务器上有任何SSH活动,您将看到类似的内容:

请注意,前面输出中的所有行都包含11.11.11.11:51282-&gt;22.22.22.22:ssh。这些是从客户端的外部IP地址<code>11.11.11.11</code>到服务器<code>22.22.22.22</code>的IP地址的事件。这些事件发生在与服务器的SSH连接上,因此需要这些事件。但是有没有其他SSH写事件不是来自这个已知的客户端IP地址?这很容易找到。

您可以使用Sysdig的许多比较运算符。你看到的第一个是=。其他的是!=,&gt;,&gt; =,&lt;和&lt;=。在以下命令中,fd.rip过滤远程IP地址。我们将使用!=比较运算符来查找来自以下IP地址的事件:

以下输出中显示了部分输出, 输出显示存在来自客户端IP地址以外的IP地址的写入事件:

进一步调查还显示,流氓IP地址<code>33.33.33.33</code>属于中国的一台机器。这是值得担心的事情!这只是一个例子,说明如何使用Sysdig密切注意服务器上的流量。

让我们看一下使用一些额外的脚本来分析事件流。

在Sysdig的说法中,chisels是可以使用的Lua脚本,用于分析Sysdig事件流以执行有用的操作。每个Sysdig安装都附带有近50个脚本,您可以使用以下命令查看系统上可用的chisels列表:

一些更有趣的chisels包括:

netstat:列出(并可选择过滤)网络连接。

shellshock_detect:打印shellshock攻击

spy_users:显示交互式用户活动。

list login shells:列出登录shell ID。

spy_ip:显示使用给定IP地址交换的数据。

spy_port:显示使用给定IP端口号交换的数据。

spy_file:回显任何进程对所有文件的读取或写入。(可选)您可以提供文件名,以仅拦截对文件的读取或写入。

httptop:显示最热门的HTTP请求

有关chisels的更详细描述(包括任何相关参数),请使用<code>-i</code>标志,然后使用chisels的名称。因此,例如,要查看有关<code>netstat</code>chisels的更多信息,请输入:

既然您已经了解了使用 <code>netstat</code>chisels所需要知道的一切,请通过运行以下方式来监控系统:

输出应类似于以下内容:

如果您在“ 客户端地址”列中看到来自您的IP地址以外的ESTABLISHED SSH连接,那么这应 是一个红色标记,您应 进行更深入的探测。

一个更有趣的chisels<code>spy_users</code>,它允许您查看系统上的交互式用户活动。

退出此命令:

然后,打开第二个终端并连接到您的服务器。在第二个终端中执行一些命令,然后返回到终端运行<code>sysdig</code>。您在第一个终端中输入的命令将在您执行<code>sysdig -c spy_users</code>命令的终端上回显。

接下来,让我们探索一个图形工具Csysdig。

Csysdig是Sysdig附带的另一个实用程序。它具有交互式用户界面,提供与命令行相同的功能<code>sysdig</code>。这就像<code>top</code>,<code>htop</code>和<code>strace</code>,但功能丰富的多。

与<code>sysdig</code>命令一样, <code>csysdig</code>命令可以执行实时监视,并可以将事件捕获到文件中以供以后分析。但是<code>csysdig</code>,您可以每两秒刷新一次更实用的系统数据实时视图。要查看示例,请输入以下命令:

这将打开如下图所示的界面, 界面显示受监控主机上的所有用户和应用程序生成的事件数据。

入门系列之使用Sysdig监视您的Ubuntu 16.04系统

Csysdig的主界面

在界面的底部有几个按钮,您可以使用它们来访问程序的不同方面。最值得注意的是“ 视图”按钮,它类似于收集的指标类别<code>csysdig</code>。开箱即用的视图有29个,包括进程,系统调用,线程,容器,进程CPU,页面错误,文件和目录。

当您在<code>csysdig</code>没有参数的情况下启动时 ,您将从“ 进程”视图中看到实时事件。通过单击“ 视图”按钮或<code>F2</code>按键,您将看到可用视图列表,包括列的说明。您还可以通过<code>F7</code>按键或单击“ 图例”按钮来查看列的说明。<code>csysdig</code>通过<code>F1</code>按键或单击“ 帮助”按钮,可以访问应用程序本身()的摘要手册页。

下图显示了应用程序的Views界面的列表。

入门系列之使用Sysdig监视您的Ubuntu 16.04系统

Csysdig视图窗口

注意:对于每个按钮,按钮的左侧都有相应的键盘快捷键或热键。按两次快捷键将返回上一个窗口。按下<code>ESC</code>键将获得相同的结果。

虽然你可以在<code>csysdig</code>没有任何选项和参数的情况下运行,但命令的语法与<code>sysdig</code>s一样,通常采用以下形式:

最常见的选项是-d,用于修改更新之间的延迟(以毫秒为单位)。例如,要查看<code>csysdig</code>每10秒更新一次的输出,而不是默认值2秒,请输入:

您可以使用-E选项从视图中排除用户和组信息:

这可以使<code>csysdig</code>启动更快,但在大多数情况下速度增益可以忽略不计。

要指示<code>csysdig</code>在一定数量的事件后停止捕获,请使用-n选项。应用程序将在达到 数字后退出。被捕获事件的数量必须在五个数字中; 否则你甚至不会看到<code>csysdig</code>UI:

分析跟踪文件,通过<code>csysdig</code>了-r选项,如下所示:

您可以使用与之相同的过滤器<code>sysdig</code>来限制<code>csysdig</code>输出。因此,例如,您可以通过<code>csysdig</code>使用以下命令启动用户来过滤用户输出,而不是查看系统上所有用户生成的事件数据, 命令将显示仅由root用户生成的事件数据:

输出应类似于下图中显示的输出,但输出将反映服务器上正在运行的内容:

入门系列之使用Sysdig监视您的Ubuntu 16.04系统

root生成的Csysdig数据

要查看生成事件的可执行文件的输出,请将过滤器的名称传递给不带路径的二进制文件。以下示例将显示 <code>nano</code>命令生成的所有事件。换句话说,它将显示文本编辑器所在的所有打开文件<code>nano</code>:

有几十个可用的过滤器,您可以使用以下命令查看:

您会注意到,这与您用于查看<code>sysdig</code>命令可用的过滤器的选项相同。所以<code>sysdig</code>,<code>csysdig</code>几乎是一样的。主要区别在于<code>csysdig</code>鼠标友好的交互式UI。要<code>csysdig</code>随时退出,请按<code>Q</code>键盘上的键。

Sysdig可帮助您监控服务器并对其进行故障排除。它将使您深入了解受监视主机上的所有系统活动,包括应用程序容器生成的活动。虽然本教程未特别涵盖容器,但监视容器生成的系统活动的能力使Sysdig与类似的应用程序区别开来。项目主页上提供了更多信息。

Sysdig的chisels是核心Sysdig功能的强大扩展。它们是用Lua编写的,所以你总是可以自定义它们或者从头开始编写它们。要了解有关制作chisels的更多信息,请访问 项目的官方chisels 页面。

如果您对其他监视系统的工具,例如:使用Ubuntu 16.04上的osquery监视系统安全性,可以访问腾讯云访问更多的教程。

参考文献:《How To Monitor Your Ubuntu 16.04 System with Sysdig》
在Ubuntu上安装cassandra? 如何保护PostgreSQL免受攻击 Ubuntu 16.04上如何使用Alertmanager和Blackbox导出程序监视Web服务器 MariaDB Galera集群入门教程

此文已由作者授权腾讯云+社区发布,原文链接:https://cloud.tencent.com/developer/article/1172074?fromSource=waitui

欢迎大家前往腾讯云+社区或关注云加社区微信公众号(QcloudCommunity),第一时间获取更多海量技术实践干货哦~

海量技术实践经验,尽在云加社区!

https://cloud.tencent.com/developer

继续阅读