问题背景:
近期的工作中,获取应用日志数据时,发现采用的是elk架构的日志服务器,需要访问ElasticSearch服务器来查询所需要的日志数据
自己也是第一次接触elk,因此走了不少的弯路,主要遇到的问题有:
1、Python如何连接es服务器——elasticsearch库
2、如何发送查询语句,获取查询结果——Query DSL查询语法
3、查询结果较多时,如何进行查询和保存——scroll方法
4、网络异常/查询失败时,如何自动重连——try+catch+while语法
在爆肝了几个晚上之后,总算把以上的全部问题都解决。目前脚本已经能够自动完成大批量的查询(百万量级以上),更改几个简单的参数就可以查询不同类型的日志数据。
总的来说,以下内容是基于实际工作应用的,可能无法包含所有的情况。大家遇到无法解决的问题都欢迎评论回复沟通
正文
问题1:Python如何连接es服务器
其实非常的简单,Python已经有了完善的库函数elasticsearch,只需要导入第三方库,然后实例化es对象就可以建立连接了。
from elasticsearch import Elasticsearch
es_url = "http://127.0.0.1:9200/"
es = Elasticsearch(es_url)
“http://127.0.0.1:9200/” 换成要访问的es服务器地址就可以,一般端口都是9200
连接过程是非常快的,基本在0.1秒左右就能完成连接的建立。但是这时候不会有数据回传,我们需要通过查询语句,才可以进行访问服务器数据
问题2:如何发送查询语句及获取查询结果
发送查询语句
es储存数据的结构和Mysql之类的数据库,其实是差不多的。都是选定表名,然后执行查询语句,通过es.search方法,可以完成查询的操作
res = es.search(index=index_name,
body=query_body,
scroll='20m',
request