osquery简介

osquery是一款由facebook开源的,面向OSX和Linux的操作系统检测框架。

osquery顾名思义,就是query os,允许通过使用SQL的方式来获取操作系统的数据。

通过osquery,SQL表可以提供诸如正在运行的进程,已加载的内核模块,已打开的网络连接,硬件事件等等信息。

下载与安装

osquery的安装很简单,在这里可以找到对应的下载。本文使用的centos6进行的安装:

  1. $rpm -ivh https://osquery-packages.s3.amazonaws.com/centos6/noarch/osquery-s3-centos6-repo-1-0.0.noarch.rpm
  2. $yum install osquery

osqueryi

osqueryi命令可以用于进行查询。osquery提供了若干个table。用户可以通过sql语句查询对应的系统信息。

比如,列举所有用户的uid,gid和username,使用如下命令:

  1. [root@localhost osquery]# osqueryi
  2. osquery - being built, with love, at Facebook
  3. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4. Using a virtual database. Need help, type '.help'
  5. osquery> select uid,gid,username from users;
  6. +-----+-----+----------------+
  7. | uid | gid | username |
  8. +-----+-----+----------------+
  9. | 0 | 0 | root |
  10. | 1 | 1 | bin |
  11. +-----+-----+----------------+

借助于SQL语句的灵活性,可以更容易的从数据中筛选出想要的结果。比如查询现有的进程数量:

  1. osquery> select count(*) from processes;
  2. +----------+
  3. | count(*) |
  4. +----------+
  5. | 110 |
  6. +----------+

又比如,查询在运行状态,即state为R的进程相关信息:

  1. osquery> select pid,name,cmdline,state from processes where state='R';
  2. +------+-----------+----------+-------+
  3. | pid | name | cmdline | state |
  4. +------+-----------+----------+-------+
  5. | 4714 | osqueryi | osqueryi | R |
  6. | 7 | rcu_sched | | R |
  7. +------+-----------+----------+-------+

更高级的用法,还可以进行连表查询。比如要显示进程状态为R的进程打开的文件的信息。从process_open_files表的信息如下:

Column Type Description
pid BIGINT_TYPE Process (or thread) ID
fd BIGINT_TYPE Process-specific file descriptor number
path TEXT_TYPE Filesystem path of descriptor

可以看到process_open_files和process有公用的pid列。

因此只要将process_open_files表和processes表进行联合查找,

查找条件为processes的state为R且processes.pid与process_open_files.pid匹配的对应行的信息:

  1. osquery> select processes.pid, processes.name, process_open_files.fd, process_open_files.path,processes.state from process_open_files,processes where process_open_files.pid = processes.pid and processes.state='R';
  2. +------+----------+----+---------------+-------+
  3. | pid | name | fd | path | state |
  4. +------+----------+----+---------------+-------+
  5. | 4791 | osqueryi | 0 | /dev/pts/5 | R |
  6. | 4791 | osqueryi | 1 | /dev/pts/5 | R |
  7. | 4791 | osqueryi | 2 | /dev/pts/5 | R |
  8. | 4791 | osqueryi | 8 | /proc/4791/fd | R |
  9. +------+----------+----+---------------+-------+

还有更高级的功能,比如查询最大的pid:

  1. osquery> select max(pid) from processes;
  2. +----------+
  3. | max(pid) |
  4. +----------+
  5. | 7706 |
  6. +----------+

比如查询每个进程打开的文件数:

  1. osquery> select pid, count(fd) from process_open_files group by pid;
  2. +------+------------+
  3. | pid | count(pid) |
  4. +------+------------+
  5. | 1 | 10 |
  6. | 456 | 6 |
  7. | 475 | 2 |
  8. +------+------------+

还有更多复合的功能,只要是SQL里支持的,osquery都尽力做了支持。这样需要取什么样的数据,可以轻松的使用sql来进行取值。

小结

osquery的各种监控指标目前来看,并不是特别完善。但是已经相当够用。而且其能够自行扩展table(需要进行二次开发)。

该项目的主要价值在于可以用SQL的方式灵活获取数据,并发送到后端进行收集(后面的博客再进行介绍)。

SQL的数据模型使得对于一些监控信息进行组合变得更容易。

