Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Major updates to the module #18

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ TERRAFORM HONEYCOMBIO REFINERY-STARTER-PACK
[![OSS Lifecycle](https://img.shields.io/osslifecycle/honeycombio/terraform-honeycombio-refinery-starter-pack?color=success)](https://github.com/honeycombio/home/blob/main/honeycomb-oss-lifecycle-and-practices.md)
[![CI](https://github.com/honeycombio/terraform-honeycombio-refinery-starter-pack/actions/workflows/test-terraform-module.yml/badge.svg)](https://github.com/honeycombio/terraform-honeycombio-refinery-starter-pack/actions?query=Test%20Terraform%20Module)

This module creates resources like Boards (and someday Triggers and SLOs!) in [Honeycomb](https://www.honeycomb.io) to kick off exploration
This module creates resources like Boards (and someday Triggers and SLOs!) in [Honeycomb](https://www.honeycomb.io) to help you manage the health of your Refinery cluster

## Use
You must have `terraform` installed. Follow [these directions](https://learn.hashicorp.com/tutorials/terraform/install-cli) to install for your platform.
Expand Down
134 changes: 134 additions & 0 deletions locals.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
#############################################################
# Define Required Columns in the Metrics and Logs Datasets
#############################################################
locals {
metrics_columns_r1 = [
"collect_cache_buffer_overrun",
"collect_cache_capacity",
"collect_cache_entries_max",
"dropped_from_stress",
"hostname",
"incoming_router_dropped",
"incoming_router_span",
"libhoney_peer_queue_overflow",
"libhoney_peer_send_errors",
"libhoney_upstream_enqueue_errors",
"libhoney_upstream_queue_length",
"libhoney_upstream_response_errors",
"libhoney_upstream_send_errors",
"libhoney_upstream_send_retries",
"num_goroutines",
"memory_inuse",
"process_uptime_seconds",
"peer_router_batch",
"peer_router_dropped",
"trace_accepted",
"trace_send_dropped",
"trace_send_ejected_full",
"trace_send_ejected_memsize",
"trace_send_kept",
"trace_send_no_root",
"trace_sent_cache_hit",
]

sampler_r1_metrics_columns = [
"dynsampler_sample_rate_avg",
"rulessampler_sample_rate_avg",
"rulessampler_num_dropped",
]

stress_level_columns = [
"stress_level",
"stress_relief_activated",
]

metrics_columns_r2 = [
"collect_cache_buffer_overrun",
"collect_cache_capacity",
"collect_cache_entries_max",
"dropped_from_stress",
"hostname",
"incoming_router_dropped",
"incoming_router_span",
"libhoney_peer_queue_overflow",
"libhoney_peer_send_errors",
"libhoney_upstream_enqueue_errors",
"libhoney_upstream_queue_length",
"libhoney_upstream_response_errors",
"libhoney_upstream_send_errors",
"libhoney_upstream_send_retries",
"num_goroutines",
"memory_inuse",
"process_uptime_seconds",
"peer_router_batch",
"peer_router_dropped",
"trace_accepted",
"trace_send_dropped",
"trace_send_ejected_full",
"trace_send_ejected_memsize",
"trace_send_kept",
"trace_send_no_root",
"trace_sent_cache_hit",
]

sampler_r2_metrics_columns = [
"deterministic_num_kept",
"deterministic_num_dropped",
"dynamic_sample_rate_avg",
"emadynamic_sample_rate_avg",
"emathroughput_sample_rate_avg",
"rulesbased_sample_rate_avg",
"totalthroughput_sample_rate_avg",
"windowedthroughput_sample_rate_avg",
]

otel_metrics_columns = [
"collect_cache_buffer_overrun",
"collect_cache_capacity",
"collect_cache_entries.max",
"dropped_from_stress",
"hostname",
"incoming_router_dropped",
"incoming_router_span",
"libhoney_peer_queue_overflow",
"libhoney_peer_send_errors",
"libhoney_upstream_enqueue_errors",
"libhoney_upstream_queue_length",
"libhoney_upstream_response_errors",
"libhoney_upstream_send_errors",
"libhoney_upstream_send_retries",
"num_goroutines",
"memory_inuse",
"process_uptime_seconds",
"peer_router_batch",
"peer_router_dropped",
"trace_accepted",
"trace_send_dropped",
"trace_send_ejected_full",
"trace_send_ejected_memsize",
"trace_send_kept",
"trace_send_no_root",
"trace_sent_cache_hit",
]

sampler_otel_metrics_columns = [
"deterministic_num_kept",
"deterministic_num_dropped",
"dynamic_sample_rate.avg",
"emadynamic_sample_rate.avg",
"emathroughput_sample_rate.avg",
"rulesbased_sample_rate.avg",
"totalthroughput_sample_rate.avg",
"windowedthroughput_sample_rate.avg",
]

logs_columns = [
"error",
"error.err",
"error.msg",
"msg",
]

contains_r2_metrics = contains(data.honeycombio_columns.metrics.names, "rulesbased_sample_rate_avg") ? true : contains(data.honeycombio_columns.metrics.names, "rulesbased_sample_rate.avg")
contains_otel_metrics = contains(data.honeycombio_columns.metrics.names, "host.name")
}
112 changes: 71 additions & 41 deletions main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -12,44 +12,25 @@ resource "honeycombio_dataset" "refinery-metrics-dataset" {
name = var.refinery_metrics_dataset
description = "Dataset for Refinery metrics"
}

####################################################
# Create Columns in the Metrics Dataset
# Create Columns For Queries
####################################################
module "metrics_columns" {
source = "./modules/columns"
count = var.create_columns ? 1 : 0
dataset_name = var.refinery_metrics_dataset
columns = {
"dynsampler_sample_rate_avg" = "float",
"rulessampler_sample_rate_avg" = "float",
"rulessampler_num_dropped" = "float",
"incoming_router_span" = "float",
"peer_router_batch" = "float",
"hostname" = "string",
"collect_cache_buffer_overrun" = "float",
"memory_inuse" = "float",
"collect_cache_entries_max" = "float",
"collect_cache_capacity" = "float",
"num_goroutines" = "float",
"process_uptime_seconds" = "float",
"incoming_router_dropped" = "float",
"peer_router_dropped" = "float",
"trace_accepted" = "float",
"trace_send_dropped" = "float",
"trace_send_kept" = "float",
"libhoney_peer_queue_overflow" = "float",
"libhoney_peer_send_errors" = "float",
"libhoney_upstream_queue_length" = "float",
"upstream_enqueue_errors" = "float",
"upstream_response_errors" = "float",
"trace_sent_cache_hit" = "float",
"trace_send_no_root" = "float",
}
data "honeycombio_columns" "metrics" {
dataset = var.refinery_metrics_dataset
}

depends_on = [
honeycombio_dataset.refinery-metrics-dataset
]
data "honeycombio_columns" "logs" {
dataset = var.refinery_logs_dataset
}

module "columns" {
source = "./modules/columns"

metrics_dataset = var.refinery_metrics_dataset
logs_dataset = var.refinery_logs_dataset

metrics_columns = local.contains_r2_metrics ? local.contains_otel_metrics ? flatten(setsubtract(local.otel_metrics_columns, data.honeycombio_columns.metrics.names)) : flatten(setsubtract(local.metrics_columns_r2, data.honeycombio_columns.metrics.names)) : flatten(setsubtract(local.metrics_columns_r1, data.honeycombio_columns.metrics.names))
logs_columns = flatten(setsubtract(local.logs_columns, data.honeycombio_columns.logs.names))
}

####################################################
Expand All @@ -59,9 +40,26 @@ module "metrics_queries" {
source = "./modules/metrics_queries"
dataset_name = var.refinery_metrics_dataset

contains_stress_level = contains(data.honeycombio_columns.metrics.names, "stress_level")
contains_otel_metrics = local.contains_otel_metrics
sampler_columns = local.contains_r2_metrics ? local.contains_otel_metrics ? setintersection(local.sampler_otel_metrics_columns, data.honeycombio_columns.metrics.names) : setintersection(local.sampler_r2_metrics_columns, data.honeycombio_columns.metrics.names) : setintersection(local.sampler_r1_metrics_columns, data.honeycombio_columns.metrics.names)

depends_on = [
honeycombio_dataset.refinery-metrics-dataset,
module.metrics_columns
module.columns,
]
}

####################################################
# Create Queries Against Logs Dataset
####################################################
module "logs_queries" {
source = "./modules/logs_queries"
dataset_name = var.refinery_logs_dataset

depends_on = [
honeycombio_dataset.refinery-logs-dataset,
module.columns,
]
}

Expand All @@ -71,9 +69,34 @@ module "metrics_queries" {
resource "honeycombio_board" "refinery" {
name = "${var.refinery_cluster_name} Refinery Operations"
style = "visual"

dynamic "query" {
for_each = contains(data.honeycombio_columns.metrics.names, "stress_level") ? ["srs", "dfs"] : []

content {
query_id = query.value == "srs" ? module.metrics_queries.stress-relief-status-query-id : module.metrics_queries.dropped-from-stress-query-id
query_annotation_id = query.value == "srs" ? module.metrics_queries.stress-relief-status-query-annotation-id : module.metrics_queries.dropped-from-stress-query-annotation-id
}
}

dynamic "query" {
for_each = contains(data.honeycombio_columns.metrics.names, "stress_level") ? ["stress-relief-log"] : []

content {
query_id = module.logs_queries.stress-relief-log-query-id
query_annotation_id = module.logs_queries.stress-relief-log-query-annotation-id
query_style = "table"
}
}

query {
query_id = module.metrics_queries.cache-health-query-id
query_annotation_id = module.metrics_queries.cache-health-query-annotation-id
}

query {
query_id = module.metrics_queries.refinery-health-query-id
query_annotation_id = module.metrics_queries.refinery-health-query-annotation-id
query_id = module.metrics_queries.cache-ejections-query-id
query_annotation_id = module.metrics_queries.cache-ejections-query-annotation-id
}

query {
Expand All @@ -92,8 +115,13 @@ resource "honeycombio_board" "refinery" {
}

query {
query_id = module.metrics_queries.refinery-dynsampler-rates-query-id
query_annotation_id = module.metrics_queries.refinery-dynsampler-rates-query-annotation-id
query_id = module.logs_queries.error-log-query-id
query_annotation_id = module.logs_queries.error-log-query-annotation-id
}

query {
query_id = module.metrics_queries.refinery-sampler-rates-query-id
query_annotation_id = module.metrics_queries.refinery-sampler-rates-query-annotation-id
}

query {
Expand All @@ -108,7 +136,9 @@ resource "honeycombio_board" "refinery" {

depends_on = [
honeycombio_dataset.refinery-metrics-dataset,
module.metrics_columns,
honeycombio_dataset.refinery-logs-dataset,
module.columns,
module.metrics_queries,
module.logs_queries,
]
}
61 changes: 56 additions & 5 deletions modules/columns/main.tf
Original file line number Diff line number Diff line change
@@ -1,6 +1,57 @@
resource "honeycombio_column" "columns" {
count = length(var.columns)
name = keys(var.columns)[count.index]
type = values(var.columns)[count.index]
dataset = var.dataset_name
resource "null_resource" "create_metrics_columns" {
provisioner "local-exec" {
command = <<-EOT
cat > metrics-event.json <<EOF
{
%{for m in var.metrics_columns~}
%{if m != element(var.metrics_columns, length(var.metrics_columns) - 1)~}
%{if m != "hostname"~}
"${m}": 0.0,
%{else~}
"${m}": "",
%{endif~}
%{else~}
%{if m != "hostname"~}
"${m}": 0.0
%{else~}
"${m}": ""
%{endif~}
%{endif~}
%{endfor~}
}
EOF

HONEYCOMB_DATASET="${var.metrics_dataset}"

curl https://api.honeycomb.io/1/events/$HONEYCOMB_DATASET -X POST \
-H "X-Honeycomb-Team: $HONEYCOMB_API_KEY" -d @metrics-event.json
tdarwin marked this conversation as resolved.
Show resolved Hide resolved

sleep 15
EOT
}
}

resource "null_resource" "create_logs_columns" {
provisioner "local-exec" {
command = <<-EOT
cat > logs-event.json <<EOF
{
%{for m in var.logs_columns~}
%{if m != element(var.logs_columns, length(var.logs_columns) - 1)~}
"${m}": "",
%{else~}
"${m}": ""
%{endif~}
%{endfor~}
}
EOF

HONEYCOMB_DATASET="${var.logs_dataset}"

curl https://api.honeycomb.io/1/events/$HONEYCOMB_DATASET -X POST \
-H "X-Honeycomb-Team: $HONEYCOMB_API_KEY" -d @logs-event.json

sleep 15
EOT
}
}
18 changes: 12 additions & 6 deletions modules/columns/variables.tf
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
variable "dataset_name" {
description = "The name of the dataset where columns will need to be created"
type = string
variable "metrics_dataset" {
type = string
}

variable "columns" {
type = map(string)
description = "The list of columns being created as a map object with the key being the column name and value being the column type"
variable "logs_dataset" {
type = string
}

variable "metrics_columns" {
type = list(string)
}

variable "logs_columns" {
type = list(string)
}
4 changes: 2 additions & 2 deletions modules/columns/versions.tf
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
terraform {
required_version = ">= 0.13"
required_version = ">= 1.0"
required_providers {
honeycombio = {
source = "honeycombio/honeycombio"
version = ">= 0.12.0"
version = ">= 0.15.0"
}
}
}
Loading
Loading