Esempio n. 1
0
 def monitor_states(self, connection):
     logger.debug("enter monitor_states_and_get_nodes")
     object_name = "org.apache.cassandra.net:type=FailureDetector"
     attr = "SimpleStates"
     path = self.build_path(object_name)
     metrics.define_store(path + "." + attr, self.metrics_namespace_prefix)
     simple_states = connection.getAttribute(
         javax.management.ObjectName(object_name), attr).toString()
     simple_states = simple_states.replace("{",
                                           "").replace("}", "").replace(
                                               "/", "").split(", ")
     attr_vlaue = 0
     logger.info("simple_states={}".format(simple_states))
     for item in simple_states:
         ip, status = item.split("=")
         self.all_nodes.add(ip)
         tagv = ip.replace(".", "_").replace(":", "_")
         cur_tagk = {"instance": tagv}
         if status != "UP":
             attr_vlaue = 1
         logger.info("ip={},SimpleStates={}".format(ip, status))
         metrics.emit_store(path + "." + attr,
                            attr_vlaue,
                            prefix=self.metrics_namespace_prefix,
                            tagkv=cur_tagk)
Esempio n. 2
0
    def define_tagkv(self):

        try:
            publish_address_path = "http.publish_address"
            nodes_info = self.client.nodes.info()

            if nodes_info is None:
                return []
            cluster_name = self.find(nodes_info, "cluster_name")
            nodes_info = self.find(nodes_info, "nodes")
            tagv_arr = [self.filename]
            for node_name in nodes_info:
                node_value = nodes_info.get(node_name)
                publish_address = self.find(node_value, publish_address_path)
                tagv = publish_address.replace(".", "_").replace(":", "_")
                self.addrdict[node_name] = tagv
                tagv_arr.append(tagv)
            metrics.define_tagkv('instance', tagv_arr)
            self.metrics_namespace_prefix = '' + cluster_name
            metrics.define_store("cluster.health_status",
                                 self.metrics_namespace_prefix)
            for index in self.indices:
                metrics.define_store(index, self.metrics_namespace_prefix)
        except Exception as e:
            logger.warning(e)
Esempio n. 3
0
 def define_tagkv(self):
     tagv_arr = [self.filename]
     for host in self.hosts:
         temp = {}
         ip = host.split(":")[0]
         port = host.split(":")[1]
         temp["host"] = ip
         temp["port"] = port
         tagv_arr.append(host.replace(".", "_").replace(":", "_"))
     metrics.define_tagkv('instance', tagv_arr)
     for index in self.indices:
         metrics.define_store(index, self.metrics_namespace_prefix)
Esempio n. 4
0
 def monitor(self):
     """
     question:https://stackoverflow.com/questions/7861299/jpype-doesnt-work-inside-thread
     :return:
     """
     jpype.attachThreadToJVM()
     metrics.define_counter("indices.monitor.error",
                            self.metrics_namespace_prefix)
     for node in self.all_nodes:
         try:
             cur_tagk = {
                 "instance": node.replace(".", "_").replace(":", "_")
             }
             connection_factory = self.get_connection_factory(node, "7199")
             connection = connection_factory.getMBeanServerConnection()
             logger.info("monitor,host={}".format(node))
             self.monitor_heap_usesage(node, connection)
             self.monitor_states(connection)
             logger.info(
                 "objectname_attr_dict={}".format(objectname_attr_dict))
             for object_name, attrs in objectname_attr_dict.items():
                 for attribute in attrs:
                     try:
                         attr_vlaue = connection.getAttribute(
                             javax.management.ObjectName(object_name),
                             attribute)
                     except Exception as e:
                         logger.info(
                             "monitor getAttribute ex,attribute={},exception={}"
                             .format(attribute, e))
                         continue
                     if isNumber(attr_vlaue) == False:
                         continue
                     object_name_path = self.build_path(object_name)
                     metrics.define_store(
                         object_name_path + "." + attribute,
                         self.metrics_namespace_prefix)
                     logger.info(
                         "monitor,object_name_path={},object_name={},attr_vlaue={}"
                         .format(object_name_path, object_name, attr_vlaue))
                     metrics.emit_store(
                         object_name_path + "." + attribute,
                         attr_vlaue,
                         prefix=self.metrics_namespace_prefix,
                         tagkv=cur_tagk)
         except Exception as e:
             logger.exception(e)
         finally:
             connection_factory.close()
Esempio n. 5
0
    def monitor_heap_usesage(self, ip, connection):
        object_name = "java.lang:type=Memory"  # 查询内存
        path = self.build_path(object_name)
        attribute = "HeapMemoryUsage"
        metrics.define_store(path + "." + attribute,
                             self.metrics_namespace_prefix)
        tagv = ip.replace(".", "_").replace(":", "_")
        cur_tagk = {"instance": tagv}
        attr = connection.getAttribute(
            javax.management.ObjectName(object_name), attribute)
        used = attr.contents.get("used")
        logger.debug("used={}".format(used))

        metrics.emit_store(path + "." + attribute,
                           used,
                           prefix=self.metrics_namespace_prefix,
                           tagkv=cur_tagk)