Skip to content

Commit 2298e3a

Browse files
committed
WIP: adds metrics and native-metrics service, adds metrics port to container, adds prometheus annotations
1 parent df810ba commit 2298e3a

4 files changed

Lines changed: 287 additions & 28 deletions

File tree

rust/operator-binary/src/container.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ use crate::{
6868
NAMENODE_ROOT_DATA_DIR, READINESS_PROBE_FAILURE_THRESHOLD,
6969
READINESS_PROBE_INITIAL_DELAY_SECONDS, READINESS_PROBE_PERIOD_SECONDS,
7070
SERVICE_PORT_NAME_HTTP, SERVICE_PORT_NAME_HTTPS, SERVICE_PORT_NAME_IPC,
71-
SERVICE_PORT_NAME_RPC, STACKABLE_ROOT_DATA_DIR,
71+
SERVICE_PORT_NAME_METRICS, SERVICE_PORT_NAME_RPC, STACKABLE_ROOT_DATA_DIR,
7272
},
7373
storage::DataNodeStorageConfig,
7474
v1alpha1,
@@ -488,7 +488,9 @@ impl ContainerConfig {
488488
)?)
489489
.add_volume_mounts(self.volume_mounts(hdfs, merged_config, labels)?)
490490
.context(AddVolumeMountSnafu)?
491-
.add_container_ports(self.container_ports(hdfs));
491+
.add_container_ports(self.container_ports(hdfs))
492+
// TODO: This currently adds the metrics port also to the zkfc containers, not needed there?
493+
.add_container_port(SERVICE_PORT_NAME_METRICS, hdfs.metrics_port(role).into());
492494

