Skip to content

Commit 9d7ce46

Browse files
committed
more flexible datadog metrics
1 parent f803dc0 commit 9d7ce46

9 files changed

Lines changed: 438 additions & 163 deletions

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@ All notable changes to this project will be documented in this file.
33

44
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
55

6+
## [7.12.7] - TBD
7+
### Changed
8+
- Allow more flexibility when configuring datadog metrics by giving an option to rename and change the type of each metric.
9+
- Split the single datadog_metrics_hms_readwrite_readonly variable into three separate ones - datadog_metrics_hms_readwrite, datadog_metrics_hms_readonly, datadog_metrics_hms_housekeeper while keeping the default values.
10+
611
## [7.12.6] - 2026-01-22
712
### Added
813
- Added var `apiary_managed_s3_logs_queue_arn` to support use existing SQS queue for s3 logs bucket data event.

common.tf

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,43 @@ locals {
6464

6565
ro_ingress_cidr = var.ingress_cidr
6666
rw_ingress_cidr = length(var.rw_ingress_cidr) == 0 ? var.ingress_cidr : var.rw_ingress_cidr
67-
hms_metrics = join("\\\",\\\"", var.datadog_metrics_hms_readwrite_readonly)
68-
hms_metrics_type_overrides = join("\\\": \\\"gauge\\\",\\\"", var.datadog_metrics_hms_readwrite_readonly)
67+
68+
// datadog metrics readwrite instance
69+
hms_metrics_readwrite = [
70+
for m in var.datadog_metrics_hms_readwrite : {
71+
(m.name) = m.rename != null ? m.rename : m.name
72+
}
73+
]
74+
hms_metrics_type_overrides_readwrite = {
75+
for m in var.datadog_metrics_hms_readwrite :
76+
(m.name) => (m.type != null ? m.type : "gauge")
77+
}
78+
// datadog metrics readwrite instance
79+
80+
// datadog metrics readonly instance
81+
hms_metrics_readonly = [
82+
for m in var.datadog_metrics_hms_readonly : {
83+
(m.name) = m.rename != null ? m.rename : m.name
84+
}
85+
]
86+
hms_metrics_type_overrides_readonly = {
87+
for m in var.datadog_metrics_hms_readonly :
88+
(m.name) => (m.type != null ? m.type : "gauge")
89+
}
90+
// datadog metrics readonly instance
91+
92+
// datadog metrics housekeeper instance
93+
hms_metrics_housekeeper = [
94+
for m in var.datadog_metrics_hms_housekeeper : {
95+
(m.name) = m.rename != null ? m.rename : m.name
96+
}
97+
]
98+
99+
hms_metrics_type_overrides_housekeeper = {
100+
for m in var.datadog_metrics_hms_housekeeper :
101+
(m.name) => (m.type != null ? m.type : "gauge")
102+
}
103+
// datadog metrics housekeeper instance
69104

70105
s3_log_buckets = compact(concat(["${local.apiary_s3_logs_bucket}"], var.additional_s3_log_buckets))
71106

k8s-housekeeper.tf

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,14 @@ resource "kubernetes_deployment_v1" "apiary_hms_housekeeper" {
3131
annotations = {
3232
"ad.datadoghq.com/${local.hms_alias}-housekeeper.check_names" = var.datadog_metrics_enabled ? "[\"prometheus\"]" : null
3333
"ad.datadoghq.com/${local.hms_alias}-housekeeper.init_configs" = var.datadog_metrics_enabled ? "[{}]" : null
34-
"ad.datadoghq.com/${local.hms_alias}-housekeeper.instances" = var.datadog_metrics_enabled ? "[{ \"prometheus_url\": \"http://%%host%%:${var.datadog_metrics_port}/actuator/prometheus\", \"namespace\": \"hms_readwrite\", \"metrics\": [ \"${join("\",\"", var.datadog_metrics_hms_readwrite_readonly)}\" ] , \"type_overrides\": { \"${join("\": \"gauge\",\"", var.datadog_metrics_hms_readwrite_readonly)}\": \"gauge\"} }]" : null
34+
"ad.datadoghq.com/${local.hms_alias}-housekeeper.instances" = var.datadog_metrics_enabled ? jsonencode([
35+
{
36+
prometheus_url = "http://%%host%%:8080/actuator/prometheus"
37+
namespace = var.hms_k8s_metrics_readwrite_namespace
38+
metrics = local.hms_metrics_housekeeper
39+
type_overrides = local.hms_metrics_type_overrides_housekeeper
40+
}
41+
]) : null
3542
"iam.amazonaws.com/role" = var.oidc_provider == "" ? aws_iam_role.apiary_hms_readwrite.name : null
3643
"prometheus.io/path" = "/metrics"
3744
"prometheus.io/port" = "8080"

