diff --git a/config.yaml b/config.yaml index 17b09fd..a486c4e 100644 --- a/config.yaml +++ b/config.yaml @@ -236,7 +236,7 @@ options: type: boolean default: False description: | - Openstack mostly defaults to using public endpoints for + OpenStack mostly defaults to using public endpoints for internal communication between services. If set to True this option will configure services to use internal endpoints where possible. remote-sink: @@ -249,3 +249,9 @@ options: . 'udp://:/' 'prometheus://pushgateway-host:9091/metrics/job/openstack-telemetry' + pipeline-yaml: + type: string + default: "" + description: | + When set the content is written to /etc/ceilometer/pipeline.yaml, by + default the package's file is used. diff --git a/lib/ceilometer_contexts.py b/lib/ceilometer_contexts.py index 89e3571..069caa2 100644 --- a/lib/ceilometer_contexts.py +++ b/lib/ceilometer_contexts.py @@ -121,6 +121,14 @@ class CeilometerServiceContext(OSContextGenerator): return {} +class CeilometerPipelineContext(OSContextGenerator): + def __call__(self): + ctxt = { + 'pipeline_yaml': config('pipeline-yaml') + } + return ctxt + + class HAProxyContext(OSContextGenerator): interfaces = ['ceilometer-haproxy'] diff --git a/lib/ceilometer_utils.py b/lib/ceilometer_utils.py index 08e98dd..ed25e54 100644 --- a/lib/ceilometer_utils.py +++ b/lib/ceilometer_utils.py @@ -28,6 +28,7 @@ from ceilometer_contexts import ( LoggingConfigContext, MongoDBContext, CeilometerContext, + CeilometerPipelineContext, HAProxyContext, MetricServiceContext, CEILOMETER_PORT, @@ -68,6 +69,7 @@ from copy import deepcopy HAPROXY_CONF = '/etc/haproxy/haproxy.cfg' CEILOMETER_CONF_DIR = "/etc/ceilometer" CEILOMETER_CONF = "%s/ceilometer.conf" % CEILOMETER_CONF_DIR +CEILOMETER_PIPELINE_YAML = "%s/pipeline.yaml" % CEILOMETER_CONF_DIR CEILOMETER_API_SYSTEMD_CONF = ( '/etc/systemd/system/ceilometer-api.service.d/override.conf' ) @@ -178,6 +180,10 @@ CONFIG_FILES = OrderedDict([ 'hook_contexts': [HAProxyContext()], 'services': ['ceilometer-api'], }), + (CEILOMETER_PIPELINE_YAML, { + 'hook_contexts': [CeilometerPipelineContext()], + 'services': ['ceilometer-collector'], + }), (HAPROXY_CONF, { 'hook_contexts': [context.HAProxyContext(singlenode_mode=True), HAProxyContext()], diff --git a/templates/icehouse/pipeline.yaml b/templates/icehouse/pipeline.yaml new file mode 100644 index 0000000..bc3cd93 --- /dev/null +++ b/templates/icehouse/pipeline.yaml @@ -0,0 +1,87 @@ +############################################################################### +## [ WARNING ] +## ceilometer configuration file maintained by Juju +## local changes may be overwritten. +################################################################################ +{%- if pipeline_yaml -%} +{{ pipeline_yaml }} +{% else %} +--- +sources: + - name: meter_source + interval: 600 + meters: + - "*" + sinks: + - meter_sink + - name: cpu_source + interval: 600 + meters: + - "cpu" + sinks: + - cpu_sink + - name: disk_source + interval: 600 + meters: + - "disk.read.bytes" + - "disk.read.requests" + - "disk.write.bytes" + - "disk.write.requests" + sinks: + - disk_sink + - name: network_source + interval: 600 + meters: + - "network.incoming.bytes" + - "network.incoming.packets" + - "network.outgoing.bytes" + - "network.outgoing.packets" + sinks: + - network_sink +sinks: + - name: meter_sink + transformers: + publishers: + - rpc:// + - name: cpu_sink + transformers: + - name: "rate_of_change" + parameters: + target: + name: "cpu_util" + unit: "%" + type: "gauge" + scale: "100.0 / (10**9 * (resource_metadata.cpu_number or 1))" + publishers: + - rpc:// + - name: disk_sink + transformers: + - name: "rate_of_change" + parameters: + source: + map_from: + name: "disk\\.(read|write)\\.(bytes|requests)" + unit: "(B|request)" + target: + map_to: + name: "disk.\\1.\\2.rate" + unit: "\\1/s" + type: "gauge" + publishers: + - rpc:// + - name: network_sink + transformers: + - name: "rate_of_change" + parameters: + source: + map_from: + name: "network\\.(incoming|outgoing)\\.(bytes|packets)" + unit: "(B|packet)" + target: + map_to: + name: "network.\\1.\\2.rate" + unit: "\\1/s" + type: "gauge" + publishers: + - rpc:// +{% endif %} \ No newline at end of file diff --git a/templates/kilo/pipeline.yaml b/templates/kilo/pipeline.yaml new file mode 100644 index 0000000..93f22f9 --- /dev/null +++ b/templates/kilo/pipeline.yaml @@ -0,0 +1,91 @@ +############################################################################### +### [ WARNING ] +### ceilometer configuration file maintained by Juju +### local changes may be overwritten. +################################################################################# +{%- if pipeline_yaml -%} +{{ pipeline_yaml }} +{% else %} +--- +sources: + - name: meter_source + interval: 600 + meters: + - "*" + sinks: + - meter_sink + - name: cpu_source + interval: 600 + meters: + - "cpu" + sinks: + - cpu_sink + - name: disk_source + interval: 600 + meters: + - "disk.read.bytes" + - "disk.read.requests" + - "disk.write.bytes" + - "disk.write.requests" + - "disk.device.read.bytes" + - "disk.device.read.requests" + - "disk.device.write.bytes" + - "disk.device.write.requests" + sinks: + - disk_sink + - name: network_source + interval: 600 + meters: + - "network.incoming.bytes" + - "network.incoming.packets" + - "network.outgoing.bytes" + - "network.outgoing.packets" + sinks: + - network_sink +sinks: + - name: meter_sink + transformers: + publishers: + - notifier:// + - name: cpu_sink + transformers: + - name: "rate_of_change" + parameters: + target: + name: "cpu_util" + unit: "%" + type: "gauge" + scale: "100.0 / (10**9 * (resource_metadata.cpu_number or 1))" + publishers: + - notifier:// + - name: disk_sink + transformers: + - name: "rate_of_change" + parameters: + source: + map_from: + name: "(disk\\.device|disk)\\.(read|write)\\.(bytes|requests)" + unit: "(B|request)" + target: + map_to: + name: "\\1.\\2.\\3.rate" + unit: "\\1/s" + type: "gauge" + publishers: + - notifier:// + - name: network_sink + transformers: + - name: "rate_of_change" + parameters: + source: + map_from: + name: "network\\.(incoming|outgoing)\\.(bytes|packets)" + unit: "(B|packet)" + target: + map_to: + name: "network.\\1.\\2.rate" + unit: "\\1/s" + type: "gauge" + publishers: + - notifier:// +{% endif %} \ No newline at end of file diff --git a/templates/mitaka/pipeline.yaml b/templates/mitaka/pipeline.yaml new file mode 100644 index 0000000..e35d270 --- /dev/null +++ b/templates/mitaka/pipeline.yaml @@ -0,0 +1,101 @@ +############################################################################### +### [ WARNING ] +### ceilometer configuration file maintained by Juju +### local changes may be overwritten. +################################################################################# +{%- if pipeline_yaml -%} +{{ pipeline_yaml }} +{% else %} +--- +sources: + - name: meter_source + interval: 600 + meters: + - "*" + sinks: + - meter_sink + - name: cpu_source + interval: 600 + meters: + - "cpu" + sinks: + - cpu_sink + - cpu_delta_sink + - name: disk_source + interval: 600 + meters: + - "disk.read.bytes" + - "disk.read.requests" + - "disk.write.bytes" + - "disk.write.requests" + - "disk.device.read.bytes" + - "disk.device.read.requests" + - "disk.device.write.bytes" + - "disk.device.write.requests" + sinks: + - disk_sink + - name: network_source + interval: 600 + meters: + - "network.incoming.bytes" + - "network.incoming.packets" + - "network.outgoing.bytes" + - "network.outgoing.packets" + sinks: + - network_sink +sinks: + - name: meter_sink + transformers: + publishers: + - notifier:// + - name: cpu_sink + transformers: + - name: "rate_of_change" + parameters: + target: + name: "cpu_util" + unit: "%" + type: "gauge" + scale: "100.0 / (10**9 * (resource_metadata.cpu_number or 1))" + publishers: + - notifier:// + - name: cpu_delta_sink + transformers: + - name: "delta" + parameters: + target: + name: "cpu.delta" + growth_only: True + publishers: + - notifier:// + - name: disk_sink + transformers: + - name: "rate_of_change" + parameters: + source: + map_from: + name: "(disk\\.device|disk)\\.(read|write)\\.(bytes|requests)" + unit: "(B|request)" + target: + map_to: + name: "\\1.\\2.\\3.rate" + unit: "\\1/s" + type: "gauge" + publishers: + - notifier:// + - name: network_sink + transformers: + - name: "rate_of_change" + parameters: + source: + map_from: + name: "network\\.(incoming|outgoing)\\.(bytes|packets)" + unit: "(B|packet)" + target: + map_to: + name: "network.\\1.\\2.rate" + unit: "\\1/s" + type: "gauge" + publishers: + - notifier:// +{% endif %} \ No newline at end of file diff --git a/templates/ocata/pipeline.yaml b/templates/ocata/pipeline.yaml new file mode 100644 index 0000000..706c1f4 --- /dev/null +++ b/templates/ocata/pipeline.yaml @@ -0,0 +1,98 @@ +############################################################################### +### [ WARNING ] +### ceilometer configuration file maintained by Juju +### local changes may be overwritten. +################################################################################# +{%- if pipeline_yaml -%} +{{ pipeline_yaml }} +{% else %} +--- +sources: + - name: meter_source + meters: + - "*" + sinks: + - meter_sink + - name: cpu_source + meters: + - "cpu" + sinks: + - cpu_sink + - cpu_delta_sink + - name: disk_source + meters: + - "disk.read.bytes" + - "disk.read.requests" + - "disk.write.bytes" + - "disk.write.requests" + - "disk.device.read.bytes" + - "disk.device.read.requests" + - "disk.device.write.bytes" + - "disk.device.write.requests" + sinks: + - disk_sink + - name: network_source + meters: + - "network.incoming.bytes" + - "network.incoming.packets" + - "network.outgoing.bytes" + - "network.outgoing.packets" + sinks: + - network_sink +sinks: + - name: meter_sink + transformers: + publishers: + - notifier:// + - name: cpu_sink + transformers: + - name: "rate_of_change" + parameters: + target: + name: "cpu_util" + unit: "%" + type: "gauge" + max: 100 + scale: "100.0 / (10**9 * (resource_metadata.cpu_number or 1))" + publishers: + - notifier:// + - name: cpu_delta_sink + transformers: + - name: "delta" + parameters: + target: + name: "cpu.delta" + growth_only: True + publishers: + - notifier:// + - name: disk_sink + transformers: + - name: "rate_of_change" + parameters: + source: + map_from: + name: "(disk\\.device|disk)\\.(read|write)\\.(bytes|requests)" + unit: "(B|request)" + target: + map_to: + name: "\\1.\\2.\\3.rate" + unit: "\\1/s" + type: "gauge" + publishers: + - notifier:// + - name: network_sink + transformers: + - name: "rate_of_change" + parameters: + source: + map_from: + name: "network\\.(incoming|outgoing)\\.(bytes|packets)" + unit: "(B|packet)" + target: + map_to: + name: "network.\\1.\\2.rate" + unit: "\\1/s" + type: "gauge" + publishers: + - notifier:// +{% endif %} \ No newline at end of file diff --git a/templates/pike/pipeline.yaml b/templates/pike/pipeline.yaml new file mode 100644 index 0000000..2728a51 --- /dev/null +++ b/templates/pike/pipeline.yaml @@ -0,0 +1,98 @@ +############################################################################### +### [ WARNING ] +### ceilometer configuration file maintained by Juju +### local changes may be overwritten. +################################################################################# +{%- if pipeline_yaml -%} +{{ pipeline_yaml }} +{% else %} +--- +sources: + - name: meter_source + meters: + - "*" + sinks: + - meter_sink + - name: cpu_source + meters: + - "cpu" + sinks: + - cpu_sink + - cpu_delta_sink + - name: disk_source + meters: + - "disk.read.bytes" + - "disk.read.requests" + - "disk.write.bytes" + - "disk.write.requests" + - "disk.device.read.bytes" + - "disk.device.read.requests" + - "disk.device.write.bytes" + - "disk.device.write.requests" + sinks: + - disk_sink + - name: network_source + meters: + - "network.incoming.bytes" + - "network.incoming.packets" + - "network.outgoing.bytes" + - "network.outgoing.packets" + sinks: + - network_sink +sinks: + - name: meter_sink + transformers: + publishers: + - gnocchi:// + - name: cpu_sink + transformers: + - name: "rate_of_change" + parameters: + target: + name: "cpu_util" + unit: "%" + type: "gauge" + max: 100 + scale: "100.0 / (10**9 * (resource_metadata.cpu_number or 1))" + publishers: + - gnocchi:// + - name: cpu_delta_sink + transformers: + - name: "delta" + parameters: + target: + name: "cpu.delta" + growth_only: True + publishers: + - gnocchi:// + - name: disk_sink + transformers: + - name: "rate_of_change" + parameters: + source: + map_from: + name: "(disk\\.device|disk)\\.(read|write)\\.(bytes|requests)" + unit: "(B|request)" + target: + map_to: + name: "\\1.\\2.\\3.rate" + unit: "\\1/s" + type: "gauge" + publishers: + - gnocchi:// + - name: network_sink + transformers: + - name: "rate_of_change" + parameters: + source: + map_from: + name: "network\\.(incoming|outgoing)\\.(bytes|packets)" + unit: "(B|packet)" + target: + map_to: + name: "network.\\1.\\2.rate" + unit: "\\1/s" + type: "gauge" + publishers: + - gnocchi:// +{% endif %} \ No newline at end of file diff --git a/unit_tests/test_ceilometer_utils.py b/unit_tests/test_ceilometer_utils.py index 2e36dc4..70b0922 100644 --- a/unit_tests/test_ceilometer_utils.py +++ b/unit_tests/test_ceilometer_utils.py @@ -126,6 +126,8 @@ class CeilometerUtilsTest(CharmTestCase): 'ceilometer-alarm-notifier', 'ceilometer-alarm-evaluator', 'ceilometer-agent-notification'], + '/etc/ceilometer/pipeline.yaml': [ + 'ceilometer-collector'], '/etc/systemd/system/ceilometer-api.service.d/override.conf': [ 'ceilometer-api'], '/etc/haproxy/haproxy.cfg': ['haproxy'], @@ -150,6 +152,8 @@ class CeilometerUtilsTest(CharmTestCase): 'ceilometer-collector', 'ceilometer-api', 'ceilometer-agent-notification'], + '/etc/ceilometer/pipeline.yaml': [ + 'ceilometer-collector'], '/etc/systemd/system/ceilometer-api.service.d/override.conf': [ 'ceilometer-api'], '/etc/haproxy/haproxy.cfg': ['haproxy'],