osqueryd

osqueryd(osquery daemon)是可以定期执行SQL查询和记录系统状态改变的驻守程序。

osqueryd能够根据配置手机归档查询结果,并产生日志。

同时也可以使用系统事件的API来记录文件、文件夹的变化,硬件事件,网络事件等等。

osqueryd启动默认读取/var/osquery/osqueryd.conf配置文件。

当然也可以使用osqueryd --config_path来指定启动时使用的配置文件。

日志

osqueryd可以以日志的方式,记录下其工作,及执行结果。日志保存在/var/log/osquery中。

/var/log/osquery中主要有两种日志:

  • osqueryd.INFO/osqueryd.WARNING:主要记录了osqueryd运行时的一些日志。
  • osqueryd.results.log/osqueryd.snapshots.log:主要记录了osqueryd定期执行的查询的结果。

执行结果可以看到有results和snapshots之分。

日志的结果可以使用logstash之类的工具,通过监控对应的文件实现收集

results

results是不仅仅执行SQL查询,同时会保存执行的结果。在下次执行时,会进行比较。

如果结果改变,则会在osqueryd.results.log中生成一条新增的记录。如果没有改变,则不生成。

  1. {
  2. "name": "proc_num",
  3. "hostIdentifier": "localhost.localdomain",
  4. "calendarTime": "Fri Jul 1 03:14:31 2016 UTC",
  5. "unixTime": "1467342871",
  6. "decorations": {
  7. "aluptime": "413315",
  8. "host_uuid": "faa346a2-1b63-4279-a478-d53811043d77",
  9. "inuptime": "413284",
  10. "seconds": "413150",
  11. "username": ""
  12. },
  13. "columns": {
  14. "num_proc": "113"
  15. },
  16. "action": "added"
  17. }

生成新的数据记录的同时会移除先前的数据记录,并生成一条"action":"removed"的记录(也可以选择不记录。可以在schedule里配置)。

从记录里可以看到,除了action,记录里还有几部分。

  • name: schedule的名字,来自于schedule中的配置(下文详述)
  • hostIdentifier: host的id,可以在options中配置(下文详述)
  • calendarTime: 执行命令发生的时间
  • unixTime: 执行命令发生的unix时间
  • decorations: 一些附加的信息,来自于decorators中的配置(下文详述)
  • columns: 一个字典来自于schedule的查询结果。key是sql中对应的列,value是查询的结果值。所以这里要求schedule查询的结果最多只能有一行。

snapshots

snapshots跟result大同小异。区别在于snapshots是对每次查询结果均生成记录。其样例如下:

  1. {
  2. "snapshot": [{
  3. "num_proc": "112"
  4. }],
  5. "action": "snapshot",
  6. "name": "proc_num",
  7. "hostIdentifier": "localhost.localdomain",
  8. "calendarTime": "Thu Jun 30 18:26:40 2016 UTC",
  9. "unixTime": "1467311200",
  10. "decorations": {
  11. "aluptime": "381644",
  12. "host_uuid": "faa346a2-1b63-4279-a478-d53811043d77",
  13. "username": ""
  14. }
  15. }

osqueryd.conf

osqueryd.conf是osqueryd的配置文件,json格式。下面是一个样例。

  1. {
  2. "options": {
  3. "config_plugin": "filesystem",
  4. "logger_plugin": "filesystem",
  5. "logger_path": "/var/log/osquery",
  6. "log_result_events": "true",
  7. "schedule_splay_percent": "10",
  8. "events_expiry": "3600",
  9. "verbose": "true",
  10. "worker_threads": "2",
  11. "enable_monitor": "true"
  12. },
  13. "schedule": {
  14. "system_info": {
  15. "query": "SELECT hostname, cpu_brand, physical_memory FROM system_info;",
  16. "interval": 60
  17. }
  18. },
  19. "decorators": {
  20. "load": [
  21. "SELECT uuid AS host_uuid FROM system_info;",
  22. "SELECT user AS username FROM logged_in_users ORDER BY time DESC LIMIT 1;"
  23. ]
  24. },
  25. "packs": {
  26. "process-monitor": "/etc/osquery/process-monitor.conf"
  27. }
  28. }

可以看到这里包含了options,schedule,decorators,packs几个部分。下面分别来进行介绍。

options

options里主要包含的是osquery daemon的一些配置。这里主要介绍几个:

  • logger_path 日志路径
  • worker_threads worker的线程数(并不是越大越好,根据自己任务的多少设定)
  • host_identifier 在产生result时候的hostIdentifier

更多配置的含义可以参考这里

decorators

decorators主要用于在记录result的时候,添加额外的信息到decorations中。

decorator分为三种,load,always,interval。

decorator的查询结果最多只能有一行(可以为空)。

  • load: 在配置加载的时候,执行一次,并记录结果,之后在每次decorations添加的是加载时的执行结果
  • always: 每次记录result的时候执行,并在decorations中添加执行结果
  • interval: 配置是一个字典。只有当匹配中对应的key时,才进行执行,并添加执行结果

如下例:

  1. {
  2. "decorators": {
  3. "load": [
  4. "SELECT version FROM osquery_info",
  5. "SELECT uuid AS host_uuid FROM system_info"
  6. ],
  7. "always": [
  8. "SELECT user AS username FROM logged_in_users WHERE user <> '' ORDER BY time LIMIT 1;"
  9. ],
  10. "interval": {
  11. "3600": [
  12. "SELECT total_seconds AS uptime FROM uptime;"
  13. ]
  14. }
  15. }
  16. }

在加载时获得version和host_uuid。在每次执行时临时获取username。当定时执行的任务时间间隔为3600是,获取uptime。

schedule

