overview:
1.聚合数据展示
2.过滤数据
3.读写分离集群
4.ms级响应查询
5.重要数据归档
6.基于ossec logstash es 大数据安全关联分析
需求与实现
需求1: 能像tail -f 查看日志,集中式查看日志,不用单节点去查看。
初级:rsyslog+notify
中级1:Logstash +Redis+ Elasticsearch + Kibana 这套适用对可靠 时要求不是很严的那种 ,采用redis队列
中级2:Flume + Kafka + Elasticsearch + Kibana 可靠性比中级1强,实时性,可用性较高,采用kafka中间件消息队列,有的为了加强完整性,还会加入zk。
高级:Flume + Kafka + HDFS + HADOOP + HIVE + Storm (+ Elasticsearch + Kibana)
尝试1:
用flume用采集,但采集到的日志文件不能按一定规则命名(虽是可以去改一小段的java实现),但都是文件存储方式。跟以前的相比只是不用跑去每个节点查看日志。
尝试2:
自我放弃了flume方案。换elk(当时的版本是1.7)。第一版的技术是elk+redis,原始的需求已经满足了,集中式,类似tail -f 方式。现在是集中式,web方式。效果如下:
解决需求2:
采用 if [type] == "a" {
index => "a"
需求3:数据量太大了,要过滤数据b
解决需求3:
filter {
grok {
add_tag => [ "valid" ]
match => [
"message", "b"
]
}
}
ps:由于logstash的1.5 1.7 2.1 各版本语法略有差异,1.5版本是grek ,1.7以后改成grok。其它写法也不一样,具体的参照官网的示例。
需求四:要归档重要的日志,es集群读写分离
解决需求四:从redis队列直接取值存于mongodb
![](https://i-blog.csdnimg.cn/blog_migrate/e56ab005dd3afbebd5dfa807dba17589.jpeg)
es集群这里采取的是读写分离模式,常见的主从方式(master----->slave),谁先启动就是master。
这里的数据过滤归档,有很多种方式,思考了良久,采取是最少工时最高效率,从redis消息队列直接取值过滤存档。当然,也可用python方式用es的api的调用数据来归档,看需求,看场景.......
需求五:优化各层次套件,实现ms级查看日志
解决需求五:
各种优化,前端,消息队列,存储,分片,索引,副本,加ngxspeed。改js 支持ms级别。
先看ms级显示:
这是改js里
optimize/bundles/kibana.bundle.js:4264
kibana4.3/optimize/bundles/kibana.bundle.js
es的优化除了能在 elasticsearch.yml配置一些最大最小内存,副本等外,大部人是通过es的api来设置,由于设置项与理论太多了。这里暂两个例子:
管理索引优化
optimize API允许通过API优化一个或多个索引。优化过程的操作基本上优化的索引搜索速度更快(和涉及到Lucene索引内保存每个碎片的段数)。优化操作允许减少的段数,把它们合并。
$ curl -XPOST 'http://localhost:9200/twitter/_optimize'
需求6: 入侵检测检测系统
这个是理论阶段,我还没开始做。只是提供一个思路案例思考。Ossec(事件源、alert源) Logstash (日志收集、分割日志) Elasticsearch (全文搜索) Kibana3 (日志展现) Redis/kafka队列。
入侵检测系统ossec:
ossec 支持2种模式:1、ossec agent; 2、基于redis队列,日志传送到ossec server,然后ossec server会通过对分析日志进格式化处理规则解析,判断异常并且对其做处理,比如写入数据库,触发告警。
如图1为处理日志过程。
说到入侵检测系统,之前作了一个迷你的系统录屏,记录用户从登陆系统的所有操作,把记录在kibana上展示。
USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
if [ "$USER_IP" = "" ]
then
USER_IP=`hostname`
fi
if [ ! -d /data/records ]
then