Skip to content

Commit ba1d0bd

Browse files
authored
Merge pull request #77 from maryamtahhan/feat-gf-dashboard
Prometheus: automate kepler grafana dashboard setup
2 parents b03a0d6 + 06ca69d commit ba1d0bd

File tree

2 files changed

+44
-5
lines changed

2 files changed

+44
-5
lines changed

lib/prometheus.sh

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,13 @@
2121
declare -r PROMETHEUS_OPERATOR_VERSION=${PROMETHEUS_OPERATOR_VERSION:-v0.11.0}
2222
declare -r PROMETHEUS_REPLICAS=${PROMETHEUS_REPLICAS:-1}
2323

24-
# constants
25-
2624
# constants
2725
declare -r KUBE_PROM_DIR="$PROJECT_ROOT/tmp/kube-prometheus"
2826
declare -r MONITORING_NS="monitoring"
27+
declare -r DASHBOARD_DIR="$KUBE_PROM_DIR/grafana-dashboards"
28+
declare KEPLER_EXPORTER_GRAFANA_DASHBOARD_JSON
29+
30+
KEPLER_EXPORTER_GRAFANA_DASHBOARD_JSON=$( curl -fsSL https://raw.githubusercontent.com/sustainable-computing-io/kepler/main/grafana-dashboards/Kepler-Exporter.json | sed '1 ! s/^/ /' )
2931

3032
deploy_prometheus_operator() {
3133

@@ -42,6 +44,8 @@ deploy_prometheus_operator() {
4244
mv kube-prometheus/manifests/prometheus-prometheus.yaml.tmp \
4345
kube-prometheus/manifests/prometheus-prometheus.yaml
4446

47+
_setup_dashboard
48+
_run_yq
4549
_load_prometheus_operator_images_to_local_registry
4650
kubectl create -f kube-prometheus/manifests/setup
4751
kubectl wait \
@@ -58,8 +62,10 @@ deploy_prometheus_operator() {
5862
is_set "$GRAFANA_ENABLE" && {
5963
find kube-prometheus/manifests -name 'grafana-*.yaml' -type f \
6064
-exec kubectl create -f {} \;
65+
ok "Grafana deployed"
6166
}
6267

68+
ok "Prometheus deployed"
6369
rm -rf kube-prometheus
6470
)
6571
wait_for_pods_in_namespace "$MONITORING_NS"
@@ -84,6 +90,7 @@ _load_prometheus_operator_images_to_local_registry() {
8490
# TODO: fix this by passing in the registry information to deploy_prometheus_operator
8591
# from main
8692

93+
header "Load prometheus operator images to local registry"
8794
local registry
8895
if [[ "$CLUSTER_PROVIDER" == "kind" ]]; then
8996
registry="localhost:${REGISTRY_PORT}"
@@ -106,3 +113,35 @@ _load_prometheus_operator_images_to_local_registry() {
106113
done
107114
done
108115
}
116+
117+
_setup_dashboard(){
118+
if [ -f "$DASHBOARD_DIR/grafana-dashboards/kepler-exporter-configmap.yaml" ]; then
119+
return 0
120+
else
121+
header "Setup Dashboard"
122+
mkdir -p "$DASHBOARD_DIR/grafana-dashboards/"
123+
cat - > "$DASHBOARD_DIR/grafana-dashboards/kepler-exporter-configmap.yaml" << EOF
124+
apiVersion: v1
125+
data:
126+
kepler-exporter.json: |-
127+
$KEPLER_EXPORTER_GRAFANA_DASHBOARD_JSON
128+
kind: ConfigMap
129+
metadata:
130+
labels:
131+
app.kubernetes.io/component: grafana
132+
app.kubernetes.io/name: grafana
133+
app.kubernetes.io/part-of: kube-prometheus
134+
app.kubernetes.io/version: 9.5.3
135+
name: grafana-dashboard-kepler-exporter
136+
namespace: monitoring
137+
EOF
138+
fi
139+
}
140+
141+
_run_yq(){
142+
f="$DASHBOARD_DIR/grafana-dashboards/kepler-exporter-configmap.yaml" \
143+
yq -i e '.items += [load(env(f))]' "$KUBE_PROM_DIR"/manifests/grafana-dashboardDefinitions.yaml;
144+
yq -i e '.spec.template.spec.containers.0.volumeMounts += [ {"mountPath": "/grafana-dashboard-definitions/0/kepler-exporter", "name": "grafana-dashboard-kepler-exporter", "readOnly": false} ]' "$KUBE_PROM_DIR"/manifests/grafana-deployment.yaml
145+
yq -i e '.spec.template.spec.volumes += [ {"configMap": {"name": "grafana-dashboard-kepler-exporter"}, "name": "grafana-dashboard-kepler-exporter"} ]' "$KUBE_PROM_DIR"/manifests/grafana-deployment.yaml;
146+
ok "Dashboard setup complete"
147+
}

main.sh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ declare -r PROJECT_ROOT CALLER_PROJECT_ROOT
4545
declare -r CTR_CMD=${CTR_CMD:-docker}
4646
declare -r CLUSTER_PROVIDER=${CLUSTER_PROVIDER:-kind}
4747
declare -r KUBECONFIG_ROOT_DIR=${KUBECONFIG_ROOT_DIR:-$PROJECT_ROOT/.kube}
48-
declare -r KEPLER_KUBECONFIG=${KEPLER_KUBECONFIG:-config-kepler}
48+
declare -r KEPLER_KUBECONFIG=${KEPLER_KUBECONFIG:-config}
4949

5050
declare -r REGISTRY_PORT=${REGISTRY_PORT:-5001}
5151

@@ -61,7 +61,7 @@ source "$PROJECT_ROOT/lib/utils.sh"
6161
cluster_up() {
6262
"${CLUSTER_PROVIDER}_up"
6363

64-
info "Coping $CLUSTER_PROVIDER kubeconfig to $KUBECONFIG_ROOT_DIR/$KEPLER_KUBECONFIG"
64+
info "Copying $CLUSTER_PROVIDER kubeconfig to $KUBECONFIG_ROOT_DIR/$KEPLER_KUBECONFIG"
6565
local kubeconfig
6666
kubeconfig="$("${CLUSTER_PROVIDER}"_kubeconfig)"
6767

@@ -74,7 +74,7 @@ cluster_up() {
7474
KUBECONFIG=$kubeconfig kubectl config view --merge --flatten >all-in-one-kubeconfig.yaml
7575
mv -f all-in-one-kubeconfig.yaml "${KUBECONFIG_ROOT_DIR}/config"
7676

77-
export KUBECONFIG="${KUBECONFIG_ROOT_DIR}/config"
77+
export KUBECONFIG="${KUBECONFIG_ROOT_DIR}/$KEPLER_KUBECONFIG"
7878

7979
if is_set "$PROMETHEUS_ENABLE" || is_set "$GRAFANA_ENABLE"; then
8080
source "$PROJECT_ROOT/lib/prometheus.sh"

0 commit comments

Comments
 (0)