This commit is contained in:
parent
9403581be5
commit
064f6d88ba
@ -202,7 +202,7 @@ impl K8sPrometheusCRDAlertingInterpret {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let _ = Command::new("helm")
|
let _ = Command::new("helm")
|
||||||
.args(&[
|
.args([
|
||||||
"repo",
|
"repo",
|
||||||
"add",
|
"add",
|
||||||
"grafana-operator",
|
"grafana-operator",
|
||||||
@ -213,13 +213,13 @@ impl K8sPrometheusCRDAlertingInterpret {
|
|||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let _ = Command::new("helm")
|
let _ = Command::new("helm")
|
||||||
.args(&["repo", "update"])
|
.args(["repo", "update"])
|
||||||
.output()
|
.output()
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let output = Command::new("helm")
|
let output = Command::new("helm")
|
||||||
.args(&[
|
.args([
|
||||||
"install",
|
"install",
|
||||||
"grafana-operator",
|
"grafana-operator",
|
||||||
"grafana-operator/grafana-operator",
|
"grafana-operator/grafana-operator",
|
||||||
@ -243,30 +243,30 @@ impl K8sPrometheusCRDAlertingInterpret {
|
|||||||
|
|
||||||
Ok(Outcome::success(format!(
|
Ok(Outcome::success(format!(
|
||||||
"installed grafana operator in ns {}",
|
"installed grafana operator in ns {}",
|
||||||
self.sender.namespace.clone().clone()
|
self.sender.namespace.clone()
|
||||||
)))
|
)))
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn install_prometheus(&self, client: &Arc<K8sClient>) -> Result<Outcome, InterpretError> {
|
async fn install_prometheus(&self, client: &Arc<K8sClient>) -> Result<Outcome, InterpretError> {
|
||||||
debug!(
|
debug!(
|
||||||
"installing crd-prometheuses in namespace {}",
|
"installing crd-prometheuses in namespace {}",
|
||||||
self.sender.namespace.clone().clone()
|
self.sender.namespace.clone()
|
||||||
);
|
);
|
||||||
debug!("building role/rolebinding/serviceaccount for crd-prometheus");
|
debug!("building role/rolebinding/serviceaccount for crd-prometheus");
|
||||||
let rolename = format!("{}-prom", self.sender.namespace.clone().clone());
|
let rolename = format!("{}-prom", self.sender.namespace.clone());
|
||||||
let sa_name = format!("{}-prom-sa", self.sender.namespace.clone().clone());
|
let sa_name = format!("{}-prom-sa", self.sender.namespace.clone());
|
||||||
let role = build_prom_role(rolename.clone(), self.sender.namespace.clone().clone());
|
let role = build_prom_role(rolename.clone(), self.sender.namespace.clone());
|
||||||
let rolebinding = build_prom_rolebinding(
|
let rolebinding = build_prom_rolebinding(
|
||||||
rolename.clone(),
|
rolename.clone(),
|
||||||
self.sender.namespace.clone().clone(),
|
self.sender.namespace.clone(),
|
||||||
sa_name.clone(),
|
sa_name.clone(),
|
||||||
);
|
);
|
||||||
let sa = build_prom_service_account(sa_name.clone(), self.sender.namespace.clone().clone());
|
let sa = build_prom_service_account(sa_name.clone(), self.sender.namespace.clone());
|
||||||
let prom_spec = PrometheusSpec {
|
let prom_spec = PrometheusSpec {
|
||||||
alerting: Some(PrometheusSpecAlerting {
|
alerting: Some(PrometheusSpecAlerting {
|
||||||
alertmanagers: Some(vec![AlertmanagerEndpoints {
|
alertmanagers: Some(vec![AlertmanagerEndpoints {
|
||||||
name: Some(format!("alertmanager-operated")),
|
name: Some(format!("alertmanager-operated")),
|
||||||
namespace: Some(format!("{}", self.sender.namespace.clone().clone())),
|
namespace: Some(format!("{}", self.sender.namespace.clone())),
|
||||||
port: Some("web".into()),
|
port: Some("web".into()),
|
||||||
scheme: Some("http".into()),
|
scheme: Some("http".into()),
|
||||||
}]),
|
}]),
|
||||||
@ -275,7 +275,7 @@ impl K8sPrometheusCRDAlertingInterpret {
|
|||||||
service_monitor_namespace_selector: Some(LabelSelector {
|
service_monitor_namespace_selector: Some(LabelSelector {
|
||||||
match_labels: BTreeMap::from([(
|
match_labels: BTreeMap::from([(
|
||||||
"kubernetes.io/metadata.name".to_string(),
|
"kubernetes.io/metadata.name".to_string(),
|
||||||
format!("{}", self.sender.namespace.clone().clone()),
|
format!("{}", self.sender.namespace.clone()),
|
||||||
)]),
|
)]),
|
||||||
match_expressions: vec![],
|
match_expressions: vec![],
|
||||||
}),
|
}),
|
||||||
@ -299,25 +299,25 @@ impl K8sPrometheusCRDAlertingInterpret {
|
|||||||
rule_namespace_selector: Some(LabelSelector {
|
rule_namespace_selector: Some(LabelSelector {
|
||||||
match_labels: BTreeMap::from([(
|
match_labels: BTreeMap::from([(
|
||||||
"kubernetes.io/metadata.name".to_string(),
|
"kubernetes.io/metadata.name".to_string(),
|
||||||
format!("{}", self.sender.namespace.clone().clone()),
|
format!("{}", self.sender.namespace.clone()),
|
||||||
)]),
|
)]),
|
||||||
match_expressions: vec![],
|
match_expressions: vec![],
|
||||||
}),
|
}),
|
||||||
};
|
};
|
||||||
let prom = Prometheus {
|
let prom = Prometheus {
|
||||||
metadata: ObjectMeta {
|
metadata: ObjectMeta {
|
||||||
name: Some(self.sender.namespace.clone().clone()),
|
name: Some(self.sender.namespace.clone()),
|
||||||
labels: Some(std::collections::BTreeMap::from([
|
labels: Some(std::collections::BTreeMap::from([
|
||||||
("alertmanagerConfig".to_string(), "enabled".to_string()),
|
("alertmanagerConfig".to_string(), "enabled".to_string()),
|
||||||
("client".to_string(), "prometheus".to_string()),
|
("client".to_string(), "prometheus".to_string()),
|
||||||
])),
|
])),
|
||||||
namespace: Some(self.sender.namespace.clone().clone()),
|
namespace: Some(self.sender.namespace.clone()),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
spec: prom_spec,
|
spec: prom_spec,
|
||||||
};
|
};
|
||||||
client
|
client
|
||||||
.apply(&role, Some(&self.sender.namespace.clone().clone()))
|
.apply(&role, Some(&self.sender.namespace.clone()))
|
||||||
.await
|
.await
|
||||||
.map_err(|e| InterpretError::new(e.to_string()))?;
|
.map_err(|e| InterpretError::new(e.to_string()))?;
|
||||||
info!(
|
info!(
|
||||||
@ -326,7 +326,7 @@ impl K8sPrometheusCRDAlertingInterpret {
|
|||||||
role.metadata.namespace.unwrap()
|
role.metadata.namespace.unwrap()
|
||||||
);
|
);
|
||||||
client
|
client
|
||||||
.apply(&rolebinding, Some(&self.sender.namespace.clone().clone()))
|
.apply(&rolebinding, Some(&self.sender.namespace.clone()))
|
||||||
.await
|
.await
|
||||||
.map_err(|e| InterpretError::new(e.to_string()))?;
|
.map_err(|e| InterpretError::new(e.to_string()))?;
|
||||||
info!(
|
info!(
|
||||||
@ -335,7 +335,7 @@ impl K8sPrometheusCRDAlertingInterpret {
|
|||||||
rolebinding.metadata.namespace.unwrap()
|
rolebinding.metadata.namespace.unwrap()
|
||||||
);
|
);
|
||||||
client
|
client
|
||||||
.apply(&sa, Some(&self.sender.namespace.clone().clone()))
|
.apply(&sa, Some(&self.sender.namespace.clone()))
|
||||||
.await
|
.await
|
||||||
.map_err(|e| InterpretError::new(e.to_string()))?;
|
.map_err(|e| InterpretError::new(e.to_string()))?;
|
||||||
info!(
|
info!(
|
||||||
@ -344,7 +344,7 @@ impl K8sPrometheusCRDAlertingInterpret {
|
|||||||
sa.metadata.namespace.unwrap()
|
sa.metadata.namespace.unwrap()
|
||||||
);
|
);
|
||||||
client
|
client
|
||||||
.apply(&prom, Some(&self.sender.namespace.clone().clone()))
|
.apply(&prom, Some(&self.sender.namespace.clone()))
|
||||||
.await
|
.await
|
||||||
.map_err(|e| InterpretError::new(e.to_string()))?;
|
.map_err(|e| InterpretError::new(e.to_string()))?;
|
||||||
info!(
|
info!(
|
||||||
@ -365,18 +365,18 @@ impl K8sPrometheusCRDAlertingInterpret {
|
|||||||
) -> Result<Outcome, InterpretError> {
|
) -> Result<Outcome, InterpretError> {
|
||||||
let am = Alertmanager {
|
let am = Alertmanager {
|
||||||
metadata: ObjectMeta {
|
metadata: ObjectMeta {
|
||||||
name: Some(self.sender.namespace.clone().clone()),
|
name: Some(self.sender.namespace.clone()),
|
||||||
labels: Some(std::collections::BTreeMap::from([(
|
labels: Some(std::collections::BTreeMap::from([(
|
||||||
"alertmanagerConfig".to_string(),
|
"alertmanagerConfig".to_string(),
|
||||||
"enabled".to_string(),
|
"enabled".to_string(),
|
||||||
)])),
|
)])),
|
||||||
namespace: Some(self.sender.namespace.clone().clone()),
|
namespace: Some(self.sender.namespace.clone()),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
spec: AlertmanagerSpec::default(),
|
spec: AlertmanagerSpec::default(),
|
||||||
};
|
};
|
||||||
client
|
client
|
||||||
.apply(&am, Some(&self.sender.namespace.clone().clone()))
|
.apply(&am, Some(&self.sender.namespace.clone()))
|
||||||
.await
|
.await
|
||||||
.map_err(|e| InterpretError::new(e.to_string()))?;
|
.map_err(|e| InterpretError::new(e.to_string()))?;
|
||||||
Ok(Outcome::success(format!(
|
Ok(Outcome::success(format!(
|
||||||
@ -391,7 +391,7 @@ impl K8sPrometheusCRDAlertingInterpret {
|
|||||||
) -> Result<Outcome, InterpretError> {
|
) -> Result<Outcome, InterpretError> {
|
||||||
let default_service_monitor = ServiceMonitor {
|
let default_service_monitor = ServiceMonitor {
|
||||||
metadata: ObjectMeta {
|
metadata: ObjectMeta {
|
||||||
name: Some(self.sender.namespace.clone().clone()),
|
name: Some(self.sender.namespace.clone()),
|
||||||
labels: Some(std::collections::BTreeMap::from([
|
labels: Some(std::collections::BTreeMap::from([
|
||||||
("alertmanagerConfig".to_string(), "enabled".to_string()),
|
("alertmanagerConfig".to_string(), "enabled".to_string()),
|
||||||
("client".to_string(), "prometheus".to_string()),
|
("client".to_string(), "prometheus".to_string()),
|
||||||
@ -400,7 +400,7 @@ impl K8sPrometheusCRDAlertingInterpret {
|
|||||||
"kube-state-metrics".to_string(),
|
"kube-state-metrics".to_string(),
|
||||||
),
|
),
|
||||||
])),
|
])),
|
||||||
namespace: Some(self.sender.namespace.clone().clone()),
|
namespace: Some(self.sender.namespace.clone()),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
spec: ServiceMonitorSpec::default(),
|
spec: ServiceMonitorSpec::default(),
|
||||||
@ -408,7 +408,7 @@ impl K8sPrometheusCRDAlertingInterpret {
|
|||||||
monitors.push(default_service_monitor);
|
monitors.push(default_service_monitor);
|
||||||
for monitor in monitors.iter() {
|
for monitor in monitors.iter() {
|
||||||
client
|
client
|
||||||
.apply(monitor, Some(&self.sender.namespace.clone().clone()))
|
.apply(monitor, Some(&self.sender.namespace.clone()))
|
||||||
.await
|
.await
|
||||||
.map_err(|e| InterpretError::new(e.to_string()))?;
|
.map_err(|e| InterpretError::new(e.to_string()))?;
|
||||||
}
|
}
|
||||||
@ -434,12 +434,12 @@ impl K8sPrometheusCRDAlertingInterpret {
|
|||||||
prom_rule_spec.groups.push(default_rules_group);
|
prom_rule_spec.groups.push(default_rules_group);
|
||||||
let prom_rules = PrometheusRule {
|
let prom_rules = PrometheusRule {
|
||||||
metadata: ObjectMeta {
|
metadata: ObjectMeta {
|
||||||
name: Some(self.sender.namespace.clone().clone()),
|
name: Some(self.sender.namespace.clone()),
|
||||||
labels: Some(std::collections::BTreeMap::from([
|
labels: Some(std::collections::BTreeMap::from([
|
||||||
("alertmanagerConfig".to_string(), "enabled".to_string()),
|
("alertmanagerConfig".to_string(), "enabled".to_string()),
|
||||||
("role".to_string(), "prometheus-rule".to_string()),
|
("role".to_string(), "prometheus-rule".to_string()),
|
||||||
])),
|
])),
|
||||||
namespace: Some(self.sender.namespace.clone().clone()),
|
namespace: Some(self.sender.namespace.clone()),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
spec: prom_rule_spec,
|
spec: prom_rule_spec,
|
||||||
@ -475,7 +475,7 @@ impl K8sPrometheusCRDAlertingInterpret {
|
|||||||
};
|
};
|
||||||
let mut json_data = BTreeMap::new();
|
let mut json_data = BTreeMap::new();
|
||||||
json_data.insert("timeInterval".to_string(), "5s".to_string());
|
json_data.insert("timeInterval".to_string(), "5s".to_string());
|
||||||
let namespace = self.sender.namespace.clone().clone();
|
let namespace = self.sender.namespace.clone();
|
||||||
|
|
||||||
let json = build_default_dashboard(&namespace);
|
let json = build_default_dashboard(&namespace);
|
||||||
|
|
||||||
@ -483,9 +483,9 @@ impl K8sPrometheusCRDAlertingInterpret {
|
|||||||
metadata: ObjectMeta {
|
metadata: ObjectMeta {
|
||||||
name: Some(format!(
|
name: Some(format!(
|
||||||
"grafana-datasource-{}",
|
"grafana-datasource-{}",
|
||||||
self.sender.namespace.clone().clone()
|
self.sender.namespace.clone()
|
||||||
)),
|
)),
|
||||||
namespace: Some(self.sender.namespace.clone().clone()),
|
namespace: Some(self.sender.namespace.clone()),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
spec: GrafanaDatasourceSpec {
|
spec: GrafanaDatasourceSpec {
|
||||||
@ -496,11 +496,11 @@ impl K8sPrometheusCRDAlertingInterpret {
|
|||||||
database: Some("prometheus".to_string()),
|
database: Some("prometheus".to_string()),
|
||||||
json_data: Some(json_data),
|
json_data: Some(json_data),
|
||||||
//this is fragile
|
//this is fragile
|
||||||
name: format!("prometheus-{}-0", self.sender.namespace.clone().clone()),
|
name: format!("prometheus-{}-0", self.sender.namespace.clone()),
|
||||||
r#type: "prometheus".to_string(),
|
r#type: "prometheus".to_string(),
|
||||||
url: format!(
|
url: format!(
|
||||||
"http://prometheus-operated.{}.svc.cluster.local:9090",
|
"http://prometheus-operated.{}.svc.cluster.local:9090",
|
||||||
self.sender.namespace.clone().clone()
|
self.sender.namespace.clone()
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -515,9 +515,9 @@ impl K8sPrometheusCRDAlertingInterpret {
|
|||||||
metadata: ObjectMeta {
|
metadata: ObjectMeta {
|
||||||
name: Some(format!(
|
name: Some(format!(
|
||||||
"grafana-dashboard-{}",
|
"grafana-dashboard-{}",
|
||||||
self.sender.namespace.clone().clone()
|
self.sender.namespace.clone()
|
||||||
)),
|
)),
|
||||||
namespace: Some(self.sender.namespace.clone().clone()),
|
namespace: Some(self.sender.namespace.clone()),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
spec: GrafanaDashboardSpec {
|
spec: GrafanaDashboardSpec {
|
||||||
@ -534,8 +534,8 @@ impl K8sPrometheusCRDAlertingInterpret {
|
|||||||
|
|
||||||
let grafana = Grafana {
|
let grafana = Grafana {
|
||||||
metadata: ObjectMeta {
|
metadata: ObjectMeta {
|
||||||
name: Some(format!("grafana-{}", self.sender.namespace.clone().clone())),
|
name: Some(format!("grafana-{}", self.sender.namespace.clone())),
|
||||||
namespace: Some(self.sender.namespace.clone().clone()),
|
namespace: Some(self.sender.namespace.clone()),
|
||||||
labels: Some(label.clone()),
|
labels: Some(label.clone()),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user