ceilometer.publisher.prometheus

Source code for ceilometer.publisher.prometheus

#
# Copyright 2016 IBM
#
# 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.

from ceilometer.publisher import http
from ceilometer import sample


[docs]class PrometheusPublisher(http.HttpPublisher): """Publish metering data to Prometheus Pushgateway endpoint This dispatcher inherits from all options of the http dispatcher. To use this publisher for samples, add the following section to the /etc/ceilometer/pipeline.yaml file or simply add it to an existing pipeline:: - name: meter_file meters: - "*" publishers: - prometheus://mypushgateway/metrics/job/ceilometer """ HEADERS = {'Content-type': 'plain/text'}
[docs] def publish_samples(self, samples): """Send a metering message for publishing :param samples: Samples from pipeline after transformation """ if not samples: return data = "" doc_done = set() for s in samples: # NOTE(sileht): delta can't be converted into prometheus data # format so don't set the metric type for it metric_type = None if s.type == sample.TYPE_CUMULATIVE: metric_type = "counter" elif s.type == sample.TYPE_GAUGE: metric_type = "gauge" curated_sname = s.name.replace(".", "_") if metric_type and curated_sname not in doc_done: data += "# TYPE %s %s\n" % (curated_sname, metric_type) doc_done.add(curated_sname) # NOTE(sileht): prometheus pushgateway doesn't allow to push # timestamp_ms # # timestamp_ms = ( # s.get_iso_timestamp().replace(tzinfo=None) - # datetime.utcfromtimestamp(0) # ).total_seconds() * 1000 # data += '%s{resource_id="%s"} %s %d\n' % ( # curated_sname, s.resource_id, s.volume, timestamp_ms) data += '%s{resource_id="%s"} %s\n' % ( curated_sname, s.resource_id, s.volume) self._do_post(data)
[docs] @staticmethod def publish_events(events): raise NotImplementedError
Creative Commons Attribution 3.0 License

Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.