Skip to content

Commit ea499f3

Browse files
committed
working version
1 parent 7b10fa5 commit ea499f3

File tree

21 files changed

+171
-3068
lines changed

21 files changed

+171
-3068
lines changed

README.md

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,13 @@ The Observability Terraform Module is a comprehensive solution designed to simpl
3333
- Automates the deployment of the entire observability stack, reducing complexity and ensuring consistency.
3434
- Includes preconfigured dashboards and alert rules for quick setup and immediate insights.
3535

36+
5. Signoz Community Edition Support
37+
- Adds native support for Signoz CE, an all-in-one observability platform.
38+
39+
- Enables logs, metrics, and traces to be collected and correlated in one unified interface.
40+
41+
- Simplifies tracing setup with OpenTelemetry Collector and works out of the box with distributed applications.
42+
3643
For more information about this repository and its usage, please see [Terraform AWS ARC Observability Module Usage Guide](docs/module-usage-guide/README.md).
3744

3845

@@ -232,16 +239,17 @@ No resources.
232239
| <a name="input_namespace"></a> [namespace](#input\_namespace) | Namespace for the resources. | `string` | n/a | yes |
233240
| <a name="input_prometheus_config"></a> [prometheus\_config](#input\_prometheus\_config) | Configuration settings for deploying Prometheus | <pre>object({<br> name = optional(string, "prometheus")<br> k8s_namespace = object({<br> name = optional(string, "metrics")<br> create = optional(bool, true)<br> })<br> log_level = optional(string, "info")<br> replica_count = optional(number, 1)<br> storage = optional(string, "8Gi")<br> storage_class = optional(string, "gp2")<br> enable_kube_state_metrics = optional(bool, true)<br> enable_node_exporter = optional(bool, true)<br> cpu_limit = optional(string, "100m")<br> memory_limit = optional(string, "512Mi")<br> cpu_request = optional(string, "100m")<br> memory_request = optional(string, "128Mi")<br> retention_period = optional(string, "15d")<br><br> grafana_config = object({<br> name = optional(string, "grafana")<br> replica_count = optional(number, 1)<br> ingress_enabled = optional(bool, false)<br> lb_visibility = optional(string, "internet-facing") # Options: "internal" or "internet-facing"<br> aws_certificate_arn = optional(string, "")<br> ingress_host = optional(string, "")<br> admin_user = optional(string, "admin")<br> cpu_limit = optional(string, "100m")<br> memory_limit = optional(string, "128Mi")<br> cpu_request = optional(string, "100m")<br> memory_request = optional(string, "128Mi")<br> dashboard_list = optional(list(object({<br> name = string<br> json = string<br> })), [])<br> })<br><br> blackbox_exporter_config = object({<br> name = optional(string, "blackbox-exporter")<br> replica_count = optional(number, 1)<br> cpu_limit = optional(string, "100m")<br> memory_limit = optional(string, "500Mi")<br> cpu_request = optional(string, "100m")<br> memory_request = optional(string, "50Mi")<br> monitoring_targets = list(object({<br> name = string # Target name (e.g., google)<br> url = string # URL to monitor (e.g., https://google.com)<br> scrape_interval = optional(string, "60s") # Scrape interval (e.g., 60s)<br> scrape_timeout = optional(string, "60s") # Scrape timeout (e.g., 60s)<br> status_code_pattern_list = optional(string, "[http_2xx]") # Blackbox module to use (e.g., http_2xx)<br> }))<br> })<br><br> alertmanager_config = object({<br> name = optional(string, "alertmanager")<br> replica_count = optional(number, 1)<br> cpu_limit = optional(string, "100m")<br> memory_limit = optional(string, "128Mi")<br> cpu_request = optional(string, "10m")<br> memory_request = optional(string, "32Mi")<br> custom_alerts = optional(string, "")<br> alert_notification_settings = optional(string, "")<br> })<br> })</pre> | <pre>{<br> "alertmanager_config": {<br> "name": "alertmanager"<br> },<br> "blackbox_exporter_config": {<br> "monitoring_targets": [],<br> "name": "blackbox-exporter"<br> },<br> "enable_kube_state_metrics": true,<br> "enable_node_exporter": true,<br> "grafana_config": {<br> "admin_user": "admin",<br> "ingress_enabled": false,<br> "lb_visibility": "internet-facing",<br> "prometheus_endpoint": "prometheus"<br> },<br> "k8s_namespace": {<br> "create": true,<br> "name": "metrics"<br> },<br> "log_level": "info",<br> "replica_count": 1,<br> "resources": {<br> "cpu_limit": "100m",<br> "cpu_request": "100m",<br> "memory_limit": "512Mi",<br> "memory_request": "128Mi"<br> },<br> "retention_period": "15d",<br> "storage": "8Gi"<br>}</pre> | no |
234241
| <a name="input_search_engine"></a> [search\_engine](#input\_search\_engine) | (optional) Search engine for logs | `string` | `null` | no |
235-
| <a name="input_signoz_config"></a> [signoz\_config](#input\_signoz\_config) | Configuration for observability components in the monitoring stack. This variable encapsulates<br>settings for the following components:<br><br>- ClickHouse:<br> Used as the backend storage engine for observability data (like traces and metrics).<br> Includes credentials and resource limits/requests for tuning performance.<br><br>- SigNoz:<br> Provides the UI and analytics for monitoring and tracing applications.<br> Includes ingress setup and compute resource configuration.<br><br>- Alertmanager:<br> Handles alerting rules and notifications for monitoring data.<br> Includes configuration for storage, scaling, and ingress settings.<br><br>- OTEL Collector:<br> Collects telemetry data (logs, metrics, traces) from the applications and<br> routes it to appropriate backends.<br> Includes resource definitions and optional ingress configuration.<br><br>This structure enables centralized management of observability stack deployment in Kubernetes<br>via Terraform. | <pre>object({<br> k8s_namespace = object({<br> name = optional(string, "signoz")<br> create = optional(bool, false)<br> })<br> name = string<br> storage_class = optional(string, "gp3")<br> cluster_name = string<br> clickhouse = optional(object({<br> user = optional(string, "admin")<br> password = optional(string, "27ff0399-0d3a-4bd8-919d-17c2181e6fb9")<br> cpu_limit = optional(string, "2000m")<br> memory_limit = optional(string, "4Gi")<br> cpu_request = optional(string, "100m")<br> memory_request = optional(string, "200Mi")<br> storage = optional(string, "20Gi")<br> }))<br><br> signoz_bin = optional(object({<br> replica_count = optional(number, 1)<br> cpu_limit = optional(string, "750m")<br> memory_limit = optional(string, "1000Mi")<br> cpu_request = optional(string, "100m")<br> memory_request = optional(string, "200Mi")<br> enable_ingress = optional(bool, false)<br> certificate_arn = optional(string, null)<br> domain = optional(string, "signoz.example.com")<br> }))<br><br> alertmanager = optional(object({<br> enable = optional(bool, false)<br> replica_count = optional(number, 1)<br> cpu_limit = optional(string, "750m")<br> memory_limit = optional(string, "1000Mi")<br> cpu_request = optional(string, "100m")<br> memory_request = optional(string, "200Mi")<br> storage = optional(string, "100Mi")<br> enable_ingress = optional(bool, false)<br> certificate_arn = optional(string, null)<br> domain = optional(string, "signoz.example.com")<br> }))<br><br> otel_collector = optional(object({<br> cpu_limit = optional(string, "1")<br> memory_limit = optional(string, "2Gi")<br> cpu_request = optional(string, "100m")<br> memory_request = optional(string, "200Mi")<br> storage = optional(string, "100Mi")<br> enable_ingress = optional(bool, false)<br> certificate_arn = optional(string, null)<br> domain = optional(string, "signoz.example.com")<br> }))<br> })</pre> | <pre>{<br> "cluster_name": null,<br> "k8s_namespace": {<br> "create": true,<br> "name": "signoz"<br> },<br> "name": null<br>}</pre> | no |
242+
| <a name="input_signoz_config"></a> [signoz\_config](#input\_signoz\_config) | Configuration for observability components in the monitoring stack. This variable encapsulates<br>settings for the following components:<br><br>- ClickHouse:<br> Used as the backend storage engine for observability data (like traces and metrics).<br> Includes credentials and resource limits/requests for tuning performance.<br><br>- SigNoz:<br> Provides the UI and analytics for monitoring and tracing applications.<br> Includes ingress setup and compute resource configuration.<br><br>- Alertmanager:<br> Handles alerting rules and notifications for monitoring data.<br> Includes configuration for storage, scaling, and ingress settings.<br><br>- OTEL Collector:<br> Collects telemetry data (logs, metrics, traces) from the applications and<br> routes it to appropriate backends.<br> Includes resource definitions and optional ingress configuration.<br><br>This structure enables centralized management of observability stack deployment in Kubernetes<br>via Terraform. | <pre>object({<br> k8s_namespace = object({<br> name = optional(string, "signoz")<br> create = optional(bool, false)<br> })<br> name = string<br> storage_class = optional(string, "gp3")<br> cluster_name = string<br> clickhouse = optional(object({<br> user = optional(string, "admin")<br> cpu_limit = optional(string, "2000m")<br> memory_limit = optional(string, "4Gi")<br> cpu_request = optional(string, "100m")<br> memory_request = optional(string, "200Mi")<br> storage = optional(string, "20Gi")<br> }))<br><br> signoz_bin = optional(object({<br> replica_count = optional(number, 1)<br> cpu_limit = optional(string, "750m")<br> memory_limit = optional(string, "1000Mi")<br> cpu_request = optional(string, "100m")<br> memory_request = optional(string, "200Mi")<br> ingress_enabled = optional(bool, false)<br> aws_certificate_arn = optional(string, null)<br> domain = string<br> root_domain = optional(string, null) // if root domain is provided, it creates DNS record<br> lb_visibility = optional(string, "internet-facing") # Options: "internal" or "internet-facing"<br> metric_collection_interval = optional(string, "30s")<br> }))<br><br> alertmanager = optional(object({<br> enable = optional(bool, false)<br> replica_count = optional(number, 1)<br> cpu_limit = optional(string, "750m")<br> memory_limit = optional(string, "1000Mi")<br> cpu_request = optional(string, "100m")<br> memory_request = optional(string, "200Mi")<br> storage = optional(string, "100Mi")<br> enable_ingress = optional(bool, false)<br> aws_certificate_arn = optional(string, null)<br> domain = optional(string, "signoz.example.com")<br> }))<br><br> otel_collector = optional(object({<br> cpu_limit = optional(string, "1")<br> memory_limit = optional(string, "2Gi")<br> cpu_request = optional(string, "100m")<br> memory_request = optional(string, "200Mi")<br> storage = optional(string, "100Mi")<br> enable_ingress = optional(bool, false)<br> aws_certificate_arn = optional(string, null)<br> domain = optional(string, "signoz.example.com")<br> }))<br> })</pre> | <pre>{<br> "cluster_name": null,<br> "k8s_namespace": {<br> "create": true,<br> "name": "signoz"<br> },<br> "name": null<br>}</pre> | no |
236243
| <a name="input_tags"></a> [tags](#input\_tags) | (optional) Tags for AWS resources | `map(string)` | `{}` | no |
237244
| <a name="input_tracing_stack"></a> [tracing\_stack](#input\_tracing\_stack) | (optional) Distributed tracing stack | `string` | `null` | no |
238245

239246
## Outputs
240247

241248
| Name | Description |
242249
|------|-------------|
243-
| <a name="output_grafana_lb_arn"></a> [grafana\_lb\_arn](#output\_grafana\_lb\_arn) | Grafana ingress loadbalancer ARN |
244-
| <a name="output_kibana_lb_arn"></a> [kibana\_lb\_arn](#output\_kibana\_lb\_arn) | Kibana ingress loadbalancer ARN |
250+
| <a name="output_grafana_lb_dns"></a> [grafana\_lb\_dns](#output\_grafana\_lb\_dns) | Grafana ingress loadbalancer DNS |
251+
| <a name="output_kibana_lb_dns"></a> [kibana\_lb\_dns](#output\_kibana\_lb\_dns) | Kibana ingress loadbalancer DNS |
252+
| <a name="output_signoz_lb_dns"></a> [signoz\_lb\_dns](#output\_signoz\_lb\_dns) | Signoz ingress loadbalancer DNS |
245253
<!-- END OF PRE-COMMIT-TERRAFORM DOCS HOOK -->
246254

247255
## Development

examples/elasticsearch_fleuntbit/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,5 +46,5 @@
4646

4747
| Name | Description |
4848
|------|-------------|
49-
| <a name="output_kibana_lb_arn"></a> [kibana\_lb\_arn](#output\_kibana\_lb\_arn) | Kibana ingress loadbalancer ARN |
49+
| <a name="output_kibana_lb_arn"></a> [kibana\_lb\_arn](#output\_kibana\_lb\_arn) | Kibana ingress loadbalancer DNS |
5050
<!-- END OF PRE-COMMIT-TERRAFORM DOCS HOOK -->
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
output "kibana_lb_arn" {
2-
description = "Kibana ingress loadbalancer ARN"
3-
value = module.efk_es_fluentbit.kibana_lb_arn
2+
description = "Kibana ingress loadbalancer DNS"
3+
value = module.efk_es_fluentbit.kibana_lb_dns
44
}

examples/elasticsearch_fleuntd/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,5 +46,5 @@
4646

4747
| Name | Description |
4848
|------|-------------|
49-
| <a name="output_kibana_lb_arn"></a> [kibana\_lb\_arn](#output\_kibana\_lb\_arn) | Kibana ingress loadbalancer ARN |
49+
| <a name="output_kibana_lb_arn"></a> [kibana\_lb\_arn](#output\_kibana\_lb\_arn) | Kibana ingress loadbalancer DNS |
5050
<!-- END OF PRE-COMMIT-TERRAFORM DOCS HOOK -->
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
output "kibana_lb_arn" {
2-
description = "Kibana ingress loadbalancer ARN"
3-
value = module.efk_es_fluentd.kibana_lb_arn
2+
description = "Kibana ingress loadbalancer DNS"
3+
value = module.efk_es_fluentd.kibana_lb_dns
44
}

examples/prometheus/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,5 +46,5 @@
4646

4747
| Name | Description |
4848
|------|-------------|
49-
| <a name="output_grafana_lb_arn"></a> [grafana\_lb\_arn](#output\_grafana\_lb\_arn) | Grafana ingress loadbalancer ARN |
49+
| <a name="output_grafana_lb_dns"></a> [grafana\_lb\_dns](#output\_grafana\_lb\_dns) | Grafana ingress loadbalancer DNS |
5050
<!-- END OF PRE-COMMIT-TERRAFORM DOCS HOOK -->

examples/prometheus/outputs.tf

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
output "grafana_lb_arn" {
2-
description = "Grafana ingress loadbalancer ARN"
3-
value = module.prometheus.grafana_lb_arn
1+
output "grafana_lb_dns" {
2+
description = "Grafana ingress loadbalancer DNS"
3+
value = module.prometheus.grafana_lb_dns
44
}

examples/signoz/README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929

3030
| Name | Type |
3131
|------|------|
32+
| [aws_caller_identity.current](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/caller_identity) | data source |
3233
| [aws_eks_cluster.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/eks_cluster) | data source |
3334
| [aws_eks_cluster_auth.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/eks_cluster_auth) | data source |
3435

@@ -42,5 +43,7 @@
4243

4344
## Outputs
4445

45-
No outputs.
46+
| Name | Description |
47+
|------|-------------|
48+
| <a name="output_signoz_lb_arn"></a> [signoz\_lb\_arn](#output\_signoz\_lb\_arn) | Signoz ingress loadbalancer DNS |
4649
<!-- END OF PRE-COMMIT-TERRAFORM DOCS HOOK -->

examples/signoz/locals.tf

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
data "aws_caller_identity" "current" {}
2+
13
locals {
24
signoz_config = {
35
name = "signoz-monitoring"
@@ -12,7 +14,6 @@ locals {
1214

1315
clickhouse = {
1416
user = "admin"
15-
password = "27ff0399-0d3a-4bd8-919d-17c2181e6fb9"
1617
cpu_limit = "2000m"
1718
memory_limit = "4Gi"
1819
cpu_request = "100m"
@@ -21,14 +22,15 @@ locals {
2122
}
2223

2324
signoz_bin = {
24-
replica_count = 1
25-
cpu_limit = "750m"
26-
memory_limit = "1000Mi"
27-
cpu_request = "100m"
28-
memory_request = "200Mi"
29-
enable_ingress = false
30-
# certificate_arn = "arn:aws:acm:us-east-1:123456789012:certificate/abcde12345"
31-
# domain = "signoz.mycompany.com"
25+
replica_count = 1
26+
cpu_limit = "750m"
27+
memory_limit = "1000Mi"
28+
cpu_request = "100m"
29+
memory_request = "200Mi"
30+
ingress_enabled = true
31+
aws_certificate_arn = "arn:aws:acm:us-east-1:${data.aws_caller_identity.current.account_id}:certificate/7e4d8c74-46e7-4d99-a523-6db4336d9a0a"
32+
root_domain = "${var.namespace}-${var.environment}.link"
33+
domain = "signoz.${var.namespace}-${var.environment}.link"
3234
}
3335

3436
alertmanager = {

examples/signoz/outputs.tf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
output "signoz_lb_arn" {
2+
description = "Signoz ingress loadbalancer DNS"
3+
value = module.signoz.signoz_lb_dns
4+
}

0 commit comments

Comments
 (0)