You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
274 lines
8.9 KiB
274 lines
8.9 KiB
From 50db40e49750378e22e2b638754ff07ff29f5362 Mon Sep 17 00:00:00 2001
|
|
From: NovaPS6 <NovaPS6@ostmw0195464.bskyb.com>
|
|
Date: Wed, 8 Aug 2018 14:43:33 +0100
|
|
Subject: [PATCH] make all metrics skippable
|
|
|
|
Change import back to jirwin
|
|
---
|
|
.gitignore | 1 +
|
|
burrow-exporter.go | 67 +++++++++++++++++------
|
|
burrow_exporter/exporter.go | 102 +++++++++++++++++++++---------------
|
|
3 files changed, 113 insertions(+), 57 deletions(-)
|
|
|
|
diff --git a/.gitignore b/.gitignore
|
|
index 502219c..a8e0d62 100644
|
|
--- a/.gitignore
|
|
+++ b/.gitignore
|
|
@@ -18,3 +18,4 @@
|
|
burrow-exporter
|
|
dist/
|
|
vendor/
|
|
+.idea/
|
|
diff --git a/burrow-exporter.go b/burrow-exporter.go
|
|
index 1e60d67..b4e871b 100644
|
|
--- a/burrow-exporter.go
|
|
+++ b/burrow-exporter.go
|
|
@@ -14,7 +14,7 @@ import (
|
|
"github.com/jirwin/burrow_exporter/burrow_exporter"
|
|
)
|
|
|
|
-var Version = "0.0.4"
|
|
+var Version = "0.0.5"
|
|
|
|
func main() {
|
|
app := cli.NewApp()
|
|
@@ -22,36 +22,61 @@ func main() {
|
|
app.Name = "burrow-exporter"
|
|
app.Flags = []cli.Flag{
|
|
cli.StringFlag{
|
|
- Name: "burrow-addr",
|
|
- Usage: "Address that burrow is listening on",
|
|
+ Name: "burrow-addr",
|
|
+ Usage: "Address that burrow is listening on",
|
|
EnvVar: "BURROW_ADDR",
|
|
},
|
|
cli.StringFlag{
|
|
- Name: "metrics-addr",
|
|
- Usage: "Address to run prometheus on",
|
|
+ Name: "metrics-addr",
|
|
+ Usage: "Address to run prometheus on",
|
|
EnvVar: "METRICS_ADDR",
|
|
},
|
|
cli.IntFlag{
|
|
- Name: "interval",
|
|
- Usage: "The interval(seconds) specifies how often to scrape burrow.",
|
|
+ Name: "interval",
|
|
+ Usage: "The interval(seconds) specifies how often to scrape burrow.",
|
|
EnvVar: "INTERVAL",
|
|
},
|
|
cli.IntFlag{
|
|
- Name: "api-version",
|
|
- Usage: "Burrow API version to leverage",
|
|
- Value: 2,
|
|
+ Name: "api-version",
|
|
+ Usage: "Burrow API version to leverage",
|
|
+ Value: 2,
|
|
EnvVar: "API_VERSION",
|
|
},
|
|
cli.BoolFlag{
|
|
- Name: "skip-partition-status",
|
|
- Usage: "Skip exporting the per-partition status",
|
|
+ Name: "skip-partition-status",
|
|
+ Usage: "Skip exporting the per-partition status",
|
|
EnvVar: "SKIP_PARTITION_STATUS",
|
|
},
|
|
cli.BoolFlag{
|
|
- Name: "skip-group-status",
|
|
- Usage: "Skip exporting the per-group status",
|
|
+ Name: "skip-group-status",
|
|
+ Usage: "Skip exporting the per-group status",
|
|
EnvVar: "SKIP_GROUP_STATUS",
|
|
},
|
|
+ cli.BoolFlag{
|
|
+ Name: "skip-partition-lag",
|
|
+ Usage: "Skip exporting the partition lag",
|
|
+ EnvVar: "SKIP_PARTITION_LAG",
|
|
+ },
|
|
+ cli.BoolFlag{
|
|
+ Name: "skip-partition-current-offset",
|
|
+ Usage: "Skip exporting the current offset per partition",
|
|
+ EnvVar: "SKIP_PARTITION_CURRENT_OFFSET",
|
|
+ },
|
|
+ cli.BoolFlag{
|
|
+ Name: "skip-partition-max-offset",
|
|
+ Usage: "Skip exporting the partition max offset",
|
|
+ EnvVar: "SKIP_PARTITION_MAX_OFFSET",
|
|
+ },
|
|
+ cli.BoolFlag{
|
|
+ Name: "skip-total-lag",
|
|
+ Usage: "Skip exporting the total lag",
|
|
+ EnvVar: "SKIP_TOTAL_LAG",
|
|
+ },
|
|
+ cli.BoolFlag{
|
|
+ Name: "skip-topic-partition-offset",
|
|
+ Usage: "Skip exporting topic partition offset",
|
|
+ EnvVar: "SKIP_TOPIC_PARTITION_OFFSET",
|
|
+ },
|
|
}
|
|
|
|
app.Action = func(c *cli.Context) error {
|
|
@@ -76,8 +101,18 @@ func main() {
|
|
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
|
|
- exporter := burrow_exporter.MakeBurrowExporter(c.String("burrow-addr"), c.Int("api-version"),
|
|
- c.String("metrics-addr"), c.Int("interval"), c.Bool("skip-partition-status"), c.Bool("skip-group-status"))
|
|
+ exporter := burrow_exporter.MakeBurrowExporter(
|
|
+ c.String("burrow-addr"),
|
|
+ c.Int("api-version"),
|
|
+ c.String("metrics-addr"),
|
|
+ c.Int("interval"),
|
|
+ c.Bool("skip-partition-status"),
|
|
+ c.Bool("skip-group-status"),
|
|
+ c.Bool("skip-partition-lag"),
|
|
+ c.Bool("skip-partition-current-offset"),
|
|
+ c.Bool("skip-partition-max-offset"),
|
|
+ c.Bool("skip-total-lag"),
|
|
+ c.Bool("skip-topic-partition-offset"))
|
|
go exporter.Start(ctx)
|
|
|
|
<-done
|
|
diff --git a/burrow_exporter/exporter.go b/burrow_exporter/exporter.go
|
|
index 7adc398..8b48b35 100644
|
|
--- a/burrow_exporter/exporter.go
|
|
+++ b/burrow_exporter/exporter.go
|
|
@@ -16,12 +16,17 @@ import (
|
|
)
|
|
|
|
type BurrowExporter struct {
|
|
- client *BurrowClient
|
|
- metricsListenAddr string
|
|
- interval int
|
|
- wg sync.WaitGroup
|
|
- skipPartitionStatus bool
|
|
- skipConsumerStatus bool
|
|
+ client *BurrowClient
|
|
+ metricsListenAddr string
|
|
+ interval int
|
|
+ wg sync.WaitGroup
|
|
+ skipPartitionStatus bool
|
|
+ skipConsumerStatus bool
|
|
+ skipPartitionLag bool
|
|
+ skipPartitionCurrentOffset bool
|
|
+ skipPartitionMaxOffset bool
|
|
+ skipTotalLag bool
|
|
+ skipTopicPartitionOffset bool
|
|
}
|
|
|
|
func (be *BurrowExporter) processGroup(cluster, group string) {
|
|
@@ -34,19 +39,23 @@ func (be *BurrowExporter) processGroup(cluster, group string) {
|
|
}
|
|
|
|
for _, partition := range status.Status.Partitions {
|
|
- KafkaConsumerPartitionLag.With(prometheus.Labels{
|
|
- "cluster": status.Status.Cluster,
|
|
- "group": status.Status.Group,
|
|
- "topic": partition.Topic,
|
|
- "partition": strconv.Itoa(int(partition.Partition)),
|
|
- }).Set(float64(partition.End.Lag))
|
|
-
|
|
- KafkaConsumerPartitionCurrentOffset.With(prometheus.Labels{
|
|
- "cluster": status.Status.Cluster,
|
|
- "group": status.Status.Group,
|
|
- "topic": partition.Topic,
|
|
- "partition": strconv.Itoa(int(partition.Partition)),
|
|
- }).Set(float64(partition.End.Offset))
|
|
+ if !be.skipPartitionLag {
|
|
+ KafkaConsumerPartitionLag.With(prometheus.Labels{
|
|
+ "cluster": status.Status.Cluster,
|
|
+ "group": status.Status.Group,
|
|
+ "topic": partition.Topic,
|
|
+ "partition": strconv.Itoa(int(partition.Partition)),
|
|
+ }).Set(float64(partition.End.Lag))
|
|
+ }
|
|
+
|
|
+ if !be.skipPartitionCurrentOffset {
|
|
+ KafkaConsumerPartitionCurrentOffset.With(prometheus.Labels{
|
|
+ "cluster": status.Status.Cluster,
|
|
+ "group": status.Status.Group,
|
|
+ "topic": partition.Topic,
|
|
+ "partition": strconv.Itoa(int(partition.Partition)),
|
|
+ }).Set(float64(partition.End.Offset))
|
|
+ }
|
|
|
|
if !be.skipPartitionStatus {
|
|
KafkaConsumerPartitionCurrentStatus.With(prometheus.Labels{
|
|
@@ -57,18 +66,22 @@ func (be *BurrowExporter) processGroup(cluster, group string) {
|
|
}).Set(float64(Status[partition.Status]))
|
|
}
|
|
|
|
- KafkaConsumerPartitionMaxOffset.With(prometheus.Labels{
|
|
- "cluster": status.Status.Cluster,
|
|
- "group": status.Status.Group,
|
|
- "topic": partition.Topic,
|
|
- "partition": strconv.Itoa(int(partition.Partition)),
|
|
- }).Set(float64(partition.End.MaxOffset))
|
|
+ if !be.skipPartitionMaxOffset {
|
|
+ KafkaConsumerPartitionMaxOffset.With(prometheus.Labels{
|
|
+ "cluster": status.Status.Cluster,
|
|
+ "group": status.Status.Group,
|
|
+ "topic": partition.Topic,
|
|
+ "partition": strconv.Itoa(int(partition.Partition)),
|
|
+ }).Set(float64(partition.End.MaxOffset))
|
|
+ }
|
|
}
|
|
|
|
- KafkaConsumerTotalLag.With(prometheus.Labels{
|
|
- "cluster": status.Status.Cluster,
|
|
- "group": status.Status.Group,
|
|
- }).Set(float64(status.Status.TotalLag))
|
|
+ if !be.skipTotalLag {
|
|
+ KafkaConsumerTotalLag.With(prometheus.Labels{
|
|
+ "cluster": status.Status.Cluster,
|
|
+ "group": status.Status.Group,
|
|
+ }).Set(float64(status.Status.TotalLag))
|
|
+ }
|
|
|
|
if !be.skipConsumerStatus {
|
|
KafkaConsumerStatus.With(prometheus.Labels{
|
|
@@ -88,12 +101,14 @@ func (be *BurrowExporter) processTopic(cluster, topic string) {
|
|
return
|
|
}
|
|
|
|
- for i, offset := range details.Offsets {
|
|
- KafkaTopicPartitionOffset.With(prometheus.Labels{
|
|
- "cluster": cluster,
|
|
- "topic": topic,
|
|
- "partition": strconv.Itoa(i),
|
|
- }).Set(float64(offset))
|
|
+ if !be.skipTopicPartitionOffset {
|
|
+ for i, offset := range details.Offsets {
|
|
+ KafkaTopicPartitionOffset.With(prometheus.Labels{
|
|
+ "cluster": cluster,
|
|
+ "topic": topic,
|
|
+ "partition": strconv.Itoa(i),
|
|
+ }).Set(float64(offset))
|
|
+ }
|
|
}
|
|
}
|
|
|
|
@@ -208,12 +223,17 @@ func (be *BurrowExporter) mainLoop(ctx context.Context) {
|
|
}
|
|
|
|
func MakeBurrowExporter(burrowUrl string, apiVersion int, metricsAddr string, interval int, skipPartitionStatus bool,
|
|
- skipConsumerStatus bool) *BurrowExporter {
|
|
+ skipConsumerStatus bool, skipPartitionLag bool, skipPartitionCurrentOffset bool, skipPartitionMaxOffset bool, skipTotalLag bool, skipTopicPartitionOffset bool) *BurrowExporter {
|
|
return &BurrowExporter{
|
|
- client: MakeBurrowClient(burrowUrl, apiVersion),
|
|
- metricsListenAddr: metricsAddr,
|
|
- interval: interval,
|
|
- skipPartitionStatus: skipPartitionStatus,
|
|
- skipConsumerStatus: skipConsumerStatus,
|
|
+ client: MakeBurrowClient(burrowUrl, apiVersion),
|
|
+ metricsListenAddr: metricsAddr,
|
|
+ interval: interval,
|
|
+ skipPartitionStatus: skipPartitionStatus,
|
|
+ skipConsumerStatus: skipConsumerStatus,
|
|
+ skipPartitionLag: skipPartitionLag,
|
|
+ skipPartitionCurrentOffset: skipPartitionCurrentOffset,
|
|
+ skipPartitionMaxOffset: skipPartitionMaxOffset,
|
|
+ skipTotalLag: skipTotalLag,
|
|
+ skipTopicPartitionOffset: skipTopicPartitionOffset,
|
|
}
|
|
}
|