——— openmetrics-exporter
Do More with
Your Metrics
Our open-sourced Observability-as-Code tool reduces the toil of finding-and-combining useful metrics from layers and hundreds of components involved in modern cloud-native systems.
Every source, component, or metric is just a simple configuration file because the only “code” you should focus on is for your customers.
➜ last9 git:(master) ✗ openmetrics-exporter run openmetrics --dir .
running scraper => my-rds
Serving metrics on: http://localhost:9100/metrics
|
——— openmetrics-exporter
Do More with
Your Metrics
Our open-sourced Observability-as-Code tool reduces the toil of finding-and-combining useful metrics from layers and hundreds of components involved in modern cloud-native systems.
Every source, component, or metric is just a simple configuration file because the only “code” you should focus on is for your customers.
➜ last9 git:(master) ✗ openmetrics-exporter run openmetrics --dir .
running scraper => my-rds
Serving metrics on: http://localhost:9100/metrics
|
——— openmetrics-exporter
Do More with
Your Metrics
Our open-sourced Observability-as-Code tool reduces the toil of finding-and-combining useful metrics from layers and hundreds of components involved in modern cloud-native systems.
Every source, component, or metric is just a simple configuration file because the only “code” you should focus on is for your customers.
➜ last9 git:(master) ✗ openmetrics-exporter run openmetrics --dir .
running scraper => my-rds
Serving metrics on: http://localhost:9100/metrics
|
Unlock Observability-as-Code
———
1
Declare
Write infrastructure as code using declarative configuration files written in HashiCorp Configuration Language (HCL). Configurations are simple human-readable scrapers using blocks, arguments, modules, and expressions.
var rds {
value = file("./my-rds.json")
}

var rds_tags {
value = <<EOF
{
"tag_service": "kyc_service",
"tag_namespace": "kyc-service.internal.in"
}
EOF
}

extends aws_rds_cloudwatch "my-rds" {
resources = var.rds
label_set = var.rds_tags
module_uri = "https://github.com/last9/openmetrics-registry/releases/download/v0.0.1/aws_cloudwatch_rds_v0.0.1.hcl"
using = {
default = "ap-south-1"
}
}
2
timestamp,label_set,read_latency
1643996400,"{""DBInstanceIdentifier"":""prod-kyc-service"",""tag_namespace"":""kyc-service.internal.in"",""tag_service"":""kyc_service""}",0.0005432098765432099

timestamp,label_set,write_iops
1643996400,"{""DBInstanceIdentifier"":""prod-kyc-service"",""tag_namespace"":""kyc-service.internal.in"",""tag_service"":""kyc_service""}",6.631785916619456

timestamp,label_set,cpu
1643996400,"{""DBInstanceIdentifier"":""prod-kyc-service"",""tag_namespace"":""kyc-service.internal.in"",""tag_service"":""kyc_service""}",5.7500000000194

timestamp,label_set,read_iops
1643996400,"{""DBInstanceIdentifier"":""prod-kyc-service"",""tag_namespace"":""kyc-service.internal.in"",""tag_service"":""kyc_service""}",2.5160795814309993

timestamp,label_set,queue_depth
1643996400,"{""DBInstanceIdentifier"":""prod-kyc-service"",""tag_namespace"":""kyc-service.internal.in"",""tag_service"":""kyc_service""}",0.0031992535075149133

timestamp,label_set,free_space
1643996400,"{""DBInstanceIdentifier"":""prod-kyc-service"",""tag_namespace"":""kyc-service.internal.in"",""tag_service"":""kyc_service""}",8.0855539712e+10

timestamp,label_set,write_latency
1643996400,"{""DBInstanceIdentifier"":""prod-kyc-service"",""tag_namespace"":""kyc-service.internal.in"",""tag_service"":""kyc_service""}",0.0004945770065075922

timestamp,label_set,connections
1643996400,"{""DBInstanceIdentifier"":""prod-kyc-service"",""tag_namespace"":""kyc-service.internal.in"",""tag_service"":""kyc_service""}",56

timestamp,label_set,network_in
1643996400,"{""DBInstanceIdentifier"":""prod-kyc-service"",""tag_namespace"":""kyc-service.internal.in"",""tag_service"":""kyc_service""}",20023.527843503183

