监控elasticsearch cluster 集群

通过主动模式将数据发送给zabbix server

 import json
import struct
import socket
import re
from elasticsearch import Elasticsearch def get_dict_value(res):
for k, v in res.items():
value = v
return value def get_metric_trapper(hosts):
sending_data = {'request': 'sender data', 'data': []}
es = Elasticsearch(hosts=hosts)
res = es.nodes.stats(node_id='_local')['nodes']
v = get_dict_value(res)
host_name = v['name']
for key_info in monitor_key_info:
key_one = key_info['key_one']
key_two = key_info['key_two']
key_three = key_info['key_three']
sending_data['data'].append({
'host': host_name,
'value': v[key_one][key_two][key_three],
'key': 'es.{}.{}.{}'.format(key_one, key_two, key_three)
})
return sending_data def send_data(sender_data):
code =
if len(sender_data['data']) == :
code =
return code
mydata = json.dumps(sender_data)
data_length = len(mydata)
data_header = str(struct.pack('q', data_length))
data_to_send = 'ZBXD\1' + str(data_header) + str(mydata)
socket.setdefaulttimeout()
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('zabbix-IP', ))
sock.send(data_to_send)
except Exception as e:
print(e)
code =
return code
response_header = sock.recv()
if not response_header == 'ZBXD\1':
code =
return code
response_data_header = sock.recv()
response_data_header = response_data_header[:]
response_len = struct.unpack('i', response_data_header)[]
response_raw = sock.recv(response_len)
sock.close()
response = json.loads(response_raw)
match = re.match('^.*failed.+?(\d+).*$', response['info'].lower() if 'info' in response else '')
if match is None:
code =
return code
else:
fails = int(match.group())
if fails > :
code =
return code
return code if __name__ == '__main__':
hosts = 'ip:9200'
monitor_key_info = [
{'key_one': 'jvm', 'key_two': 'mem', 'key_three': 'heap_used_percent'},
{'key_one': 'jvm', 'key_two': 'mem', 'key_three': 'heap_used_in_bytes'},
{'key_one': 'jvm', 'key_two': 'mem', 'key_three': 'heap_max_in_bytes'},
{'key_one': 'indices', 'key_two': 'store', 'key_three': 'size_in_bytes'},
{'key_one': 'indices', 'key_two': 'segments', 'key_three': 'count'},
{'key_one': 'indices', 'key_two': 'search', 'key_three': 'query_time_in_millis'},
{'key_one': 'indices', 'key_two': 'indexing', 'key_three': 'index_time_in_millis'},
{'key_one': 'indices', 'key_two': 'docs', 'key_three': 'count'},
{'key_one': 'indices', 'key_two': 'docs', 'key_three': 'deleted'},
{'key_one': 'os', 'key_two': 'cpu', 'key_three': 'percent'},
]
v = get_metric_trapper(hosts=hosts)
relust = send_data(v)
print(relust)

