query>SELECT device, path, type, inodes_free, flags FROM mounts;
图2-42 装载磁盘信息
- 对于特定类型的设备。如图2-43所示。
osquery>SELECT device, path, type, inodes_free, flags FROM mounts WHERE type="tmpfs";
图2-43 特定类型的设备
记忆信息以字节为单位检查系统内存。如图2-44所示。
osquery>SELECT * FROM memory_info;
图2-44 检查系统内存
网络接口信息使用“interface_addresses”检查网络地址。如图2-45所示。
osquery>SELECT * FROM interface_addresses;
图2-45 网络接口信息
- 服务器正常运行,检查服务器正常运行时间。如图2-46所示。
osquery>SELECT * FROM uptime;
图2-46 正常运行时间
检查用户,osqery提供了用于检查系统用户的详细信息表。 可以使用'users'表来检查系统上的所有用户,使用'last'表检查用户上次登录,并使用'logged_in_users'来获取具有活动shell的登录用户。
- 要检查服务器上的所有可用用户,请使用“用户”表。如图2-47
osquery>SELECT * FROM users;
图2-47 所有可用用户
- 对于普通用户,们可以将uid指定为'> = 1000'。如图2-48所示。
osquery>SELECT * FROM users WHERE uid>=1000;
图2-48 查询普通用户
要检查上次登录用户,请使用“last”表。如图2-49所示。
osquery>SELECT * FROM last;
图2-49上次登录用户
- 对于普通用户,请将'type'填入'7'。如图2-50所示。
osquery>SELECT username, time, host FROM last WHERE type=7;
图2-50 过滤普通用户
使用活动shell检查登录用户,使用'logged_in_users'表。如图2-51所示。
图2-51 活动shell登录用户
2.2.7 . osquery转发日志
1. 修改/etc/rsyslog. conf文件,增加下面5行语句 如图2-29所示。
module(load="imfile" PollingInterval="5")
$InputFileName /var/log/osquery/osqueryd. results. log
$InputFileTag osquery:
$InputFileStateFile osqueryd. results. log
$InputRunFileMonitor
图2-29 配置日志转发
- 修改/etc/rsyslog. conf文件,修改日志接受服务器地址如图2-30所示。
图2-30 配置接受服务器
- 打开日志接收系统利用3CDaemon 软件进行接收日志如图2-31所示。
图2-31 日志接收系统
2. 3 测试监控文件
1. 通过在定义的目录“home”和“他tmp”上创建一个新文件来测试文件完整性监控包。转到“/var”目录,创建一个名为“nzy. txt”的新文件。
cd /tmp
touch nzy. txt
转到'/ home 目录并创建一个名为'nzy. py'的新文件。
cd / home
nzy. Py
- 使用实时交互模式osqueryi日志检查所有日志监控。
osqueryi运行下面的osqueryi命令。
- 对于'/home'目录。
select target_path, category, action, atime, ctime, mtime from file_events WHERE category="home"; 如图 2-32所示。
图 2-32 查询home 文件的修改
- 对于/tmp目录。
select target_path, category, action, atime, ctime, mtime from file_events WHERE category="tmp"; 如图 2-33所示。
图2-33 查询tmp 文件的修改
第三章 利用ELK搭建日志分析系统
为什么用到ELK:
一般需要进行日志分析场景:直接在日志文件中 grep. awk 就可以获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档. 文本搜索太慢怎么办. 如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。
一个完整的集中式日志系统,需要包含以下几个主要特点:
收集-能够采集多种来源的日志数据
传输-能够稳定的把日志数据传输到中央系统
存储-如何存储日志数据
分析-可以支持 UI 分析
警告-能够提供错误报告,监控机制
ELK提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用。目前主流的一种日志系统。
不管是用于记录,监控或者程序的Debug,日志,对于任何系统来说都是一个及其重要的部分。但一般日志的数据量会比较大,并且分散在各个地方。如果管理的服务器或者程序比较少的情况还可以逐一登录到各个服务器去查看,分析。但如果服务器或者程序的数量比较多了之后这种方法就显得力不从心。基于此,一些集中式的日志系统也就应用而生。
目前比较有名成熟的有,Splunk(商业). FaceBook 的Scribe. Apache 的 Chukwa
Cloudera 的 Fluentd. 还有ELK 等等。
3. 1 ELK简介
ELK不是一款软件,是三个软件产品的首字母缩写,Elasticsearch,Logstash 和 Kibana。这三款软件都是开源的,现在归于 Elastic. co 公司。
Elasticsearch 是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个建立在全文搜索引擎 Apache Lucene 基础上的搜索引擎,使用 Java 语言编写。作为ELK协议栈的核心,它用于集中存储数据。特点:
- 实时如图准实时
- 分布式
- 面向文档
- 高可用性,易扩展,支持集群如图Cluster. 分片和复制如图Shards 和 Replicas。
- 接口友好如图RESTful
Logstash 是一个具有