Facebook开源的基于SQL的操作系统检测和监控框架:osquery daemon详解
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)
可以到这里查看更多关于schedule配置的信息。
packs
packs可以看做是一系列schedule的集合。osquery提供了一些常用的查询。在配置文件里,可以做如下配置:
{
"packs": {
"process-monitor": "/etc/osquery/process-monitor.conf"
}
}
packs是一个字典。key是pack的名字,value是pack文件的路径。再来看/etc/osquery/process-monitor.conf
:
{
"discovery": [
"select pid from processes where name = 'foobar';",
"select count(*) from users where username like 'www%';"
],
"queries": {
"pack_proc_num":{
"query": "select count(*) as num_proc from processes;",
"interval": 60,
"removed": false
}
}
}
discovery是用于判定是否在该host上执行queries。discovery是一个列表,包含多个SQL查询。多个查询结果直接是or关系。如上例,如果该host上存在一个foobar的进程或者存在以www开头的用户名,则执行queries。这个discovery的判断只在配置加载时做一次判断。
queries是一个字典。其格式和内容与schedule一致,这里不再重复。
Facebook开源的基于SQL的操作系统检测和监控框架:osquery daemon详解的更多相关文章
- Facebook开源的基于SQL的操作系统检测和监控框架:osquery Table详解
写在前面 上一篇介绍了osquery的一些用法,即如何使用SQL语句查询系统信息.本文就来介绍下这个table是如何定义的,及table中的数据是如何取得的. 本文以uptime和process两张表 ...
- Facebook开源的基于SQL的操作系统检测和监控框架:osquery
osquery简介 osquery是一款由facebook开源的,面向OSX和Linux的操作系统检测框架. osquery顾名思义,就是query os,允许通过使用SQL的方式来获取操作系统的数据 ...
- [转帖]技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解
技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解 http://www.52im.net/thread-1309-1-1.html 本文来自腾讯资深研发工程师罗成的技术分享, ...
- Android中实现java与PHP服务器(基于新浪云免费云平台)http通信详解
Android中实现java与PHP服务器(基于新浪云免费云平台)http通信详解 (本文转自: http://blog.csdn.net/yinhaide/article/details/44756 ...
- SQL Server中通用数据库角色权限的处理详解
SQL Server中通用数据库角色权限的处理详解 前言 安全性是所有数据库管理系统的一个重要特征.理解安全性问题是理解数据库管理系统安全性机制的前提. 最近和同事在做数据库权限清理的事情,主要是删除 ...
- SQL Server中排名函数row_number,rank,dense_rank,ntile详解
SQL Server中排名函数row_number,rank,dense_rank,ntile详解 从SQL SERVER2005开始,SQL SERVER新增了四个排名函数,分别如下:1.row_n ...
- 开源一个基于dotnet standard的轻量级的ORM框架-Light.Data
还在dotnet framework 2.0的时代,当时还没有EF,而NHibernate之类的又太复杂,并且自己也有一些特殊需求,如查询结果直接入表.水平分表和新增数据默认值等,就试着折腾个轻量点O ...
- SQL Server 表的管理_关于完整性约束的详解(案例代码)
SQL Server 表的管理之_关于完整性约束的详解 一.概述: ●约束是SQL Server提供的自动保持数据库完整性的一种方法, 它通过限制字段中数据.记录中数据和表之间的数据来保证数据的完整性 ...
- 第三十一节,目标检测算法之 Faster R-CNN算法详解
Ren, Shaoqing, et al. “Faster R-CNN: Towards real-time object detection with region proposal network ...
随机推荐
- POJ 1201 && HDU 1384 Intervals(差动制动系统)
职务地址:POJ 1201 HDU 1384 依据题目意思.能够列出不等式例如以下: Sj-Si>=c; Si-S(i-1)>=0; S(i-1)-Si>=-1; 然后用最短路s ...
- [转载]C#播放流媒体的几种方法
做视频开发要学的东西真多,不知道如何入门,乱打乱撞,慢慢摸索吧! 首先搭建Windows Meida Server ,方法很简单,试试就会.在这里需要声明的是,这几种方法 都可以播放 本地视频.并且基 ...
- leetcode第十题--Regular Expression Matching
Problem:Implement regular expression matching with support for '.' and '*'. '.' Matches any single c ...
- solr连接数据库
solr与.net系列课程(三)solr连接数据库 solr与.net系列课程(三)solr连接数据库 上一章直接讲述的配置文件把大部分人看的很迷惑,大家都想听的是solr到底是怎么用的,好,这 ...
- 喜大本\\ u0026普,微软的开源
词汇表--喜大本\\ u0026普:爱过.有趣的游戏,庆祝.奔走相告.简而言之<reload=1">微软宣布.NET开发环境开源>是个好消息. 前言及历史回想 就我个人来说 ...
- Strongly connected(hdu4635(强连通分量))
/* http://acm.hdu.edu.cn/showproblem.php?pid=4635 Strongly connected Time Limit: 2000/1000 MS (Java/ ...
- Centos中如何配置Texlive2013中文字体的问题
Centos中如何配置Texlive2013中文字体的问题: 第一步是下载你需要的字体,我从windows/fonts中拷贝的比较多,你只要复制你需要的字体即可. 注意只要文件扩展名为ttf的文件,t ...
- .net创建并安装windows服务案例
1. 创建windows服务[引用博文]: 1. 将这个服务程序切换到设计视图2. 右击设计视图选择“添加安装程序”3. 切换到刚被添加的ProjectInstaller的设计视图4. 设置servi ...
- Product Trader(操盘手)
Product Trader(操盘手) 索引 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):Product Trader 的示例实现. 意图 使客户程序可以通过命名抽象超类和给定规 ...
- Node填坑教程——整理文件
如果你能把所有代码写进一个文件,并且能很好的管理.协调.多人开发.那么可以跳过这期(请务必带我飞). 我们接着完善上期的代码,给代码分家. node并没有启动入口,更没有固定的项目结构,文件配置.这些 ...