elasticsearch的监控脚本的更多相关文章

  1. nginx响应时间监控脚本

    最近我们服务的使用方总是反应说我们接口超时,于是做了一个监控脚本,统计最近五分钟的响应情况,并对异常情况发送邮件报警. #!/bin/bash function define(){ ori_log_p ...

  2. Linux系统性能统计工具Sar和实时系统性能监控脚本

    sar(System Activity Reporter系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况.系统调用的使用情 ...

  3. [工具开发] keepalived使用nagios监控脚本

    最近在做开发和办公环境的高可用,采用的是keepalived:keepalived基于Linux内核支持的LVS,既能实现高可用,又能实现负载均衡,非常实用. keepalived监控服务状态时可以用 ...

  4. 关于mysql和Apache以及nginx的监控脚本怎么写会比较好的记录

    最近,自己业务进行上线,上线后,需要考虑的是对各种服务进行监控,包括(httpd服务,mysqld服务等),现在想以mysqld服务为例总结下那种方式的脚本最为专业和合理: (1).根据mysql的端 ...

  5. MySQL慢日志监控脚本实例剖析

    公司线上的 MySQL 慢日志,之前一直没有做好监控.趁着上周空闲,我就把监控脚本写了下,今天特地把代码发出来与51博友分享一下. 针对脚本的注解和整体构思,我会放到脚本之后为大家详解. 1 2 3 ...

  6. centos shell编程6一些工作中实践脚本 nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志 直接送给bc做计算 gzip innobackupex/Xtrabackup 第四十节课

    centos   shell编程6一些工作中实践脚本   nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志  直接送给bc做计算  gzip  innobacku ...

  7. oracle监控脚本

    简单命令 1.显示服务器上的可用实例:ps -ef | grep smon2.显示服务器上的可用监听器:ps -ef | grep -i listener | grep -v grep3.查看Orac ...

  8. linux服务监控脚本

    配置需要监控的服务器 数组定义:host_ports=(host_name=host_port=uri_path)host_name为容易识别的服务器名称host_port为服务器ip和服务端口uri ...

  9. 【不积跬步,无以致千里】五个常用的Linux监控脚本代码

    为大家提供五个常用Linux监控脚本(查看主机网卡流量.系统状况监控.监控主机的磁盘空间,当使用空间超过90%就通过发mail来发警告.监控CPU和内存的使用情况.全方位监控主机),有需要的朋友不妨看 ...

随机推荐

  1. Vnpy官网汇总

    Vnpy首页:http://www.vnpy.cn/ Vnpy社区:https://www.vnpy.com/ Vnpy论坛:http://www.vnpie.com/forum.php Github ...

  2. element ui的 el-dropdown-item标签点击事件

    在vue项目中使用element的el-dropdown-item标签时 给标签添加click事件 初始时按照正常写法 <el-dropdown-item @click="click( ...

  3. java之JVM(一)

    内存模型: Java内存模型建立在自动内存管理的概念之上.当一个对象不再被一个应用所引用,垃圾回收器就会回收它,从而释放相应的内存. JVM从底层操作系统中分配内存,并将它们分为以下几个区域: 方法区 ...

  4. Confluence 6 超过当前许可证期限进行升级

    这个页面将会对你在进行 Confluence 升级的时候超过了当前许可证的期限进行升级的情况. 许可证警告 在升级的过程中,你将会在 Confluence 的应用程序日志(log file)中看到类似 ...

  5. RESTful协议

    目的:在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强.性能好.适宜通信的架构 解决问题:如何开发在互联网环境中使用的软件,实现网站即软件 涉及主要元素 资源(Res ...

  6. 8.2 GOF设计模式一: 单实例模式 SingleTon

    GOF设计模式一: 单实例模式 SingleTon  整个美国,只有一个“现任美国总统”  比如,在学校,“老师”,有数百个:“校长”,只有一个  系统运行时,如何保证某个类只允许实例化一个对象 ...

  7. [解决方法] Java-Class.forName() 反射/映射子类 并转化为父类/接口

    实现通过子类名称字符串 动态获取生成子类. 用于模板方法, 抽象工厂模式等. 代码实现: public TheParentClass getSubClass(String subClassName) ...

  8. FPM五:拆解前面的四——OVP做查询和结果

    说明:前面的例子是将list和search放到一个Feeder Class里的,这里来做拆解分步说明. 1.创建SEARCH的结构 2.创建RESULT的结构 表类型(不用表类型的话,需要自己在cla ...

  9. QT中添加工具条QToolBar

    项目用的QT5.3,设计师中没有直接拖工具条的控件,那要怎么加工具条呢? 其实.ui文件是xml类型的文本文件,用uedit或记事本打开,找到之前有的工具条段落,复制粘贴一个,保存,再在vs中用设计师 ...

  10. Redhat 6.3上安装CMake

    在编译libssh时,要用到CMake,而且要依赖3.3以上的版本. 尝试了从CMake官网下载源码,编译安装.结果发现各种依赖,比如要升级GCC,升级Python等等,麻烦要死.搞了半天还是一堆问题 ...