timestamp,label_set,network_out
1643996400,"{""DBInstanceIdentifier"":""prod-kyc-service"",""tag_namespace"":""kyc-service.internal.in"",""tag_service"":""kyc_service""}",60086.213216916054
Plan
Once the declarations are in place, run a dry Plan to see if metrics look correct.
3
Dispatch and Emit
Dispatch the change that will start emitting metrics in OpenMetrics format on http://openmetrics-exporter:9100/metrics.
Plug them into any OpenMetrics receiver like Prometheus and done!
➜ last9 git:(master) ✗ openmetrics-exporter run openmetrics --dir .
running scraper => my-rds
Serving metrics on: http://localhost:9100/metrics
|
Unlock Observability-as-Code
———
1
Declare
Write infrastructure as code using declarative configuration files written in HashiCorp Configuration Language (HCL). Configurations are simple human-readable scrapers using blocks, arguments, modules, and expressions.
var rds {
value = file("./my-rds.json")
}

var rds_tags {
value = <<EOF
{
"tag_service": "kyc_service",
"tag_namespace": "kyc-service.internal.in"
}
EOF
}

extends aws_rds_cloudwatch "my-rds" {
resources = var.rds
label_set = var.rds_tags
module_uri = "https://github.com/last9/openmetrics-registry/releases/download/v0.0.1/aws_cloudwatch_rds_v0.0.1.hcl"
using = {
default = "ap-south-1"
}
}
2
timestamp,label_set,read_latency
1643996400,"{""DBInstanceIdentifier"":""prod-kyc-service"",""tag_namespace"":""kyc-service.internal.in"",""tag_service"":""kyc_service""}",0.0005432098765432099

timestamp,label_set,write_iops
1643996400,"{""DBInstanceIdentifier"":""prod-kyc-service"",""tag_namespace"":""kyc-service.internal.in"",""tag_service"":""kyc_service""}",6.631785916619456

timestamp,label_set,cpu
1643996400,"{""DBInstanceIdentifier"":""prod-kyc-service"",""tag_namespace"":""kyc-service.internal.in"",""tag_service"":""kyc_service""}",5.7500000000194

timestamp,label_set,read_iops
1643996400,"{""DBInstanceIdentifier"":""prod-kyc-service"",""tag_namespace"":""kyc-service.internal.in"",""tag_service"":""kyc_service""}",2.5160795814309993

timestamp,label_set,queue_depth
1643996400,"{""DBInstanceIdentifier"":""prod-kyc-service"",""tag_namespace"":""kyc-service.internal.in"",""tag_service"":""kyc_service""}",0.0031992535075149133

timestamp,label_set,free_space
1643996400,"{""DBInstanceIdentifier"":""prod-kyc-service"",""tag_namespace"":""kyc-service.internal.in"",""tag_service"":""kyc_service""}",8.0855539712e+10

timestamp,label_set,write_latency
1643996400,"{""DBInstanceIdentifier"":""prod-kyc-service"",""tag_namespace"":""kyc-service.internal.in"",""tag_service"":""kyc_service""}",0.0004945770065075922

timestamp,label_set,connections
1643996400,"{""DBInstanceIdentifier"":""prod-kyc-service"",""tag_namespace"":""kyc-service.internal.in"",""tag_service"":""kyc_service""}",56

timestamp,label_set,network_in
1643996400,"{""DBInstanceIdentifier"":""prod-kyc-service"",""tag_namespace"":""kyc-service.internal.in"",""tag_service"":""kyc_service""}",20023.527843503183

timestamp,label_set,network_out
1643996400,"{""DBInstanceIdentifier"":""prod-kyc-service"",""tag_namespace"":""kyc-service.internal.in"",""tag_service"":""kyc_service""}",60086.213216916054
Plan
Once the declarations are in place, run a dry Plan to see if metrics look correct.
3
Dispatch and Emit
Dispatch the change that will start emitting metrics in OpenMetrics format on http://openmetrics-exporter:9100/metrics.
Plug them into any OpenMetrics receiver like Prometheus and done!
➜ last9 git:(master) ✗ openmetrics-exporter run openmetrics --dir .
running scraper => my-rds
Serving metrics on: http://localhost:9100/metrics
|
Unlock Observability-as-Code
———
1
Declare
Write infrastructure as code using declarative configuration files written in HashiCorp Configuration Language (HCL). Configurations are simple human-readable scrapers using blocks, arguments, modules, and expressions.
var rds { value = file("./my-rds.json") } var rds_tags { value = <<EOF { "tag_service": "kyc_service", "tag_namespace": "kyc-service.internal.in" } EOF } extends aws_rds_cloudwatch "my-rds" { resources = var.rds label_set = var.rds_tags module_uri = "https://github.com/last9/openmetrics-registry/releases/download/v0.0.1/aws_cloudwatch_rds_v0.0.1.hcl" using = { default = "ap-south-1" } }
2
timestamp,label_set,read_latency
1643996400,"{""DBInstanceIdentifier"":""prod-kyc-service"",""tag_namespace"":""kyc-service.internal.in"",""tag_service"":""kyc_service""}",0.0005432098765432099

