Skip to content

Commit 33e467f

Browse files
committed
ISSUE-155 Enable prometheus monitoring for zookeeper pods
Since 3.6.0 ZooKeeper supports native Prometheus monitoring https://github.com/apache/zookeeper/blob/master/zookeeper-docs/src/main/resources/markdown/zookeeperMonitor.md#prometheus This patch - enables `PrometheusMetricsProvider` in zoo.cfg - expose a new `metrics` port to ZK pods, ZK services - disambiguate the headless and client service labels by adding a new label, so it can be used in Prometheus `ServiceMonitors`
1 parent 81a9706 commit 33e467f

File tree

3 files changed

+19
-4
lines changed

3 files changed

+19
-4
lines changed

pkg/apis/zookeeper/v1beta1/zookeepercluster_types.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,10 @@ func (s *ZookeeperClusterSpec) withDefaults(z *ZookeeperCluster) (changed bool)
9999
Name: "leader-election",
100100
ContainerPort: 3888,
101101
},
102+
{
103+
Name: "metrics",
104+
ContainerPort: 7000,
105+
},
102106
}
103107
changed = true
104108
}
@@ -159,6 +163,8 @@ func (z *ZookeeperCluster) ZookeeperPorts() Ports {
159163
ports.Quorum = p.ContainerPort
160164
} else if p.Name == "leader-election" {
161165
ports.Leader = p.ContainerPort
166+
} else if p.Name == "metrics" {
167+
ports.Metrics = p.ContainerPort
162168
}
163169
}
164170
return ports
@@ -171,9 +177,10 @@ func (z *ZookeeperCluster) GetClientServiceName() string {
171177

172178
// Ports groups the ports for a zookeeper cluster node for easy access
173179
type Ports struct {
174-
Client int32
175-
Quorum int32
176-
Leader int32
180+
Client int32
181+
Quorum int32
182+
Leader int32
183+
Metrics int32
177184
}
178185

179186
// ContainerImage defines the fields needed for a Docker repository image. The

pkg/apis/zookeeper/v1beta1/zookeepercluster_types_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,10 @@ var _ = Describe("ZookeeperCluster Types", func() {
216216
It("should have a leader port", func() {
217217
Ω(p.Leader).To(BeEquivalentTo(3888))
218218
})
219+
220+
It("should have a metrics port", func() {
221+
Ω(p.Metrics).To(BeEquivalentTo(7000))
222+
})
219223
})
220224

221225
})

pkg/zk/generators.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,7 @@ func MakeHeadlessService(z *v1beta1.ZookeeperCluster) *v1.Service {
195195
svcPorts := []v1.ServicePort{
196196
{Name: "quorum", Port: ports.Quorum},
197197
{Name: "leader-election", Port: ports.Leader},
198+
{Name: "metrics", Port: ports.Metrics},
198199
}
199200
return makeService(headlessSvcName(z), svcPorts, false, z)
200201
}
@@ -205,6 +206,9 @@ func makeZkConfigString(s v1beta1.ZookeeperClusterSpec) string {
205206
"standaloneEnabled=false\n" +
206207
"reconfigEnabled=true\n" +
207208
"skipACL=yes\n" +
209+
"metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider\n" +
210+
"metricsProvider.httpPort=7000\n" +
211+
"metricsProvider.exportJvmInfo=true\n" +
208212
"initLimit=" + strconv.Itoa(s.Conf.InitLimit) + "\n" +
209213
"syncLimit=" + strconv.Itoa(s.Conf.SyncLimit) + "\n" +
210214
"tickTime=" + strconv.Itoa(s.Conf.TickTime) + "\n" +
@@ -271,7 +275,7 @@ func makeService(name string, ports []v1.ServicePort, clusterIP bool, z *v1beta1
271275
Kind: "ZookeeperCluster",
272276
}),
273277
},
274-
Labels: map[string]string{"app": z.GetName()},
278+
Labels: map[string]string{"app": z.GetName(), "headless": strconv.FormatBool(!clusterIP)},
275279
Annotations: annotationMap,
276280
},
277281
Spec: v1.ServiceSpec{

0 commit comments

Comments
 (0)