diff --git a/resources/charts/bitcoincore/templates/servicemonitor.yaml b/resources/charts/bitcoincore/templates/servicemonitor.yaml index 46c7136e0..552b92c30 100644 --- a/resources/charts/bitcoincore/templates/servicemonitor.yaml +++ b/resources/charts/bitcoincore/templates/servicemonitor.yaml @@ -9,6 +9,7 @@ metadata: spec: endpoints: - port: prometheus-metrics + interval: {{ .Values.metricsScrapeInterval | default "15s" }} selector: matchLabels: app: {{ include "bitcoincore.fullname" . }} diff --git a/resources/images/exporter/bitcoin-exporter.py b/resources/images/exporter/bitcoin-exporter.py index 99c992207..e64f90c67 100644 --- a/resources/images/exporter/bitcoin-exporter.py +++ b/resources/images/exporter/bitcoin-exporter.py @@ -45,6 +45,13 @@ def make_metric_function(cmd): return None +def make_counting_function(cmd, key, value): + try: + return lambda: sum(1 for x in eval(f"rpc.{cmd}") if x.get(key) == value) + except Exception: + return None + + # Parse RPC queries into metrics commands = METRICS.split(" ") for labeled_cmd in commands: @@ -53,7 +60,12 @@ def make_metric_function(cmd): label, cmd = labeled_cmd.strip().split("=") # label, description i.e. ("bitcoin_conn_in", "Number of connections in") metric = Gauge(label, cmd) - metric.set_function(make_metric_function(cmd)) + if "COUNT:" in cmd: + _, args = cmd.split(":") + cmd, key, value = args.split(",") + metric.set_function(make_counting_function(cmd, key, value)) + else: + metric.set_function(make_metric_function(cmd)) print(f"Metric created: {labeled_cmd}") # Start the server diff --git a/test/data/logging/network.yaml b/test/data/logging/network.yaml index 067161cae..d08c928b5 100644 --- a/test/data/logging/network.yaml +++ b/test/data/logging/network.yaml @@ -7,9 +7,9 @@ nodes: addnode: - tank-0002 metricsExport: true - metrics: txrate=getchaintxstats(10)["txrate"] + metrics: txrate=getchaintxstats(10)["txrate"] ipv4peers=COUNT:getpeerinfo(),network,ipv4 - name: tank-0002 - addnode: + addnode: - tank-0000 ln: lnd: true