ELK原本是一个开源实时日志分析平台。
ELK是三个开源软件的缩写,分别为:Elasticsearch 、 Logstash以及Kibana 。目前又新增了一个Beats,是一个轻量级的日志收集处理工具,Beats占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。
Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等
Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。
Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。
Beats在这里是一个轻量级日志采集器,早期的ELK架构中使用Logstash收集、解析日志,但是Logstash对内存、cpu、io等资源消耗比较高。相比 Logstash,Beats所占系统的CPU和内存几乎可以忽略不计。
网上的社工库,大部分是mysql+coreseek+php架构。
coreseek基于sphinx,是一款优秀的全文搜索引擎,缺点是比较轻量级,一旦数据量过数亿,就会有些力不从心,并且搭建集群做分布式性能并不理想。
在ELK中可用全文检索,并且在大数据的查询中的响应几乎都是毫秒级的,速度相当之快!ELK原本用在日志的大数据收集和分析,其可怕的速度作为社工库是不错的选择。
ELK最简单的架构只需要一台机器即可架设。
ELK
需要java
环境的支持,并配置JAVA_HOME
环境变量。
建议直接安装jdk
,jdk
是包含jre
的,下载完记得手动添加安装位置到环境变量。
java
默认安装路径:C:\Program Files\Java
,里面同时有jre
和jdk。
jdk
文件夹里面还有一个jre
文件夹,新建一个系统变量JAVA_HOME
,值为jdk
路径
PATH
新建添加%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
,就配置好JAVA_HOME
环境变量了
通常直接安装默认会自动配置环境变量,不必在手动配置,确认一下即可。
ELK官网下载:
点击下载之后根据不同的操作系统选择相应的版本即可
我这里是在本机windows中运行。
下载好Elasticsearch
、Logstash、
Kibana
三个压缩包后分别进行解压
运行脚本文件都在各文件夹下的 bin 目录下,分别为:
bin/logstash.bat
bin/kibana.bat
bin/elasticsearch.bat
首先运行elasticsearch.bat
双击运行后等待一下访问本机9200端口,如下代表成功:
默认为9200端口,可在 config/elasticsearch.yml 文件中进行修改,通常默认即可
#禁用虚拟内存,提高性能
bootstrap.memory_lock: true
#节点名称自定义
cluster.name: elasticsearch
#数据通信端口
http.port: 9200
#监听网卡
ip network.host: 192.168.1.1
#是否是数据节点
node.data: true
#关闭即可
node.ingest: true
#是否是主节点,不定义的话先启动的是主节点
node.master: true
#最大存储节点
node.max_local_storage_nodes: 1
#节点名字自定义
node.name: Win-Master-1
#数据文件路径
path.data: D:\elk\elasticsearch\data path.logs: D:\elk\elasticsearch\logs
#节点间通信端口:
transport.tcp.port: 9300
#节点ip,节点之间要允许ping和9300端口通信
discovery.zen.ping.unicast.hosts: ["192.168.1.1", "192.168.1.2"] #head插件相关:
http.cors.enabled: true http.cors.allow-origin: "*"
# 0.0.0.0 则开启外网访问
network.host=0.0.0.0
然后运行 kibana.bat 等待一下访问本机5601端口
默认为5601端口,可在 config/kibana.yml 文件中进行修改
最后使用 logstash 导入数据
新建一个文件作为数据及导入格式:
input {
file{#输入源文件,注意此处不能使用反斜杠 path=>"C:/Users/ASUS/Desktop/logstash-8.0.1/bin/dic.txt" start_position=>beginning #定义开头 } } filter { csv{ columns=>["qq","password","mail","地址"] #存储的字段名 separator=>"---" #分隔符 } mutate{ #移除一些默认的输出信息 remove_field=>["message","path","host","@timestamp","@version","original","event","log"] } } output { elasticsearch{ hosts=>["127.0.0.1:9200"] index=>"ling" #导入的库名 document_type=>"qq" #类型名 } stdout{ codec=>rubydebug } }
创建相应的文件
运行命令导入数据
.\logstash.bat -f .\dic.conf
访问http://127.0.0.1:9200/_cat/indices?v可以看到有任务进行
成功后访问http://127.0.0.1:5601/在managerment->ling->可以看到导入的库
点击库可看到数据的大小及数量
新建索引
点击Managerment->Index Pattern
输入信息,与创建的库同名
点击Next step, 然后点击Create index pattern
创建成功后点击Discover查看所有信息
最后搜索信息,点击搜索结果查看信息详情
响应时间非常迅速
后面优化需要配合api接口进行查询
提供的技术仅供学习参考测试,利用本文提供的信息造成的直接或间接损失由使用者自行承担。
别因寒冷放弃前行,要知道冬天的每一道脚印都只会更加清晰。