Facebook开源的基于SQL的操作系统检测和监控框架:osquery的更多相关文章

  1. Facebook开源的基于SQL的操作系统检测和监控框架:osquery daemon详解

    osqueryd osqueryd(osquery daemon)是可以定期执行SQL查询和记录系统状态改变的驻守程序. osqueryd能够根据配置手机归档查询结果,并产生日志. 同时也可以使用系统 ...

  2. Facebook开源的基于SQL的操作系统检测和监控框架:osquery Table详解

    写在前面 上一篇介绍了osquery的一些用法,即如何使用SQL语句查询系统信息.本文就来介绍下这个table是如何定义的,及table中的数据是如何取得的. 本文以uptime和process两张表 ...

  3. 开源一个基于dotnet standard的轻量级的ORM框架-Light.Data

    还在dotnet framework 2.0的时代,当时还没有EF,而NHibernate之类的又太复杂,并且自己也有一些特殊需求,如查询结果直接入表.水平分表和新增数据默认值等,就试着折腾个轻量点O ...

  4. Facebook开源软件列表

    从 Facebook 的 GitHub 账户中可以看到,Facebook 已经开源的开源项目有近 300 个,领域涉及移动.前端.Web.后端.大数据.数据库.工具和硬件等.Facebook 开源项目 ...

  5. 代码内存泄露检测(1) MLeaksFinder (Wechat开源) + FBRetainCycleDetector (FaceBook开源)

    每次项目编译完成之后,都被内存搞得头昏脑胀,压力甚大. 利用两周时间,稍微研究了 微信开源的 MLeaksFinder 和 facebook 开源的 FBMemoryProfiler, 这两个开源三方 ...

  6. 基于Facebook开源框架SocketRocket的即时通讯

    SocketRocket 介绍: SocketRock 是 Facebook 开源的框架,基于 WebSocket 客户端类库,适用于 iOS.Mac OS.tv OS.GitHub 传送门:http ...

  7. 最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目

    最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目 最近一个来自重庆的客户找到走起君,客户的业务是做移动互联网支付,是微信支付收单渠道合作伙伴,数据库里存储的是支付流水和交易流水 ...

  8. 基于SQL Server 2008 Service Broker构建企业级消息系统

    注:这篇文章是为InfoQ 中文站而写,文章的地址是:http://www.infoq.com/cn/articles/enterprisemessage-sqlserver-servicebroke ...

  9. 开源倾情奉献:基于.NET打造IP智能网络视频监控系统(一)开放源代码

    本文为 Dennis Gao 原创技术文章,发表于博客园博客,未经作者本人允许禁止任何形式的转载. 开源倾情奉献系列链接 开源倾情奉献:基于.NET打造IP智能网络视频监控系统(一)开放源代码 开源倾 ...

随机推荐

  1. 【 D3.js 入门系列 --- 9.6 】 生产的包图

    我的个人博客是:www.ourd3js.com csdn博客为:blog.csdn.net/lzhlzz 转载请注明出处,谢谢. 打包图( Pack ).用于包括与被包括的关系,也表示各个对象的权重, ...

  2. Android KitCat 4.4.2 ADB 官方所支持的所有Services格式翻译

    在之前的文章中有转帖网上同行制作的ADB协议表格<<adb概览及协议参考>>,但不够详尽,所以这里自己另外基于Android 4.4.2的技术文档重新做一次翻译. HOST S ...

  3. Robotium源码分析之Instrumentation进阶

    在分析Robotium的运行原理之前,我们有必要先搞清楚Instrumentation的一些相关知识点,因为Robotium就是基于Instrumentation而开发出来的一套自动化测试框架.鉴于之 ...

  4. AutoCAD 2012安装错误,与.net framework (1603错误)以及ms2005vc++的问题。

    首先,这是AutoCAD2012的问题.因为,如果一台计算机已经安装了这些软件,AutoCAD是无法识别出来,因此AutoCAD就只能报错.正确的做法是:如果检测到这些软件已经被安装,则需要忽略这些问 ...

  5. Oracle中注意用户的访问权限

    新增表.序列.存储过程等,要注意用户(例如System)的权限.如果在增删改查过程中出现数据库读写权限的报错,则在建表(或者序列.存储过程等)时,在脚本前面加 GRANT CREATE TABLE T ...

  6. javascript 动态创建tip图片提示

    前言: 在做前端的项目中,经常看到移动一个小图标上显示这个图标对应的大图的提示,之前的做法是在小图标的位置后面添加一个div,然后移动到小图标然后显示这个图标的图片!但是这个方法做的时候发现,如果提示 ...

  7. Android多画面幻灯片:ViewPager基础上,利用与PagerTabStrip出生缺陷(源代码)

    近期使用ViewPager.读了几个人说是不是很清晰的信息,干脆自己写demo总结下. 样例非常easy.Activity里有三个界面能够滑动.每个界面都有一个button并设置好了监听.PagerT ...

  8. 开发环境准备:Ruby on Rails开发环境配置

    开发环境准备:Ruby on Rails开发环境配置 前情回顾 上次讲到Vmware虚拟机的安装配置以及Scientific Linux 6.X系统的安装.这回我们的主要任务是在Linux操作系统上完 ...

  9. .NET MVC4 实训记录之五(访问自定义资源文件)

    .Net平台下工作好几年了,资源文件么,大多数使用的是.resx文件.它是个好东西,很容易上手,工作效率高,性能稳定.使用.resx文件,会在编译期动态生成已文件名命名的静态类,因此它的访问速度当然是 ...

  10. Visual Studio 编辑器

    如何扩展 Visual Studio 编辑器 在 Visual Studio 2010 的时代,扩展 Visual Studio 的途径有很多,开发者可以选择宏.Add-in.MEF 和 VSPack ...