Skip to content

Commit 69e6b63

Browse files
authored
Enable prom metrics for clock and deployment_updater (#600)
Adds configuration flags to allow operators to enable prom metrics for cloud_controller_clock and cc_deployment_updater. Communication is secured via mTLS.
1 parent bdabf62 commit 69e6b63

File tree

19 files changed

+432
-22
lines changed

19 files changed

+432
-22
lines changed

jobs/cc_deployment_updater/spec

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ templates:
2727
resource_pool_ca_cert.pem.erb: config/certs/resource_pool_ca_cert.pem
2828
droplets_ca_cert.pem.erb: config/certs/droplets_ca_cert.pem
2929
buildpacks_ca_cert.pem.erb: config/certs/buildpacks_ca_cert.pem
30+
prom_scraper_config.yml.erb: config/prom_scraper_config.yml
31+
scrape.crt.erb: config/certs/scrape.crt
32+
scrape.key.erb: config/certs/scrape.key
33+
scrape_ca.crt.erb: config/certs/scrape_ca.crt
3034
storage_cli_config_droplets.json.erb: config/storage_cli_config_droplets.json
3135
storage_cli_config_packages.json.erb: config/storage_cli_config_packages.json
3236
storage_cli_config_buildpacks.json.erb: config/storage_cli_config_buildpacks.json
@@ -226,3 +230,23 @@ properties:
226230
cc.locket.port:
227231
default: 8891
228232
description: "Port of the Locket server"
233+
234+
cc.publish_metrics:
235+
default: false
236+
description: "When set to true a small webserver will be started in a separate thread within the first worker's process.
237+
This webserver will publish prometheus metrics of the workers under '/metrics'. The webserver will listen on the port
238+
defined in 'cc.prometheus_port'."
239+
cc.prometheus_port:
240+
default: 9395
241+
description: "When 'cc.publish_metrics' is set to true, the webserver, which publishes the metrics, will listen on this port."
242+
243+
cc.prom_scraper.disabled:
244+
default: false
245+
description: "When 'cc.publish_metrics' is enabled, a prom_scraper_config will be automatically generated. If you want to use another component for scraping, you can disable scraping by prom_scraper for cc-worker metrics with this."
246+
cc.prom_scraper_tls.ca_cert:
247+
description: "PEM-encoded CA certificate for secure, mutually authenticated TLS communication with prom_scraper"
248+
cc.prom_scraper_tls.public_cert:
249+
description: "PEM-encoded certificate for secure, mutually authenticated TLS communication with prom_scraper"
250+
cc.prom_scraper_tls.private_key:
251+
description: "PEM-encoded key for secure, mutually authenticated TLS communication with prom_scraper"
252+

jobs/cc_deployment_updater/templates/cloud_controller_ng.yml.erb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,8 @@ cpu_weight_max_memory: <%= link("cloud_controller_internal").p("cc.cpu_weight_ma
300300
custom_metric_tag_prefix_list: <%= link("cloud_controller_internal").p("cc.custom_metric_tag_prefix_list") %>
301301

302302
app_log_revision: <%= link("cloud_controller_internal").p("cc.app_log_revision") %>
303+
publish_metrics: <%= p("cc.publish_metrics") %>
304+
prometheus_port: <%= p("cc.prometheus_port") %>
303305

304306
<% link("cloud_controller_internal").if_p("cc.feature_flag_overrides") do |feature_flag_overrides| %>
305307
feature_flag_overrides: <%= feature_flag_overrides.to_json %>
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<% if p("cc.publish_metrics") && (p("cc.prom_scraper.disabled") != true) -%>
2+
port: <%= p("cc.prometheus_port") %>
3+
source_id: "cc_deployment_updater"
4+
instance_id: <%= spec.id || spec.index.to_s %>
5+
scheme: https
6+
server_name: "cc_deployment_updater_metrics"
7+
path: /metrics
8+
labels:
9+
origin: cc_deployment_updater
10+
<% end -%>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<%= p('cc.prom_scraper_tls.public_cert', '') %>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<%= p('cc.prom_scraper_tls.private_key', '') %>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<%= p('cc.prom_scraper_tls.ca_cert', '') %>

jobs/cloud_controller_clock/spec

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ templates:
2525
uaa_ca.crt.erb: config/certs/uaa_ca.crt
2626
db_ca.crt.erb: config/certs/db_ca.crt
2727
credhub_ca.crt.erb: config/certs/credhub_ca.crt
28+
prom_scraper_config.yml.erb: config/prom_scraper_config.yml
29+
scrape.crt.erb: config/certs/scrape.crt
30+
scrape.key.erb: config/certs/scrape.key
31+
scrape_ca.crt.erb: config/certs/scrape_ca.crt
2832
storage_cli_config_droplets.json.erb: config/storage_cli_config_droplets.json
2933
storage_cli_config_packages.json.erb: config/storage_cli_config_packages.json
3034
storage_cli_config_buildpacks.json.erb: config/storage_cli_config_buildpacks.json
@@ -584,3 +588,22 @@ properties:
584588
cc.credential_references.interpolate_service_bindings:
585589
description: "Controls whether CredHub credentials are automatically interpolated in VCAP_SERVICES"
586590
default: true
591+
592+
cc.publish_metrics:
593+
default: false
594+
description: "When set to true a small webserver will be started in a separate thread within the first worker's process.
595+
This webserver will publish prometheus metrics of the workers under '/metrics'. The webserver will listen on the port
596+
defined in 'cc.prometheus_port'."
597+
cc.prometheus_port:
598+
default: 9394
599+
description: "When 'cc.publish_metrics' is set to true, the webserver, which publishes the metrics, will listen on this port."
600+
601+
cc.prom_scraper.disabled:
602+
default: false
603+
description: "When 'cc.publish_metrics' is enabled, a prom_scraper_config will be automatically generated. If you want to use another component for scraping, you can disable scraping by prom_scraper for cc-worker metrics with this."
604+
cc.prom_scraper_tls.ca_cert:
605+
description: "PEM-encoded CA certificate for secure, mutually authenticated TLS communication with prom_scraper"
606+
cc.prom_scraper_tls.public_cert:
607+
description: "PEM-encoded certificate for secure, mutually authenticated TLS communication with prom_scraper"
608+
cc.prom_scraper_tls.private_key:
609+
description: "PEM-encoded key for secure, mutually authenticated TLS communication with prom_scraper"

jobs/cloud_controller_clock/templates/cloud_controller_ng.yml.erb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,8 @@ cpu_weight_max_memory: <%= link("cloud_controller_internal").p("cc.cpu_weight_ma
373373
custom_metric_tag_prefix_list: <%= link("cloud_controller_internal").p("cc.custom_metric_tag_prefix_list") %>
374374

375375
app_log_revision: <%= link("cloud_controller_internal").p("cc.app_log_revision") %>
376+
publish_metrics: <%= p("cc.publish_metrics") %>
377+
prometheus_port: <%= p("cc.prometheus_port") %>
376378

377379
<% link("cloud_controller_internal").if_p("cc.feature_flag_overrides") do |feature_flag_overrides| %>
378380
feature_flag_overrides: <%= feature_flag_overrides.to_json %>
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<% if p("cc.publish_metrics") && (p("cc.prom_scraper.disabled") != true) -%>
2+
port: <%= p("cc.prometheus_port") %>
3+
source_id: "cloud_controller_clock"
4+
instance_id: <%= spec.id || spec.index.to_s %>
5+
scheme: https
6+
server_name: "cc_clock_metrics"
7+
path: /metrics
8+
labels:
9+
origin: cc_clock
10+
<% end -%>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<%= p('cc.prom_scraper_tls.public_cert', '') %>

0 commit comments

Comments
 (0)