定时执行的任务。该任务会定时去执行SQL查询,并生成result/snapshot记录。其配置样例如下:

  1. {
  2. "schedule": {
  3. "system_info": {
  4. "query": "SELECT hostname, cpu_brand, physical_memory FROM system_info;",
  5. "interval": 60,
  6. "removed": false,
  7. #"snapshot":true
  8. }
  9. }
  10. }

schedule是一个字典。key就是每个schedule的name,value是每个schedule的配置。

比如这个system_info即是schedule的name。

在schedule的配置里

  • query: 查询的SQL语句
  • interval: 查询间隔
  • removed: 是否生成removed的记录
  • snapshot: 是否是snapshot类型(默认为result)

可以到这里查看更多关于schedule配置的信息

packs

packs可以看做是一系列schedule的集合。osquery提供了一些常用的查询。在配置文件里,可以做如下配置:

  1. {
  2. "packs": {
  3. "process-monitor": "/etc/osquery/process-monitor.conf"
  4. }
  5. }

packs是一个字典。key是pack的名字,value是pack文件的路径。再来看/etc/osquery/process-monitor.conf:

  1. {
  2. "discovery": [
  3. "select pid from processes where name = 'foobar';",
  4. "select count(*) from users where username like 'www%';"
  5. ],
  6. "queries": {
  7. "pack_proc_num":{
  8. "query": "select count(*) as num_proc from processes;",
  9. "interval": 60,
  10. "removed": false
  11. }
  12. }
  13. }

discovery是用于判定是否在该host上执行queries。discovery是一个列表,包含多个SQL查询。多个查询结果直接是or关系。如上例,如果该host上存在一个foobar的进程或者存在以www开头的用户名,则执行queries。这个discovery的判断只在配置加载时做一次判断。

queries是一个字典。其格式和内容与schedule一致,这里不再重复。

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

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

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

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

    osquery简介 osquery是一款由facebook开源的,面向OSX和Linux的操作系统检测框架. osquery顾名思义,就是query os,允许通过使用SQL的方式来获取操作系统的数据 ...

  3. [转帖]技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解

    技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解    http://www.52im.net/thread-1309-1-1.html   本文来自腾讯资深研发工程师罗成的技术分享, ...

  4. Android中实现java与PHP服务器(基于新浪云免费云平台)http通信详解

    Android中实现java与PHP服务器(基于新浪云免费云平台)http通信详解 (本文转自: http://blog.csdn.net/yinhaide/article/details/44756 ...

  5. SQL Server中通用数据库角色权限的处理详解

    SQL Server中通用数据库角色权限的处理详解 前言 安全性是所有数据库管理系统的一个重要特征.理解安全性问题是理解数据库管理系统安全性机制的前提. 最近和同事在做数据库权限清理的事情,主要是删除 ...

  6. SQL Server中排名函数row_number,rank,dense_rank,ntile详解

    SQL Server中排名函数row_number,rank,dense_rank,ntile详解 从SQL SERVER2005开始,SQL SERVER新增了四个排名函数,分别如下:1.row_n ...

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

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

  8. SQL Server 表的管理_关于完整性约束的详解(案例代码)

    SQL Server 表的管理之_关于完整性约束的详解 一.概述: ●约束是SQL Server提供的自动保持数据库完整性的一种方法, 它通过限制字段中数据.记录中数据和表之间的数据来保证数据的完整性 ...

  9. 第三十一节,目标检测算法之 Faster R-CNN算法详解

    Ren, Shaoqing, et al. “Faster R-CNN: Towards real-time object detection with region proposal network ...

随机推荐

  1. Python什么是值或引用函数参数

    这篇文章是Python前往遇到有疑问的功能. 下面一段是原有的基础教程Python函数. 按值传递參数和按引用传递參数 全部參数(自变量)在Python里都是按引用传递.假设你在函数里改动了參数,那么 ...

  2. Floodlight controller 线程池模型

         官方文档对于ThreadPool的描写叙述是:ThreadPool is a Floodlight module wrapper for a Java's ScheduledExecutor ...

  3. selenium2入门 用selenium安装、加载、启用插件(一)

    一:下载 下载地址是:http://docs.seleniumhq.org/download/

  4. DDD分层架构之领域实体(验证篇)

    DDD分层架构之领域实体(验证篇) 在应用程序框架实战十四:DDD分层架构之领域实体(基础篇)一文中,我介绍了领域实体的基础,包括标识.相等性比较.输出实体状态等.本文将介绍领域实体的一个核心内容—— ...

  5. CentOS上部署Apache、MySQL和PHP

    centos上yum安装很方便,下面介绍编译安装的方式. 第一步要在CentOS上安装gcc.g++等开发工具 可以从系统光盘上安装,或者 #yum groupinstall "Develo ...

  6. avalonjs 1.3.7发布

    avalonjs 1.3.7发布 又到每个月的15号了,现在avalon已经固定在每个月的15号发布新版本.这次发布又带来许多新特性,让大家写码更加轻松,借助于“操作数据即操作DOM”的核心理念与双向 ...

  7. C#网络编程系列(两)它Socket同步TCPserver

    声明原文 笔者:竹zz  本文地址http://blog.csdn.net/zhujunxxxxx/article/details/44258719 转载请注明出处 文章系列文件夹 C#网络编程系列文 ...

  8. js urlencode , encodeURIComponent

    js 对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent ...

  9. AppCompat v21 — Android 5.0之前版本设备的Material Design实现

    博客原文地址:http://android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html,要想打 ...

  10. Glue4Net简单部署基于win服务的Socket程序

    smark 专注于高并发网络和大型网站架规划设计,提供.NET平台下高吞吐的网络通讯应用技术咨询和支持 Glue4Net简单部署基于win服务的Socket程序 在写一些服务应用的时候经常把要它部署到 ...