Skip to content

Commit 0ecb54f

Browse files
committed
Added NAAid to volumes
1 parent a56a24d commit 0ecb54f

File tree

11 files changed

+125
-82
lines changed

11 files changed

+125
-82
lines changed

Makefile

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1+
#SHELL := /bin/bash
12
GOCMD=go
23
GOTEST=$(GOCMD) test
34
GOVET=$(GOCMD) vet
45
BINARY_NAME=pure-fa-om-exporter
56
MODULE_NAME=go mod init purestorage/fa-openmetrics-exporter
67
VERSION?=0.2.0
7-
SERVICE_PORT?=9491
8+
SERVICE_PORT?=9490
89
DOCKER_REGISTRY?= quay.io/purestorage/
910
EXPORT_RESULT?=false # for CI please set EXPORT_RESULT to true
1011

@@ -58,15 +59,15 @@ lint: lint-go lint-dockerfile lint-yaml ## Run all available linters
5859

5960
lint-dockerfile: ## Lint your Dockerfile
6061
# If dockerfile is present we lint it.
61-
ifeq ($(shell test -e ./Dockerfile && echo -n yes),yes)
62+
ifeq ($(shell test -e ./build/docker/Dockerfile && echo -n yes),yes)
6263
$(eval CONFIG_OPTION = $(shell [ -e $(shell pwd)/.hadolint.yaml ] && echo "-v $(shell pwd)/.hadolint.yaml:/root/.config/hadolint.yaml" || echo "" ))
63-
$(eval OUTPUT_OPTIONS = $(shell [ "${EXPORT_RESULT}" == "true" ] && echo "--format checkstyle" || echo "" ))
64-
$(eval OUTPUT_FILE = $(shell [ "${EXPORT_RESULT}" == "true" ] && echo "| tee /dev/tty > checkstyle-report.xml" || echo "" ))
65-
docker run --rm -i $(CONFIG_OPTION) hadolint/hadolint hadolint $(OUTPUT_OPTIONS) - < ./Dockerfile $(OUTPUT_FILE)
64+
$(eval OUTPUT_OPTIONS = $(shell [ "${EXPORT_RESULT}" = "true" ] && echo "--format checkstyle" || echo "" ))
65+
$(eval OUTPUT_FILE = $(shell [ "${EXPORT_RESULT}" = "true" ] && echo "| tee /dev/tty > checkstyle-report.xml" || echo "" ))
66+
docker run --rm -i $(CONFIG_OPTION) hadolint/hadolint hadolint $(OUTPUT_OPTIONS) - < ./build/docker/Dockerfile $(OUTPUT_FILE)
6667
endif
6768

6869
lint-go: ## Use golintci-lint on your project
69-
$(eval OUTPUT_OPTIONS = $(shell [ "${EXPORT_RESULT}" == "true" ] && echo "--out-format checkstyle ./... | tee /dev/tty > checkstyle-report.xml" || echo "" ))
70+
$(eval OUTPUT_OPTIONS = $(shell [ "${EXPORT_RESULT}" = "true" ] && echo "--out-format checkstyle ./... | tee /dev/tty > checkstyle-report.xml" || echo "" ))
7071
docker run --rm -v $(shell pwd):/app -w /app golangci/golangci-lint:latest-alpine golangci-lint run --deadline=65s $(OUTPUT_OPTIONS)
7172

7273
lint-yaml: ## Use yamllint on the yaml file of your projects

build/docker/Dockerfile

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
FROM golang:1.19-alpine
2+
3+
WORKDIR /usr/src/app
4+
5+
# pre-copy/cache go.mod for pre-downloading dependencies and only redownloading them in subsequent builds if they change
6+
COPY go.mod go.sum ./
7+
RUN go mod download && go mod verify
8+
9+
COPY . .
10+
RUN go build -v -o /usr/local/bin/pure-fa-om-exporter cmd/fa-om-exporter/main.go
11+
12+
EXPOSE 9491
13+
ENTRYPOINT ["/usr/local/bin/pure-fa-om-exporter"]
14+
CMD ["--host", "0.0.0.0", "--port", "9490"]

