博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Nagios监控ganglia的指标
阅读量:4556 次
发布时间:2019-06-08

本文共 3208 字,大约阅读时间需要 10 分钟。

这是nagios与ganglia整合的一部分内容 。

通常我们会把ganglia的监控发送给一个主机,我们可以在这个主机上执行nc localhost 8649 可以获取到所有发往这个主机的信息,以xml的形式查看。

nagios监控ganglia的指标的方法就是使用这个思路,check_ganglia.py

先连通ganglia_host,然后获取所有的xml,然后再解析xml,解析的时候找到匹配的主机名,然后再找到下面的metric和值,与你传进来的critical与waring的进行匹配,

然后判断后返回合适的状态。

感觉有点浪费,数据传来传去的。

#!/usr/bin/env python import sysimport getoptimport socketimport xml.parsers.expat class GParser:  def __init__(self, host, metric):    self.inhost =0    self.inmetric = 0    self.value = None    self.host = host    self.metric = metric   def parse(self, file):    p = xml.parsers.expat.ParserCreate()    p.StartElementHandler = parser.start_element    p.EndElementHandler = parser.end_element    p.ParseFile(file)    if self.value == None:      raise Exception('Host/value not found')    return float(self.value)   def start_element(self, name, attrs):    if name == "HOST":      if attrs["NAME"]==self.host:        self.inhost=1    elif self.inhost==1 and name == "METRIC" and attrs["NAME"]==self.metric:      self.value=attrs["VAL"]   def end_element(self, name):    if name == "HOST" and self.inhost==1:      self.inhost=0 def usage():  print """Usage: check_ganglia \-h|--host= -m|--metric= -w|--warning= \-c|--critical= [-s|--server=] [-p|--port=] """  sys.exit(3) if __name__ == "__main__":##############################################################  ganglia_host = 'x.x.x.x'  ganglia_port = 8649  host = None  metric = None  warning = None  critical = None   try:    options, args = getopt.getopt(sys.argv[1:],      "h:m:w:c:s:p:",      ["host=", "metric=", "warning=", "critical=", "server=", "port="],      )  except getopt.GetoptError, err:    print "check_gmond:", str(err)    usage()    sys.exit(3)   for o, a in options:    if o in ("-h", "--host"):       host = a    elif o in ("-m", "--metric"):       metric = a    elif o in ("-w", "--warning"):       warning = float(a)    elif o in ("-c", "--critical"):       critical = float(a)    elif o in ("-p", "--port"):       ganglia_port = int(a)    elif o in ("-s", "--server"):       ganglia_host = a   if critical == None or warning == None or metric == None or host == None:    usage()    sys.exit(3)          try:    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)    s.connect((ganglia_host,ganglia_port))    parser = GParser(host, metric)    value = parser.parse(s.makefile("r"))    s.close()  except Exception, err:    print "CHECKGANGLIA UNKNOWN: Error while getting value \"%s\"" % (err)    sys.exit(3)   if critical > warning:    if value >= critical:      print "CHECKGANGLIA CRITICAL: %s is %.2f" % (metric, value)      sys.exit(2)    elif value >= warning:      print "CHECKGANGLIA WARNING: %s is %.2f" % (metric, value)      sys.exit(1)    else:      print "CHECKGANGLIA OK: %s is %.2f" % (metric, value)      sys.exit(0)  else:    if critical >=value:      print "CHECKGANGLIA CRITICAL: %s is %.2f" % (metric, value)      sys.exit(2)    elif warning >=value:      print "CHECKGANGLIA WARNING: %s is %.2f" % (metric, value)      sys.exit(1)    else:      print "CHECKGANGLIA OK: %s is %.2f" % (metric, value)      sys.exit(0)

测试:

python check_ganglia.py -h hostxx -m load_one -w 10 -c 100

转载于:https://www.cnblogs.com/huaxiaoyao/p/5085108.html

你可能感兴趣的文章
MySQL 删除数据库
查看>>
JavaScript 字符串(String) 对象
查看>>
How to use VisualSVN Server and TortoiseSVN to host your codes and control your codes' version
查看>>
微信小程序picker组件 - 省市二级联动
查看>>
Dynamics CRM 给视图配置安全角色
查看>>
Eclipse修改已存在的SVN地址
查看>>
C++ ACM基础
查看>>
(转)使用 python Matplotlib 库绘图
查看>>
进程/线程切换原则
查看>>
正则表达式语法
查看>>
20165301 2017-2018-2 《Java程序设计》第四周学习总结
查看>>
Vue的简单入门
查看>>
urllib 中的异常处理
查看>>
通过SQL Server的扩展事件来跟踪SQL语句在运行时,时间都消耗到哪儿了?
查看>>
比较:I/O成员函数getline() 与 get()(第二种用法)的用法异同
查看>>
7.内部类(一)之详解内部类
查看>>
1.messager消息提示框
查看>>
C teaching
查看>>
分隔指定内容,提取章节数
查看>>
this point
查看>>