-
-
Save robskillington/fb82ee5c737b79a3bc891df3dce7a9aa to your computer and use it in GitHub Desktop.
| // Copyright 2016 Prometheus Team | |
| // Licensed under the Apache License, Version 2.0 (the "License"); | |
| // you may not use this file except in compliance with the License. | |
| // You may obtain a copy of the License at | |
| // | |
| // http://www.apache.org/licenses/LICENSE-2.0 | |
| // | |
| // Unless required by applicable law or agreed to in writing, software | |
| // distributed under the License is distributed on an "AS IS" BASIS, | |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| // See the License for the specific language governing permissions and | |
| // limitations under the License. | |
| syntax = "proto3"; | |
| package prometheus; | |
| option go_package = "prompb"; | |
| message WriteRequest { | |
| repeated prometheus.TimeSeries timeseries = 1; | |
| } | |
| message ReadRequest { | |
| repeated Query queries = 1; | |
| } | |
| message ReadResponse { | |
| // In same order as the request's queries. | |
| repeated QueryResult results = 1; | |
| } | |
| message Query { | |
| int64 start_timestamp_ms = 1; | |
| int64 end_timestamp_ms = 2; | |
| repeated prometheus.LabelMatcher matchers = 3; | |
| prometheus.ReadHints hints = 4; | |
| } | |
| message QueryResult { | |
| // Samples within a time series must be ordered by time. | |
| repeated prometheus.TimeSeries timeseries = 1; | |
| } | |
| message Sample { | |
| double value = 1; | |
| int64 timestamp = 2; | |
| } | |
| message TimeSeries { | |
| repeated Label labels = 1; | |
| repeated Sample samples = 2; | |
| } | |
| message Label { | |
| string name = 1; | |
| string value = 2; | |
| } | |
| message Labels { | |
| repeated Label labels = 1; | |
| } | |
| // Matcher specifies a rule, which can match or set of labels or not. | |
| message LabelMatcher { | |
| enum Type { | |
| EQ = 0; | |
| NEQ = 1; | |
| RE = 2; | |
| NRE = 3; | |
| } | |
| Type type = 1; | |
| string name = 2; | |
| string value = 3; | |
| } | |
| message ReadHints { | |
| int64 step_ms = 1; // Query step size in milliseconds. | |
| string func = 2; // String representation of surrounding function or aggregation. | |
| int64 start_ms = 3; // Start time in milliseconds. | |
| int64 end_ms = 4; // End time in milliseconds. | |
| } |
| # -*- coding: utf-8 -*- | |
| # Generated by the protocol buffer compiler. DO NOT EDIT! | |
| # source: prometheus.proto | |
| import sys | |
| _b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) | |
| from google.protobuf import descriptor as _descriptor | |
| from google.protobuf import message as _message | |
| from google.protobuf import reflection as _reflection | |
| from google.protobuf import symbol_database as _symbol_database | |
| # @@protoc_insertion_point(imports) | |
| _sym_db = _symbol_database.Default() | |
| DESCRIPTOR = _descriptor.FileDescriptor( | |
| name='prometheus.proto', | |
| package='prometheus', | |
| syntax='proto3', | |
| serialized_options=_b('Z\006prompb'), | |
| serialized_pb=_b('\n\x10prometheus.proto\x12\nprometheus\":\n\x0cWriteRequest\x12*\n\ntimeseries\x18\x01 \x03(\x0b\x32\x16.prometheus.TimeSeries\"1\n\x0bReadRequest\x12\"\n\x07queries\x18\x01 \x03(\x0b\x32\x11.prometheus.Query\"8\n\x0cReadResponse\x12(\n\x07results\x18\x01 \x03(\x0b\x32\x17.prometheus.QueryResult\"\x8f\x01\n\x05Query\x12\x1a\n\x12start_timestamp_ms\x18\x01 \x01(\x03\x12\x18\n\x10\x65nd_timestamp_ms\x18\x02 \x01(\x03\x12*\n\x08matchers\x18\x03 \x03(\x0b\x32\x18.prometheus.LabelMatcher\x12$\n\x05hints\x18\x04 \x01(\x0b\x32\x15.prometheus.ReadHints\"9\n\x0bQueryResult\x12*\n\ntimeseries\x18\x01 \x03(\x0b\x32\x16.prometheus.TimeSeries\"*\n\x06Sample\x12\r\n\x05value\x18\x01 \x01(\x01\x12\x11\n\ttimestamp\x18\x02 \x01(\x03\"T\n\nTimeSeries\x12!\n\x06labels\x18\x01 \x03(\x0b\x32\x11.prometheus.Label\x12#\n\x07samples\x18\x02 \x03(\x0b\x32\x12.prometheus.Sample\"$\n\x05Label\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"+\n\x06Labels\x12!\n\x06labels\x18\x01 \x03(\x0b\x32\x11.prometheus.Label\"\x82\x01\n\x0cLabelMatcher\x12+\n\x04type\x18\x01 \x01(\x0e\x32\x1d.prometheus.LabelMatcher.Type\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\r\n\x05value\x18\x03 \x01(\t\"(\n\x04Type\x12\x06\n\x02\x45Q\x10\x00\x12\x07\n\x03NEQ\x10\x01\x12\x06\n\x02RE\x10\x02\x12\x07\n\x03NRE\x10\x03\"L\n\tReadHints\x12\x0f\n\x07step_ms\x18\x01 \x01(\x03\x12\x0c\n\x04\x66unc\x18\x02 \x01(\t\x12\x10\n\x08start_ms\x18\x03 \x01(\x03\x12\x0e\n\x06\x65nd_ms\x18\x04 \x01(\x03\x42\x08Z\x06prompbb\x06proto3') | |
| ) | |
| _LABELMATCHER_TYPE = _descriptor.EnumDescriptor( | |
| name='Type', | |
| full_name='prometheus.LabelMatcher.Type', | |
| filename=None, | |
| file=DESCRIPTOR, | |
| values=[ | |
| _descriptor.EnumValueDescriptor( | |
| name='EQ', index=0, number=0, | |
| serialized_options=None, | |
| type=None), | |
| _descriptor.EnumValueDescriptor( | |
| name='NEQ', index=1, number=1, | |
| serialized_options=None, | |
| type=None), | |
| _descriptor.EnumValueDescriptor( | |
| name='RE', index=2, number=2, | |
| serialized_options=None, | |
| type=None), | |
| _descriptor.EnumValueDescriptor( | |
| name='NRE', index=3, number=3, | |
| serialized_options=None, | |
| type=None), | |
| ], | |
| containing_type=None, | |
| serialized_options=None, | |
| serialized_start=710, | |
| serialized_end=750, | |
| ) | |
| _sym_db.RegisterEnumDescriptor(_LABELMATCHER_TYPE) | |
| _WRITEREQUEST = _descriptor.Descriptor( | |
| name='WriteRequest', | |
| full_name='prometheus.WriteRequest', | |
| filename=None, | |
| file=DESCRIPTOR, | |
| containing_type=None, | |
| fields=[ | |
| _descriptor.FieldDescriptor( | |
| name='timeseries', full_name='prometheus.WriteRequest.timeseries', index=0, | |
| number=1, type=11, cpp_type=10, label=3, | |
| has_default_value=False, default_value=[], | |
| message_type=None, enum_type=None, containing_type=None, | |
| is_extension=False, extension_scope=None, | |
| serialized_options=None, file=DESCRIPTOR), | |
| ], | |
| extensions=[ | |
| ], | |
| nested_types=[], | |
| enum_types=[ | |
| ], | |
| serialized_options=None, | |
| is_extendable=False, | |
| syntax='proto3', | |
| extension_ranges=[], | |
| oneofs=[ | |
| ], | |
| serialized_start=32, | |
| serialized_end=90, | |
| ) | |
| _READREQUEST = _descriptor.Descriptor( | |
| name='ReadRequest', | |
| full_name='prometheus.ReadRequest', | |
| filename=None, | |
| file=DESCRIPTOR, | |
| containing_type=None, | |
| fields=[ | |
| _descriptor.FieldDescriptor( | |
| name='queries', full_name='prometheus.ReadRequest.queries', index=0, | |
| number=1, type=11, cpp_type=10, label=3, | |
| has_default_value=False, default_value=[], | |
| message_type=None, enum_type=None, containing_type=None, | |
| is_extension=False, extension_scope=None, | |
| serialized_options=None, file=DESCRIPTOR), | |
| ], | |
| extensions=[ | |
| ], | |
| nested_types=[], | |
| enum_types=[ | |
| ], | |
| serialized_options=None, | |
| is_extendable=False, | |
| syntax='proto3', | |
| extension_ranges=[], | |
| oneofs=[ | |
| ], | |
| serialized_start=92, | |
| serialized_end=141, | |
| ) | |
| _READRESPONSE = _descriptor.Descriptor( | |
| name='ReadResponse', | |
| full_name='prometheus.ReadResponse', | |
| filename=None, | |
| file=DESCRIPTOR, | |
| containing_type=None, | |
| fields=[ | |
| _descriptor.FieldDescriptor( | |
| name='results', full_name='prometheus.ReadResponse.results', index=0, | |
| number=1, type=11, cpp_type=10, label=3, | |
| has_default_value=False, default_value=[], | |
| message_type=None, enum_type=None, containing_type=None, | |
| is_extension=False, extension_scope=None, | |
| serialized_options=None, file=DESCRIPTOR), | |
| ], | |
| extensions=[ | |
| ], | |
| nested_types=[], | |
| enum_types=[ | |
| ], | |
| serialized_options=None, | |
| is_extendable=False, | |
| syntax='proto3', | |
| extension_ranges=[], | |
| oneofs=[ | |
| ], | |
| serialized_start=143, | |
| serialized_end=199, | |
| ) | |
| _QUERY = _descriptor.Descriptor( | |
| name='Query', | |
| full_name='prometheus.Query', | |
| filename=None, | |
| file=DESCRIPTOR, | |
| containing_type=None, | |
| fields=[ | |
| _descriptor.FieldDescriptor( | |
| name='start_timestamp_ms', full_name='prometheus.Query.start_timestamp_ms', index=0, | |
| number=1, type=3, cpp_type=2, label=1, | |
| has_default_value=False, default_value=0, | |
| message_type=None, enum_type=None, containing_type=None, | |
| is_extension=False, extension_scope=None, | |
| serialized_options=None, file=DESCRIPTOR), | |
| _descriptor.FieldDescriptor( | |
| name='end_timestamp_ms', full_name='prometheus.Query.end_timestamp_ms', index=1, | |
| number=2, type=3, cpp_type=2, label=1, | |
| has_default_value=False, default_value=0, | |
| message_type=None, enum_type=None, containing_type=None, | |
| is_extension=False, extension_scope=None, | |
| serialized_options=None, file=DESCRIPTOR), | |
| _descriptor.FieldDescriptor( | |
| name='matchers', full_name='prometheus.Query.matchers', index=2, | |
| number=3, type=11, cpp_type=10, label=3, | |
| has_default_value=False, default_value=[], | |
| message_type=None, enum_type=None, containing_type=None, | |
| is_extension=False, extension_scope=None, | |
| serialized_options=None, file=DESCRIPTOR), | |
| _descriptor.FieldDescriptor( | |
| name='hints', full_name='prometheus.Query.hints', index=3, | |
| number=4, type=11, cpp_type=10, label=1, | |
| has_default_value=False, default_value=None, | |
| message_type=None, enum_type=None, containing_type=None, | |
| is_extension=False, extension_scope=None, | |
| serialized_options=None, file=DESCRIPTOR), | |
| ], | |
| extensions=[ | |
| ], | |
| nested_types=[], | |
| enum_types=[ | |
| ], | |
| serialized_options=None, | |
| is_extendable=False, | |
| syntax='proto3', | |
| extension_ranges=[], | |
| oneofs=[ | |
| ], | |
| serialized_start=202, | |
| serialized_end=345, | |
| ) | |
| _QUERYRESULT = _descriptor.Descriptor( | |
| name='QueryResult', | |
| full_name='prometheus.QueryResult', | |
| filename=None, | |
| file=DESCRIPTOR, | |
| containing_type=None, | |
| fields=[ | |
| _descriptor.FieldDescriptor( | |
| name='timeseries', full_name='prometheus.QueryResult.timeseries', index=0, | |
| number=1, type=11, cpp_type=10, label=3, | |
| has_default_value=False, default_value=[], | |
| message_type=None, enum_type=None, containing_type=None, | |
| is_extension=False, extension_scope=None, | |
| serialized_options=None, file=DESCRIPTOR), | |
| ], | |
| extensions=[ | |
| ], | |
| nested_types=[], | |
| enum_types=[ | |
| ], | |
| serialized_options=None, | |
| is_extendable=False, | |
| syntax='proto3', | |
| extension_ranges=[], | |
| oneofs=[ | |
| ], | |
| serialized_start=347, | |
| serialized_end=404, | |
| ) | |
| _SAMPLE = _descriptor.Descriptor( | |
| name='Sample', | |
| full_name='prometheus.Sample', | |
| filename=None, | |
| file=DESCRIPTOR, | |
| containing_type=None, | |
| fields=[ | |
| _descriptor.FieldDescriptor( | |
| name='value', full_name='prometheus.Sample.value', index=0, | |
| number=1, type=1, cpp_type=5, label=1, | |
| has_default_value=False, default_value=float(0), | |
| message_type=None, enum_type=None, containing_type=None, | |
| is_extension=False, extension_scope=None, | |
| serialized_options=None, file=DESCRIPTOR), | |
| _descriptor.FieldDescriptor( | |
| name='timestamp', full_name='prometheus.Sample.timestamp', index=1, | |
| number=2, type=3, cpp_type=2, label=1, | |
| has_default_value=False, default_value=0, | |
| message_type=None, enum_type=None, containing_type=None, | |
| is_extension=False, extension_scope=None, | |
| serialized_options=None, file=DESCRIPTOR), | |
| ], | |
| extensions=[ | |
| ], | |
| nested_types=[], | |
| enum_types=[ | |
| ], | |
| serialized_options=None, | |
| is_extendable=False, | |
| syntax='proto3', | |
| extension_ranges=[], | |
| oneofs=[ | |
| ], | |
| serialized_start=406, | |
| serialized_end=448, | |
| ) | |
| _TIMESERIES = _descriptor.Descriptor( | |
| name='TimeSeries', | |
| full_name='prometheus.TimeSeries', | |
| filename=None, | |
| file=DESCRIPTOR, | |
| containing_type=None, | |
| fields=[ | |
| _descriptor.FieldDescriptor( | |
| name='labels', full_name='prometheus.TimeSeries.labels', index=0, | |
| number=1, type=11, cpp_type=10, label=3, | |
| has_default_value=False, default_value=[], | |
| message_type=None, enum_type=None, containing_type=None, | |
| is_extension=False, extension_scope=None, | |
| serialized_options=None, file=DESCRIPTOR), | |
| _descriptor.FieldDescriptor( | |
| name='samples', full_name='prometheus.TimeSeries.samples', index=1, | |
| number=2, type=11, cpp_type=10, label=3, | |
| has_default_value=False, default_value=[], | |
| message_type=None, enum_type=None, containing_type=None, | |
| is_extension=False, extension_scope=None, | |
| serialized_options=None, file=DESCRIPTOR), | |
| ], | |
| extensions=[ | |
| ], | |
| nested_types=[], | |
| enum_types=[ | |
| ], | |
| serialized_options=None, | |
| is_extendable=False, | |
| syntax='proto3', | |
| extension_ranges=[], | |
| oneofs=[ | |
| ], | |
| serialized_start=450, | |
| serialized_end=534, | |
| ) | |
| _LABEL = _descriptor.Descriptor( | |
| name='Label', | |
| full_name='prometheus.Label', | |
| filename=None, | |
| file=DESCRIPTOR, | |
| containing_type=None, | |
| fields=[ | |
| _descriptor.FieldDescriptor( | |
| name='name', full_name='prometheus.Label.name', index=0, | |
| number=1, type=9, cpp_type=9, label=1, | |
| has_default_value=False, default_value=_b("").decode('utf-8'), | |
| message_type=None, enum_type=None, containing_type=None, | |
| is_extension=False, extension_scope=None, | |
| serialized_options=None, file=DESCRIPTOR), | |
| _descriptor.FieldDescriptor( | |
| name='value', full_name='prometheus.Label.value', index=1, | |
| number=2, type=9, cpp_type=9, label=1, | |
| has_default_value=False, default_value=_b("").decode('utf-8'), | |
| message_type=None, enum_type=None, containing_type=None, | |
| is_extension=False, extension_scope=None, | |
| serialized_options=None, file=DESCRIPTOR), | |
| ], | |
| extensions=[ | |
| ], | |
| nested_types=[], | |
| enum_types=[ | |
| ], | |
| serialized_options=None, | |
| is_extendable=False, | |
| syntax='proto3', | |
| extension_ranges=[], | |
| oneofs=[ | |
| ], | |
| serialized_start=536, | |
| serialized_end=572, | |
| ) | |
| _LABELS = _descriptor.Descriptor( | |
| name='Labels', | |
| full_name='prometheus.Labels', | |
| filename=None, | |
| file=DESCRIPTOR, | |
| containing_type=None, | |
| fields=[ | |
| _descriptor.FieldDescriptor( | |
| name='labels', full_name='prometheus.Labels.labels', index=0, | |
| number=1, type=11, cpp_type=10, label=3, | |
| has_default_value=False, default_value=[], | |
| message_type=None, enum_type=None, containing_type=None, | |
| is_extension=False, extension_scope=None, | |
| serialized_options=None, file=DESCRIPTOR), | |
| ], | |
| extensions=[ | |
| ], | |
| nested_types=[], | |
| enum_types=[ | |
| ], | |
| serialized_options=None, | |
| is_extendable=False, | |
| syntax='proto3', | |
| extension_ranges=[], | |
| oneofs=[ | |
| ], | |
| serialized_start=574, | |
| serialized_end=617, | |
| ) | |
| _LABELMATCHER = _descriptor.Descriptor( | |
| name='LabelMatcher', | |
| full_name='prometheus.LabelMatcher', | |
| filename=None, | |
| file=DESCRIPTOR, | |
| containing_type=None, | |
| fields=[ | |
| _descriptor.FieldDescriptor( | |
| name='type', full_name='prometheus.LabelMatcher.type', index=0, | |
| number=1, type=14, cpp_type=8, label=1, | |
| has_default_value=False, default_value=0, | |
| message_type=None, enum_type=None, containing_type=None, | |
| is_extension=False, extension_scope=None, | |
| serialized_options=None, file=DESCRIPTOR), | |
| _descriptor.FieldDescriptor( | |
| name='name', full_name='prometheus.LabelMatcher.name', index=1, | |
| number=2, type=9, cpp_type=9, label=1, | |
| has_default_value=False, default_value=_b("").decode('utf-8'), | |
| message_type=None, enum_type=None, containing_type=None, | |
| is_extension=False, extension_scope=None, | |
| serialized_options=None, file=DESCRIPTOR), | |
| _descriptor.FieldDescriptor( | |
| name='value', full_name='prometheus.LabelMatcher.value', index=2, | |
| number=3, type=9, cpp_type=9, label=1, | |
| has_default_value=False, default_value=_b("").decode('utf-8'), | |
| message_type=None, enum_type=None, containing_type=None, | |
| is_extension=False, extension_scope=None, | |
| serialized_options=None, file=DESCRIPTOR), | |
| ], | |
| extensions=[ | |
| ], | |
| nested_types=[], | |
| enum_types=[ | |
| _LABELMATCHER_TYPE, | |
| ], | |
| serialized_options=None, | |
| is_extendable=False, | |
| syntax='proto3', | |
| extension_ranges=[], | |
| oneofs=[ | |
| ], | |
| serialized_start=620, | |
| serialized_end=750, | |
| ) | |
| _READHINTS = _descriptor.Descriptor( | |
| name='ReadHints', | |
| full_name='prometheus.ReadHints', | |
| filename=None, | |
| file=DESCRIPTOR, | |
| containing_type=None, | |
| fields=[ | |
| _descriptor.FieldDescriptor( | |
| name='step_ms', full_name='prometheus.ReadHints.step_ms', index=0, | |
| number=1, type=3, cpp_type=2, label=1, | |
| has_default_value=False, default_value=0, | |
| message_type=None, enum_type=None, containing_type=None, | |
| is_extension=False, extension_scope=None, | |
| serialized_options=None, file=DESCRIPTOR), | |
| _descriptor.FieldDescriptor( | |
| name='func', full_name='prometheus.ReadHints.func', index=1, | |
| number=2, type=9, cpp_type=9, label=1, | |
| has_default_value=False, default_value=_b("").decode('utf-8'), | |
| message_type=None, enum_type=None, containing_type=None, | |
| is_extension=False, extension_scope=None, | |
| serialized_options=None, file=DESCRIPTOR), | |
| _descriptor.FieldDescriptor( | |
| name='start_ms', full_name='prometheus.ReadHints.start_ms', index=2, | |
| number=3, type=3, cpp_type=2, label=1, | |
| has_default_value=False, default_value=0, | |
| message_type=None, enum_type=None, containing_type=None, | |
| is_extension=False, extension_scope=None, | |
| serialized_options=None, file=DESCRIPTOR), | |
| _descriptor.FieldDescriptor( | |
| name='end_ms', full_name='prometheus.ReadHints.end_ms', index=3, | |
| number=4, type=3, cpp_type=2, label=1, | |
| has_default_value=False, default_value=0, | |
| message_type=None, enum_type=None, containing_type=None, | |
| is_extension=False, extension_scope=None, | |
| serialized_options=None, file=DESCRIPTOR), | |
| ], | |
| extensions=[ | |
| ], | |
| nested_types=[], | |
| enum_types=[ | |
| ], | |
| serialized_options=None, | |
| is_extendable=False, | |
| syntax='proto3', | |
| extension_ranges=[], | |
| oneofs=[ | |
| ], | |
| serialized_start=752, | |
| serialized_end=828, | |
| ) | |
| _WRITEREQUEST.fields_by_name['timeseries'].message_type = _TIMESERIES | |
| _READREQUEST.fields_by_name['queries'].message_type = _QUERY | |
| _READRESPONSE.fields_by_name['results'].message_type = _QUERYRESULT | |
| _QUERY.fields_by_name['matchers'].message_type = _LABELMATCHER | |
| _QUERY.fields_by_name['hints'].message_type = _READHINTS | |
| _QUERYRESULT.fields_by_name['timeseries'].message_type = _TIMESERIES | |
| _TIMESERIES.fields_by_name['labels'].message_type = _LABEL | |
| _TIMESERIES.fields_by_name['samples'].message_type = _SAMPLE | |
| _LABELS.fields_by_name['labels'].message_type = _LABEL | |
| _LABELMATCHER.fields_by_name['type'].enum_type = _LABELMATCHER_TYPE | |
| _LABELMATCHER_TYPE.containing_type = _LABELMATCHER | |
| DESCRIPTOR.message_types_by_name['WriteRequest'] = _WRITEREQUEST | |
| DESCRIPTOR.message_types_by_name['ReadRequest'] = _READREQUEST | |
| DESCRIPTOR.message_types_by_name['ReadResponse'] = _READRESPONSE | |
| DESCRIPTOR.message_types_by_name['Query'] = _QUERY | |
| DESCRIPTOR.message_types_by_name['QueryResult'] = _QUERYRESULT | |
| DESCRIPTOR.message_types_by_name['Sample'] = _SAMPLE | |
| DESCRIPTOR.message_types_by_name['TimeSeries'] = _TIMESERIES | |
| DESCRIPTOR.message_types_by_name['Label'] = _LABEL | |
| DESCRIPTOR.message_types_by_name['Labels'] = _LABELS | |
| DESCRIPTOR.message_types_by_name['LabelMatcher'] = _LABELMATCHER | |
| DESCRIPTOR.message_types_by_name['ReadHints'] = _READHINTS | |
| _sym_db.RegisterFileDescriptor(DESCRIPTOR) | |
| WriteRequest = _reflection.GeneratedProtocolMessageType('WriteRequest', (_message.Message,), dict( | |
| DESCRIPTOR = _WRITEREQUEST, | |
| __module__ = 'prometheus_pb2' | |
| # @@protoc_insertion_point(class_scope:prometheus.WriteRequest) | |
| )) | |
| _sym_db.RegisterMessage(WriteRequest) | |
| ReadRequest = _reflection.GeneratedProtocolMessageType('ReadRequest', (_message.Message,), dict( | |
| DESCRIPTOR = _READREQUEST, | |
| __module__ = 'prometheus_pb2' | |
| # @@protoc_insertion_point(class_scope:prometheus.ReadRequest) | |
| )) | |
| _sym_db.RegisterMessage(ReadRequest) | |
| ReadResponse = _reflection.GeneratedProtocolMessageType('ReadResponse', (_message.Message,), dict( | |
| DESCRIPTOR = _READRESPONSE, | |
| __module__ = 'prometheus_pb2' | |
| # @@protoc_insertion_point(class_scope:prometheus.ReadResponse) | |
| )) | |
| _sym_db.RegisterMessage(ReadResponse) | |
| Query = _reflection.GeneratedProtocolMessageType('Query', (_message.Message,), dict( | |
| DESCRIPTOR = _QUERY, | |
| __module__ = 'prometheus_pb2' | |
| # @@protoc_insertion_point(class_scope:prometheus.Query) | |
| )) | |
| _sym_db.RegisterMessage(Query) | |
| QueryResult = _reflection.GeneratedProtocolMessageType('QueryResult', (_message.Message,), dict( | |
| DESCRIPTOR = _QUERYRESULT, | |
| __module__ = 'prometheus_pb2' | |
| # @@protoc_insertion_point(class_scope:prometheus.QueryResult) | |
| )) | |
| _sym_db.RegisterMessage(QueryResult) | |
| Sample = _reflection.GeneratedProtocolMessageType('Sample', (_message.Message,), dict( | |
| DESCRIPTOR = _SAMPLE, | |
| __module__ = 'prometheus_pb2' | |
| # @@protoc_insertion_point(class_scope:prometheus.Sample) | |
| )) | |
| _sym_db.RegisterMessage(Sample) | |
| TimeSeries = _reflection.GeneratedProtocolMessageType('TimeSeries', (_message.Message,), dict( | |
| DESCRIPTOR = _TIMESERIES, | |
| __module__ = 'prometheus_pb2' | |
| # @@protoc_insertion_point(class_scope:prometheus.TimeSeries) | |
| )) | |
| _sym_db.RegisterMessage(TimeSeries) | |
| Label = _reflection.GeneratedProtocolMessageType('Label', (_message.Message,), dict( | |
| DESCRIPTOR = _LABEL, | |
| __module__ = 'prometheus_pb2' | |
| # @@protoc_insertion_point(class_scope:prometheus.Label) | |
| )) | |
| _sym_db.RegisterMessage(Label) | |
| Labels = _reflection.GeneratedProtocolMessageType('Labels', (_message.Message,), dict( | |
| DESCRIPTOR = _LABELS, | |
| __module__ = 'prometheus_pb2' | |
| # @@protoc_insertion_point(class_scope:prometheus.Labels) | |
| )) | |
| _sym_db.RegisterMessage(Labels) | |
| LabelMatcher = _reflection.GeneratedProtocolMessageType('LabelMatcher', (_message.Message,), dict( | |
| DESCRIPTOR = _LABELMATCHER, | |
| __module__ = 'prometheus_pb2' | |
| # @@protoc_insertion_point(class_scope:prometheus.LabelMatcher) | |
| )) | |
| _sym_db.RegisterMessage(LabelMatcher) | |
| ReadHints = _reflection.GeneratedProtocolMessageType('ReadHints', (_message.Message,), dict( | |
| DESCRIPTOR = _READHINTS, | |
| __module__ = 'prometheus_pb2' | |
| # @@protoc_insertion_point(class_scope:prometheus.ReadHints) | |
| )) | |
| _sym_db.RegisterMessage(ReadHints) | |
| DESCRIPTOR._options = None | |
| # @@protoc_insertion_point(module_scope) |
| from datetime import datetime | |
| from prometheus_pb2 import ( | |
| TimeSeries, | |
| Label, | |
| Labels, | |
| Sample, | |
| WriteRequest | |
| ) | |
| import calendar | |
| import logging | |
| import requests | |
| import snappy | |
| def dt2ts(dt): | |
| """Converts a datetime object to UTC timestamp | |
| naive datetime will be considered UTC. | |
| """ | |
| return calendar.timegm(dt.utctimetuple()) | |
| def write(): | |
| write_request = WriteRequest() | |
| series = write_request.timeseries.add() | |
| # name label always required | |
| label = series.labels.add() | |
| label.name = "__name__" | |
| label.value = "metric_name" | |
| # as many labels you like | |
| label = series.labels.add() | |
| label.name = "ssl_cipher" | |
| label.value = "some_value" | |
| sample = series.samples.add() | |
| sample.value = 42 # your count? | |
| sample.timestamp = dt2ts(datetime.utcnow()) * 1000 | |
| uncompressed = write_request.SerializeToString() | |
| compressed = snappy.compress(uncompressed) | |
| url = "http://localhost:7201/api/v1/prom/remote/write" | |
| headers = { | |
| "Content-Encoding": "snappy", | |
| "Content-Type": "application/x-protobuf", | |
| "X-Prometheus-Remote-Write-Version": "0.1.0", | |
| "User-Agent": "metrics-worker" | |
| } | |
| try: | |
| response = requests.post(url, headers=headers, data=compressed) | |
| except exception as e: | |
| print(e) | |
| write() |
Is there a way to store sample values of different types, e.g. 1.2 at 10:00:00, "some string value" at 10:05:00 ?
This is amazing! thank you
I was battling to get this to work. At first, I thought this was too much boilerplate, but reading through it you really achieved it with minimal deps.
Worth mentioning the requirements
python -m pip install requests python-snappy protobuf==3.20.0
Pinning the protobuf is necessary if we don't want to regenerate the python bindings.
Forked and allowed adding more metrics
https://gist.github.com/nourspace/04264118a5c4c0bffe5a8724b486ab4d
Thanks for this. When I use this, I see the same sample for 5 timestamps. I checked the write_request.timeseries, which shows the value for only one timestamp. For example,
DEBUG cortex.py 87 Sending write request: timeseries {
labels {
name: "__name__"
value: "test_metric"
}
labels {
name: "label1"
value: "value1"
}
labels {
name: "label2"
value: "value2"
}
samples {
value: 21.0
timestamp: 1692054161170
}
}```
But when I post it, I see the same metric duplicated for 5 consecutive mins (so 5 metrics are added 4 in future one each per minute). I am not sure why. Please help. Thanks.
@siddhu208
you probably stop sending your metrics is that right? .... you need to send "break" or some other value to "break" the 5 consecutive mins.
Here is the answer:
https://stackoverflow.com/a/68039813/2715438
https://www.robustperception.io/staleness-and-promql/
1000 thanks rob!
Only 1 compilation issue ( exception -> Exception), adapt url, change lables and I had a breakthrough.
i want to store any type value(like string, double) in sample value. how can i do?