]> git.openstreetmap.org Git - chef.git/commitdiff
Add support for using sql_exporter to query postgres
authorTom Hughes <tom@compton.nu>
Thu, 2 Nov 2023 18:19:39 +0000 (18:19 +0000)
committerTom Hughes <tom@compton.nu>
Thu, 2 Nov 2023 18:22:13 +0000 (18:22 +0000)
cookbooks/postgresql/attributes/default.rb
cookbooks/postgresql/recipes/default.rb
cookbooks/postgresql/templates/default/sql_exporter.yml.erb [new file with mode: 0644]

index 19d871ba1c975589560e5465e52dc2d990a94a1c..aa3e4b8ac503dec270aa25e710f0fe168aa1e5e7 100644 (file)
@@ -1,6 +1,7 @@
 default[:postgresql][:versions] = []
 default[:postgresql][:clusters] = {}
 default[:postgresql][:monitor_database] = "postgres"
+default[:postgresql][:monitor_queries] = false
 default[:postgresql][:settings][:defaults][:port] = "5432"
 default[:postgresql][:settings][:defaults][:max_connections] = "100"
 default[:postgresql][:settings][:defaults][:ssl] = "true"
index 1fe903022166d9304704a230fb236f854b227941..086047258a6d3f4e685b36b9531333f6e666fcc9 100644 (file)
@@ -144,6 +144,36 @@ clusters.each do |name, details|
     subscribes :restart, "template[/etc/prometheus/exporters/postgres_queries.yml]"
   end
 
+  if node[:postgresql][:monitor_queries]
+    template "/etc/prometheus/exporters/sql_exporter.yml" do
+      source "sql_exporter.yml.erb"
+      owner "root"
+      group "root"
+      mode "644"
+    end
+
+    prometheus_exporter "sql" do
+      port 20000 + details[:port].to_i
+      service "sql-#{prometheus_suffix}"
+      labels "cluster" => name
+      scrape_interval "1m"
+      scrape_timeout "1m"
+      options "--config.file=/etc/prometheus/exporters/sql_exporter.yml"
+      environment "SQLEXPORTER_TARGET_DSN" => "postgres://prometheus:#{passwords['prometheus']}@/run/postgresql:#{details[:port]}/#{prometheus_database}"
+      restrict_address_families "AF_UNIX"
+      subscribes :restart, "template[/etc/prometheus/exporters/sql_exporter.yml]"
+    end
+  else
+    prometheus_exporter "sql" do
+      action :delete
+      service "sql-#{prometheus_suffix}"
+    end
+
+    file "/etc/prometheus/exporters/sql_exporter.yml" do
+      action :delete
+    end
+  end
+
   munin_suffix = name.tr("/", ":")
 
   munin_plugin "postgres_bgwriter_#{munin_suffix}" do
diff --git a/cookbooks/postgresql/templates/default/sql_exporter.yml.erb b/cookbooks/postgresql/templates/default/sql_exporter.yml.erb
new file mode 100644 (file)
index 0000000..94e9477
--- /dev/null
@@ -0,0 +1,32 @@
+# Global defaults.
+global:
+  # If scrape_timeout <= 0, no timeout is set unless Prometheus provides one. The default is 10s.
+  scrape_timeout: 10s
+  # Subtracted from Prometheus' scrape_timeout to give us some headroom and prevent Prometheus from timing out first.
+  scrape_timeout_offset: 500ms
+  # Minimum interval between collector runs: by default (0s) collectors are executed on every scrape.
+  min_interval: 0s
+  # Maximum number of open connections to any one target. Metric queries will run concurrently on multiple connections,
+  # as will concurrent scrapes.
+  max_connections: 3
+  # Maximum number of idle connections to any one target. Unless you use very long collection intervals, this should
+  # always be the same as max_connections.
+  max_idle_connections: 3
+  # Maximum number of maximum amount of time a connection may be reused. Expired connections may be closed lazily before reuse.
+  # If 0, connections are not closed due to a connection's age.
+  max_connection_lifetime: 5m
+
+# The target to monitor and the collectors to execute on it.
+target:
+  # Data source name always has a URI schema that matches the driver name. In some cases (e.g. MySQL)
+  # the schema gets dropped or replaced to match the driver expected DSN format.
+  data_source_name: postgres
+
+  # Collectors (referenced by name) to execute on the target.
+  # Glob patterns are supported (see <https://pkg.go.dev/path/filepath#Match> for syntax).
+  collectors: [sql_*]
+
+# Collector files specifies a list of globs. One collector definition is read from each matching file.
+# Glob patterns are supported (see <https://pkg.go.dev/path/filepath#Match> for syntax).
+collector_files:
+  - "sql_*.collector.yml"