百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

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

haoteby 2025-09-01 02:17 14 浏览

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中生成一条新增的记录。如果没有改变,则不生成。

{
    "name": "proc_num",
    "hostIdentifier": "localhost.localdomain",
    "calendarTime": "Fri Jul  1 03:14:31 2016 UTC",
    "unixTime": "1467342871",
    "decorations": {
        "aluptime": "413315",
        "host_uuid": "faa346a2-1b63-4279-a478-d53811043d77",
        "inuptime": "413284",
        "seconds": "413150",
        "username": ""
    },
    "columns": {
        "num_proc": "113"
    },
    "action": "added"
}

生成新的数据记录的同时会移除先前的数据记录,并生成一条"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是对每次查询结果均生成记录。其样例如下:

{
    "snapshot": [{
        "num_proc": "112"
    }],
    "action": "snapshot",
    "name": "proc_num",
    "hostIdentifier": "localhost.localdomain",
    "calendarTime": "Thu Jun 30 18:26:40 2016 UTC",
    "unixTime": "1467311200",
    "decorations": {
        "aluptime": "381644",
        "host_uuid": "faa346a2-1b63-4279-a478-d53811043d77",
        "username": ""
    }
}

osqueryd.conf

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

{
  "options": {
    "config_plugin": "filesystem",
    "logger_plugin": "filesystem",
    "logger_path": "/var/log/osquery",
    "log_result_events": "true",
    "schedule_splay_percent": "10",
    "events_expiry": "3600",
    "verbose": "true",
    "worker_threads": "2",
    "enable_monitor": "true"
  },
  "schedule": {
    "system_info": {
      "query": "SELECT hostname, cpu_brand, physical_memory FROM system_info;",
      "interval": 60
    }
  },
  "decorators": {
    "load": [
      "SELECT uuid AS host_uuid FROM system_info;",
      "SELECT user AS username FROM logged_in_users ORDER BY time DESC LIMIT 1;"
    ]
  },
  "packs": {
     "process-monitor": "/etc/osquery/process-monitor.conf"
  }
}

可以看到这里包含了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时,才进行执行,并添加执行结果

如下例:

{
  "decorators": {
    "load": [
      "SELECT version FROM osquery_info",
      "SELECT uuid AS host_uuid FROM system_info"
    ],
    "always": [
      "SELECT user AS username FROM logged_in_users WHERE user <> '' ORDER BY time LIMIT 1;"
    ],
    "interval": {
      "3600": [
        "SELECT total_seconds AS uptime FROM uptime;"
      ]
    }
  }
}

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

schedule

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

{
  "schedule": {
    "system_info": {
      "query": "SELECT hostname, cpu_brand, physical_memory FROM system_info;",
      "interval": 60,
      "removed": false,
      #"snapshot":true
    }
  }
}

schedule是一个字典。key就是每个schedule的name,value是每个schedule的配置。 比如这个system_info即是schedule的name。

在schedule的配置里

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

相关推荐

软考在即,不如来快速复习吧_软考百度贴吧

5.29号就要考试的小伙伴方不方,不方的都是学霸!每天被工作压得喘不过气的浪孩只能临阵磨枪了。先来看看软件设计师的分数分布吧,知己知彼才能百战不殆嘛...

数据类型、运算符与表达式_数据类型,运算符与表达式的关系

在C语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。一、C中的类型可分为以下几种:1、基本类型:它们是算术类型,...

计算机组成原理复习要点(复习必过)

计算机组成原理复习要点一、...

2018年下半年网络工程师上午试题_2018年网络工程师上半年真题答案详解

2018下半年网络工程师上午试题分析与解答试题(1)采用n位补码(包含一个符号位)表示数据,可以直接表示数值_(1)。试题分析采用n位补码(包含一个符号位)表示数据时,用1位(最高位)表示数的符...

轻松办公-OfficeExcel函数精解(二十二)

轻松办公-OfficeExcel函数精解(二十二)1、...

企业无码药品快速上传操作指南(上)

根据国家医保局等四部门发布的《关于加强药品追溯码在医疗保障和工伤保险领域采集应用的通知》,自2025年7月1日起,医保定点医药机构在销售药品时必须扫描药品追溯码方可进行医保基金结算。对于2025年7月...

C/C++编程知识:整型数据在内存中的存储!讲解+示例

1.整型的归类charshortint...

1.2 计算机内信息的表示与存储_计算机中的信息存储

1.2计算机内信息的表示与存储上一节介绍了计算机发展及计算机简单的工作原理,引入了二进制的概念,讲解了十进制与二进制之间的转换关系。本节将进一步介绍如何用二进制表示现实世界的事物。计算机内部的程序和...

Bit Fiddle for Mac(字符进制转换工具) v1.4激活版

是否曾经想知道1的二进制补码写成十六进制数字是什么?还是需要快速的ASCII表?BitFiddle可以帮助您!BitFiddlemac破解版是一款不同进制之间进行数值转换的工具,这款软件能够将数...

零基础学C语言(4):基本数据类型——整型

上一节我们用如何用程序写一个计算器的例子,延伸到为啥会有数据类型、变量和常量的存在,并介绍了赋值和等于的区别。从这节开始详细分析这三个概念,从基本数据类型的整型开始,不多比比,直接上主菜。BOOL型上...

C语言-自运算、位运算、取反运算_c的位运算符

①自加自减运算...

第十一节课 原码 反码 奇偶校验码

大家好,我是电器电。今日我们先来介绍一下原码:在生活中正数和负数之分正数用十表示,负数用一表示。但在数字设备中机器不会识别正负号所以会在二进制码的最高位用0表示正,用1表示负。如(+105)原=011...

学习永远不晚 C语言试题及答案_学习永远不晚 C语言试题及答案解析

、单项选择题(本大题共20题,每题2分,共40分)1、以下不是C语言的特点的是(B)A、C语言简洁、紧凑B、能够编制出功能复杂的程序C、C语言可以直接对硬件进行操作D、C语言移植性好2...

整型的范围为什么是-32768 至 32767

初学PLC者都会有一个问题比较困扰,为什么PLC中整型数的范围是-32768~32767?直接回答就是因为计算机内表示数值使用的是补码,而不是原码,所以你才有这样的困扰。所谓原码就是这个数本身的二进制...

基础中的基础,不得不看的数字电路题目

1)10110010反码是(),补码是()。(填空)解析:本题考查数字电路中最基础的码制知识。...