timestamp,label_set,write_iops
1643996400,"{""DBInstanceIdentifier"":""prod-kyc-service"",""tag_namespace"":""kyc-service.internal.in"",""tag_service"":""kyc_service""}",6.631785916619456

timestamp,label_set,cpu
1643996400,"{""DBInstanceIdentifier"":""prod-kyc-service"",""tag_namespace"":""kyc-service.internal.in"",""tag_service"":""kyc_service""}",5.7500000000194

timestamp,label_set,read_iops
1643996400,"{""DBInstanceIdentifier"":""prod-kyc-service"",""tag_namespace"":""kyc-service.internal.in"",""tag_service"":""kyc_service""}",2.5160795814309993

timestamp,label_set,queue_depth
1643996400,"{""DBInstanceIdentifier"":""prod-kyc-service"",""tag_namespace"":""kyc-service.internal.in"",""tag_service"":""kyc_service""}",0.0031992535075149133

timestamp,label_set,free_space
1643996400,"{""DBInstanceIdentifier"":""prod-kyc-service"",""tag_namespace"":""kyc-service.internal.in"",""tag_service"":""kyc_service""}",8.0855539712e+10

timestamp,label_set,write_latency
1643996400,"{""DBInstanceIdentifier"":""prod-kyc-service"",""tag_namespace"":""kyc-service.internal.in"",""tag_service"":""kyc_service""}",0.0004945770065075922

timestamp,label_set,connections
1643996400,"{""DBInstanceIdentifier"":""prod-kyc-service"",""tag_namespace"":""kyc-service.internal.in"",""tag_service"":""kyc_service""}",56

timestamp,label_set,network_in
1643996400,"{""DBInstanceIdentifier"":""prod-kyc-service"",""tag_namespace"":""kyc-service.internal.in"",""tag_service"":""kyc_service""}",20023.527843503183

