osquery:把操作系统变成可 SQL 查询的数据库,296 张表开箱即用
osquery:把操作系统变成可 SQL 查询的数据库,296 张表开箱即用
【免费下载链接】osquerySQL powered operating system instrumentation, monitoring, and analytics.项目地址: https://gitcode.com/gh_mirrors/os/osquery
半夜告警,要查哪个进程在监听 0.0.0.0。osquery 让你写一句 SELECT ... FROM listening_ports 就能问出答案——操作系统成了能用 SQL 查询的数据库,Linux、macOS、Windows 都支持。
🔍 操作系统凭什么接得住 SQL:296 张虚拟表开箱即用
osquery 的定位是把操作系统暴露成一个高性能的关系型数据库。运行中的进程、加载的内核模块、打开的网络连接、浏览器插件、硬件事件、文件哈希,都被抽象成 SQL 表,由 SQLite 引擎执行。每执行一次查询,对应表就实时读取 OS 接口拼装行数据,所以拿到的永远是当下那一刻的状态——这正是它适合“排查当时那台机器”的原因。表不是写死的,而是通过插件与扩展 API 实现,可以持续新增。
最直观的证据在 specs/ 目录:296 个.table规格文件按平台组织,对应实现代码在 osquery/tables/:
| 平台 | 表数量 |
|---|---|
| macOS(darwin/) | 71 |
| POSIX 通用 | 57 |
| Windows | 56 |
| 跨平台(specs 根目录) | 56 |
| Linux | 45 |
| 工具表(utility/) | 9 |
| 其他(linwin/、macwin/) | 2 |
| 合计 | 296 |
另外,osquery/events/ 提供事件订阅框架,process_events 这类事件表能把进程、文件、网络的变化主动上报,配合 osqueryd 的调度器,可以在一批主机上做定时采集与事件监听。
⚡ 从零到第一条查询:进入 osqueryi 查一遍进程
下载对应平台的官方稳定版,或按 docs/wiki/development/building.md 从源码构建。交互式 shell 不需要管理员权限,也不依赖守护进程,二进制就绪后直接运行 osqueryi:
osqueryi下面两条是最有代表性的查询——第一条排查可执行文件已从磁盘删除的进程(事件调查中的常见信号),第二条把 listening_ports 与 processes 关联起来,找出监听所有接口的进程:
SELECT * FROM processes WHERE on_disk = 0; SELECT DISTINCT processes.name, listening_ports.port, processes.pid FROM listening_ports JOIN processes USING (pid) WHERE listening_ports.address = '0.0.0.0';想让结果直接喂给下游脚本,加--json即可输出 JSON。
🎯 适合主机排查与舰队监控,不适合存业务数据
适合:
- 临时探索主机状态,直接用 osqueryi shell 敲 SQL;
- 大批主机周期性采集,交给 osqueryd 的调度器;
- 安全检测:已删除可执行文件、ARP 异常、异常启动项(launchd keep_alive)都能写成一条 SQL;
- 实时审计,订阅进程、文件、网络事件。
不适合:osqueryi 默认使用内存数据库,查询结果不落盘,不替代传统数据库;部分表不加 root 权限时结果不完整;大规模部署还需要配套的 fleet manager 组件负责收集与聚合。
📚 延伸阅读
- 定时查询与事件记录:docs/wiki/introduction/using-osqueryd.md
- 日志聚合与输出:docs/wiki/deployment/logging.md
- 贡献指南:CONTRIBUTING.md
- 安全公告汇总:SECURITY.md
如果你的日常围绕主机安全、运维监控或事件调查,从一条SELECT * FROM processes开始即可。
【免费下载链接】osquerySQL powered operating system instrumentation, monitoring, and analytics.项目地址: https://gitcode.com/gh_mirrors/os/osquery
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考