From 8f31f105666ee770b3e70e99110c655ab2b4866c Mon Sep 17 00:00:00 2001 From: Ian Crouch Date: Tue, 6 Aug 2024 09:43:53 -0700 Subject: [PATCH 1/6] adding new datadog postgres configs --- manifests/integrations/postgres.pp | 72 +++++++++++-------- ...atadog_agent_integrations_postgres_spec.rb | 21 ++++++ templates/agent-conf.d/postgres.yaml.erb | 17 +++++ 3 files changed, 79 insertions(+), 31 deletions(-) diff --git a/manifests/integrations/postgres.pp b/manifests/integrations/postgres.pp index 00f3f22fd..ca149e5ec 100644 --- a/manifests/integrations/postgres.pp +++ b/manifests/integrations/postgres.pp @@ -83,22 +83,27 @@ # - ["tag_column", "tag_column.datadog.tag"] # class datadog_agent::integrations::postgres( - Optional[String] $password = undef, - String $host = 'localhost', - String $dbname = 'postgres', - Variant[String, Integer] $port = '5432', - String $username = 'datadog', - Boolean $ssl = false, - Boolean $use_psycopg2 = false, - Boolean $collect_function_metrics = false, - Boolean $collect_count_metrics = false, - Boolean $collect_activity_metrics = false, - Boolean $collect_database_size_metrics = false, - Boolean $collect_default_database = false, - Array[String] $tags = [], - Array[String] $tables = [], - Hash $custom_metrics = {}, - Optional[Array] $instances = undef, + Optional[String] $password = undef, + String $host = 'localhost', + String $dbname = 'postgres', + Variant[String, Integer] $port = '5432', + String $username = 'datadog', + Boolean $ssl = false, + Boolean $use_psycopg2 = false, + Boolean $collect_function_metrics = false, + Boolean $collect_count_metrics = false, + Boolean $collect_activity_metrics = false, + Boolean $collect_database_size_metrics = false, + Boolean $collect_default_database = false, + Boolean $dbm = false, + Boolean $database_autodiscovery = false, + Boolean $collect_schemas = false, + Array[String] $database_autodiscovery_includes = [], + Array[String] $database_autodiscovery_excludes = [], + Array[String] $tags = [], + Array[String] $tables = [], + Hash $custom_metrics = {}, + Optional[Array] $instances = undef, ) inherits datadog_agent::params { require ::datadog_agent @@ -124,21 +129,26 @@ if !$instances and $host { $_instances = [{ - 'host' => $host, - 'password' => $password, - 'dbname' => $dbname, - 'port' => $port, - 'username' => $username, - 'ssl' => $ssl, - 'use_psycopg2' => $use_psycopg2, - 'tags' => $tags, - 'tables' => $tables, - 'custom_metrics' => $custom_metrics, - 'collect_function_metrics' => $collect_function_metrics, - 'collect_count_metrics' => $collect_count_metrics, - 'collect_activity_metrics' => $collect_activity_metrics, - 'collect_database_size_metrics' => $collect_database_size_metrics, - 'collect_default_database' => $collect_default_database, + 'host' => $host, + 'password' => $password, + 'dbname' => $dbname, + 'port' => $port, + 'username' => $username, + 'ssl' => $ssl, + 'dbm' => $dbm, + 'database_autodiscovery' => $database_autodiscovery, + 'database_autodiscovery_includes' => $database_autodiscovery_includes, + 'database_autodiscovery_excludes' => $database_autodiscovery_excludes, + 'collect_schemas' => $collect_schemas, + 'use_psycopg2' => $use_psycopg2, + 'tags' => $tags, + 'tables' => $tables, + 'custom_metrics' => $custom_metrics, + 'collect_function_metrics' => $collect_function_metrics, + 'collect_count_metrics' => $collect_count_metrics, + 'collect_activity_metrics' => $collect_activity_metrics, + 'collect_database_size_metrics' => $collect_database_size_metrics, + 'collect_default_database' => $collect_default_database, }] } elsif !$instances{ $_instances = [] diff --git a/spec/classes/datadog_agent_integrations_postgres_spec.rb b/spec/classes/datadog_agent_integrations_postgres_spec.rb index c1d065f71..24348183e 100644 --- a/spec/classes/datadog_agent_integrations_postgres_spec.rb +++ b/spec/classes/datadog_agent_integrations_postgres_spec.rb @@ -71,6 +71,27 @@ } end + context 'with dbm enabled' do + let(:params) do + { + password: 'abc123', + dbm: true, + database_autodiscovery: true, + collect_schemas: true, + database_autodiscovery_includes: ['foo', 'bar'], + database_autodiscovery_excludes: ['baz', 'qux'], + } + end + + it { + is_expected.to contain_file(conf_file) + .with_content(%r{dbm: true}) + .with_content(%r{database_autodiscovery:\s+enabled: true}) + .with_content(%r{collect_schemas: true}) + .with_content(%r{database_autodiscovery:\s+includes:\s+- foo\s+- bar}) + .with_content(%r{database_autodiscovery:\s+excludes:\s+- baz\s+- qux}) + } + end context 'with use_psycopg2' do let(:params) do { diff --git a/templates/agent-conf.d/postgres.yaml.erb b/templates/agent-conf.d/postgres.yaml.erb index bf9a04557..f311e429f 100644 --- a/templates/agent-conf.d/postgres.yaml.erb +++ b/templates/agent-conf.d/postgres.yaml.erb @@ -17,6 +17,7 @@ instances: <%- (Array(@_instances)).each do |instance| -%> - host: <%= instance['host'] %> port: <%= instance['port'] %> + dbm: <%= instance['dbm'] %> username: <%= instance['username'] %> password: <%= instance['password'] %> dbname: <%= instance['dbname'] %> @@ -25,6 +26,22 @@ instances: collect_activity_metrics: <%= instance['collect_activity_metrics'] %> collect_database_size_metrics: <%= instance['collect_database_size_metrics'] %> collect_default_database: <%= instance['collect_default_database'] %> + database_autodiscovery: + enabled: <%= instance['database_autodiscovery'] %> + <% if instance['database_autodiscovery_includes'] -%> + includes: + <% Array(instance['database_autodiscovery_includes']).each do |include| -%> + - <%= include %> + <% end -%> + <% end -%> + <% if instance['database_autodiscovery_excludes'] -%> + excludes: + <% Array(instance['database_autodiscovery_excludes']).each do |exclude| -%> + - <%= exclude %> + <% end -%> + <% end -%> + collect_schemas: + enabled: <%= instance['collect_schemas'] %> <% if instance['ssl'] == true -%> ssl: true <% end -%> From d5a6adedccd9ad4dcec70cbf5cc9fb4af49e5aff Mon Sep 17 00:00:00 2001 From: Ian Crouch Date: Tue, 6 Aug 2024 10:04:55 -0700 Subject: [PATCH 2/6] Cleanup includes and Excludes --- templates/agent-conf.d/postgres.yaml.erb | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/templates/agent-conf.d/postgres.yaml.erb b/templates/agent-conf.d/postgres.yaml.erb index f311e429f..a4999e8ad 100644 --- a/templates/agent-conf.d/postgres.yaml.erb +++ b/templates/agent-conf.d/postgres.yaml.erb @@ -28,16 +28,20 @@ instances: collect_default_database: <%= instance['collect_default_database'] %> database_autodiscovery: enabled: <%= instance['database_autodiscovery'] %> - <% if instance['database_autodiscovery_includes'] -%> + <% if ! instance['database_autodiscovery_includes'].empty? -%> includes: - <% Array(instance['database_autodiscovery_includes']).each do |include| -%> + <% Array(instance['database_autodiscovery_includes']).each do |include| -%> + <%- if include != '' -%> - <%= include %> - <% end -%> + <%- end -%> + <% end -%> <% end -%> - <% if instance['database_autodiscovery_excludes'] -%> + <% if ! instance['database_autodiscovery_excludes'].empty? -%> excludes: <% Array(instance['database_autodiscovery_excludes']).each do |exclude| -%> + <%- if exclude != '' -%> - <%= exclude %> + <%- end -%> <% end -%> <% end -%> collect_schemas: From 5ca8e31a90d2c84c59f9a42a38d7fee600d438ab Mon Sep 17 00:00:00 2001 From: Ian Crouch Date: Tue, 6 Aug 2024 10:10:29 -0700 Subject: [PATCH 3/6] Further Config refinement --- templates/agent-conf.d/postgres.yaml.erb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/agent-conf.d/postgres.yaml.erb b/templates/agent-conf.d/postgres.yaml.erb index a4999e8ad..bedc676e4 100644 --- a/templates/agent-conf.d/postgres.yaml.erb +++ b/templates/agent-conf.d/postgres.yaml.erb @@ -26,6 +26,8 @@ instances: collect_activity_metrics: <%= instance['collect_activity_metrics'] %> collect_database_size_metrics: <%= instance['collect_database_size_metrics'] %> collect_default_database: <%= instance['collect_default_database'] %> + collect_schemas: + enabled: <%= instance['collect_schemas'] %> database_autodiscovery: enabled: <%= instance['database_autodiscovery'] %> <% if ! instance['database_autodiscovery_includes'].empty? -%> @@ -44,8 +46,6 @@ instances: <%- end -%> <% end -%> <% end -%> - collect_schemas: - enabled: <%= instance['collect_schemas'] %> <% if instance['ssl'] == true -%> ssl: true <% end -%> From 4b9d8d4003a623cda28c7eea9ae9e95c01674661 Mon Sep 17 00:00:00 2001 From: Ian Crouch Date: Tue, 6 Aug 2024 10:16:22 -0700 Subject: [PATCH 4/6] trim newline on include/exclude --- templates/agent-conf.d/postgres.yaml.erb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/templates/agent-conf.d/postgres.yaml.erb b/templates/agent-conf.d/postgres.yaml.erb index bedc676e4..f8a4839c3 100644 --- a/templates/agent-conf.d/postgres.yaml.erb +++ b/templates/agent-conf.d/postgres.yaml.erb @@ -34,16 +34,16 @@ instances: includes: <% Array(instance['database_autodiscovery_includes']).each do |include| -%> <%- if include != '' -%> - - <%= include %> + - <%= include -%> <%- end -%> <% end -%> <% end -%> <% if ! instance['database_autodiscovery_excludes'].empty? -%> excludes: <% Array(instance['database_autodiscovery_excludes']).each do |exclude| -%> - <%- if exclude != '' -%> - - <%= exclude %> - <%- end -%> + <%- if exclude != '' -%> + - <%= exclude -%> + <%- end -%> <% end -%> <% end -%> <% if instance['ssl'] == true -%> From 9a60091f7ab07c45ae42225e7feb68f0964bd762 Mon Sep 17 00:00:00 2001 From: Ian Crouch Date: Tue, 6 Aug 2024 10:24:55 -0700 Subject: [PATCH 5/6] Further Further refinement --- templates/agent-conf.d/postgres.yaml.erb | 32 ++++++++++++------------ 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/templates/agent-conf.d/postgres.yaml.erb b/templates/agent-conf.d/postgres.yaml.erb index f8a4839c3..8b0619451 100644 --- a/templates/agent-conf.d/postgres.yaml.erb +++ b/templates/agent-conf.d/postgres.yaml.erb @@ -27,25 +27,25 @@ instances: collect_database_size_metrics: <%= instance['collect_database_size_metrics'] %> collect_default_database: <%= instance['collect_default_database'] %> collect_schemas: - enabled: <%= instance['collect_schemas'] %> + enabled: <%= instance['collect_schemas'] %> database_autodiscovery: - enabled: <%= instance['database_autodiscovery'] %> - <% if ! instance['database_autodiscovery_includes'].empty? -%> + enabled: <%= instance['database_autodiscovery'] %> +<% if instance['database_autodiscovery_includes'] and ! instance['database_autodiscovery_includes'].empty? -%> includes: - <% Array(instance['database_autodiscovery_includes']).each do |include| -%> - <%- if include != '' -%> - - <%= include -%> - <%- end -%> - <% end -%> - <% end -%> - <% if ! instance['database_autodiscovery_excludes'].empty? -%> + <%- Array(instance['database_autodiscovery_includes'] ).each do |include| -%> + <%- if include != '' -%> + - <%= include %> + <%- end -%> + <%- end -%> +<% end -%> +<% if instance['database_autodiscovery_excludes'] and ! instance['database_autodiscovery_excludes'].empty? -%> excludes: - <% Array(instance['database_autodiscovery_excludes']).each do |exclude| -%> - <%- if exclude != '' -%> - - <%= exclude -%> - <%- end -%> - <% end -%> - <% end -%> + <%- Array(instance['database_autodiscovery_excludes'] ).each do |exclude| -%> + <%- if exclude != '' -%> + - <%= exclude %> + <%- end -%> + <%- end -%> +<% end -%> <% if instance['ssl'] == true -%> ssl: true <% end -%> From bee7d52d787d57ab8757807089d723abf5d62843 Mon Sep 17 00:00:00 2001 From: Ian Crouch Date: Wed, 7 Aug 2024 08:26:08 -0700 Subject: [PATCH 6/6] add docs --- manifests/integrations/postgres.pp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/manifests/integrations/postgres.pp b/manifests/integrations/postgres.pp index ca149e5ec..e8b1bf80f 100644 --- a/manifests/integrations/postgres.pp +++ b/manifests/integrations/postgres.pp @@ -30,6 +30,16 @@ # Boolean to enable collecting database size metrics. Default value is True but they might be slow with large databases # $collect_default_database # Boolean to enable collecting statistics from the default database 'postgres' in the check metrics, default to false +# $dbm +# Boolean to enable collecting metrics from the dbm tables, default value is False. +# $database_autodiscovery +# Boolean to enable database autodiscovery, default value is False. +# $collect_schemas +# Boolean to enable collecting schema metrics, default value is False. +# $database_autodiscovery_includes +# Array of strings to include in the database autodiscovery, default value is empty array. +# $database_autodiscovery_excludes +# Array of strings to exclude in the database autodiscovery, default value is empty array. # $tags # Optional array of tags # $tables