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)