python模块篇05-elasticsearch

ES权威指南中文文档:
https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html
kibana用户手册:
https://www.elastic.co/guide/cn/kibana/current/index.html
中文社区:https://elasticsearch.cn/
客户端api:https://www.elastic.co/guide/en/elasticsearch/client/index.html

连接集群节点 指定连接 es
= Elasticsearch( ['172.16.153.129:9200'], # 认证信息 # http_auth=('elastic', 'changeme')) 动态连接 es = Elasticsearch( ['esnode1:port', 'esnode2:port'], # 在做任何操作之前,先进行嗅探 sniff_on_start=True, # 节点没有响应时,进行刷新,重新连接 sniff_on_connection_fail=True, # 每 60 秒刷新一次 sniffer_timeout=60) 对不同的节点,赋予不同的参数 es = Elasticsearch([ {'host': 'localhost'}, {'host': 'othernode', 'port': 443, 'url_prefix': 'es', 'use_ssl': True},]) 假如使用了 ssl es = Elasticsearch( ['localhost:443', 'other_host:443'], #打开SSL use_ssl=True, #确保我们验证了SSL证书(默认关闭) verify_certs=True, #提供CA证书的路径 ca_certs='/path/to/CA_certs', #PEM格式的SSL客户端证书 client_cert='/path/to/clientcert.pem', #PEM格式的SSL客户端密钥 client_key='/path/to/clientkey.pem' ) 获取相关信息 测试集群是否启动 es.ping() 获取集群基本信息 es.info() 获取集群的健康状态信息 es.cluster.health() 获取当前连接的集群节点信息 es.cluster.client.info() 获取集群目前所有的索引 print(es.cat.indices()) 获取集群的更多信息 es.cluster.stats()

任务:
es.tasks.get()
es.tasks.list()

 

elasticsearch_dsl 模块官网:https://elasticsearch-dsl.readthedocs.io/en/latest/

 

利用实例的cat属性得到更简单易读的信息:

 

 

 

 1 查询
 2 发送查询请求
 3 
 4 es = Elasticsearch(
 5         ['172.16.153.129:9200']
 6     )
 7     
 8 response = es.search(
 9     index="logstash-2017.11.14", # 索引名
10     body={             # 请求体
11       "query": {       # 关键字,把查询语句给 query
12           "bool": {    # 关键字,表示使用 filter 查询,没有匹配度
13                 "must": [      # 表示里面的条件必须匹配,多个匹配元素可以放在列表里
14                     {
15                         "match": {  # 关键字,表示需要匹配的元素
16                             "TransId": '06100021650016153'   # TransId 是字段名, 06100021650016153 是此字段需要匹配到的值
17                         }
18                     },
19                     {
20                         "match": {
21                             "Ds": '2017-05-06'
22                         }
23                     },
24                     {
25                         "match": {
26                             "Gy": '2012020235'
27                         }
28                     }, ],
29                  "must_not": {   # 关键字,表示查询的结果里必须不匹配里面的元素
30                         "match": {  # 关键字
31                             "message": "M("    # message 字段名,这个字段的值一般是查询到的结果内容体。这里的意思是,返回的结果里不能包含特殊字符 'M('
32                         }
33                  }
34             }
35         },
36         
37         # 下面是对返回的结果继续排序
38         "sort": [{"@timestamp": {"order": "desc"}}],
39         "from": start,  # 从匹配到的结果中的第几条数据开始返回,值是匹配到的数据的下标,从 0 开始
40         "size": size    # 返回多少条数据
41       }
42 )
43 
44 
45 得到返回结果的总条数
46 total = res['hits']['total']
47 
48 循环返回的结果,得到想要的内容
49 res_dict={}
50 for hit in res['hits']['hits']:
51     log_time = "%s|%s" % (hit['_source']['Ds'], hit['_source']['Us'])
52     res_dict[log_time] = "%s|%s|%s|%s" % (hit['_source']['beat']['hostname'],hit['_source']['FileName'], hit['_source']['FileNum'],hit['_source']['Messager'])
53 
54 实例查询7天之内的流水号为:06100021650016153 的日志信息
55 query_body={
56     'bool': {
57         'must_not': {'match': {'message': 'M('}}, 
58         'must': [
59             {'match': {'TransId': '06100021650016153'}}, 
60             {'range': {'@timestamp': {'gte': u'now-7d', 'lte': 'now'}}}
61         ]
62     }
63 }
64 
65 res = es.search(
66     index='logstash-2017.11.14',
67     body={
68         "query": query_body,
69         "sort":[{"@timestamp": {"order": "desc"}}]})
70     }
71 )

 

 

posted @ 2020-01-09 11:13  为你编程  阅读(659)  评论(0编辑  收藏  举报