Skip to content

Commit e13e27a

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 206b36e commit e13e27a

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
@@ -95,6 +95,10 @@ func (s *ZookeeperClusterSpec) withDefaults(z *ZookeeperCluster) (changed bool)
9595
Name: "leader-election",
9696
ContainerPort: 3888,
9797
},
98+
{
99+
Name: "metrics",
100+
ContainerPort: 7000,
101+
},
98102
}
99103
changed = true
100104
}
@@ -182,6 +186,8 @@ func (z *ZookeeperCluster) ZookeeperPorts() Ports {
182186
ports.Quorum = p.ContainerPort
183187
} else if p.Name == "leader-election" {
184188
ports.Leader = p.ContainerPort
189+
} else if p.Name == "metrics" {
190+
ports.Metrics = p.ContainerPort
185191
}
186192
}
187193
return ports
@@ -194,9 +200,10 @@ func (z *ZookeeperCluster) GetClientServiceName() string {
194200

195201
// Ports groups the ports for a zookeeper cluster node for easy access
196202
type Ports struct {
197-
Client int32
198-
Quorum int32
199-
Leader int32
203+
Client int32
204+
Quorum int32
205+
Leader int32
206+
Metrics int32
200207
}
201208

202209
// 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
@@ -184,6 +184,7 @@ func MakeHeadlessService(z *v1beta1.ZookeeperCluster) *v1.Service {
184184
svcPorts := []v1.ServicePort{
185185
{Name: "quorum", Port: ports.Quorum},
186186
{Name: "leader-election", Port: ports.Leader},
187+
{Name: "metrics", Port: ports.Metrics},
187188
}
188189
return makeService(headlessSvcName(z), svcPorts, false, z)
189190
}
@@ -194,6 +195,9 @@ func makeZkConfigString(s v1beta1.ZookeeperClusterSpec) string {
194195
"standaloneEnabled=false\n" +
195196
"reconfigEnabled=true\n" +
196197
"skipACL=yes\n" +
198+
"metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider\n" +
199+
"metricsProvider.httpPort=7000\n" +
200+
"metricsProvider.exportJvmInfo=true\n" +
197201
"initLimit=" + strconv.Itoa(s.Conf.InitLimit) + "\n" +
198202
"syncLimit=" + strconv.Itoa(s.Conf.SyncLimit) + "\n" +
199203
"tickTime=" + strconv.Itoa(s.Conf.TickTime) + "\n" +
@@ -259,7 +263,7 @@ func makeService(name string, ports []v1.ServicePort, clusterIP bool, z *v1beta1
259263
Kind: "ZookeeperCluster",
260264
}),
261265
},
262-
Labels: map[string]string{"app": z.GetName()},
266+
Labels: map[string]string{"app": z.GetName(), "headless": strconv.FormatBool(!clusterIP)},
263267
Annotations: annotationMap,
264268
},
265269
Spec: v1.ServiceSpec{

0 commit comments

Comments
 (0)