1. kibana
kibana是es的可视化工具
最近主要使用了Discover和Management两个功能。
- Discover:查看index的内容并搜索、查询、可视化图等
- Management:es中index的管理
在Management-Index Management下可以查看es中都有哪些index
如下图所示,es的index
回到Discover,Discover如下图所示:
最上边是search框,可以按照条件筛选出自己想要的数据
中间灰色一列是index的信息,被红框框住的test就是index的名称。在我未操作前,test这个 index的背景是类似Refresh按钮处的蓝色,且没有可下拉的倒三角。说明现在kibana只有es中的一个index,虽然es中有上述中的10个index,也就是kibana没有连接es中除了test以外的其他index。如何处理成截图所示,可以下拉选择后续会讲。
灰色框继续向下看,可以看到以t或#开头的图标,这些都是数据的标签(类似name:tom中的name),但是以_开头的都是es自带的标签,没有_的才是我们数据真正的标签。
在_source即最右的一大片地方都是es中的一条条数据,点开其中一条数据的倒三角,可以选择按table或者json查看具体的数据。(每一条都相当于exce的一行数据)
刚才提到最开始,kibana中Discover只有一个index,那么如何添加呢?
这又得回到Management-Index Patterns
点开Index Patterns,可以看到,开始只有一个test,且标记了五角星,说明是默认的index,如果有多个index,选择其中一个,并点击右侧的五角星,即可将该index标记为默认
如果想要添加index(连接es中其他index),可以点击Create Index Pattern,红框处填写创建的index名称,尽量去橙框内的名称(橙框即es中所有index的名称),然后下一步
直接点击create index pattern即可创建成功。这时回到Discover,就可以看到上述截图的样子,并且可以选择看哪个index的内容。
elasticseatch
如何连接及导出数据
import elasticsearch
# 与es进行通信:连接es
es = Elasticsearch(hosts="http://182.181.13.47:9233/")
此时print(es),可以看到es的自带信息(介绍es的)
如果不知道es都有哪些index,可以用下面代码查看:
result = es.search(index='_all') # index可以指定,如果查看所有,用_all
结果可以看到好多{},在index pattern后的{}中有一个title即es中的index名。
一般_source后面是数据
那么如何从es中导出数据呢,可以用以下模板
from elasticsearch import Elasticsearch
from elasticsearch import helpers
def GetVlue():
es = Elasticsearch(["http://182.181.13.47:9233/"]) # 连接es
query ={
"query": {"match_all": {}}
} # 如果导出所有数据,则不需要更改
scanResp = helpers.scan(client=es, query=query, scroll="3m", index='byy_ips',timeout="3m") # index为导出的数据index名,根据需要更改,其他参数默认就好
for k in scanResp:
yield k
def write_file(k):
with open('byy_ips.csv','ab') as f:
k=dict(k)
f.write(k['_source']['attack-name'].encode('gbk')) # _source不用更改,attack-name以及下面的都是数据中的标签名称,根据index数据的标签做响应调整
f.write(b',')
f.write(k['_source']['attack-type'].encode('gbk'))
f.write(b',')
f.write(str(k['_source']['destination-port']).encode('gbk'))
f.write(b',')
f.write(str(k['_source']['event']).encode('gbk'))
f.write(b',')
f.write(str(k['_source']['packet']).encode('gbk'))
f.write(b',')
f.write(k['_source']['source-port'].encode('gbk'))
f.write(b',')
f.write(k['_source']['time'].encode('gbk'))
f.write(b',')
f.write(str(k['_source']['city']).encode('gbk'))
f.write(b',')
f.write(k['_source']['destination-ip'].encode('gbk'))
f.write(b',')
f.write(str(k['_source']['province']).encode('gbk'))
f.write(b',')
f.write(k['_source']['source-ip'].encode('gbk'))
f.write(b'\n')
list1 = GetVlue()
for index,k in enumerate(list1,1):
write_file(k)