493495
if let Some(resources) = resources {
494496
cb.resources(resources);

rust/operator-binary/src/crd/constants.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,17 +24,23 @@ pub const SERVICE_PORT_NAME_METRICS: &str = "metrics";
2424
pub const DEFAULT_LISTENER_CLASS: &str = "cluster-internal";
2525

2626
pub const DEFAULT_NAME_NODE_METRICS_PORT: u16 = 8183;
27+
pub const DEFAULT_NAME_NODE_NATIVE_METRICS_HTTP_PORT: u16 = 9870;
28+
pub const DEFAULT_NAME_NODE_NATIVE_METRICS_HTTPS_PORT: u16 = 9871;
2729
pub const DEFAULT_NAME_NODE_HTTP_PORT: u16 = 9870;
2830
pub const DEFAULT_NAME_NODE_HTTPS_PORT: u16 = 9871;
2931
pub const DEFAULT_NAME_NODE_RPC_PORT: u16 = 8020;
3032

3133
pub const DEFAULT_DATA_NODE_METRICS_PORT: u16 = 8082;
34+
pub const DEFAULT_DATA_NODE_NATIVE_METRICS_HTTP_PORT: u16 = 9864;
35+
pub const DEFAULT_DATA_NODE_NATIVE_METRICS_HTTPS_PORT: u16 = 9865;
3236
pub const DEFAULT_DATA_NODE_HTTP_PORT: u16 = 9864;
3337
pub const DEFAULT_DATA_NODE_HTTPS_PORT: u16 = 9865;
3438
pub const DEFAULT_DATA_NODE_DATA_PORT: u16 = 9866;
3539
pub const DEFAULT_DATA_NODE_IPC_PORT: u16 = 9867;
3640

3741
pub const DEFAULT_JOURNAL_NODE_METRICS_PORT: u16 = 8081;
42+
pub const DEFAULT_JOURNAL_NODE_NATIVE_METRICS_HTTP_PORT: u16 = 8480;
43+
pub const DEFAULT_JOURNAL_NODE_NATIVE_METRICS_HTTPS_PORT: u16 = 8481;
3844
pub const DEFAULT_JOURNAL_NODE_HTTP_PORT: u16 = 8480;
3945
pub const DEFAULT_JOURNAL_NODE_HTTPS_PORT: u16 = 8481;
4046
pub const DEFAULT_JOURNAL_NODE_RPC_PORT: u16 = 8485;

rust/operator-binary/src/crd/mod.rs

Lines changed: 101 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -54,15 +54,18 @@ use crate::crd::{
5454
APP_NAME, CORE_SITE_XML, DEFAULT_DATA_NODE_DATA_PORT,
5555
DEFAULT_DATA_NODE_GRACEFUL_SHUTDOWN_TIMEOUT, DEFAULT_DATA_NODE_HTTP_PORT,
5656
DEFAULT_DATA_NODE_HTTPS_PORT, DEFAULT_DATA_NODE_IPC_PORT, DEFAULT_DATA_NODE_METRICS_PORT,
57+
DEFAULT_DATA_NODE_NATIVE_METRICS_HTTP_PORT, DEFAULT_DATA_NODE_NATIVE_METRICS_HTTPS_PORT,
5758
DEFAULT_DFS_REPLICATION_FACTOR, DEFAULT_JOURNAL_NODE_GRACEFUL_SHUTDOWN_TIMEOUT,
5859
DEFAULT_JOURNAL_NODE_HTTP_PORT, DEFAULT_JOURNAL_NODE_HTTPS_PORT,
59-
DEFAULT_JOURNAL_NODE_METRICS_PORT, DEFAULT_JOURNAL_NODE_RPC_PORT, DEFAULT_LISTENER_CLASS,
60-
DEFAULT_NAME_NODE_GRACEFUL_SHUTDOWN_TIMEOUT, DEFAULT_NAME_NODE_HTTP_PORT,
61-
DEFAULT_NAME_NODE_HTTPS_PORT, DEFAULT_NAME_NODE_METRICS_PORT, DEFAULT_NAME_NODE_RPC_PORT,
62-
DFS_REPLICATION, HADOOP_POLICY_XML, HDFS_SITE_XML, JVM_SECURITY_PROPERTIES_FILE,
63-
LISTENER_VOLUME_NAME, SERVICE_PORT_NAME_DATA, SERVICE_PORT_NAME_HTTP,
64-
SERVICE_PORT_NAME_HTTPS, SERVICE_PORT_NAME_IPC, SERVICE_PORT_NAME_METRICS,
65-
SERVICE_PORT_NAME_RPC, SSL_CLIENT_XML, SSL_SERVER_XML,
60+
DEFAULT_JOURNAL_NODE_METRICS_PORT, DEFAULT_JOURNAL_NODE_NATIVE_METRICS_HTTP_PORT,
61+
DEFAULT_JOURNAL_NODE_NATIVE_METRICS_HTTPS_PORT, DEFAULT_JOURNAL_NODE_RPC_PORT,
62+
DEFAULT_LISTENER_CLASS, DEFAULT_NAME_NODE_GRACEFUL_SHUTDOWN_TIMEOUT,
63+
DEFAULT_NAME_NODE_HTTP_PORT, DEFAULT_NAME_NODE_HTTPS_PORT, DEFAULT_NAME_NODE_METRICS_PORT,
64+
DEFAULT_NAME_NODE_NATIVE_METRICS_HTTP_PORT, DEFAULT_NAME_NODE_NATIVE_METRICS_HTTPS_PORT,
65+
DEFAULT_NAME_NODE_RPC_PORT, DFS_REPLICATION, HADOOP_POLICY_XML, HDFS_SITE_XML,
66+
JVM_SECURITY_PROPERTIES_FILE, LISTENER_VOLUME_NAME, SERVICE_PORT_NAME_DATA,
67+
SERVICE_PORT_NAME_HTTP, SERVICE_PORT_NAME_HTTPS, SERVICE_PORT_NAME_IPC,
68+
SERVICE_PORT_NAME_METRICS, SERVICE_PORT_NAME_RPC, SSL_CLIENT_XML, SSL_SERVER_XML,
6669
},
6770
security::{AuthenticationConfig, KerberosConfig},
6871
storage::{
@@ -671,10 +674,6 @@ impl v1alpha1::HdfsCluster {
671674
pub fn ports(&self, role: &HdfsNodeRole) -> Vec<(String, u16)> {
672675
match role {
673676
HdfsNodeRole::Name => vec![
674-
(
675-
String::from(SERVICE_PORT_NAME_METRICS),
676-
DEFAULT_NAME_NODE_METRICS_PORT,
677-
),
678677
(
679678
String::from(SERVICE_PORT_NAME_RPC),
680679
DEFAULT_NAME_NODE_RPC_PORT,
@@ -692,10 +691,6 @@ impl v1alpha1::HdfsCluster {
692691
},
693692
],
694693
HdfsNodeRole::Data => vec![
695-
(
696-
String::from(SERVICE_PORT_NAME_METRICS),
697-
DEFAULT_DATA_NODE_METRICS_PORT,
698-
),
699694
(
700695
String::from(SERVICE_PORT_NAME_DATA),
701696
DEFAULT_DATA_NODE_DATA_PORT,
@@ -717,10 +712,6 @@ impl v1alpha1::HdfsCluster {
717712
},
718713
],
719714
HdfsNodeRole::Journal => vec![
720-
(
721-
String::from(SERVICE_PORT_NAME_METRICS),
722-
DEFAULT_JOURNAL_NODE_METRICS_PORT,
723-
),
724715
(
725716
String::from(SERVICE_PORT_NAME_RPC),
726717
DEFAULT_JOURNAL_NODE_RPC_PORT,
@@ -739,6 +730,97 @@ impl v1alpha1::HdfsCluster {
739730
],
740731
}
741732
}
733+
734+
/// Returns required metrics port name and metrics port number tuples depending on the role.
735+
pub fn metrics_ports(&self, role: &HdfsNodeRole) -> Vec<(String, u16)> {
736+
match role {
737+
HdfsNodeRole::Name => vec![(
738+
String::from(SERVICE_PORT_NAME_METRICS),
739+
DEFAULT_NAME_NODE_METRICS_PORT,
740+
)],
741+
HdfsNodeRole::Data => vec![(
742+
String::from(SERVICE_PORT_NAME_METRICS),
743+
DEFAULT_DATA_NODE_METRICS_PORT,
744+
)],
745+
HdfsNodeRole::Journal => vec![(
746+
String::from(SERVICE_PORT_NAME_METRICS),
747+
DEFAULT_JOURNAL_NODE_METRICS_PORT,
748+
)],
749+
}
750+
}
751+
752+
/// Returns required metrics port name and native metrics port number tuples depending on the role.
753+
pub fn native_metrics_ports(&self, role: &HdfsNodeRole) -> Vec<(String, u16)> {
754+
match role {
755+
HdfsNodeRole::Name => vec![if self.has_https_enabled() {
756+
(
757+
String::from(SERVICE_PORT_NAME_METRICS),
758+
DEFAULT_NAME_NODE_NATIVE_METRICS_HTTPS_PORT,
759+
)
760+
} else {
761+
(
762+
String::from(SERVICE_PORT_NAME_METRICS),
763+
DEFAULT_NAME_NODE_NATIVE_METRICS_HTTP_PORT,
764+
)
765+
}],
766+
HdfsNodeRole::Data => vec![if self.has_https_enabled() {
767+
(
768+
String::from(SERVICE_PORT_NAME_METRICS),
769+
DEFAULT_DATA_NODE_NATIVE_METRICS_HTTPS_PORT,
770+
)
771+
} else {
772+
(
773+
String::from(SERVICE_PORT_NAME_METRICS),
774+
DEFAULT_DATA_NODE_NATIVE_METRICS_HTTP_PORT,
775+
)
776+
}],
777+
HdfsNodeRole::Journal => vec![if self.has_https_enabled() {
778+
(
779+
String::from(SERVICE_PORT_NAME_METRICS),
780+
DEFAULT_JOURNAL_NODE_NATIVE_METRICS_HTTPS_PORT,
781+
)
782+
} else {
783+
(
784+
String::from(SERVICE_PORT_NAME_METRICS),
785+
DEFAULT_JOURNAL_NODE_NATIVE_METRICS_HTTP_PORT,
786+
)
787+
}],
788+
}
789+
}
790+
791+
pub fn metrics_port(&self, role: &HdfsNodeRole) -> u16 {
792+
match role {
793+
HdfsNodeRole::Name => DEFAULT_NAME_NODE_METRICS_PORT,
794+
HdfsNodeRole::Data => DEFAULT_DATA_NODE_METRICS_PORT,
795+
HdfsNodeRole::Journal => DEFAULT_JOURNAL_NODE_METRICS_PORT,
796+
}
797+
}
798+
799+
pub fn native_metrics_port(&self, role: &HdfsNodeRole) -> u16 {
800+
match role {
801+
HdfsNodeRole::Name => {
802+
if self.has_https_enabled() {
803+
DEFAULT_NAME_NODE_NATIVE_METRICS_HTTPS_PORT
804+
} else {
805+
DEFAULT_NAME_NODE_NATIVE_METRICS_HTTP_PORT
806+
}
807+
}
808+
HdfsNodeRole::Data => {
809+
if self.has_https_enabled() {
810+
DEFAULT_DATA_NODE_NATIVE_METRICS_HTTPS_PORT
811+
} else {
812+
DEFAULT_DATA_NODE_NATIVE_METRICS_HTTP_PORT
813+
}
814+
}
815+
HdfsNodeRole::Journal => {
816+
if self.has_https_enabled() {
817+
DEFAULT_JOURNAL_NODE_NATIVE_METRICS_HTTPS_PORT
818+
} else {
819+
DEFAULT_JOURNAL_NODE_NATIVE_METRICS_HTTP_PORT
820+
}
821+
}
822+
}
823+
}
742824
}
743825

744826
#[derive(Clone, Debug, Deserialize, Eq, Hash, JsonSchema, PartialEq, Serialize)]

0 commit comments

Comments
 (0)