elasticsearch与kibana踩过的坑

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)
发布了111 篇原创文章 · 获赞 113 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43178406/article/details/103904236