k8s-readonly.tf

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,15 @@ resource "kubernetes_deployment_v1" "apiary_hms_readonly" {
3838
annotations = {
3939
"ad.datadoghq.com/${local.hms_alias}-readonly.check_names" = var.datadog_metrics_enabled ? "[\"prometheus\"]" : null
4040
"ad.datadoghq.com/${local.hms_alias}-readonly.init_configs" = var.datadog_metrics_enabled ? "[{}]" : null
41-
"ad.datadoghq.com/${local.hms_alias}-readonly.instances" = var.datadog_metrics_enabled ? "[{ \"prometheus_url\": \"http://%%host%%:${var.datadog_metrics_port}/actuator/prometheus\", \"namespace\": \"${var.hms_k8s_metrics_readonly_namespace}\", \"metrics\": [ \"${join("\",\"", var.datadog_metrics_hms_readwrite_readonly)}\" ] , \"type_overrides\": { \"${join("\": \"gauge\",\"", var.datadog_metrics_hms_readwrite_readonly)}\": \"gauge\"} }]" : null
41+
"ad.datadoghq.com/${local.hms_alias}-readonly.instances" = var.datadog_metrics_enabled ? jsonencode([
42+
{
43+
prometheus_url = "http://%%host%%:8080/actuator/prometheus"
44+
namespace = var.hms_k8s_metrics_readonly_namespace
45+
metrics = local.hms_metrics_readonly
46+
type_overrides = local.hms_metrics_type_overrides_readonly
47+
}
48+
]) : null
49+
4250
"iam.amazonaws.com/role" = var.oidc_provider == "" ? aws_iam_role.apiary_hms_readonly.name : null
4351
"prometheus.io/path" = "/metrics"
4452
"prometheus.io/port" = "8080"

k8s-readwrite.tf

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,14 @@ resource "kubernetes_deployment_v1" "apiary_hms_readwrite" {
3838
annotations = {
3939
"ad.datadoghq.com/${local.hms_alias}-readwrite.check_names" = var.datadog_metrics_enabled ? "[\"prometheus\"]" : null
4040
"ad.datadoghq.com/${local.hms_alias}-readwrite.init_configs" = var.datadog_metrics_enabled ? "[{}]" : null
41-
"ad.datadoghq.com/${local.hms_alias}-readwrite.instances" = var.datadog_metrics_enabled ? "[{ \"prometheus_url\": \"http://%%host%%:${var.datadog_metrics_port}/actuator/prometheus\", \"namespace\": \"${var.hms_k8s_metrics_readwrite_namespace}\", \"metrics\": [ \"${join("\",\"", var.datadog_metrics_hms_readwrite_readonly)}\" ] , \"type_overrides\": { \"${join("\": \"gauge\",\"", var.datadog_metrics_hms_readwrite_readonly)}\": \"gauge\"} }]" : null
41+
"ad.datadoghq.com/${local.hms_alias}-readwrite.instances" = var.datadog_metrics_enabled ? jsonencode([
42+
{
43+
prometheus_url = "http://%%host%%:8080/actuator/prometheus"
44+
namespace = var.hms_k8s_metrics_readwrite_namespace
45+
metrics = local.hms_metrics_readwrite
46+
type_overrides = local.hms_metrics_type_overrides_readwrite
47+
}
48+
]) : null
4249
"iam.amazonaws.com/role" = var.oidc_provider == "" ? aws_iam_role.apiary_hms_readwrite.name : null
4350
"prometheus.io/path" = "/metrics"
4451
"prometheus.io/port" = "8080"

templates.tf

Lines changed: 55 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -7,38 +7,38 @@
77
locals{
88
hms_readwrite_template = templatefile("${path.module}/templates/apiary-hms-readwrite.json", {
99
mysql_db_host = "${var.external_database_host == "" ? join("", aws_rds_cluster.apiary_cluster.*.endpoint) : var.external_database_host}"
10-
mysql_db_name = "${var.apiary_database_name}"
10+
mysql_db_name = var.apiary_database_name
1111
mysql_secret_arn = "${data.aws_secretsmanager_secret.db_rw_user.arn}"
1212
hive_metastore_access_mode = "readwrite"
13-
hms_heapsize = "${var.hms_rw_heapsize}"
13+
hms_heapsize = var.hms_rw_heapsize
1414
hms_minthreads = local.hms_ro_minthreads
1515
hms_maxthreads = local.hms_ro_maxthreads
16-
hms_docker_image = "${var.hms_docker_image}"
17-
hms_docker_version = "${var.hms_docker_version}"
16+
hms_docker_image = var.hms_docker_image
17+
hms_docker_version = var.hms_docker_version
1818
hms_additional_vars = var.hms_additional_environment_variables
19-
region = "${var.aws_region}"
19+
region = var.aws_region
2020
loggroup = "${join("", aws_cloudwatch_log_group.apiary_ecs.*.name)}"
21-
hive_metastore_log_level = "${var.hms_log_level}"
22-
nofile_ulimit = "${var.hms_nofile_ulimit}"
21+
hive_metastore_log_level = var.hms_log_level
22+
nofile_ulimit = var.hms_nofile_ulimit
2323
enable_metrics = var.enable_hive_metastore_metrics ? "1" : ""
2424
managed_schemas = join(",", local.schemas_info[*]["schema_name"])
25-
instance_name = "${local.instance_alias}"
25+
instance_name = local.instance_alias
2626
sns_arn = var.enable_metadata_events ? join("", aws_sns_topic.apiary_metadata_events.*.arn) : ""
2727
table_param_filter = var.enable_metadata_events ? var.table_param_filter : ""
2828
disable_glue_db_init = var.disable_glue_db_init ? "1" : ""
2929
enable_gluesync = var.enable_gluesync ? "1" : ""
30-
gluedb_prefix = "${local.gluedb_prefix}"
31-
hms_metrics_namespace = "${var.hms_ecs_metrics_readwrite_namespace}"
30+
gluedb_prefix = local.gluedb_prefix
31+
hms_metrics_namespace = var.hms_ecs_metrics_readwrite_namespace
3232
ranger_service_name = "${local.instance_alias}-metastore"
33-
ranger_policy_manager_url = "${var.ranger_policy_manager_url}"
34-
ranger_audit_solr_url = "${var.ranger_audit_solr_url}"
35-
atlas_kafka_bootstrap_servers = "${var.atlas_kafka_bootstrap_servers}"
36-
atlas_cluster_name = "${local.final_atlas_cluster_name}"
37-
ranger_audit_db_url = "${var.ranger_audit_db_url}"
33+
ranger_policy_manager_url = var.ranger_policy_manager_url
34+
ranger_audit_solr_url = var.ranger_audit_solr_url
35+
atlas_kafka_bootstrap_servers = var.atlas_kafka_bootstrap_servers
36+
atlas_cluster_name = local.final_atlas_cluster_name
37+
ranger_audit_db_url = var.ranger_audit_db_url
3838
ranger_audit_secret_arn = "${var.ranger_audit_db_url == "" ? "" : join("", data.aws_secretsmanager_secret.ranger_audit.*.arn)}"
39-
ldap_url = "${var.ldap_url}"
40-
ldap_ca_cert = "${var.ldap_ca_cert}"
41-
ldap_base = "${var.ldap_base}"
39+
ldap_url = var.ldap_url
40+
ldap_ca_cert = var.ldap_ca_cert
41+
ldap_base = var.ldap_base
4242
ldap_secret_arn = "${var.ldap_url == "" ? "" : join("", data.aws_secretsmanager_secret.ldap_user.*.arn)}"
4343
kafka_bootstrap_servers = var.kafka_bootstrap_servers
4444
kafka_topic_name = var.kafka_topic_name
@@ -73,8 +73,8 @@ locals{
7373
tcp_keepalive_time = var.tcp_keepalive_time
7474
tcp_keepalive_intvl = var.tcp_keepalive_intvl
7575
tcp_keepalive_probes = var.tcp_keepalive_probes
76-
hms_metrics = local.hms_metrics
77-
hms_metrics_type_overrides = local.hms_metrics_type_overrides
76+
hms_metrics = local.hms_metrics_readwrite
77+
hms_metrics_type_overrides = local.hms_metrics_type_overrides_readwrite
7878

7979
// Splunk configuration
8080
enable_splunk_logging = var.enable_splunk_logging
@@ -86,32 +86,32 @@ locals{
8686

8787
hms_readonly_template = templatefile("${path.module}/templates/apiary-hms-readonly.json", {
8888
mysql_db_host = "${var.external_database_host == "" ? join("", aws_rds_cluster.apiary_cluster.*.reader_endpoint) : coalesce(var.external_database_host_readonly,var.external_database_host)}"
89-
mysql_db_name = "${var.apiary_database_name}"
90-
mysql_secret_arn = "${data.aws_secretsmanager_secret.db_ro_user.arn}"
89+
mysql_db_name = var.apiary_database_name
90+
mysql_secret_arn = data.aws_secretsmanager_secret.db_ro_user.arn
9191
hive_metastore_access_mode = "readonly"
92-
hms_heapsize = "${var.hms_ro_heapsize}"
92+
hms_heapsize = var.hms_ro_heapsize
9393
hms_minthreads = local.hms_rw_minthreads
9494
hms_maxthreads = local.hms_rw_maxthreads
95-
hms_docker_image = "${var.hms_docker_image}"
96-
hms_docker_version = "${var.hms_docker_version}"
95+
hms_docker_image = var.hms_docker_image
96+
hms_docker_version = var.hms_docker_version
9797
hms_additional_vars = var.hms_additional_environment_variables
98-
region = "${var.aws_region}"
98+
region = var.aws_region
9999
loggroup = "${join("", aws_cloudwatch_log_group.apiary_ecs.*.name)}"
100-
hive_metastore_log_level = "${var.hms_log_level}"
101-
nofile_ulimit = "${var.hms_nofile_ulimit}"
100+
hive_metastore_log_level = var.hms_log_level
101+
nofile_ulimit = var.hms_nofile_ulimit
102102
enable_metrics = var.enable_hive_metastore_metrics ? "1" : ""
103103
shared_schemas = "${join(",", var.apiary_shared_schemas)}"
104-
instance_name = "${local.instance_alias}"
104+
instance_name = local.instance_alias
105105

106-
ranger_service_name = "${local.instance_alias}-metastore"
107-
ranger_policy_manager_url = "${var.ranger_policy_manager_url}"
108-
ranger_audit_solr_url = "${var.ranger_audit_solr_url}"
109-
ranger_audit_db_url = "${var.ranger_audit_db_url}"
110-
ranger_audit_secret_arn = "${var.ranger_audit_db_url == "" ? "" : join("", data.aws_secretsmanager_secret.ranger_audit.*.arn)}"
111-
ldap_url = "${var.ldap_url}"
112-
ldap_ca_cert = "${var.ldap_ca_cert}"
113-
ldap_base = "${var.ldap_base}"
114-
ldap_secret_arn = "${var.ldap_url == "" ? "" : join("", data.aws_secretsmanager_secret.ldap_user.*.arn)}"
106+
ranger_service_name = "${local.instance_alias}-metastore"
107+
ranger_policy_manager_url = var.ranger_policy_manager_url
108+
ranger_audit_solr_url = var.ranger_audit_solr_url
109+
ranger_audit_db_url = var.ranger_audit_db_url
110+
ranger_audit_secret_arn = "${var.ranger_audit_db_url == "" ? "" : join("", data.aws_secretsmanager_secret.ranger_audit.*.arn)}"
111+
ldap_url = var.ldap_url
112+
ldap_ca_cert = var.ldap_ca_cert
113+
ldap_base = var.ldap_base
114+
ldap_secret_arn = "${var.ldap_url == "" ? "" : join("", data.aws_secretsmanager_secret.ldap_user.*.arn)}"
115115

116116
hms_ro_db_connection_pool_size = var.hms_ro_db_connection_pool_size
117117
hms_ro_request_partition_limit = var.hms_ro_request_partition_limit == "" ? "" : var.hms_ro_request_partition_limit
@@ -120,25 +120,25 @@ locals{
120120
docker_auth = "${var.docker_registry_auth_secret_name == "" ? "" : format("\"repositoryCredentials\" :{\n \"credentialsParameter\":\"%s\"\n},", join("\",\"", concat(data.aws_secretsmanager_secret.docker_registry.*.arn)))}"
121121

122122
# Template vars for init container
123-
init_container_enabled = var.external_database_host == "" ? true : false
124-
mysql_permissions = "SELECT"
125-
mysql_write_db = "${var.external_database_host == "" ? join("", aws_rds_cluster.apiary_cluster.*.endpoint) : var.external_database_host}"
126-
mysql_master_cred_arn = var.external_database_host == "" ? aws_secretsmanager_secret.apiary_mysql_master_credentials[0].arn : null
127-
mysql_user_cred_arn = data.aws_secretsmanager_secret.db_ro_user.arn
123+
init_container_enabled = var.external_database_host == "" ? true : false
124+
mysql_permissions = "SELECT"
125+
mysql_write_db = "${var.external_database_host == "" ? join("", aws_rds_cluster.apiary_cluster.*.endpoint) : var.external_database_host}"
126+
mysql_master_cred_arn = var.external_database_host == "" ? aws_secretsmanager_secret.apiary_mysql_master_credentials[0].arn : null
127+
mysql_user_cred_arn = data.aws_secretsmanager_secret.db_ro_user.arn
128128

129129
# Datadog variables
130-
datadog_agent_enabled = var.datadog_agent_enabled
131-
datadog_secret_key = length(var.datadog_key_secret_name) > 0 ? chomp(data.external.datadog_key[0].result["api_key"]) : ""
132-
wd_instance_type = var.hms_instance_type
133-
metrics_port = var.datadog_metrics_port
134-
datadog_agent_version = var.datadog_agent_version
135-
datadog_tags = local.datadog_tags
136-
tcp_keepalive_time = var.tcp_keepalive_time
137-
tcp_keepalive_intvl = var.tcp_keepalive_intvl
138-
tcp_keepalive_probes = var.tcp_keepalive_probes
139-
hms_metrics_namespace = "${var.hms_ecs_metrics_readonly_namespace}"
140-
hms_metrics = local.hms_metrics
141-
hms_metrics_type_overrides = local.hms_metrics_type_overrides
130+
datadog_agent_enabled = var.datadog_agent_enabled
131+
datadog_secret_key = length(var.datadog_key_secret_name) > 0 ? chomp(data.external.datadog_key[0].result["api_key"]) : ""
132+
wd_instance_type = var.hms_instance_type
133+
metrics_port = var.datadog_metrics_port
134+
datadog_agent_version = var.datadog_agent_version
135+
datadog_tags = local.datadog_tags
136+
tcp_keepalive_time = var.tcp_keepalive_time
137+
tcp_keepalive_intvl = var.tcp_keepalive_intvl
138+
tcp_keepalive_probes = var.tcp_keepalive_probes
139+
hms_metrics_namespace = var.hms_ecs_metrics_readonly_namespace
140+
hms_metrics = local.hms_metrics_readonly
141+
hms_metrics_type_overrides = local.hms_metrics_type_overrides_readonly
142142

143143
// Splunk configuration
144144
enable_splunk_logging = var.enable_splunk_logging

templates/apiary-hms-readonly.json

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,13 @@
8484
}
8585
},
8686
"dockerLabels": {
87-
"com.datadoghq.ad.instances": "[{ \"prometheus_url\": \"http://%%host%%:8080/actuator/prometheus\", \"namespace\": \"${hms_metrics_namespace}\", \"metrics\": [\"${hms_metrics}\"],\"type_overrides\":{\"${hms_metrics_type_overrides}\": \"gauge\"} }]",
88-
"com.datadoghq.ad.check_names": "[\"prometheus\"]",
87+
"com.datadoghq.ad.instances": ${jsonencode([{
88+
"prometheus_url": "http://%%host%%:8080/actuator/prometheus",
89+
"namespace": "${hms_metrics_namespace}",
90+
"metrics": "${hms_metrics}",
91+
"type_overrides": "${hms_metrics_type_overrides}"
92+
}])},
93+
"com.datadoghq.ad.check_names": "[\"prometheus\"]",
8994
"com.datadoghq.ad.init_configs": "[{}]"
9095
},
9196
"portMappings": [

templates/apiary-hms-readwrite.json

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -84,16 +84,21 @@
8484
}
8585
},
8686
"dockerLabels": {
87-
"com.datadoghq.ad.instances": "[{ \"prometheus_url\": \"http://%%host%%:8080/actuator/prometheus\", \"namespace\": \"${hms_metrics_namespace}\", \"metrics\": [\"${hms_metrics}\"],\"type_overrides\":{\"${hms_metrics_type_overrides}\": \"gauge\"} }]",
87+
"com.datadoghq.ad.instances": ${jsonencode([{
88+
"prometheus_url": "http://%%host%%:8080/actuator/prometheus",
89+
"namespace": "${hms_metrics_namespace}",
90+
"metrics": "${hms_metrics}",
91+
"type_overrides": "${hms_metrics_type_overrides}"
92+
}])},
8893
"com.datadoghq.ad.check_names": "[\"prometheus\"]",
8994
"com.datadoghq.ad.init_configs": "[{}]"
90-
},
91-
"portMappings": [
92-
{
93-
"containerPort": 9083,
94-
"hostPort": 9083
95-
}
96-
],
95+
},
96+
"portMappings": [
97+
{
98+
"containerPort": 9083,
99+
"hostPort": 9083
100+
}
101+
],
97102
%{ if init_container_enabled }
98103
"dependsOn": [
99104
{

0 commit comments

Comments
 (0)