build/docker/package/.gitkeep

Whitespace-only changes.

cmd/.gitkeep

Whitespace-only changes.

cmd/fa-om-exporter/main.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ func main() {
3939
http.HandleFunc("/metrics/directories", func(w http.ResponseWriter, r *http.Request) {
4040
metricsHandler(w, r)
4141
})
42+
http.HandleFunc("/metrics/array", func(w http.ResponseWriter, r *http.Request) {
43+
metricsHandler(w, r)
44+
})
4245
http.HandleFunc("/metrics", func(w http.ResponseWriter, r *http.Request) {
4346
metricsHandler(w, r)
4447
})
-12 KB
Binary file not shown.

internal/openmetrics-exporter/collector.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ func Collector(ctx context.Context, metrics string, registry *prometheus.Registr
1515
collectors.NewGoCollector(),
1616
arrayscoll,
1717
)
18-
if metrics == "all" {
18+
if metrics == "all" || metrics == "array" {
1919
alertscoll := NewAlertsCollector(faclient)
2020
arrayperfcoll := NewArraysPerformanceCollector(faclient)
2121
arrayspacecoll := NewArraySpaceCollector(faclient)
@@ -54,8 +54,9 @@ func Collector(ctx context.Context, metrics string, registry *prometheus.Registr
5454
)
5555
}
5656
if metrics == "all" || metrics == "volumes" {
57-
volperfcoll := NewVolumesPerformanceCollector(faclient)
58-
volspacecoll := NewVolumesSpaceCollector(faclient)
57+
vols := faclient.GetVolumes()
58+
volperfcoll := NewVolumesPerformanceCollector(faclient, vols)
59+
volspacecoll := NewVolumesSpaceCollector(vols)
5960
registry.MustRegister(
6061
volperfcoll,
6162
volspacecoll,

internal/openmetrics-exporter/volumes_performance_collector.go

Lines changed: 36 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ type VolumesPerformanceCollector struct {
1111
ThroughputDesc *prometheus.Desc
1212
BandwidthDesc *prometheus.Desc
1313
AverageSizeDesc *prometheus.Desc
14+
NAAids map[string]string
1415
Client *client.FAClient
1516
}
1617

@@ -28,169 +29,176 @@ func (c *VolumesPerformanceCollector) Collect(ch chan<- prometheus.Metric) {
2829
c.LatencyDesc,
2930
prometheus.GaugeValue,
3031
vp.QueueUsecPerMirroredWriteOp,
31-
vp.Name, "queue_usec_per_mirrored_write_op",
32+
c.NAAids[vp.Name], vp.Name, "queue_usec_per_mirrored_write_op",
3233
)
3334
ch <- prometheus.MustNewConstMetric(
3435
c.LatencyDesc,
3536
prometheus.GaugeValue,
3637
vp.QueueUsecPerReadOp,
37-
vp.Name, "queue_usec_per_read_op",
38+
c.NAAids[vp.Name], vp.Name, "queue_usec_per_read_op",
3839
)
3940
ch <- prometheus.MustNewConstMetric(
4041
c.LatencyDesc,
4142
prometheus.GaugeValue,
4243
vp.QueueUsecPerWriteOp,
43-
vp.Name, "queue_usec_per_write_op",
44+
c.NAAids[vp.Name], vp.Name, "queue_usec_per_write_op",
4445
)
4546
ch <- prometheus.MustNewConstMetric(
4647
c.LatencyDesc,
4748
prometheus.GaugeValue,
4849
vp.SanUsecPerMirroredWriteOp,
49-
vp.Name, "san_usec_per_mirrored_write_op",
50+
c.NAAids[vp.Name], vp.Name, "san_usec_per_mirrored_write_op",
5051
)
5152
ch <- prometheus.MustNewConstMetric(
5253
c.LatencyDesc,
5354
prometheus.GaugeValue,
5455
vp.SanUsecPerReadOp,
55-
vp.Name, "san_usec_per_read_op",
56+
c.NAAids[vp.Name], vp.Name, "san_usec_per_read_op",
5657
)
5758
ch <- prometheus.MustNewConstMetric(
5859
c.LatencyDesc,
5960
prometheus.GaugeValue,
6061
vp.SanUsecPerWriteOp,
61-
vp.Name, "san_usec_per_write_op",
62+
c.NAAids[vp.Name], vp.Name, "san_usec_per_write_op",
6263
)
6364
ch <- prometheus.MustNewConstMetric(
6465
c.LatencyDesc,
6566
prometheus.GaugeValue,
6667
vp.ServiceUsecPerMirroredWriteOp,
67-
vp.Name, "service_usec_per_mirrored_write_op",
68+
c.NAAids[vp.Name], vp.Name, "service_usec_per_mirrored_write_op",
6869
)
6970
ch <- prometheus.MustNewConstMetric(
7071
c.LatencyDesc,
7172
prometheus.GaugeValue,
7273
vp.ServiceUsecPerReadOp,
73-
vp.Name, "service_usec_per_read_op",
74+
c.NAAids[vp.Name], vp.Name, "service_usec_per_read_op",
7475
)
7576
ch <- prometheus.MustNewConstMetric(
7677
c.LatencyDesc,
7778
prometheus.GaugeValue,
7879
vp.ServiceUsecPerWriteOp,
79-
vp.Name, "service_usec_per_write_op",
80+
c.NAAids[vp.Name], vp.Name, "service_usec_per_write_op",
8081
)
8182
ch <- prometheus.MustNewConstMetric(
8283
c.LatencyDesc,
8384
prometheus.GaugeValue,
8485
vp.UsecPerMirroredWriteOp,
85-
vp.Name, "usec_per_mirrored_write_op",
86+
c.NAAids[vp.Name], vp.Name, "usec_per_mirrored_write_op",
8687
)
8788
ch <- prometheus.MustNewConstMetric(
8889
c.LatencyDesc,
8990
prometheus.GaugeValue,
9091
vp.UsecPerReadOp,
91-
vp.Name, "usec_per_read_op",
92+
c.NAAids[vp.Name], vp.Name, "usec_per_read_op",
9293
)
9394
ch <- prometheus.MustNewConstMetric(
9495
c.LatencyDesc,
9596
prometheus.GaugeValue,
9697
vp.UsecPerWriteOp,
97-
vp.Name, "usec_per_write_op",
98+
c.NAAids[vp.Name], vp.Name, "usec_per_write_op",
9899
)
99100
ch <- prometheus.MustNewConstMetric(
100101
c.LatencyDesc,
101102
prometheus.GaugeValue,
102103
vp.ServiceUsecPerReadOpCacheReduction,
103-
vp.Name, "service_usec_per_read_op_cache_reduction",
104+
c.NAAids[vp.Name], vp.Name, "service_usec_per_read_op_cache_reduction",
104105
)
105106
ch <- prometheus.MustNewConstMetric(
106107
c.BandwidthDesc,
107108
prometheus.GaugeValue,
108109
vp.MirroredWriteBytesPerSec,
109-
vp.Name, "mirrored_write_bytes_per_sec",
110+
c.NAAids[vp.Name], vp.Name, "mirrored_write_bytes_per_sec",
110111
)
111112
ch <- prometheus.MustNewConstMetric(
112113
c.BandwidthDesc,
113114
prometheus.GaugeValue,
114115
vp.ReadBytesPerSec,
115-
vp.Name, "read_bytes_per_sec",
116+
c.NAAids[vp.Name], vp.Name, "read_bytes_per_sec",
116117
)
117118
ch <- prometheus.MustNewConstMetric(
118119
c.BandwidthDesc,
119120
prometheus.GaugeValue,
120121
vp.WriteBytesPerSec,
121-
vp.Name, "write_bytes_per_sec",
122+
c.NAAids[vp.Name], vp.Name, "write_bytes_per_sec",
122123
)
123124
ch <- prometheus.MustNewConstMetric(
124125
c.ThroughputDesc,
125126
prometheus.GaugeValue,
126127
vp.MirroredWritesPerSec,
127-
vp.Name, "mirrored_writes_per_sec",
128+
c.NAAids[vp.Name], vp.Name, "mirrored_writes_per_sec",
128129
)
129130
ch <- prometheus.MustNewConstMetric(
130131
c.ThroughputDesc,
131132
prometheus.GaugeValue,
132133
vp.ReadsPerSec,
133-
vp.Name, "reads_per_sec",
134+
c.NAAids[vp.Name], vp.Name, "reads_per_sec",
134135
)
135136
ch <- prometheus.MustNewConstMetric(
136137
c.ThroughputDesc,
137138
prometheus.GaugeValue,
138139
vp.WritesPerSec,
139-
vp.Name, "writes_per_sec",
140+
c.NAAids[vp.Name], vp.Name, "writes_per_sec",
140141
)
141142
ch <- prometheus.MustNewConstMetric(
142143
c.AverageSizeDesc,
143144
prometheus.GaugeValue,
144145
vp.BytesPerMirroredWrite,
145-
vp.Name, "bytes_per_mirrored_write",
146+
c.NAAids[vp.Name], vp.Name, "bytes_per_mirrored_write",
146147
)
147148
ch <- prometheus.MustNewConstMetric(
148149
c.AverageSizeDesc,
149150
prometheus.GaugeValue,
150151
vp.BytesPerOp,
151-
vp.Name, "bytes_per_op",
152+
c.NAAids[vp.Name], vp.Name, "bytes_per_op",
152153
)
153154
ch <- prometheus.MustNewConstMetric(
154155
c.AverageSizeDesc,
155156
prometheus.GaugeValue,
156157
vp.BytesPerRead,
157-
vp.Name, "bytes_per_read",
158+
c.NAAids[vp.Name], vp.Name, "bytes_per_read",
158159
)
159160
ch <- prometheus.MustNewConstMetric(
160161
c.AverageSizeDesc,
161162
prometheus.GaugeValue,
162163
vp.BytesPerWrite,
163-
vp.Name, "bytes_per_write",
164+
c.NAAids[vp.Name], vp.Name, "bytes_per_write",
164165
)
165166
}
166167
}
167168

168-
func NewVolumesPerformanceCollector(fa *client.FAClient) *VolumesPerformanceCollector {
169+
func NewVolumesPerformanceCollector(fa *client.FAClient, volumes *client.VolumesList) *VolumesPerformanceCollector {
170+
purenaa := "naa.624a9370"
171+
naaid := make(map[string]string)
172+
for _, v := range volumes.Items {
173+
naaid[v.Name] = purenaa + v.Serial
174+
}
175+
169176
return &VolumesPerformanceCollector{
170177
LatencyDesc: prometheus.NewDesc(
171178
"purefa_volume_performance_latency_usec",
172179
"FlashArray volume latency",
173-
[]string{"name", "dimension"},
180+
[]string{"naa_id", "name", "dimension"},
174181
prometheus.Labels{},
175182
),
176183
ThroughputDesc: prometheus.NewDesc(
177184
"purefa_volume_performance_throughput_iops",
178185
"FlashArray volume throughput",
179-
[]string{"name", "dimension"},
186+
[]string{"naa_id", "name", "dimension"},
180187
prometheus.Labels{},
181188
),
182189
BandwidthDesc: prometheus.NewDesc(
183190
"purefa_volume_performance_bandwidth_bytes",
184191
"FlashArray volume throughput",
185-
[]string{"name", "dimension"},
192+
[]string{"naa_id", "name", "dimension"},
186193
prometheus.Labels{},
187194
),
188195
AverageSizeDesc: prometheus.NewDesc(
189196
"purefa_volume_performance_average_bytes",
190197
"FlashArray volume average operations size",
191-
[]string{"name", "dimension"},
198+
[]string{"naa_id", "name", "dimension"},
192199
prometheus.Labels{},
193200
),
201+
NAAids: naaid,
194202
Client: fa,
195203
}
196204
}

0 commit comments

Comments
 (0)