Skip to content

Commit 78f905c

Browse files
Logging (#294)
# Description Add log aggregation
1 parent fb5195d commit 78f905c

67 files changed

Lines changed: 2957 additions & 310 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,15 @@
22

33
## [Unreleased]
44

5+
### Added
6+
7+
- Log aggregation added ([#294]).
8+
59
### Changed
610

711
- [BREAKING] Use Product image selection instead of version. `spec.version` has been replaced by `spec.image` ([#282]).
812
- Updated stackable image versions ([#275]).
9-
- `operator-rs` `0.24.0` -> `0.30.1` ([#277], [#293]).
13+
- `operator-rs` `0.24.0` -> `0.30.2` ([#277], [#293], [#294]).
1014
- Set runAsGroup to 1000 rather than 0 ([#283]).
1115
- Fixed: `selector` in role groups now works. It was not working before ([#293])
1216

@@ -15,6 +19,7 @@
1519
[#282]: https://github.com/stackabletech/hbase-operator/pull/282
1620
[#283]: https://github.com/stackabletech/hbase-operator/pull/283
1721
[#293]: https://github.com/stackabletech/hbase-operator/pull/293
22+
[#294]: https://github.com/stackabletech/hbase-operator/pull/294
1823

1924
## [0.5.0] - 2022-11-07
2025

Cargo.lock

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

deploy/crd/hbasecluster.crd.yaml

Lines changed: 592 additions & 7 deletions
Large diffs are not rendered by default.

deploy/helm/hbase-operator/crds/crds.yaml

Lines changed: 592 additions & 7 deletions
Large diffs are not rendered by default.

deploy/manifests/crds.yaml

Lines changed: 592 additions & 7 deletions
Large diffs are not rendered by default.

docs/modules/ROOT/pages/usage.adoc

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ metadata:
1919
spec:
2020
image:
2121
productVersion: 2.4.12
22-
stackableVersion: 0.3.0
22+
stackableVersion: 0.4.0
2323
hdfsConfigMapName: simple-hdfs-namenode-default
2424
zookeeperConfigMapName: simple-hbase-znode
2525
config:
@@ -63,6 +63,32 @@ It should generally be safe to simply use the latest image version that is avail
6363
The managed HBase instances are automatically configured to export Prometheus metrics. See
6464
xref:home:operators:monitoring.adoc[] for more details.
6565

66+
== Log aggregation
67+
68+
The logs can be forwarded to a Vector log aggregator by providing a discovery
69+
ConfigMap for the aggregator and by enabling the log agent:
70+
71+
[source,yaml]
72+
----
73+
spec:
74+
vectorAggregatorConfigMapName: vector-aggregator-discovery
75+
masters:
76+
config:
77+
logging:
78+
enableVectorAgent: true
79+
regionServers:
80+
config:
81+
logging:
82+
enableVectorAgent: true
83+
restServers:
84+
config:
85+
logging:
86+
enableVectorAgent: true
87+
----
88+
89+
Further information on how to configure logging, can be found in
90+
xref:home:concepts:logging.adoc[].
91+
6692
== Configuration Overrides
6793

6894
The cluster definition also supports overriding configuration properties and environment variables, either per role or per role group, where the more specific override (role group) has precedence over the less specific one (role).

docs/modules/getting_started/examples/code/hbase.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ metadata:
66
spec:
77
image:
88
productVersion: 2.4.12
9-
stackableVersion: 0.3.0
9+
stackableVersion: 0.4.0
1010
hdfsConfigMapName: simple-hdfs
1111
zookeeperConfigMapName: simple-znode
1212
config:

rust/crd/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ version = "0.6.0-nightly"
99
publish = false
1010

1111
[dependencies]
12-
stackable-operator = { git = "https://github.com/stackabletech/operator-rs.git", tag = "0.30.1" }
12+
stackable-operator = { git = "https://github.com/stackabletech/operator-rs.git", tag = "0.30.2" }
1313

1414
serde = "1.0"
1515
serde_json = "1.0"

rust/crd/src/lib.rs

Lines changed: 70 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ use stackable_operator::{
1212
k8s_openapi::apimachinery::pkg::api::resource::Quantity,
1313
kube::{runtime::reflector::ObjectRef, CustomResource},
1414
product_config_utils::{ConfigError, Configuration},
15+
product_logging::{self, spec::Logging},
1516
role_utils::{Role, RoleGroup, RoleGroupRef},
1617
schemars::{self, JsonSchema},
1718
};
@@ -86,14 +87,18 @@ pub struct HbaseClusterSpec {
8687
pub zookeeper_config_map_name: String,
8788
/// HDFS cluster connection details from discovery config map
8889
pub hdfs_config_map_name: String,
90+
/// Name of the Vector aggregator discovery ConfigMap.
91+
/// It must contain the key `ADDRESS` with the address of the Vector aggregator.
92+
#[serde(skip_serializing_if = "Option::is_none")]
93+
pub vector_aggregator_config_map_name: Option<String>,
8994
#[serde(default, skip_serializing_if = "Option::is_none")]
90-
pub config: Option<HbaseConfig>,
95+
pub config: Option<HbaseConfigFragment>,
9196
#[serde(default, skip_serializing_if = "Option::is_none")]
92-
pub masters: Option<Role<HbaseConfig>>,
97+
pub masters: Option<Role<HbaseConfigFragment>>,
9398
#[serde(default, skip_serializing_if = "Option::is_none")]
94-
pub region_servers: Option<Role<HbaseConfig>>,
99+
pub region_servers: Option<Role<HbaseConfigFragment>>,
95100
#[serde(default, skip_serializing_if = "Option::is_none")]
96-
pub rest_servers: Option<Role<HbaseConfig>>,
101+
pub rest_servers: Option<Role<HbaseConfigFragment>>,
97102
}
98103

99104
#[derive(
@@ -161,33 +166,72 @@ impl HbaseRole {
161166
)]
162167
pub struct HbaseStorageConfig {}
163168

164-
#[derive(Clone, Debug, Default, Deserialize, JsonSchema, PartialEq, Serialize)]
169+
#[derive(
170+
Clone,
171+
Debug,
172+
Deserialize,
173+
Display,
174+
Eq,
175+
EnumIter,
176+
JsonSchema,
177+
Ord,
178+
PartialEq,
179+
PartialOrd,
180+
Serialize,
181+
)]
165182
#[serde(rename_all = "camelCase")]
183+
pub enum Container {
184+
Hbase,
185+
Vector,
186+
}
187+
188+
#[derive(Clone, Debug, Default, Fragment, JsonSchema, PartialEq)]
189+
#[fragment_attrs(
190+
derive(
191+
Clone,
192+
Debug,
193+
Default,
194+
Deserialize,
195+
Merge,
196+
JsonSchema,
197+
PartialEq,
198+
Serialize
199+
),
200+
serde(rename_all = "camelCase")
201+
)]
166202
pub struct HbaseConfig {
167203
#[serde(default, skip_serializing_if = "Option::is_none")]
168204
pub hbase_rootdir: Option<String>,
169205
#[serde(default, skip_serializing_if = "Option::is_none")]
170206
pub hbase_opts: Option<String>,
171-
pub resources: Option<ResourcesFragment<HbaseStorageConfig, NoRuntimeLimits>>,
207+
#[fragment_attrs(serde(default))]
208+
pub resources: Resources<HbaseStorageConfig, NoRuntimeLimits>,
209+
#[fragment_attrs(serde(default))]
210+
pub logging: Logging<Container>,
172211
}
173212

174213
impl HbaseConfig {
175-
fn default_resources() -> ResourcesFragment<HbaseStorageConfig, NoRuntimeLimits> {
176-
ResourcesFragment {
177-
cpu: CpuLimitsFragment {
178-
min: Some(Quantity("200m".to_owned())),
179-
max: Some(Quantity("4".to_owned())),
180-
},
181-
memory: MemoryLimitsFragment {
182-
limit: Some(Quantity("2Gi".to_owned())),
183-
runtime_limits: NoRuntimeLimitsFragment {},
214+
fn default_config() -> HbaseConfigFragment {
215+
HbaseConfigFragment {
216+
hbase_rootdir: None,
217+
hbase_opts: None,
218+
resources: ResourcesFragment {
219+
cpu: CpuLimitsFragment {
220+
min: Some(Quantity("200m".to_owned())),
221+
max: Some(Quantity("4".to_owned())),
222+
},
223+
memory: MemoryLimitsFragment {
224+
limit: Some(Quantity("2Gi".to_owned())),
225+
runtime_limits: NoRuntimeLimitsFragment {},
226+
},
227+
storage: HbaseStorageConfigFragment {},
184228
},
185-
storage: HbaseStorageConfigFragment {},
229+
logging: product_logging::spec::default_logging(),
186230
}
187231
}
188232
}
189233

190-
impl Configuration for HbaseConfig {
234+
impl Configuration for HbaseConfigFragment {
191235
type Configurable = HbaseCluster;
192236

193237
fn compute_env(
@@ -277,7 +321,7 @@ impl HbaseCluster {
277321
}
278322
}
279323

280-
pub fn get_role(&self, role: &HbaseRole) -> Option<&Role<HbaseConfig>> {
324+
pub fn get_role(&self, role: &HbaseRole) -> Option<&Role<HbaseConfigFragment>> {
281325
match role {
282326
HbaseRole::Master => self.spec.masters.as_ref(),
283327
HbaseRole::RegionServer => self.spec.region_servers.as_ref(),
@@ -289,7 +333,7 @@ impl HbaseCluster {
289333
pub fn get_role_group(
290334
&self,
291335
rolegroup_ref: &RoleGroupRef<HbaseCluster>,
292-
) -> Result<&RoleGroup<HbaseConfig>, Error> {
336+
) -> Result<&RoleGroup<HbaseConfigFragment>, Error> {
293337
let role_variant =
294338
HbaseRole::from_str(&rolegroup_ref.role).with_context(|_| InvalidRoleSnafu {
295339
role: rolegroup_ref.role.to_owned(),
@@ -316,27 +360,26 @@ impl HbaseCluster {
316360
}
317361

318362
/// Retrieve and merge resource configs for role and role groups
319-
pub fn resolve_resource_config_for_role_and_rolegroup(
363+
pub fn merged_config(
320364
&self,
321365
role: &HbaseRole,
322366
rolegroup_ref: &RoleGroupRef<HbaseCluster>,
323-
) -> Result<Resources<HbaseStorageConfig, NoRuntimeLimits>, Error> {
367+
) -> Result<HbaseConfig, Error> {
324368
// Initialize the result with all default values as baseline
325-
let conf_defaults = HbaseConfig::default_resources();
369+
let conf_defaults = HbaseConfig::default_config();
326370

327371
let role = self.get_role(role).context(MissingHbaseRoleSnafu {
328372
role: role.to_string(),
329373
})?;
330374

331375
// Retrieve role resource config
332-
let mut conf_role: ResourcesFragment<HbaseStorageConfig, NoRuntimeLimits> =
333-
role.config.config.resources.clone().unwrap_or_default();
376+
let mut conf_role = role.config.config.to_owned();
334377

335378
// Retrieve rolegroup specific resource config
336-
let mut conf_rolegroup: ResourcesFragment<HbaseStorageConfig, NoRuntimeLimits> = role
379+
let mut conf_rolegroup = role
337380
.role_groups
338381
.get(&rolegroup_ref.role_group)
339-
.and_then(|rg| rg.config.config.resources.clone())
382+
.map(|rg| rg.config.config.clone())
340383
.unwrap_or_default();
341384

342385
// Merge more specific configs into default config
@@ -347,7 +390,7 @@ impl HbaseCluster {
347390
conf_role.merge(&conf_defaults);
348391
conf_rolegroup.merge(&conf_role);
349392

350-
tracing::debug!("Merged resource config: {:?}", conf_rolegroup);
393+
tracing::debug!("Merged config: {:?}", conf_rolegroup);
351394
fragment::validate(conf_rolegroup).context(FragmentValidationFailureSnafu)
352395
}
353396
}

rust/operator-binary/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@ futures = { version = "0.3", features = ["compat"] }
1616
serde = "1.0"
1717
snafu = "0.7"
1818
stackable-hbase-crd = { path = "../crd" }
19-
stackable-operator = { git = "https://github.com/stackabletech/operator-rs.git", tag = "0.30.1" }
19+
stackable-operator = { git = "https://github.com/stackabletech/operator-rs.git", tag = "0.30.2" }
2020
strum = { version = "0.24", features = ["derive"] }
2121
tokio = { version = "1.23", features = ["macros", "rt-multi-thread"] }
2222
tracing = "0.1"
2323

2424
[build-dependencies]
2525
built = { version = "0.5", features = ["chrono", "git2"] }
2626
stackable-hbase-crd = { path = "../crd" }
27-
stackable-operator = { git = "https://github.com/stackabletech/operator-rs.git", tag = "0.30.1" }
27+
stackable-operator = { git = "https://github.com/stackabletech/operator-rs.git", tag = "0.30.2" }

0 commit comments

Comments
 (0)