NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

metrics.py (5605B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\script\net\metrics.py
      2 from __future__ import absolute_import
      3 import monolithmetrics
      4 import cluster
      5 from . import machobase
      6 from . import machoNetPacket
      7 MESSAGE_TYPE_BY_CLASS = {machoNetPacket.MachoPacket: 'N/A',
      8  machoNetPacket.ErrorResponse: 'Error Response',
      9  machoNetPacket.IdentificationRsp: 'Identification Response',
     10  machoNetPacket.IdentificationReq: 'Identification Request',
     11  machoNetPacket.CallRsp: 'Call Response',
     12  machoNetPacket.CallReq: 'Call Request',
     13  machoNetPacket.TransportClosed: 'Transport Closed',
     14  machoNetPacket.Notification: 'Notification',
     15  machoNetPacket.SessionChangeNotification: 'Session Change',
     16  machoNetPacket.SessionInitialStateNotification: 'Session Initial State',
     17  machoNetPacket.PingRsp: 'Ping Response',
     18  machoNetPacket.PingReq: 'Ping Request'}
     19 MESSAGE_TYPE_LABEL = 'message_type:{}'
     20 TRANSPORT_SRC_LABEL = 'transport_src_role:{}'
     21 TRANSPORT_DST_LABEL = 'transport_dst_role:{}'
     22 RX_PICKLE_SIZE_BYTES_METRIC = 'machonet.rx.pickle_size_bytes'
     23 TX_PICKLE_SIZE_BYTES_METRIC = 'machonet.tx.pickle_size_bytes'
     24 DROPPED_PICKLE_SIZE_BYTES_METRIC = 'machonet.dropped.pickle_size_bytes'
     25 RX_OBJECTS_REGISTERED_METRIC = 'machonet.rx.registered_objects.adds'
     26 TX_OBJECTS_REGISTERED_METRIC = 'machonet.tx.registered_objects.adds'
     27 DROPPED_OBJECTS_REGISTERED_METRIC = 'machonet.dropped.registered_objects.adds'
     28 RX_OBJECTS_DEREGISTERED_METRIC = 'machonet.rx.registered_objects.removes'
     29 TX_OBJECTS_DEREGISTERED_METRIC = 'machonet.tx.registered_objects.removes'
     30 DROPPED_OBJECTS_DEREGISTERED_METRIC = 'machonet.dropped.registered_objects.removes'
     31 RX_BYTES_METRIC = 'machonet.rx.bytes'
     32 TX_BYTES_METRIC = 'machonet.tx.bytes'
     33 DROPPED_BYTES_METRIC = 'machonet.dropped.bytes'
     34 RX_COUNT_METRIC = 'machonet.rx.count'
     35 TX_COUNT_METRIC = 'machonet.tx.count'
     36 DROPPED_COUNT_METRIC = 'machonet.dropped.count'
     37 PROMETHEUS_ONLY_METRICS = True
     38 PICKLE_SIZE_BUCKET = [128,
     39  256,
     40  512,
     41  1024,
     42  2048,
     43  8192,
     44  65536]
     45 OBJECT_COUNT_BUCKET = [1,
     46  2,
     47  4,
     48  8,
     49  16,
     50  32]
     51 
     52 def resolve_transport_dst_role(node_id, transport_name):
     53     src = machobase.mode
     54     if src == 'client':
     55         return 'proxy'
     56     if ':client' in transport_name:
     57         return 'client'
     58     if node_id is None:
     59         return 'unknown'
     60     if node_id >= cluster.PROXY_MIN_NODE_ID:
     61         return 'proxy'
     62     if node_id < cluster.PROXY_MIN_NODE_ID:
     63         return 'server'
     64     return 'unknown'
     65 
     66 
     67 def get_labels_list(source_type, destination_type, message_type):
     68     return [TRANSPORT_SRC_LABEL.format(source_type), TRANSPORT_DST_LABEL.format(destination_type), MESSAGE_TYPE_LABEL.format(message_type)]
     69 
     70 
     71 def get_destination_type_labels(node_id, transport_name):
     72     dst = resolve_transport_dst_role(node_id, transport_name)
     73     return NODE_TYPE_LABELS[dst]
     74 
     75 
     76 def buffer_write_message_metrics(message, pickle, tags):
     77     monolithmetrics.histogram(metric=TX_PICKLE_SIZE_BYTES_METRIC, value=len(pickle), tags=tags, buckets=PICKLE_SIZE_BUCKET, prometheus_only=PROMETHEUS_ONLY_METRICS)
     78     monolithmetrics.histogram(metric=TX_OBJECTS_REGISTERED_METRIC, value=len(message.oob.get('OID+', {})), tags=tags, buckets=OBJECT_COUNT_BUCKET, prometheus_only=PROMETHEUS_ONLY_METRICS)
     79     monolithmetrics.histogram(metric=TX_OBJECTS_DEREGISTERED_METRIC, value=len(message.oob.get('OID-', {})), tags=tags, buckets=OBJECT_COUNT_BUCKET, prometheus_only=PROMETHEUS_ONLY_METRICS)
     80     monolithmetrics.increment(metric=TX_COUNT_METRIC, tags=tags, prometheus_only=PROMETHEUS_ONLY_METRICS)
     81     monolithmetrics.increment(metric=TX_BYTES_METRIC, value=len(pickle), tags=tags, prometheus_only=PROMETHEUS_ONLY_METRICS)
     82 
     83 
     84 def buffer_drop_message_metrics(message, pickle, tags):
     85     monolithmetrics.histogram(metric=DROPPED_PICKLE_SIZE_BYTES_METRIC, value=len(pickle), tags=tags, buckets=PICKLE_SIZE_BUCKET, prometheus_only=PROMETHEUS_ONLY_METRICS)
     86     monolithmetrics.histogram(metric=DROPPED_OBJECTS_REGISTERED_METRIC, value=len(message.oob.get('OID+', {})), tags=tags, buckets=OBJECT_COUNT_BUCKET, prometheus_only=PROMETHEUS_ONLY_METRICS)
     87     monolithmetrics.histogram(metric=DROPPED_OBJECTS_DEREGISTERED_METRIC, value=len(message.oob.get('OID-', {})), tags=tags, buckets=OBJECT_COUNT_BUCKET, prometheus_only=PROMETHEUS_ONLY_METRICS)
     88     monolithmetrics.increment(metric=DROPPED_COUNT_METRIC, tags=tags, prometheus_only=PROMETHEUS_ONLY_METRICS)
     89     monolithmetrics.increment(metric=DROPPED_BYTES_METRIC, value=len(pickle), tags=tags, prometheus_only=PROMETHEUS_ONLY_METRICS)
     90 
     91 
     92 def buffer_read_message_metrics(message, pickle, tags):
     93     monolithmetrics.histogram(metric=RX_PICKLE_SIZE_BYTES_METRIC, value=len(pickle), tags=tags, buckets=PICKLE_SIZE_BUCKET, prometheus_only=PROMETHEUS_ONLY_METRICS)
     94     monolithmetrics.histogram(metric=RX_OBJECTS_REGISTERED_METRIC, value=len(message.oob.get('OID+', {})), tags=tags, buckets=OBJECT_COUNT_BUCKET, prometheus_only=PROMETHEUS_ONLY_METRICS)
     95     monolithmetrics.histogram(metric=RX_OBJECTS_DEREGISTERED_METRIC, value=len(message.oob.get('OID-', {})), tags=tags, buckets=OBJECT_COUNT_BUCKET, prometheus_only=PROMETHEUS_ONLY_METRICS)
     96     monolithmetrics.increment(metric=RX_COUNT_METRIC, tags=tags, prometheus_only=PROMETHEUS_ONLY_METRICS)
     97     monolithmetrics.increment(metric=RX_BYTES_METRIC, value=len(pickle), tags=tags, prometheus_only=PROMETHEUS_ONLY_METRICS)
     98 
     99 
    100 NODE_TYPE_LABELS = {}
    101 for destinationType in ['unknown',
    102  'client',
    103  'proxy',
    104  'server']:
    105     labels = {}
    106     for k, v in MESSAGE_TYPE_BY_CLASS.iteritems():
    107         labels[k] = get_labels_list(machobase.mode, destinationType, v)
    108 
    109     NODE_TYPE_LABELS[destinationType] = labels