`

日志系统方案需求与实现

elk 
阅读更多
overview:
1.聚合数据展示
2.过滤数据
3.读写分离集群
4.ms级响应查询
5.重要数据归档
6.基于ossec  logstash es 大数据安全关联分析
需求与实现
需求1: 能像tail -f 查看日志,集中式查看日志,不用单节点去查看。        
解决需求1:
           先调研开源日志方案:
                 初级: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:要看聚合的数据,比如a一类集中显式

解决需求2:
        采用 if [type]  == "a" {
            index => "a"
           }
        把数据聚合到index显示,就ok了
 
 
需求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

 

 

 

       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为处理日志过程。


 
 
 
如图2为ossec整个工作过程:
        

 
     说到入侵检测系统,之前作了一个迷你的系统录屏,记录用户从登陆系统的所有操作,把记录在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
  • 大小: 236.1 KB
  • 大小: 41.8 KB
  • 大小: 111.7 KB
  • 大小: 39.7 KB
  • 大小: 14.8 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics