Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
72b6885
feat(splunk): improve o11y dashboards
edersonbrilhante Jun 12, 2026
f8b414a
fix(splunk): count ec2 hosts by instance
edersonbrilhante Jun 12, 2026
df009df
feat(splunk): add runner inventory charts
edersonbrilhante Jun 12, 2026
acd0693
feat(splunk): add runner hour charts
edersonbrilhante Jun 12, 2026
640a268
feat(splunk): add runner total charts
edersonbrilhante Jun 12, 2026
67807ab
fix(splunk): set runner chart color scales
edersonbrilhante Jun 12, 2026
5b9bcf8
fix(splunk): remove runner chart color scales
edersonbrilhante Jun 12, 2026
4443c8e
refactor(splunk): move runner impact charts
edersonbrilhante Jun 12, 2026
1e47115
fix(splunk): count k8s runners by container
edersonbrilhante Jun 12, 2026
20101e6
fix(splunk): refine runner dashboard dimensions
edersonbrilhante Jun 12, 2026
dd1b11e
fix(splunk): move impact dashboard to shared group
edersonbrilhante Jun 12, 2026
a964e05
fix(splunk): count k8s runner usage over dashboard window
edersonbrilhante Jun 13, 2026
7438aba
feat(splunk): split impact runner usage charts
edersonbrilhante Jun 13, 2026
2ee0631
fix(splunk): use runtime metric for k8s runners
edersonbrilhante Jun 13, 2026
3725709
fix(splunk): avoid zero k8s cpu time metric
edersonbrilhante Jun 13, 2026
e30541c
fix(splunk): filter ec2 runner minutes by tenant tag
edersonbrilhante Jun 13, 2026
d5cf50b
fix(splunk): filter disk summary by tenant tag
edersonbrilhante Jun 13, 2026
81697c2
fix(splunk): remove tenant dimension from disk summary
edersonbrilhante Jun 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions modules/integrations/splunk_o11y_conf_shared/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
| <a name="module_dashboard_billing"></a> [dashboard\_billing](#module\_dashboard\_billing) | ./dashboards/billing | n/a |
| <a name="module_dashboard_dynamodb"></a> [dashboard\_dynamodb](#module\_dashboard\_dynamodb) | ./dashboards/dynamodb | n/a |
| <a name="module_dashboard_ebs"></a> [dashboard\_ebs](#module\_dashboard\_ebs) | ./dashboards/ebs | n/a |
| <a name="module_dashboard_forge_impact"></a> [dashboard\_forge\_impact](#module\_dashboard\_forge\_impact) | ./dashboards/forge_impact | n/a |
| <a name="module_dashboard_lambda"></a> [dashboard\_lambda](#module\_dashboard\_lambda) | ./dashboards/lambda | n/a |
| <a name="module_dashboard_runner_ec2"></a> [dashboard\_runner\_ec2](#module\_dashboard\_runner\_ec2) | ./dashboards/runner_ec2 | n/a |
| <a name="module_dashboard_runner_k8s"></a> [dashboard\_runner\_k8s](#module\_dashboard\_runner\_k8s) | ./dashboards/runner_k8s | n/a |
Expand Down
11 changes: 11 additions & 0 deletions modules/integrations/splunk_o11y_conf_shared/dashboards.tf
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,17 @@ module "dashboard_ebs" {
dashboard_group = signalfx_dashboard_group.forgecicd.id
}

module "dashboard_forge_impact" {
source = "./dashboards/forge_impact"

providers = {
signalfx = signalfx
}

tenant_names = var.dashboard_variables.runner_k8s.tenant_names
dashboard_group = signalfx_dashboard_group.forgecicd.id
}

# Cost and usage
module "dashboard_billing" {
source = "./dashboards/billing"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,12 @@ No modules.
| Name | Type |
| ---- | ---- |
| [signalfx_dashboard.billing](https://registry.terraform.io/providers/splunk-terraform/signalfx/latest/docs/resources/dashboard) | resource |
| [signalfx_list_chart.top_tenant_service_net_cost](https://registry.terraform.io/providers/splunk-terraform/signalfx/latest/docs/resources/list_chart) | resource |
| [signalfx_time_chart.cost_per_service](https://registry.terraform.io/providers/splunk-terraform/signalfx/latest/docs/resources/time_chart) | resource |
| [signalfx_time_chart.cost_per_tenant](https://registry.terraform.io/providers/splunk-terraform/signalfx/latest/docs/resources/time_chart) | resource |
| [signalfx_time_chart.net_cost_per_service](https://registry.terraform.io/providers/splunk-terraform/signalfx/latest/docs/resources/time_chart) | resource |
| [signalfx_time_chart.net_cost_per_tenant](https://registry.terraform.io/providers/splunk-terraform/signalfx/latest/docs/resources/time_chart) | resource |
| [signalfx_time_chart.runner_related_net_cost](https://registry.terraform.io/providers/splunk-terraform/signalfx/latest/docs/resources/time_chart) | resource |
| [signalfx_time_chart.total_cost](https://registry.terraform.io/providers/splunk-terraform/signalfx/latest/docs/resources/time_chart) | resource |
| [signalfx_time_chart.total_net_cost](https://registry.terraform.io/providers/splunk-terraform/signalfx/latest/docs/resources/time_chart) | resource |

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ resource "signalfx_time_chart" "cost_per_service" {

program_text = <<-EOF
A = data('forge.per_service.cost_usd')
B = A.max(by=['usage_date', 'service', 'forgecicd_tenant','usage_month', 'usage_year'])
C = B.sum(by=['service', 'forgecicd_tenant','usage_month', 'usage_year'])
B = A.max(by=['usage_date', 'service', 'forgecicd_tenant', 'usage_month', 'usage_year'])
C = B.sum(by=['service', 'forgecicd_tenant', 'usage_month', 'usage_year'])

# publish both current and baseline
C.publish(label='current')
Expand Down Expand Up @@ -35,8 +35,8 @@ resource "signalfx_time_chart" "net_cost_per_service" {

program_text = <<-EOF
A = data('forge.per_service.net_cost_usd')
B = A.max(by=['usage_date', 'service', 'forgecicd_tenant','usage_month', 'usage_year'])
C = B.sum(by=['service', 'forgecicd_tenant','usage_month', 'usage_year']) # removes usage_date from label
B = A.max(by=['usage_date', 'service', 'forgecicd_tenant', 'usage_month', 'usage_year'])
C = B.sum(by=['service', 'forgecicd_tenant', 'usage_month', 'usage_year']) # removes usage_date from label

# publish both current and baseline
C.publish(label='current')
Expand Down Expand Up @@ -65,8 +65,8 @@ resource "signalfx_time_chart" "net_cost_per_tenant" {

program_text = <<-EOF
A = data('forge.per_service.net_cost_usd')
B = A.max(by=['usage_date', 'service', 'forgecicd_tenant','usage_month', 'usage_year'])
C = B.sum(by=['forgecicd_tenant','usage_month', 'usage_year'])
B = A.max(by=['usage_date', 'service', 'forgecicd_tenant', 'usage_month', 'usage_year'])
C = B.sum(by=['forgecicd_tenant', 'usage_month', 'usage_year'])
D = C.timeshift('29d')

# publish both current and baseline
Expand Down Expand Up @@ -97,8 +97,8 @@ resource "signalfx_time_chart" "cost_per_tenant" {

program_text = <<-EOF
A = data('forge.per_service.cost_usd')
B = A.max(by=['usage_date', 'service', 'forgecicd_tenant','usage_month', 'usage_year'])
C = B.sum(by=['forgecicd_tenant','usage_month', 'usage_year'])
B = A.max(by=['usage_date', 'service', 'forgecicd_tenant', 'usage_month', 'usage_year'])
C = B.sum(by=['forgecicd_tenant', 'usage_month', 'usage_year'])
D = C.timeshift('29d')

# publish both current and baseline
Expand Down Expand Up @@ -131,8 +131,8 @@ resource "signalfx_time_chart" "total_cost" {
program_text = <<-EOF
A = data('forge.per_service.cost_usd')

# Take max per day/service/tenant, carrying forward last value if missing
B = A.max(by=['usage_date', 'service', 'forgecicd_tenant','usage_month', 'usage_year'])
# Take max per daily cost stream before collapsing to the total
B = A.max(by=['usage_date', 'service', 'forgecicd_tenant', 'usage_month', 'usage_year'])

# Sum by month, still carrying forward where needed
C = B.sum(by=['usage_month', 'usage_year'])
Expand Down Expand Up @@ -176,8 +176,8 @@ resource "signalfx_time_chart" "total_net_cost" {
program_text = <<-EOF
A = data('forge.per_service.net_cost_usd')

# Take max per day/service/tenant, carrying forward last value if missing
B = A.max(by=['usage_date', 'service', 'forgecicd_tenant','usage_month', 'usage_year'])
# Take max per daily cost stream before collapsing to the total
B = A.max(by=['usage_date', 'service', 'forgecicd_tenant', 'usage_month', 'usage_year'])

# Sum by month, still carrying forward where needed
C = B.sum(by=['usage_month', 'usage_year'])
Expand Down Expand Up @@ -207,6 +207,73 @@ EOF
}
}

resource "signalfx_time_chart" "runner_related_net_cost" {
name = "Runner-related net cost"
description = "Shows net cost for AWS services that commonly back Forge runners and the job-log pipeline."

program_text = <<-EOF
A = data('forge.per_service.net_cost_usd', filter=filter('service', 'AmazonEC2', 'AmazonEKS', 'AWSLambda', 'AmazonSQS', 'AmazonDynamoDB', 'AmazonS3', 'AmazonVPC', 'AmazonCloudWatch', 'awskms', 'AWSSecretsManager', 'AmazonECR'))
B = A.max(by=['usage_date', 'service', 'forgecicd_tenant', 'usage_month', 'usage_year'])
C = B.sum(by=['service', 'forgecicd_tenant', 'usage_month', 'usage_year'])
C.publish(label='current')
EOF

plot_type = "AreaChart"
axes_precision = 0
time_range = 3600

on_chart_legend_dimension = "service"

histogram_options {
color_theme = "gold"
}

viz_options {
axis = "left"
color = "blue"
display_name = "current"
label = "current"
}
}

resource "signalfx_list_chart" "top_tenant_service_net_cost" {
name = "Top tenant/service net cost"
description = "Ranks tenant and service combinations by current net cost."

program_text = <<-EOF
A = data('forge.per_service.net_cost_usd')
B = A.max(by=['usage_date', 'service', 'forgecicd_tenant', 'usage_month', 'usage_year'])
C = B.sum(by=['forgecicd_tenant', 'service']).top(count=20).publish(label='A')
EOF

sort_by = "-value"

disable_sampling = false
hide_missing_values = true
max_precision = 4
secondary_visualization = "None"
time_range = 3600
unit_prefix = "Metric"

legend_options_fields {
enabled = true
property = "forgecicd_tenant"
}
legend_options_fields {
enabled = true
property = "service"
}
legend_options_fields {
enabled = false
property = "sf_metric"
}

viz_options {
display_name = "Net cost"
label = "A"
}
}

resource "signalfx_dashboard" "billing" {
name = "Billing"
description = "Forge CICD cost and net cost by service and tenant."
Expand All @@ -220,7 +287,7 @@ resource "signalfx_dashboard" "billing" {
description = ""
values = []
value_required = false
values_suggested = var.tenant_names
values_suggested = sort(var.tenant_names)
restricted_suggestions = true
}

Expand Down Expand Up @@ -286,4 +353,20 @@ resource "signalfx_dashboard" "billing" {
width = 6
height = 1
}

chart {
chart_id = signalfx_time_chart.runner_related_net_cost.id
row = 3
column = 0
width = 6
height = 1
}

chart {
chart_id = signalfx_list_chart.top_tenant_service_net_cost.id
row = 3
column = 6
width = 6
height = 1
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -506,7 +506,7 @@ resource "signalfx_dashboard" "dynamodb" {
description = ""
values = []
value_required = false
values_suggested = var.tenant_names
values_suggested = sort(var.tenant_names)
restricted_suggestions = true
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -535,7 +535,7 @@ resource "signalfx_dashboard" "ebs" {
description = ""
values = []
value_required = false
values_suggested = var.tenant_names
values_suggested = sort(var.tenant_names)
restricted_suggestions = true
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<!-- BEGIN_TF_DOCS -->
## Requirements

| Name | Version |
| ---- | ------- |
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | ~> 1.11 |
| <a name="requirement_signalfx"></a> [signalfx](#requirement\_signalfx) | < 10.0.0 |

## Providers

| Name | Version |
| ---- | ------- |
| <a name="provider_signalfx"></a> [signalfx](#provider\_signalfx) | 9.30.1 |
| <a name="provider_terraform"></a> [terraform](#provider\_terraform) | n/a |

## Modules

No modules.

## Resources

| Name | Type |
| ---- | ---- |
| [signalfx_dashboard.forge_impact](https://registry.terraform.io/providers/splunk-terraform/signalfx/latest/docs/resources/dashboard) | resource |
| [signalfx_list_chart.active_ec2_runners_by_tenant](https://registry.terraform.io/providers/splunk-terraform/signalfx/latest/docs/resources/list_chart) | resource |
| [signalfx_list_chart.active_ec2_runners_by_tenant_and_instance_type](https://registry.terraform.io/providers/splunk-terraform/signalfx/latest/docs/resources/list_chart) | resource |
| [signalfx_list_chart.ec2_runner_hours_by_tenant](https://registry.terraform.io/providers/splunk-terraform/signalfx/latest/docs/resources/list_chart) | resource |
| [signalfx_list_chart.ec2_runner_hours_by_tenant_and_instance_type](https://registry.terraform.io/providers/splunk-terraform/signalfx/latest/docs/resources/list_chart) | resource |
| [signalfx_list_chart.k8s_runner_hours_by_tenant](https://registry.terraform.io/providers/splunk-terraform/signalfx/latest/docs/resources/list_chart) | resource |
| [signalfx_list_chart.k8s_runners_by_tenant](https://registry.terraform.io/providers/splunk-terraform/signalfx/latest/docs/resources/list_chart) | resource |
| [signalfx_list_chart.runner_minutes_by_runtime](https://registry.terraform.io/providers/splunk-terraform/signalfx/latest/docs/resources/list_chart) | resource |
| [signalfx_list_chart.runner_totals_by_runtime](https://registry.terraform.io/providers/splunk-terraform/signalfx/latest/docs/resources/list_chart) | resource |
| [signalfx_list_chart.total_ec2_runners_by_tenant](https://registry.terraform.io/providers/splunk-terraform/signalfx/latest/docs/resources/list_chart) | resource |
| [signalfx_list_chart.total_k8s_runners_by_tenant](https://registry.terraform.io/providers/splunk-terraform/signalfx/latest/docs/resources/list_chart) | resource |
| [signalfx_time_chart.active_ec2_runners_by_tenant_and_instance_type](https://registry.terraform.io/providers/splunk-terraform/signalfx/latest/docs/resources/time_chart) | resource |
| [terraform_data.dashboard_parent](https://registry.terraform.io/providers/hashicorp/terraform/latest/docs/resources/data) | resource |

## Inputs

| Name | Description | Type | Default | Required |
| ---- | ----------- | ---- | ------- | :------: |
| <a name="input_dashboard_group"></a> [dashboard\_group](#input\_dashboard\_group) | Dashboard group name for organizing dashboards. | `string` | n/a | yes |
| <a name="input_tenant_names"></a> [tenant\_names](#input\_tenant\_names) | Tenant namespaces that run Forge ARC runners. | `list(string)` | n/a | yes |

## Outputs

No outputs.
<!-- END_TF_DOCS -->
Loading