elasticsearch的监控脚本
Posted zhengyionline
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了elasticsearch的监控脚本相关的知识,希望对你有一定的参考价值。
监控elasticsearch cluster 集群
通过主动模式将数据发送给zabbix server
1 import json 2 import struct 3 import socket 4 import re 5 from elasticsearch import Elasticsearch 6 7 8 def get_dict_value(res): 9 for k, v in res.items(): 10 value = v 11 return value 12 13 def get_metric_trapper(hosts): 14 sending_data = {‘request‘: ‘sender data‘, ‘data‘: []} 15 es = Elasticsearch(hosts=hosts) 16 res = es.nodes.stats(node_id=‘_local‘)[‘nodes‘] 17 v = get_dict_value(res) 18 host_name = v[‘name‘] 19 for key_info in monitor_key_info: 20 key_one = key_info[‘key_one‘] 21 key_two = key_info[‘key_two‘] 22 key_three = key_info[‘key_three‘] 23 sending_data[‘data‘].append({ 24 ‘host‘: host_name, 25 ‘value‘: v[key_one][key_two][key_three], 26 ‘key‘: ‘es.{}.{}.{}‘.format(key_one, key_two, key_three) 27 }) 28 return sending_data 29 30 def send_data(sender_data): 31 code = 0 32 if len(sender_data[‘data‘]) == 0: 33 code = 3 34 return code 35 mydata = json.dumps(sender_data) 36 data_length = len(mydata) 37 data_header = str(struct.pack(‘q‘, data_length)) 38 data_to_send = ‘ZBXD1‘ + str(data_header) + str(mydata) 39 socket.setdefaulttimeout(30) 40 try: 41 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 42 sock.connect((‘zabbix-IP‘, 10051)) 43 sock.send(data_to_send) 44 except Exception as e: 45 print(e) 46 code = 255 47 return code 48 response_header = sock.recv(5) 49 if not response_header == ‘ZBXD1‘: 50 code = 254 51 return code 52 response_data_header = sock.recv(8) 53 response_data_header = response_data_header[:4] 54 response_len = struct.unpack(‘i‘, response_data_header)[0] 55 response_raw = sock.recv(response_len) 56 sock.close() 57 response = json.loads(response_raw) 58 match = re.match(‘^.*failed.+?(d+).*$‘, response[‘info‘].lower() if ‘info‘ in response else ‘‘) 59 if match is None: 60 code = 2 61 return code 62 else: 63 fails = int(match.group(1)) 64 if fails > 0: 65 code = 1 66 return code 67 return code 68 69 70 if __name__ == ‘__main__‘: 71 hosts = ‘ip:9200‘ 72 monitor_key_info = [ 73 {‘key_one‘: ‘jvm‘, ‘key_two‘: ‘mem‘, ‘key_three‘: ‘heap_used_percent‘}, 74 {‘key_one‘: ‘jvm‘, ‘key_two‘: ‘mem‘, ‘key_three‘: ‘heap_used_in_bytes‘}, 75 {‘key_one‘: ‘jvm‘, ‘key_two‘: ‘mem‘, ‘key_three‘: ‘heap_max_in_bytes‘}, 76 {‘key_one‘: ‘indices‘, ‘key_two‘: ‘store‘, ‘key_three‘: ‘size_in_bytes‘}, 77 {‘key_one‘: ‘indices‘, ‘key_two‘: ‘segments‘, ‘key_three‘: ‘count‘}, 78 {‘key_one‘: ‘indices‘, ‘key_two‘: ‘search‘, ‘key_three‘: ‘query_time_in_millis‘}, 79 {‘key_one‘: ‘indices‘, ‘key_two‘: ‘indexing‘, ‘key_three‘: ‘index_time_in_millis‘}, 80 {‘key_one‘: ‘indices‘, ‘key_two‘: ‘docs‘, ‘key_three‘: ‘count‘}, 81 {‘key_one‘: ‘indices‘, ‘key_two‘: ‘docs‘, ‘key_three‘: ‘deleted‘}, 82 {‘key_one‘: ‘os‘, ‘key_two‘: ‘cpu‘, ‘key_three‘: ‘percent‘}, 83 ] 84 v = get_metric_trapper(hosts=hosts) 85 relust = send_data(v) 86 print(relust)
以上是关于elasticsearch的监控脚本的主要内容,如果未能解决你的问题,请参考以下文章
elasticsearch代码片段,及工具类SearchEsUtil.java
监控Elasticsearch的插件check_es_system
ElasticSearch学习问题记录——Invalid shift value in prefixCoded bytes (is encoded value really an INT?)(代码片段