Skip to content

Commit

Permalink
Improve monitoring of primary database for api, tile and nominatim
Browse files Browse the repository at this point in the history
  • Loading branch information
tomhughes committed Jul 4, 2023
1 parent 88f820a commit b7e5b92
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 30 deletions.
1 change: 1 addition & 0 deletions cookbooks/db/attributes/default.rb
@@ -1,3 +1,4 @@
default[:db][:cluster] = "15/main"

default[:postgresql][:versions] |= ["15"]
default[:postgresql][:monitor_database] = "openstreetmap"
1 change: 1 addition & 0 deletions cookbooks/nominatim/attributes/default.rb
Expand Up @@ -31,5 +31,6 @@
default[:nominatim][:redirects] = {}

default[:postgresql][:versions] |= [node[:nominatim][:dbcluster].split("/").first]
default[:postgresql][:monitor_database] = "nominatim"

default[:accounts][:users][:nominatim][:status] = :role
1 change: 1 addition & 0 deletions cookbooks/postgresql/attributes/default.rb
@@ -1,5 +1,6 @@
default[:postgresql][:versions] = []
default[:postgresql][:clusters] = {}
default[:postgresql][:monitor_database] = "postgres"
default[:postgresql][:settings][:defaults][:port] = "5432"
default[:postgresql][:settings][:defaults][:max_connections] = "100"
default[:postgresql][:settings][:defaults][:ssl] = "true"
Expand Down
65 changes: 35 additions & 30 deletions cookbooks/postgresql/recipes/default.rb
Expand Up @@ -108,76 +108,81 @@
template "ohai.rb.erb"
end

template "/etc/prometheus/exporters/postgres_queries.yml" do
source "postgres_queries.yml.erb"
owner "root"
group "root"
mode "644"
end

package "pgtop"
package "libdbd-pg-perl"

clusters = node[:postgresql][:clusters] || []

clusters.each do |name, details|
suffix = name.tr("/", ":")
prometheus_suffix = name.tr("/", "-")
prometheus_database = node[:postgresql][:monitor_database]

prometheus_exporter "postgres" do
port 10000 + details[:port].to_i
service "postgres-#{prometheus_suffix}"
labels "cluster" => name
scrape_interval "1m"
scrape_timeout "1m"
user "postgres"
options "--no-collector.process_idle --extend.query-path=/etc/prometheus/exporters/postgres_queries.yml"
environment "DATA_SOURCE_NAME" => "postgres:///#{prometheus_database}?host=/run/postgresql&port=#{details[:port]}"
restrict_address_families "AF_UNIX"
remove_ipc false
subscribes :restart, "template[/etc/prometheus/exporters/postgres_queries.yml]"
end

munin_plugin "postgres_bgwriter_#{suffix}" do
munin_suffix = name.tr("/", ":")

munin_plugin "postgres_bgwriter_#{munin_suffix}" do
target "postgres_bgwriter"
conf "munin.erb"
conf_variables :port => details[:port]
end

munin_plugin "postgres_checkpoints_#{suffix}" do
munin_plugin "postgres_checkpoints_#{munin_suffix}" do
target "postgres_checkpoints"
conf "munin.erb"
conf_variables :port => details[:port]
end

munin_plugin "postgres_connections_db_#{suffix}" do
munin_plugin "postgres_connections_db_#{munin_suffix}" do
target "postgres_connections_db"
conf "munin.erb"
conf_variables :port => details[:port]
end

munin_plugin "postgres_users_#{suffix}" do
munin_plugin "postgres_users_#{munin_suffix}" do
target "postgres_users"
conf "munin.erb"
conf_variables :port => details[:port]
end

munin_plugin "postgres_xlog_#{suffix}" do
munin_plugin "postgres_xlog_#{munin_suffix}" do
target "postgres_xlog"
conf "munin.erb"
conf_variables :port => details[:port]
end

next unless File.exist?("/var/lib/postgresql/#{details[:version]}/main/recovery.conf")

munin_plugin "postgres_replication_#{suffix}" do
munin_plugin "postgres_replication_#{munin_suffix}" do
target "postgres_replication"
conf "munin.erb"
conf_variables :port => details[:port]
end
end

uris = clusters.collect do |_, details|
"postgres@:#{details[:port]}/postgres?host=/run/postgresql"
end

template "/etc/prometheus/exporters/postgres_queries.yml" do
source "postgres_queries.yml.erb"
owner "root"
group "root"
mode "644"
service "prometheus-postgres-exporter" do
action [:stop, :disable]
end

# lag / lag_seconds
# process_idle missing state
prometheus_exporter "postgres" do
port 9187
scrape_interval "1m"
scrape_timeout "1m"
user "postgres"
options "--no-collector.process_idle --extend.query-path=/etc/prometheus/exporters/postgres_queries.yml"
environment "DATA_SOURCE_URI" => uris.sort.uniq.first,
"PG_EXPORTER_AUTO_DISCOVER_DATABASES" => "true",
"PG_EXPORTER_EXCLUDE_DATABASES" => "postgres,template0,template1"
restrict_address_families "AF_UNIX"
remove_ipc false
subscribes :restart, "template[/etc/prometheus/exporters/postgres_queries.yml]"
systemd_service "prometheus-postgres-exporter" do
action :delete
end
1 change: 1 addition & 0 deletions cookbooks/tile/attributes/default.rb
Expand Up @@ -14,5 +14,6 @@
default[:tile][:styles] = {}

default[:postgresql][:versions] |= [node[:tile][:database][:cluster].split("/").first]
default[:postgresql][:monitor_database] = "gis"

default[:accounts][:users][:tile][:status] = :role

0 comments on commit b7e5b92

Please sign in to comment.