像查询数据库一样查询你的 Linux 操作系统信息

使用数据库查询操作轻松获取系统信息。

使用数据库查询操作轻松获取系统信息。

像查询数据库一样查询你的 Linux 操作系统信息

Linux 提供了很多帮助用户收集主机操作系统信息的命令:列出文件或者目录的属性信息;查询安装的软件包、正在执行的命令、开机时启动的服务;或者了解系统的硬件。

每个命令使用自己的输出格式列出系统的信息。你需要使用 grepsedawk 这样的工具过滤命令输出的结果,以便找到特定的信息。此外,很多这样的信息会频繁变动,导致系统状态的改变。

将所有的信息格式化为一个数据库的 SQL 查询的输出进行查看将会十分有益。想象一下,你能够像查询具有类似名称的 SQL 数据库表一样查询 psrpm 命令的输出。

幸运的是,有一个工具刚好实现了这个功能,而且功能更多:Osquery 是一个 开源的 “由 SQL 驱动的操作系统仪表、监控和分析框架”。

许多处理安全、DevOps、合规性的应用,以及仓储管理管理(仅举几例)在内部依赖 Osquery 提供的核心功能。

安装 Osquery

Osquery 适用于 Linux、macOS、Windows、FreeBSD。请按照 指南 为你的操作系统安装最新版本。(我会在下面的例子中使用 4.7.0 版本。)

安装完成后,确保 Osquery 可以工作:

“`
$ rpm -qa | grep osquery
osquery-4.7.0-1.linux.x86_64
$
$ osqueryi –version
osqueryi version 4.7.0
$

“`

Osquery 组件

Osquery 有两个主要组件:

  • osqueri 是一个交互式的 SQL 查询控制台,可以独立运行,不需要超级用户权限(除非要查询的表格需要访问权限)。
  • osqueryd 像一个安装在主机的监控守护进程,可以定期调度查询操作执行,从底层架构收集信息。

可以在不运行 osqueryd 的情况下执行 osqueri。另一个工具,osqueryctl,控制守护进程的启动、停止,并检查其状态。

“`
$ rpm -ql osquery-4.8.0-1.linux.x86_64 | grep bin
/usr/bin/osqueryctl
/usr/bin/osqueryd
/usr/bin/osqueryi
$

“`

使用 osqueryi 交互式命令提示符

你和 Osquery 的交互与使用 SQL 数据库十分相似。事实上,osqueryi 是 SQList shell 的一个修改版。执行 osqueryi 命令进入交互式命令提示符 ,就可以执行 Osquery 的命令,通常以 . 开始:

“`
$ osqueryi
Using a virtual database. Need help, type ‘.help’
osquery>

“`

要退出交互式命令提示符,执行 .quit 命令回到操作系统的命令提示符:

“`
osquery>
osquery> .quit
$

“`

找出可用的表

如前所述,Osquery 像 SQL 查询一样输出数据,数据库中的信息通常保存在表中。但是如何在不知道表名的情况下查询这些表呢?你可以运行 .tables 命令列出所有可以查询的表。如果你是一个 Linux 长期用户或者一个系统管理员 ,就会对表名十分熟悉,因为你一直在使用操作系统命令获取同样的信息:

“`
osquery> .tables
=> acpitables
=> apparmor
events
=> apparmorprofiles
=> apt
sources

<<裁剪>>

=> arpcache
=> user
sshkeys
=> users
=> yara
=> yara
events
=> ycloudinstancemetadata
=> yum_sources
osquery>

“`

检查各个表的模式

知道表名后,可以查看每个表提供的信息。既然 ps 命令经常用于获取进程信息,就以 processes 为例。执行 .schema 命令加上表名查看表中保存的信息。如果要验证命令返回的结果,可以快速执行 ps -efps aux,对比命令的输出和表中的内容:


osquery> .schema processes
CREATE TABLE processes(
pidBIGINT,nameTEXT,pathTEXT,cmdlineTEXT,stateTEXT,cwdTEXT,rootTEXT,uidBIGINT,gidBIGINT,euidBIGINT,egidBIGINT,suidBIGINT,sgidBIGINT,ondiskINTEGER,wiredsizeBIGINT,residentsizeBIGINT,totalsizeBIGINT,usertimeBIGINT,systemtimeBIGINT,diskbytesreadBIGINT,diskbyteswrittenBIGINT,starttimeBIGINT,parentBIGINT,pgroupBIGINT,threadsINTEGER,niceINTEGER,iselevatedtokenINTEGER HIDDEN,elapsedtimeBIGINT HIDDEN,handlecountBIGINT HIDDEN,percentprocessortimeBIGINT HIDDEN,upidBIGINT HIDDEN,uppidBIGINT HIDDEN,cputypeINTEGER HIDDEN,cpusubtypeINTEGER HIDDEN,physfootprintBIGINT HIDDEN, PRIMARY KEY (pid`)) WITHOUT ROWID;
osquery>

“`

要进一步确认,可以使用下面的命令查看 RPM 包的结构信息,然后与操作系统命令 rpm -qarpm -qi 的输出比较:


osquery>
osquery> .schema rpm_packages
CREATE TABLE rpm_packages(
nameTEXT,versionTEXT,releaseTEXT,sourceTEXT,sizeBIGINT,sha1TEXT,archTEXT,epochINTEGER,installtimeINTEGER,vendorTEXT,packagegroupTEXT,pidwithnamespaceINTEGER HIDDEN,mountnamespaceidTEXT HIDDEN, PRIMARY KEY (name,version,release,arch,epoch,pidwithnamespace`)) WITHOUT ROWID;
osquery>

“`

从 Osquery 的 表格文档 获取更多信息。

使用 PRAGMA 命令

或许模式信息对你来说太难看懂,还有另一种途径能够以详细的表格格式打印表中的信息:PRAGMA 命令。例如,我想通过 PRAGMA 用一种易于理解的格式查看 rpm_packages 表的信息:

“`
osquery> PRAGMA tableinfo(rpmpackages);

“`

这种表格式信息的一个好处是你可以关注想要查询的字段,查看命令提供的类型信息:

“`
osquery> PRAGMA tableinfo(users);
+++–+-+–+-+
| 0 | uid | BIGINT | 1 | | 1 |
| 1 | gid | BIGINT | 0 | | 0 |
| 2 | uid
signed | BIGINT | 0 | | 0 |
| 3 | gid_signed | BIGINT | 0 | | 0 |
| 4 | username | TEXT | 1 | | 2 |
| 5 | description | TEXT | 0 | | 0 |
| 6 | directory | TEXT | 0 | | 0 |
| 7 | shell | TEXT | 0 | | 0 |
| 8 | uuid | TEXT | 1 | | 3 |
+++–+-+–+-+–+-+–+-+–+-+–+-+

via: https://opensource.com/article/21/6/osquery-linux

作者:Gaurav Kamathe 选题:lujun9972 译者:YungeG 校对:wxy

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

主题测试文章,只做测试使用。发布者:eason,转转请注明出处:https://aicodev.cn/2021/07/14/%e5%83%8f%e6%9f%a5%e8%af%a2%e6%95%b0%e6%8d%ae%e5%ba%93%e4%b8%80%e6%a0%b7%e6%9f%a5%e8%af%a2%e4%bd%a0%e7%9a%84-linux-%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f%e4%bf%a1%e6%81%af/

Like (0)
eason的头像eason
Previous 2021年7月14日 上午4:19
Next 2021年7月14日

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信