Skip to content

Commit 1542b98

Browse files
[CONTP-951] Support env vars passed down to dd logging container (#41)
* chore: add task family name var in example for flexibility * feat: add environment option to dd_log_collector * test: add envvar to logging only smoke test * chore: update module docs * chore: add log environment safety checks
1 parent 257c450 commit 1542b98

File tree

9 files changed

+29
-6
lines changed

9 files changed

+29
-6
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,6 @@ target
4545
bin
4646
obj
4747
.DS_Store
48+
49+
# Jetbrains
50+
.idea

examples/ecs_fargate/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ This example showcases a simple ECS Fargate Task Definition with out of the box
99
* Set the `dd_api_key` to the Datadog API Key (required)
1010
* Set the `dd_service` to the name of the service you want to use to filter for the resource in Datadog
1111
* Set the `dd_site` to the [Datadog destination site](https://docs.datadoghq.com/getting_started/site/) for your metrics, traces, and logs
12+
* (Optional) Set `task_family_name` to the name of the task family (default: "dummy-terraform-app")
1213
* Run the following commands:
1314

1415
```bash

examples/ecs_fargate/main.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ module "datadog_ecs_fargate_task" {
4545
}
4646

4747
# Configure Task Definition
48-
family = "dummy-terraform-app"
48+
family = var.task_family_name
4949
container_definitions = jsonencode([
5050
{
5151
name = "dummy-dogstatsd-app",

examples/ecs_fargate/variables.tf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,9 @@ variable "dd_site" {
2626
type = string
2727
default = "datadoghq.com"
2828
}
29+
30+
variable "task_family_name" {
31+
description = "The ECS task family name"
32+
type = string
33+
default = "dummy-terraform-app"
34+
}

modules/ecs_fargate/README.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -210,8 +210,6 @@ No modules.
210210
| [aws_iam_role_policy_attachment.new_role_ecs_task_permissions](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource |
211211
| [aws_iam_policy_document.dd_ecs_task_permissions](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document) | data source |
212212
| [aws_iam_policy_document.dd_secret_access](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document) | data source |
213-
| [aws_iam_role.ecs_task_exec_role](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_role) | data source |
214-
| [aws_iam_role.ecs_task_role](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_role) | data source |
215213

216214
## Inputs
217215

@@ -233,7 +231,7 @@ No modules.
233231
| <a name="input_dd_health_check"></a> [dd\_health\_check](#input\_dd\_health\_check) | Datadog Agent health check configuration | <pre>object({<br/> command = optional(list(string))<br/> interval = optional(number)<br/> retries = optional(number)<br/> start_period = optional(number)<br/> timeout = optional(number)<br/> })</pre> | <pre>{<br/> "command": [<br/> "CMD-SHELL",<br/> "/probe.sh"<br/> ],<br/> "interval": 15,<br/> "retries": 3,<br/> "start_period": 60,<br/> "timeout": 5<br/>}</pre> | no |
234232
| <a name="input_dd_image_version"></a> [dd\_image\_version](#input\_dd\_image\_version) | Datadog Agent image version | `string` | `"latest"` | no |
235233
| <a name="input_dd_is_datadog_dependency_enabled"></a> [dd\_is\_datadog\_dependency\_enabled](#input\_dd\_is\_datadog\_dependency\_enabled) | Whether the Datadog Agent container is a dependency for other containers | `bool` | `false` | no |
236-
| <a name="input_dd_log_collection"></a> [dd\_log\_collection](#input\_dd\_log\_collection) | Configuration for Datadog Log Collection | <pre>object({<br/> enabled = optional(bool, false)<br/> fluentbit_config = optional(object({<br/> registry = optional(string, "public.ecr.aws/aws-observability/aws-for-fluent-bit")<br/> image_version = optional(string, "stable")<br/> cpu = optional(number)<br/> memory_limit_mib = optional(number)<br/> is_log_router_essential = optional(bool, false)<br/> is_log_router_dependency_enabled = optional(bool, false)<br/> log_router_health_check = optional(object({<br/> command = optional(list(string))<br/> interval = optional(number)<br/> retries = optional(number)<br/> start_period = optional(number)<br/> timeout = optional(number)<br/> }),<br/> {<br/> command = ["CMD-SHELL", "exit 0"]<br/> interval = 5<br/> retries = 3<br/> start_period = 15<br/> timeout = 5<br/> }<br/> )<br/> firelens_options = optional(object({<br/> config_file_type = optional(string)<br/> config_file_value = optional(string)<br/> }))<br/> log_driver_configuration = optional(object({<br/> host_endpoint = optional(string, "http-intake.logs.datadoghq.com")<br/> tls = optional(bool)<br/> compress = optional(string)<br/> service_name = optional(string)<br/> source_name = optional(string)<br/> message_key = optional(string)<br/> }),<br/> {<br/> host_endpoint = "http-intake.logs.datadoghq.com"<br/> }<br/> )<br/> }),<br/> {<br/> fluentbit_config = {<br/> registry = "public.ecr.aws/aws-observability/aws-for-fluent-bit"<br/> image_version = "stable"<br/> log_driver_configuration = {<br/> host_endpoint = "http-intake.logs.datadoghq.com"<br/> }<br/> }<br/> }<br/> )<br/> })</pre> | <pre>{<br/> "enabled": false,<br/> "fluentbit_config": {<br/> "is_log_router_essential": false,<br/> "log_driver_configuration": {<br/> "host_endpoint": "http-intake.logs.datadoghq.com"<br/> }<br/> }<br/>}</pre> | no |
234+
| <a name="input_dd_log_collection"></a> [dd\_log\_collection](#input\_dd\_log\_collection) | Configuration for Datadog Log Collection | <pre>object({<br/> enabled = optional(bool, false)<br/> fluentbit_config = optional(object({<br/> registry = optional(string, "public.ecr.aws/aws-observability/aws-for-fluent-bit")<br/> image_version = optional(string, "stable")<br/> cpu = optional(number)<br/> memory_limit_mib = optional(number)<br/> is_log_router_essential = optional(bool, false)<br/> is_log_router_dependency_enabled = optional(bool, false)<br/> environment = optional(list(map(string)), [{}])<br/> log_router_health_check = optional(object({<br/> command = optional(list(string))<br/> interval = optional(number)<br/> retries = optional(number)<br/> start_period = optional(number)<br/> timeout = optional(number)<br/> }),<br/> {<br/> command = ["CMD-SHELL", "exit 0"]<br/> interval = 5<br/> retries = 3<br/> start_period = 15<br/> timeout = 5<br/> }<br/> )<br/> firelens_options = optional(object({<br/> config_file_type = optional(string)<br/> config_file_value = optional(string)<br/> }))<br/> log_driver_configuration = optional(object({<br/> host_endpoint = optional(string, "http-intake.logs.datadoghq.com")<br/> tls = optional(bool)<br/> compress = optional(string)<br/> service_name = optional(string)<br/> source_name = optional(string)<br/> message_key = optional(string)<br/> }),<br/> {<br/> host_endpoint = "http-intake.logs.datadoghq.com"<br/> }<br/> )<br/> }),<br/> {<br/> fluentbit_config = {<br/> registry = "public.ecr.aws/aws-observability/aws-for-fluent-bit"<br/> image_version = "stable"<br/> log_driver_configuration = {<br/> host_endpoint = "http-intake.logs.datadoghq.com"<br/> }<br/> }<br/> }<br/> )<br/> })</pre> | <pre>{<br/> "enabled": false,<br/> "fluentbit_config": {<br/> "is_log_router_essential": false,<br/> "log_driver_configuration": {<br/> "host_endpoint": "http-intake.logs.datadoghq.com"<br/> }<br/> }<br/>}</pre> | no |
237235
| <a name="input_dd_memory_limit_mib"></a> [dd\_memory\_limit\_mib](#input\_dd\_memory\_limit\_mib) | Datadog Agent container memory limit in MiB | `number` | `null` | no |
238236
| <a name="input_dd_registry"></a> [dd\_registry](#input\_dd\_registry) | Datadog Agent image registry | `string` | `"public.ecr.aws/datadog/agent"` | no |
239237
| <a name="input_dd_service"></a> [dd\_service](#input\_dd\_service) | The task service name. Used for tagging (UST) | `string` | `null` | no |

modules/ecs_fargate/datadog.tf

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,13 @@ locals {
338338
)
339339
]
340340

341+
dd_log_environment = var.dd_log_collection.fluentbit_config.environment != null ? var.dd_log_collection.fluentbit_config.environment : []
342+
343+
dd_log_agent_env = concat(
344+
local.ust_env_vars,
345+
local.dd_log_environment
346+
)
347+
341348
# Datadog log router container definition
342349
dd_log_container = local.is_fluentbit_supported ? [
343350
merge(
@@ -359,7 +366,7 @@ locals {
359366
memory_limit_mib = var.dd_log_collection.fluentbit_config.memory_limit_mib
360367
user = "0"
361368
mountPoints = []
362-
environment = local.ust_env_vars
369+
environment = local.dd_log_agent_env
363370
portMappings = []
364371
systemControls = []
365372
volumesFrom = []

modules/ecs_fargate/variables.tf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,7 @@ variable "dd_log_collection" {
191191
memory_limit_mib = optional(number)
192192
is_log_router_essential = optional(bool, false)
193193
is_log_router_dependency_enabled = optional(bool, false)
194+
environment = optional(list(map(string)), [{}])
194195
log_router_health_check = optional(object({
195196
command = optional(list(string))
196197
interval = optional(number)

smoke_tests/ecs_fargate/logging-only.tf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,12 @@ module "dd_task_logging_only" {
3131
config_file_type = "file"
3232
config_file_value = "file:///fluent-bit/etc/fluent-bit.conf"
3333
}
34+
environment = [
35+
{
36+
name = "DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL"
37+
value = "true"
38+
}
39+
]
3440
}
3541
}
3642

tests/logging_only_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,8 @@ func (s *ECSFargateSuite) TestLoggingOnly() {
8787

8888
// Verify log router environment variables
8989
expectedLogRouterEnvVars := map[string]string{
90-
"DD_SERVICE": "test-service",
90+
"DD_SERVICE": "test-service",
91+
"DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL": "true",
9192
}
9293
AssertEnvVars(s.T(), logRouterContainer, expectedLogRouterEnvVars)
9394

0 commit comments

Comments
 (0)