timestamp,label_set,network_out
1643996400,"{""DBInstanceIdentifier"":""prod-kyc-service"",""tag_namespace"":""kyc-service.internal.in"",""tag_service"":""kyc_service""}",60086.213216916054
Plan
Once the declarations are in place, run a dry Plan to see if metrics look correct.
3
Dispatch and Emit
Dispatch the change that will start emitting metrics in OpenMetrics format on http://openmetrics-exporter:9100/metrics.
Plug them into any OpenMetrics receiver like Prometheus and done!
➜ last9 git:(master) ✗ openmetrics-exporter run openmetrics --dir .
running scraper => my-rds
Serving metrics on: http://localhost:9100/metrics
|
Features of
openmetrics-exporter
———
HCL
openmetrics-exporter relies on Hashicorp Configuration Language (HCL) to reuse the goodness of declarative code in infrastructure automation tooling. Developers coming in from Terraform don’t need a new learning curve of yet another configuration language. The favorite editor, linter, and lifecycle tools are ready from the word GO!
.
└── openmetrics-exporter
├── config.hcl
├── my-rds.json
└── rds.hcl
config cloudwatch "ap-south-1" {
role_arn = "arn:aws:iam::XXXXXXXX:role/last9_role"
region = "ap-south-1"
access_key = "XXXXXX"
secret_key = "XXXXXX"
}
|
Plugins and Providers
No more you have to write a new Prometheus exporter for every source. No matter if the metrics or Business data is stored in Cloudwatch, Stackdriver, Redshift, InfluxDB, or a Relational Database. A declarative configuration is all that is needed. Goodbye, long SDLC cycles of Golang codes, welcome human-readable configurations.
Prometheus
Google Stackdriver
Amazon Cloudwatch
Amazon Redshift
InfluxDB
PostgreSQL
OpenMetrics
MariaDB
MySQL
TimescaleDB
Modules
Backed by strong Software Engineering principles, we strongly believe in the reusability and modularity of code. Modules find first-class support in openmetrics-exporter.
Any running scraper can be converted to a reusable module and vice-versa so that you can create reusable templates for observability.
scraper aws_alb_cloudwatch module {
frequency = 60
lookback = 600
timeout = 20
resolution = 60
lag = 120

gauge "throughput" {
source cloudwatch "throughput" {
query {
aggregator = "Sum"
namespace = "AWS/ApplicationELB"
metric_name = "RequestCount"

dimensions = {
LoadBalancer = resources.each.LoadBalancer
}
}
}
}
}
openmetrics-registry
For most of the standard Cloud and self-hosted components, there is an openmetrics-exporter module. Head to the registry and find the suitable module that suits your needs. The registry is ever-expanding and encourages standardization across the community.
You can build and publish your own modules as well. Start contributing now.
for last9 users
Lookbacks and Correcting Metrics
Companies like Disney+ Hotstar, Dyte, Yieldstreet, Arria, and Skit.ai trust in openmetrics-exporter and when paired with Last9 Compass, it unlocks capabilities for them that aren’t possible otherwise.
trusted by
Features of
openmetrics-exporter
———
HCL
openmetrics-exporter relies on Hashicorp Configuration Language (HCL) to reuse the goodness of declarative code in infrastructure automation tooling. Developers coming in from Terraform don’t need a new learning curve of yet another configuration language. The favorite editor, linter, and lifecycle tools are ready from the word GO!
.
└── openmetrics-exporter
├── config.hcl
├── my-rds.json
└── rds.hcl
config cloudwatch "ap-south-1" {
role_arn = "arn:aws:iam::XXXXXXXX:role/last9_role"
region = "ap-south-1"
access_key = "XXXXXX"
secret_key = "XXXXXX"
}
|
Plugins and Providers
No more you have to write a new Prometheus exporter for every source. No matter if the metrics or Business data is stored in Cloudwatch, Stackdriver, Redshift, InfluxDB, or a Relational Database. A declarative configuration is all that is needed. Goodbye, long SDLC cycles of Golang codes, welcome human-readable configurations.
Prometheus
Google Stackdriver
Amazon Cloudwatch
Amazon Redshift
InfluxDB
PostgreSQL
OpenMetrics
MariaDB
MySQL
TimescaleDB
Modules
Backed by strong Software Engineering principles, we strongly believe in the reusability and modularity of code. Modules find first-class support in openmetrics-exporter.
Any running scraper can be converted to a reusable module and vice-versa so that you can create reusable templates for observability.
scraper aws_alb_cloudwatch module {
frequency = 60
lookback = 600
timeout = 20
resolution = 60
lag = 120

gauge "throughput" {
source cloudwatch "throughput" {
query {
aggregator = "Sum"
namespace = "AWS/ApplicationELB"
metric_name = "RequestCount"

dimensions = {
LoadBalancer = resources.each.LoadBalancer
}
}
}
}
}
openmetrics-registry
For most of the standard Cloud and self-hosted components, there is an openmetrics-exporter module. Head to the registry and find the suitable module that suits your needs. The registry is ever-expanding and encourages standardization across the community.
You can build and publish your own modules as well. Start contributing now.
for last9 users
Lookbacks and Correcting Metrics
Companies like Disney+ Hotstar, Dyte, Yieldstreet, Arria, and Skit.ai trust in openmetrics-exporter and when paired with Last9 Compass, it unlocks capabilities for them that aren’t possible otherwise.
trusted by
Features of
openmetrics-exporter
———
HCL
openmetrics-exporter relies on Hashicorp Configuration Language (HCL) to reuse the goodness of declarative code in infrastructure automation tooling. Developers coming in from Terraform don’t need a new learning curve of yet another configuration language. The favorite editor, linter, and lifecycle tools are ready from the word GO!
. └── openmetrics-exporter ├── config.hcl ├── my-rds.json └── rds.hcl
config cloudwatch "ap-south-1" { role_arn = "arn:aws:iam::XXXXXXXX:role/last9_role" region = "ap-south-1" access_key = "XXXXXX" secret_key = "XXXXXX" }
|
Plugins and Providers
No more you have to write a new Prometheus exporter for every source. No matter if the metrics or Business data is stored in Cloudwatch, Stackdriver, Redshift, InfluxDB, or a Relational Database. A declarative configuration is all that is needed. Goodbye, long SDLC cycles of Golang codes, welcome human-readable configurations.
Prometheus
Google Stackdriver
Amazon Cloudwatch
Amazon Redshift
InfluxDB
PostgreSQL
OpenMetrics
MariaDB
MySQL
TimescaleDB
Modules
Backed by strong Software Engineering principles, we strongly believe in the reusability and modularity of code. Modules find first-class support in openmetrics-exporter.
Any running scraper can be converted to a reusable module and vice-versa so that you can create reusable templates for observability.
scraper aws_alb_cloudwatch module {
frequency = 60
lookback = 600
timeout = 20
resolution = 60
lag = 120

gauge "throughput" {
source cloudwatch "throughput" {
query {
aggregator = "Sum"
namespace = "AWS/ApplicationELB"
metric_name = "RequestCount"

dimensions = {
LoadBalancer = resources.each.LoadBalancer
}
}
}
}
}
openmetrics-registry
For most of the standard Cloud and self-hosted components, there is an openmetrics-exporter module. Head to the registry and find the suitable module that suits your needs. The registry is ever-expanding and encourages standardization across the community.
You can build and publish your own modules as well. Start contributing now.
for last9 users
Lookbacks and Correcting Metrics
Companies like Disney+ Hotstar, Dyte, Yieldstreet, Arria, and Skit.ai trust in openmetrics-exporter and when paired with Last9 Compass, it unlocks capabilities for them that aren’t possible otherwise.
trusted by
Why openmetrics-exporter?
———
Here’s how metrics flow in a mature infrastructure.
The most complex challenge here is collecting and unifying metrics coming from various sources.
Why openmetrics-exporter?
———
Here’s how metrics flow in a mature infrastructure.
The most complex challenge here is collecting and unifying metrics coming from various sources.
Why openmetrics-exporter?
———
Here’s how metrics flow in a mature infrastructure.
The most complex challenge here is collecting and unifying metrics coming from various sources.
How does
openmetrics-exporter
work?
———
Step 1
Write and Test the files locally. Once the files are ready, pack them onto your favorite artifactory.
Step 1
Write and Test the files locally. Once the files are ready, pack them onto your favorite artifactory.
Step 1
Write and Test the files locally. Once the files are ready, pack them onto your favorite artifactory.
Step 2
Using your CI/CD or manually, dispatch the openmetrics-exporter. There are a bunch of batteries available in the default openmetrics-exporter Docker container for Cloud tag discovery etc.
Step 2
Using your CI/CD or manually, dispatch the openmetrics-exporter. There are a bunch of batteries available in the default openmetrics-exporter Docker container for Cloud tag discovery etc.
Step 2
Using your CI/CD or manually, dispatch the openmetrics-exporter. There are a bunch of batteries available in the default openmetrics-exporter Docker container for Cloud tag discovery etc.
Interested in doing more with your metrics?
➜ last9 git:(master) ✗ openmetrics-exporter run openmetrics --dir .
running scraper => my-rds
Serving metrics on: http://localhost:9100/metrics
|
Interested in doing more with your metrics?
➜ last9 git:(master) ✗ openmetrics-exporter run openmetrics --dir .
running scraper => my-rds
Serving metrics on: http://localhost:9100/metrics
|
Interested in doing more with your metrics?
➜ last9 git:(master) ✗ openmetrics-exporter run openmetrics --dir .
running scraper => my-rds
Serving metrics on: http://localhost:9100/metrics
|
Join the Last9 User Group
Drop in to learn about Reliability, SRE, how our community uses Last9’s platform; and help us shape the future of Last9.
Open Discord

Last9 cares deeply about its customer’s data and is SOC2 Type II certified. Please contact us at hello@last9.io for the report.

Join the Last9 User Group
Drop in to learn about Reliability, SRE, how our community uses Last9’s platform; and help us shape the future of Last9.
Open Discord

Last9 cares deeply about its customer’s data and is SOC2 Type II certified. Please contact us at hello@last9.io for the report.

Join the Last9 User Group
Drop in to learn about Reliability, SRE, how our community uses Last9’s platform; and help us shape the future of Last9.
Open Discord

Last9 cares deeply about its customer’s data and is SOC2 Type II certified. Please contact us at hello@last9.io for the report.