监控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. java集合详解(附栈,队列)

    1 集合 1.1 为什么会出现集合框架 [1] 之前的数组作为容器时,不能自动拓容 [2] 数值在进行添加和删除操作时,需要开发者自己实现添加和删除. 1.2 Collection接口 1.2.1 C ...

  2. 博弈论初步(SG函数)

    讲解见此博客https://blog.csdn.net/strangedbly/article/details/51137432 理解Nim博弈,基于Nim博弈理解SG函数的含义和作用. 学习求解SG ...

  3. Monkey工具

    Android自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括android测试框架.CTS.Monkey. Monkeyrunner.benchmark.其它test too ...

  4. 关于noip2017的感想

    关于noip2017的感想 晚自习没有事做,也不知道该干什么. 第一次参加noip提高组. 前2年参加普及还算不错,没有犯任何错误. 去年就做了几套历年真题,感觉500+很好拿呀. 但去年的时候看20 ...

  5. 使用 dva 如何配置异步加载路由组件

    来源:https://www.jianshu.com/p/69694013e36b----------------------------------------------------- 普通方式 ...

  6. 运用python绘制小猪佩奇

    用python绘制小猪佩奇 1.打开idle 2.点击File-New Files 3.输入以下代码 1. from turtle import * 2. 3. def nose(x,y):#鼻子 4 ...

  7. vue刷新当前路由

    原理:跳转到空白页,然后再快速跳回原来的页面: 1,新建一个refresh.vue页面并添加到路由,页面内容如下 <script> export default { beforeRoute ...

  8. Asp.Net Core基于JWT认证的数据接口网关Demo

    近日,应一位朋友的邀请写了个Asp.Net Core基于JWT认证的数据接口网关Demo.朋友自己开了个公司,接到的一个升级项目,客户要求用Aps.Net Core做数据网关服务且基于JWT认证实现对 ...

  9. Abp 中 模块 加载及类型自动注入 源码学习笔记

    注意 互相关联多使用接口注册,所以可以 根据需要替换. 始于 Startup.cs 中的  通过 AddApplication 扩展方法添加 Abp支持 1 services.AddApplicati ...

  10. Angular2+ 编译后部署到服务器上页面刷新404问题

    原因:NG2+ 会默认不显示URL后面的文件名 解决方案:使用LocationStrategy方式,然后把URL后的# 替换成index.html# app.module.ts import {Has ...