From 347140eca06a3ffa282d710f4599856b984c676f Mon Sep 17 00:00:00 2001 From: Pradeep Kilambi Date: Thu, 16 Mar 2017 15:45:45 -0400 Subject: [PATCH] Add support to configure publisher in pipeline.yaml pipeline yaml defaults to gnocchi publisher. This wont work if collector(which is deprecated) is still being used. This should be set to notifier:// instead. So lets make this configurable. Change-Id: I242642035c3d3d6e814f54bcd2d1e15c3a53120b --- manifests/agent/notification.pp | 24 +++++ manifests/params.pp | 1 + .../configure-pipeline-8cc371e4af193f1d.yaml | 5 + .../ceilometer_agent_notification_spec.rb | 17 ++++ templates/pipeline.yaml.erb | 98 +++++++++++++++++++ 5 files changed, 145 insertions(+) create mode 100644 releasenotes/notes/configure-pipeline-8cc371e4af193f1d.yaml create mode 100644 templates/pipeline.yaml.erb diff --git a/manifests/agent/notification.pp b/manifests/agent/notification.pp index b1fccd13..00120a83 100644 --- a/manifests/agent/notification.pp +++ b/manifests/agent/notification.pp @@ -67,6 +67,16 @@ # for alarms. # Defaults to ['gnocchi://'], # +# [*manage_pipeline*] +# (Optional) Whether to manage pipeline.yaml +# Defaults to false +# +# [*pipeline_publishers*] +# (Optional) A list of publishers to put in pipeline.yaml. +# By default all the data is dispatched to gnocchi +# Defaults to ['gnocchi://'], If you are using collector +# override this to notifier:// instead. +# class ceilometer::agent::notification ( $manage_service = true, $enabled = true, @@ -78,6 +88,8 @@ class ceilometer::agent::notification ( $package_ensure = 'present', $manage_event_pipeline = false, $event_pipeline_publishers = ['gnocchi://'], + $manage_pipeline = false, + $pipeline_publishers = ['gnocchi://'], ) { include ::ceilometer::deps @@ -119,6 +131,18 @@ class ceilometer::agent::notification ( } } + if ($manage_pipeline) { + validate_array($pipeline_publishers) + + file { 'pipeline': + ensure => present, + path => $::ceilometer::params::pipeline, + content => template('ceilometer/pipeline.yaml.erb'), + selinux_ignore_defaults => true, + tag => 'pipeline', + } + } + ceilometer_config { 'notification/ack_on_event_error' : value => $ack_on_event_error; 'notification/store_events' : value => $store_events; diff --git a/manifests/params.pp b/manifests/params.pp index 84b0df9b..9a026a2b 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -10,6 +10,7 @@ class ceilometer::params { $expirer_command = 'ceilometer-expirer' $user = 'ceilometer' $event_pipeline = '/etc/ceilometer/event_pipeline.yaml' + $pipeline = '/etc/ceilometer/pipeline.yaml' $client_package_name = 'python-ceilometerclient' case $::osfamily { diff --git a/releasenotes/notes/configure-pipeline-8cc371e4af193f1d.yaml b/releasenotes/notes/configure-pipeline-8cc371e4af193f1d.yaml new file mode 100644 index 00000000..96fc8a1f --- /dev/null +++ b/releasenotes/notes/configure-pipeline-8cc371e4af193f1d.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - Add ability to configure pipeline yaml publishers. The default is + gnocchi. If you are using collector, override this param to + publisher:// instead. diff --git a/spec/classes/ceilometer_agent_notification_spec.rb b/spec/classes/ceilometer_agent_notification_spec.rb index 03b5a499..1c1bbaef 100644 --- a/spec/classes/ceilometer_agent_notification_spec.rb +++ b/spec/classes/ceilometer_agent_notification_spec.rb @@ -171,6 +171,23 @@ describe 'ceilometer::agent::notification' do ) } it { is_expected.not_to contain_file('event_pipeline') } end + + context "with pipeline management enabled" do + before { params.merge!( + :manage_pipeline => true + ) } + + it { is_expected.to contain_file('pipeline').with( + 'path' => '/etc/ceilometer/pipeline.yaml', + ) } + end + + context "with pipeline management disabled" do + before { params.merge!( + :manage_pipeline => false + ) } + it { is_expected.not_to contain_file('pipeline') } + end end on_supported_os({ diff --git a/templates/pipeline.yaml.erb b/templates/pipeline.yaml.erb new file mode 100644 index 00000000..c5c41beb --- /dev/null +++ b/templates/pipeline.yaml.erb @@ -0,0 +1,98 @@ +--- +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: +<% @pipeline_publishers.each do |publisher| -%> + - <%= publisher %> +<% end -%> + - 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: +<% @pipeline_publishers.each do |publisher| -%> + - <%= publisher %> +<% end -%> + - name: cpu_delta_sink + transformers: + - name: "delta" + parameters: + target: + name: "cpu.delta" + growth_only: True + publishers: +<% @pipeline_publishers.each do |publisher| -%> + - <%= publisher %> +<% end -%> + - 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: +<% @pipeline_publishers.each do |publisher| -%> + - <%= publisher %> +<% end -%> + - 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: +<% @pipeline_publishers.each do |publisher| -%> + - <%= publisher %> +<% end -%>