]> git.openstreetmap.org Git - chef.git/commitdiff
Add infrastructure to support relabelling metrics
authorTom Hughes <tom@compton.nu>
Sun, 24 Jan 2021 19:12:21 +0000 (19:12 +0000)
committerTom Hughes <tom@compton.nu>
Sun, 24 Jan 2021 22:42:45 +0000 (22:42 +0000)
cookbooks/prometheus/recipes/server.rb
cookbooks/prometheus/resources/exporter.rb
cookbooks/prometheus/templates/default/prometheus.yml.erb

index 2ebf5a8230d04af5983baf5e575494760f798759..a5a24267d8d17627b4589988d256727bab158c3a 100644 (file)
@@ -159,13 +159,19 @@ search(:node, "recipes:prometheus\\:\\:default").sort_by(&:name).each do |client
     if exporter.is_a?(Hash)
       name = exporter[:name]
       address = exporter[:address]
+      metric_relabel = exporter[:metric_relabel] || []
     else
       name = key
       address = exporter
+      metric_relabel = []
     end
 
     jobs[name] ||= []
-    jobs[name] << { :address => address, :name => client.name }
+    jobs[name] << {
+      :address => address,
+      :instance => client.name.split(".").first,
+      :metric_relabel => metric_relabel
+    }
   end
 end
 
index 69cb80e142497d82f926615a9f154653cd2b2b6a..b56cbf789b82ecffed423d285d779ee5e2d891e1 100644 (file)
@@ -28,6 +28,7 @@ property :command, :kind_of => String
 property :options, :kind_of => [String, Array]
 property :environment, :kind_of => Hash, :default => {}
 property :service, :kind_of => String
+property :metric_relabel, :kind_of => Array
 
 action :create do
   systemd_service service_name do
@@ -57,7 +58,9 @@ action :create do
   end
 
   node.default[:prometheus][:exporters][new_resource.port] = {
-    :name => new_resource.exporter, :address => listen_address
+    :name => new_resource.exporter,
+    :address => listen_address,
+    :metric_relabel => new_resource.metric_relabel
   }
 end
 
index b7a3cf81ef49a54ceed3f91828af503164c7538b..d90c8292b8a4d3a3ef2041667f2a01d02f48f037 100644 (file)
@@ -34,7 +34,17 @@ scrape_configs:
       - targets:
           - "<%= target[:address] %>"
         labels:
-          instance: <%= target[:name].split(".").first %>
+          instance: <%= target[:instance] %>
+<% end -%>
+<% end -%>
+    metric_relabel_configs:
+<% @jobs.sort.each do |name, targets| -%>
+<% targets.each do |target| -%>
+<% target[:metric_relabel].each do |relabel| -%>
+      - source_labels: [instance,<%= relabel[:source_labels] %>]
+        regex: "<%= target[:instance] %>;<%= relabel[:regex] %>"
+        action: <%= relabel[:action] %>
+<% end -%>
 <% end -%>
 <% end -%>