说明
本文是一篇翻译稿,原文是:Osquery: Under the Hood
在4年的时间里,有243个贡献者一共提交了4573个commit,为osquery
的发展作出了贡献。osquery
是一个复杂的项目,必须要兼备性能和稳定性,要要争能在数百万台的机器上面运行。本篇文章就是对osquery
的整体架构进行一个简要的介绍。
本篇文章适用于那些对osquery
的架构感兴趣,想为osquery
发现贡献pr或者是想从成功的开源项目架构中学习的任何人。对于那些刚接触osquery
来说,通过在macOS上面使用osquery
也是一个很好的开始
架构说明
osquery
的整体架构如下图所示:
Query Engine
由于osquery良好的设计使得普通用户也能够使用SQL语句查询得到系统信息。osquery并没有完全使用sqlite,只是SQL的执行引擎是sqlite。osquery使用SQLite来解析、优化、执行SQL语句,使得osquery更加关注于解析系统信息。osquery底层并没有完全使用sqlite,仅仅只是查询引擎使用的是osquery
虽然osquery使用SQLite作为查询引擎,但是并没有使用SQLite来存储数据。大部分的数据都是在查询时通过一个虚拟表得到的。osquery通过嵌入的RocksDB来存储数据。
查询示例如下:
Virtual Tables
虚表是osquery的核心。虚表中保存了我们查询时的所有数据。当我们执行SQL查询时才会产生虚表数据。虚表数据一般都是通过解析文件或者是调用系统API来实现的
所有的表都是利用Python中的DSL来定义的。osquery通过读取这些文件来判断osquery有哪些表。在前面的文章中也已经说过,在