diff --git a/.gitignore b/.gitignore index b35ee41..307c4b5 100644 --- a/.gitignore +++ b/.gitignore @@ -45,3 +45,6 @@ target bin obj .DS_Store + +# Jetbrains +.idea diff --git a/examples/ecs_fargate/README.md b/examples/ecs_fargate/README.md index f4d7516..c5cba62 100644 --- a/examples/ecs_fargate/README.md +++ b/examples/ecs_fargate/README.md @@ -9,6 +9,7 @@ This example showcases a simple ECS Fargate Task Definition with out of the box * Set the `dd_api_key` to the Datadog API Key (required) * Set the `dd_service` to the name of the service you want to use to filter for the resource in Datadog * Set the `dd_site` to the [Datadog destination site](https://docs.datadoghq.com/getting_started/site/) for your metrics, traces, and logs + * (Optional) Set `task_family_name` to the name of the task family (default: "dummy-terraform-app") * Run the following commands: ```bash diff --git a/examples/ecs_fargate/main.tf b/examples/ecs_fargate/main.tf index 0f7333f..ccea245 100644 --- a/examples/ecs_fargate/main.tf +++ b/examples/ecs_fargate/main.tf @@ -45,7 +45,7 @@ module "datadog_ecs_fargate_task" { } # Configure Task Definition - family = "dummy-terraform-app" + family = var.task_family_name container_definitions = jsonencode([ { name = "dummy-dogstatsd-app", diff --git a/examples/ecs_fargate/variables.tf b/examples/ecs_fargate/variables.tf index 1a83b5b..fa04ce4 100644 --- a/examples/ecs_fargate/variables.tf +++ b/examples/ecs_fargate/variables.tf @@ -26,3 +26,9 @@ variable "dd_site" { type = string default = "datadoghq.com" } + +variable "task_family_name" { + description = "The ECS task family name" + type = string + default = "dummy-terraform-app" +} diff --git a/modules/ecs_fargate/README.md b/modules/ecs_fargate/README.md index ad2c6c8..1a1e932 100644 --- a/modules/ecs_fargate/README.md +++ b/modules/ecs_fargate/README.md @@ -210,8 +210,6 @@ No modules. | [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 | | [aws_iam_policy_document.dd_ecs_task_permissions](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document) | data source | | [aws_iam_policy_document.dd_secret_access](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document) | data source | -| [aws_iam_role.ecs_task_exec_role](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_role) | data source | -| [aws_iam_role.ecs_task_role](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_role) | data source | ## Inputs @@ -233,7 +231,7 @@ No modules. | [dd\_health\_check](#input\_dd\_health\_check) | Datadog Agent health check configuration |
object({
command = optional(list(string))
interval = optional(number)
retries = optional(number)
start_period = optional(number)
timeout = optional(number)
}) | {
"command": [
"CMD-SHELL",
"/probe.sh"
],
"interval": 15,
"retries": 3,
"start_period": 60,
"timeout": 5
} | no |
| [dd\_image\_version](#input\_dd\_image\_version) | Datadog Agent image version | `string` | `"latest"` | no |
| [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 |
-| [dd\_log\_collection](#input\_dd\_log\_collection) | Configuration for Datadog Log Collection | object({
enabled = optional(bool, false)
fluentbit_config = optional(object({
registry = optional(string, "public.ecr.aws/aws-observability/aws-for-fluent-bit")
image_version = optional(string, "stable")
cpu = optional(number)
memory_limit_mib = optional(number)
is_log_router_essential = optional(bool, false)
is_log_router_dependency_enabled = optional(bool, false)
log_router_health_check = optional(object({
command = optional(list(string))
interval = optional(number)
retries = optional(number)
start_period = optional(number)
timeout = optional(number)
}),
{
command = ["CMD-SHELL", "exit 0"]
interval = 5
retries = 3
start_period = 15
timeout = 5
}
)
firelens_options = optional(object({
config_file_type = optional(string)
config_file_value = optional(string)
}))
log_driver_configuration = optional(object({
host_endpoint = optional(string, "http-intake.logs.datadoghq.com")
tls = optional(bool)
compress = optional(string)
service_name = optional(string)
source_name = optional(string)
message_key = optional(string)
}),
{
host_endpoint = "http-intake.logs.datadoghq.com"
}
)
}),
{
fluentbit_config = {
registry = "public.ecr.aws/aws-observability/aws-for-fluent-bit"
image_version = "stable"
log_driver_configuration = {
host_endpoint = "http-intake.logs.datadoghq.com"
}
}
}
)
}) | {
"enabled": false,
"fluentbit_config": {
"is_log_router_essential": false,
"log_driver_configuration": {
"host_endpoint": "http-intake.logs.datadoghq.com"
}
}
} | no |
+| [dd\_log\_collection](#input\_dd\_log\_collection) | Configuration for Datadog Log Collection | object({
enabled = optional(bool, false)
fluentbit_config = optional(object({
registry = optional(string, "public.ecr.aws/aws-observability/aws-for-fluent-bit")
image_version = optional(string, "stable")
cpu = optional(number)
memory_limit_mib = optional(number)
is_log_router_essential = optional(bool, false)
is_log_router_dependency_enabled = optional(bool, false)
environment = optional(list(map(string)), [{}])
log_router_health_check = optional(object({
command = optional(list(string))
interval = optional(number)
retries = optional(number)
start_period = optional(number)
timeout = optional(number)
}),
{
command = ["CMD-SHELL", "exit 0"]
interval = 5
retries = 3
start_period = 15
timeout = 5
}
)
firelens_options = optional(object({
config_file_type = optional(string)
config_file_value = optional(string)
}))
log_driver_configuration = optional(object({
host_endpoint = optional(string, "http-intake.logs.datadoghq.com")
tls = optional(bool)
compress = optional(string)
service_name = optional(string)
source_name = optional(string)
message_key = optional(string)
}),
{
host_endpoint = "http-intake.logs.datadoghq.com"
}
)
}),
{
fluentbit_config = {
registry = "public.ecr.aws/aws-observability/aws-for-fluent-bit"
image_version = "stable"
log_driver_configuration = {
host_endpoint = "http-intake.logs.datadoghq.com"
}
}
}
)
}) | {
"enabled": false,
"fluentbit_config": {
"is_log_router_essential": false,
"log_driver_configuration": {
"host_endpoint": "http-intake.logs.datadoghq.com"
}
}
} | no |
| [dd\_memory\_limit\_mib](#input\_dd\_memory\_limit\_mib) | Datadog Agent container memory limit in MiB | `number` | `null` | no |
| [dd\_registry](#input\_dd\_registry) | Datadog Agent image registry | `string` | `"public.ecr.aws/datadog/agent"` | no |
| [dd\_service](#input\_dd\_service) | The task service name. Used for tagging (UST) | `string` | `null` | no |
diff --git a/modules/ecs_fargate/datadog.tf b/modules/ecs_fargate/datadog.tf
index 6be5231..9f9fbd8 100644
--- a/modules/ecs_fargate/datadog.tf
+++ b/modules/ecs_fargate/datadog.tf
@@ -338,6 +338,13 @@ locals {
)
]
+ dd_log_environment = var.dd_log_collection.fluentbit_config.environment != null ? var.dd_log_collection.fluentbit_config.environment : []
+
+ dd_log_agent_env = concat(
+ local.ust_env_vars,
+ local.dd_log_environment
+ )
+
# Datadog log router container definition
dd_log_container = local.is_fluentbit_supported ? [
merge(
@@ -359,7 +366,7 @@ locals {
memory_limit_mib = var.dd_log_collection.fluentbit_config.memory_limit_mib
user = "0"
mountPoints = []
- environment = local.ust_env_vars
+ environment = local.dd_log_agent_env
portMappings = []
systemControls = []
volumesFrom = []
diff --git a/modules/ecs_fargate/variables.tf b/modules/ecs_fargate/variables.tf
index bb9c6a7..a0f16d2 100644
--- a/modules/ecs_fargate/variables.tf
+++ b/modules/ecs_fargate/variables.tf
@@ -191,6 +191,7 @@ variable "dd_log_collection" {
memory_limit_mib = optional(number)
is_log_router_essential = optional(bool, false)
is_log_router_dependency_enabled = optional(bool, false)
+ environment = optional(list(map(string)), [{}])
log_router_health_check = optional(object({
command = optional(list(string))
interval = optional(number)
diff --git a/smoke_tests/ecs_fargate/logging-only.tf b/smoke_tests/ecs_fargate/logging-only.tf
index 0d1678d..1caa355 100644
--- a/smoke_tests/ecs_fargate/logging-only.tf
+++ b/smoke_tests/ecs_fargate/logging-only.tf
@@ -31,6 +31,12 @@ module "dd_task_logging_only" {
config_file_type = "file"
config_file_value = "file:///fluent-bit/etc/fluent-bit.conf"
}
+ environment = [
+ {
+ name = "DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL"
+ value = "true"
+ }
+ ]
}
}
diff --git a/tests/logging_only_test.go b/tests/logging_only_test.go
index f58164f..009ef15 100644
--- a/tests/logging_only_test.go
+++ b/tests/logging_only_test.go
@@ -87,7 +87,8 @@ func (s *ECSFargateSuite) TestLoggingOnly() {
// Verify log router environment variables
expectedLogRouterEnvVars := map[string]string{
- "DD_SERVICE": "test-service",
+ "DD_SERVICE": "test-service",
+ "DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL": "true",
}
AssertEnvVars(s.T(), logRouterContainer, expectedLogRouterEnvVars)