From 18ba46872b4ea32a80a5502c63d5fb22c173a66f Mon Sep 17 00:00:00 2001 From: haopeng <657407891@qq.com> Date: Thu, 9 Jan 2025 14:36:28 +0800 Subject: [PATCH] BIGTOP-4316: Add Grafana configuration (#144) --- .../tools/functions/StackFunctions.java | 4 + .../configuration/grafana-dashboard.xml | 931 ++++++++++++++++++ .../configuration/grafana-datasources.xml | 44 + .../grafana/configuration/grafana.xml | 57 +- .../infra/v1_0_0/grafana/GrafanaParams.java | 115 +++ .../v1_0_0/grafana/GrafanaServerScript.java | 3 +- .../infra/v1_0_0/grafana/GrafanaSetup.java | 48 + .../v1_0_0/prometheus/PrometheusParams.java | 2 +- 8 files changed, 1201 insertions(+), 3 deletions(-) create mode 100644 bigtop-manager-server/src/main/resources/stacks/infra/1.0.0/services/grafana/configuration/grafana-dashboard.xml create mode 100644 bigtop-manager-server/src/main/resources/stacks/infra/1.0.0/services/grafana/configuration/grafana-datasources.xml diff --git a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/tools/functions/StackFunctions.java b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/tools/functions/StackFunctions.java index dee8d0a5..72d4bbac 100644 --- a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/tools/functions/StackFunctions.java +++ b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/tools/functions/StackFunctions.java @@ -83,6 +83,10 @@ public Map getServiceByName() { if (propertyVO.getName().equals("content")) { propertyVO.setValue(null); } + if (propertyVO.getAttrs() != null + && propertyVO.getAttrs().getType().equals("longtext")) { + propertyVO.setValue(null); + } } } return JsonUtils.indentWriteAsString(serviceVO); diff --git a/bigtop-manager-server/src/main/resources/stacks/infra/1.0.0/services/grafana/configuration/grafana-dashboard.xml b/bigtop-manager-server/src/main/resources/stacks/infra/1.0.0/services/grafana/configuration/grafana-dashboard.xml new file mode 100644 index 00000000..3a835c59 --- /dev/null +++ b/bigtop-manager-server/src/main/resources/stacks/infra/1.0.0/services/grafana/configuration/grafana-dashboard.xml @@ -0,0 +1,931 @@ + + + + + + content + This is the freemarker template for dashboard file + + - name: '${db.name}' + orgId: 1 + folder: '' + type: file + options: + path: '${db.path}' + +]]> + + + longtext + + + + bm_agent_dashboard + This is the dashboard configuration file for BM agent + cluster=~\"${cluster}\"}\n) / sum(\n agent_host_monitoring_mem{memUsage=\"memTotal\", <#noparse>cluster=~\"${cluster}\"}\n)) /\ncount(\n count by (instance) (\n agent_host_monitoring_mem{memUsage=\"memTotal\", <#noparse>cluster=~\"${cluster}\"}\n )\n)", + "interval": "", + "legendFormat": "Real", + "range": true, + "refId": "A" + } + ], + "title": "Global RAM Usage", + "type": "bargauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "uid4prometheus" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "continuous-GrYlRd" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "MEMORY", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "scheme", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "#EAB839", + "value": 0.5 + }, + { + "color": "red", + "value": 0.7 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 12 + }, + "id": 55, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "hidden", + "placement": "right", + "showLegend": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "exemplar": true, + "expr": "(sum(\n agent_host_monitoring_mem{memUsage=\"memIdle\", <#noparse>cluster=~\"${cluster}\"}\n) / sum(\n agent_host_monitoring_mem{memUsage=\"memTotal\", <#noparse>cluster=~\"${cluster}\"}\n)) /\ncount(\n count by (instance) (\n agent_host_monitoring_mem{memUsage=\"memTotal\", <#noparse>cluster=~\"${cluster}\"}\n )\n)", + "interval": "$resolution", + "legendFormat": "Memory usage in %", + "range": true, + "refId": "A" + } + ], + "title": "Cluster Memory Utilization", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "uid4prometheus" + }, + "fieldConfig": { + "defaults": { + "mappings": [], + "noValue": "0", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgb(255, 255, 255)", + "value": null + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 12, + "x": 0, + "y": 19 + }, + "id": 39, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "text": {}, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "exemplar": true, + "expr": "(sum(\n agent_host_monitoring_mem{memUsage=\"memIdle\", <#noparse>cluster=~\"${cluster}\"}\n) / sum(\n agent_host_monitoring_mem{memUsage=\"memTotal\", <#noparse>cluster=~\"${cluster}\"}\n)) /\ncount(\n count by (instance) (\n agent_host_monitoring_mem{memUsage=\"memTotal\", <#noparse>cluster=~\"${cluster}\"}\n )\n)", + "interval": "", + "legendFormat": "Real", + "range": true, + "refId": "A" + } + ], + "title": "RAM Usage", + "type": "stat" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 22 + }, + "id": 81, + "panels": [], + "title": "Storage", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 23 + }, + "id": 87, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "uid4prometheus" + }, + "disableTextWrap": false, + "editorMode": "code", + "exemplar": false, + "expr": "(sum(\n agent_host_monitoring_disk{diskUsage=\"diskFreeSpace\", <#noparse>cluster=~\"${cluster}\"}\n) / sum(\n agent_host_monitoring_disk{diskUsage=\"diskTotalSpace\", <#noparse>cluster=~\"${cluster}\"}\n)) /\ncount(\n count by (instance) (\n agent_host_monitoring_disk{diskUsage=\"diskFreeSpace\", <#noparse>cluster=~\"${cluster}\"}\n )\n)", + "fullMetaSearch": false, + "includeNullMetadata": true, + "instant": false, + "interval": "$resolution", + "legendFormat": "{{label_name}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Persistent Volumes - Usage in %", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 25, + "gradientMode": "opacity", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 23 + }, + "id": 82, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "right", + "showLegend": false + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "uid4prometheus" + }, + "disableTextWrap": false, + "editorMode": "code", + "exemplar": false, + "expr": "(sum(\n agent_host_monitoring_disk{diskUsage=\"diskFreeSpace\", <#noparse>cluster=~\"${cluster}\"}\n) / sum(\n agent_host_monitoring_disk{diskUsage=\"diskTotalSpace\", <#noparse>cluster=~\"${cluster}\"}\n)) /\ncount(\n count by (instance) (\n agent_host_monitoring_disk{diskUsage=\"diskFreeSpace\", <#noparse>cluster=~\"${cluster}\"}\n )\n)", + "fullMetaSearch": false, + "includeNullMetadata": true, + "instant": false, + "interval": "$resolution", + "legendFormat": "{{label_name}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Persistent Volumes - Usage in %", + "type": "timeseries" + } + ], + "preload": false, + "refresh": "30s", + "schemaVersion": 40, + "tags": [], + "templating": { + "list": [ + { + "current": { + "text": "prometheus", + "value": "uid4prometheus" + }, + "includeAll": false, + "name": "datasource", + "label": "Datasource", + "options": [], + "query": "prometheus", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "datasource": { + "type": "prometheus", + "uid": "uid4prometheus" + }, + "type": "query", + "name": "${cluster_label}", + "label": "Cluster", + "options": [], + "query": "label_values(${cluster_label})", + "refresh": 2, + "multi": false, + "includeAll": false, + "current": { + "text": "${default_cluster_name}", + "value": "${default_cluster_name}" + } + }, + { + "current": { + "text": "1m", + "value": "1m" + }, + "includeAll": false, + "name": "resolution", + "label": "Resolution", + "options": [ + { + "selected": false, + "text": "1s", + "value": "1s" + }, + { + "selected": false, + "text": "5s", + "value": "5s" + }, + { + "selected": true, + "text": "1m", + "value": "1m" + }, + { + "selected": false, + "text": "3m", + "value": "3m" + }, + { + "selected": false, + "text": "5m", + "value": "5m" + } + ], + "query": "1s, 5s, 1m, 3m, 5m", + "type": "custom" + } + ] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "${dashboard_name}", + "uid": "dbuid_${dashboard_name}", + "version": 4, + "weekStart": "" +} +]]> + + + longtext + + + \ No newline at end of file diff --git a/bigtop-manager-server/src/main/resources/stacks/infra/1.0.0/services/grafana/configuration/grafana-datasources.xml b/bigtop-manager-server/src/main/resources/stacks/infra/1.0.0/services/grafana/configuration/grafana-datasources.xml new file mode 100644 index 00000000..1f88c3f4 --- /dev/null +++ b/bigtop-manager-server/src/main/resources/stacks/infra/1.0.0/services/grafana/configuration/grafana-datasources.xml @@ -0,0 +1,44 @@ + + + + + + content + This is the freemarker template for datasources file + + - name: prometheus + type: prometheus + access: proxy + url: ${prometheus_url} + isDefault: true + editable: true + uid: uid4prometheus + +]]> + + + longtext + + + \ No newline at end of file diff --git a/bigtop-manager-server/src/main/resources/stacks/infra/1.0.0/services/grafana/configuration/grafana.xml b/bigtop-manager-server/src/main/resources/stacks/infra/1.0.0/services/grafana/configuration/grafana.xml index d15db89e..13014cd8 100644 --- a/bigtop-manager-server/src/main/resources/stacks/infra/1.0.0/services/grafana/configuration/grafana.xml +++ b/bigtop-manager-server/src/main/resources/stacks/infra/1.0.0/services/grafana/configuration/grafana.xml @@ -19,11 +19,66 @@ --> + + port + 3000 + Port + HTTP port for Grafana to listen on. + + + log_level + info + Log level + Log level, can be: trace, debug, info, warn, error, critical. + content This is the freemarker template for grafana.ini file diff --git a/bigtop-manager-stack/bigtop-manager-stack-infra/src/main/java/org/apache/bigtop/manager/stack/infra/v1_0_0/grafana/GrafanaParams.java b/bigtop-manager-stack/bigtop-manager-stack-infra/src/main/java/org/apache/bigtop/manager/stack/infra/v1_0_0/grafana/GrafanaParams.java index 6a9f1c06..dfe03fc9 100644 --- a/bigtop-manager-stack/bigtop-manager-stack-infra/src/main/java/org/apache/bigtop/manager/stack/infra/v1_0_0/grafana/GrafanaParams.java +++ b/bigtop-manager-stack/bigtop-manager-stack-infra/src/main/java/org/apache/bigtop/manager/stack/infra/v1_0_0/grafana/GrafanaParams.java @@ -19,8 +19,11 @@ package org.apache.bigtop.manager.stack.infra.v1_0_0.grafana; import org.apache.bigtop.manager.common.message.entity.payload.CommandPayload; +import org.apache.bigtop.manager.stack.core.annotations.GlobalParams; import org.apache.bigtop.manager.stack.core.spi.param.Params; +import org.apache.bigtop.manager.stack.core.utils.LocalSettings; import org.apache.bigtop.manager.stack.infra.param.InfraParams; +import org.apache.bigtop.manager.stack.infra.v1_0_0.prometheus.PrometheusParams; import com.google.auto.service.AutoService; import lombok.Getter; @@ -28,6 +31,10 @@ import lombok.extern.slf4j.Slf4j; import java.text.MessageFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; @Getter @Slf4j @@ -35,16 +42,124 @@ @NoArgsConstructor public class GrafanaParams extends InfraParams { + private String grafanaContent; + private String grafanaDashboardContent; + private String prometheusDashboardPath; + private String bmAgentDashboardConfig; + private String grafanaPort; + private String grafanaLogLevel; + private String dataSourceContent; + private String prometheusServer; + private String prometheusPort; + + private List> dashboards; + public GrafanaParams(CommandPayload commandPayload) { super(commandPayload); + globalParamsMap.put("port", grafanaPort); + globalParamsMap.put("log_level", grafanaLogLevel); + globalParamsMap.put("provisioning_path", provisioningDir()); + if (prometheusServer != null) { + globalParamsMap.put( + "prometheus_url", MessageFormat.format("http://{0}:{1}", prometheusServer, prometheusPort)); + setDashboards(); + globalParamsMap.put("dashboards", dashboards); + } } public String dataDir() { return MessageFormat.format("{0}/data", serviceHome()); } + public String provisioningDir() { + return MessageFormat.format("{0}/provisioning", confDir()); + } + + public String dataSourceDir() { + return MessageFormat.format("{0}/datasources", provisioningDir()); + } + + public String dashboardsDir() { + return MessageFormat.format("{0}/dashboards", provisioningDir()); + } + + public String dashboardConfigDir(String type) { + return MessageFormat.format("{0}/{1}", dashboardsDir(), type); + } + + @GlobalParams + public Map configs() { + Map configuration = LocalSettings.configurations(getServiceName(), "grafana"); + grafanaContent = (String) configuration.get("content"); + grafanaPort = (String) configuration.get("port"); + grafanaLogLevel = (String) configuration.get("log_level"); + return configuration; + } + + @GlobalParams + public Map dataSources() { + Map configuration = LocalSettings.configurations(getServiceName(), "grafana-datasources"); + dataSourceContent = (String) configuration.get("content"); + return configuration; + } + + @GlobalParams + public Map prometheus() { + Map configuration = LocalSettings.configurations(getServiceName(), "grafana-datasources"); + List prometheusServers = LocalSettings.hosts().get("prometheus_server"); + if (prometheusServers == null || prometheusServers.isEmpty()) { + return configuration; + } + prometheusServer = prometheusServers.get(0); + + Map prometheus_configuration = LocalSettings.configurations("prometheus", "prometheus"); + if (prometheus_configuration == null) { + return configuration; + } + prometheusPort = (String) prometheus_configuration.get("port"); + return configuration; + } + + @GlobalParams + public Map dashboards() { + Map configuration = LocalSettings.configurations(getServiceName(), "grafana-dashboard"); + grafanaDashboardContent = (String) configuration.get("content"); + bmAgentDashboardConfig = (String) configuration.get("bm_agent_dashboard"); + prometheusDashboardPath = MessageFormat.format("{0}/prometheus", dashboardsDir()); + return configuration; + } + @Override public String getServiceName() { return "grafana"; } + + public List getClusters() { + if (getClusterHosts() == null) { + return null; + } + return new ArrayList<>(getClusterHosts().keySet()); + } + + // TODO: add host dashboard + public void setDashboards() { + dashboards = new ArrayList<>(); + + Map clusterDashboard = new HashMap<>(); + // Used for dashboard yaml configuration + clusterDashboard.put("name", "Cluster"); + clusterDashboard.put("path", dashboardConfigDir("Cluster")); + + // Used for dashboard json configuration + List clusters = getClusters(); + if (clusters != null && !clusters.isEmpty()) { + clusterDashboard.put("default_cluster_name", getClusters().get(0)); + } else { + clusterDashboard.put("default_cluster_name", ""); + } + clusterDashboard.put("cluster_label", PrometheusParams.AGENT_TARGET_LABEL); + clusterDashboard.put("dashboard_name", "Cluster"); + + dashboards.add(clusterDashboard); + } } diff --git a/bigtop-manager-stack/bigtop-manager-stack-infra/src/main/java/org/apache/bigtop/manager/stack/infra/v1_0_0/grafana/GrafanaServerScript.java b/bigtop-manager-stack/bigtop-manager-stack-infra/src/main/java/org/apache/bigtop/manager/stack/infra/v1_0_0/grafana/GrafanaServerScript.java index b575a436..c93dd959 100644 --- a/bigtop-manager-stack/bigtop-manager-stack-infra/src/main/java/org/apache/bigtop/manager/stack/infra/v1_0_0/grafana/GrafanaServerScript.java +++ b/bigtop-manager-stack/bigtop-manager-stack-infra/src/main/java/org/apache/bigtop/manager/stack/infra/v1_0_0/grafana/GrafanaServerScript.java @@ -53,7 +53,8 @@ public ShellResult start(Params params) { configure(params); GrafanaParams grafanaParams = (GrafanaParams) params; String cmd = MessageFormat.format( - "nohup {0}/bin/grafana server --homepath {0} > {0}/nohup.out 2>&1 &", grafanaParams.serviceHome()); + "nohup {0}/bin/grafana server --homepath {0} --config {1} > {0}/nohup.out 2>&1 &", + grafanaParams.serviceHome(), MessageFormat.format("{0}/grafana.ini", grafanaParams.confDir())); try { ShellResult shellResult = LinuxOSUtils.sudoExecCmd(cmd, grafanaParams.user()); if (shellResult.getExitCode() != 0) { diff --git a/bigtop-manager-stack/bigtop-manager-stack-infra/src/main/java/org/apache/bigtop/manager/stack/infra/v1_0_0/grafana/GrafanaSetup.java b/bigtop-manager-stack/bigtop-manager-stack-infra/src/main/java/org/apache/bigtop/manager/stack/infra/v1_0_0/grafana/GrafanaSetup.java index 7a61555c..6f9ab66e 100644 --- a/bigtop-manager-stack/bigtop-manager-stack-infra/src/main/java/org/apache/bigtop/manager/stack/infra/v1_0_0/grafana/GrafanaSetup.java +++ b/bigtop-manager-stack/bigtop-manager-stack-infra/src/main/java/org/apache/bigtop/manager/stack/infra/v1_0_0/grafana/GrafanaSetup.java @@ -20,6 +20,7 @@ import org.apache.bigtop.manager.common.constants.Constants; import org.apache.bigtop.manager.common.shell.ShellResult; +import org.apache.bigtop.manager.stack.core.exception.StackException; import org.apache.bigtop.manager.stack.core.spi.param.Params; import org.apache.bigtop.manager.stack.core.utils.linux.LinuxFileUtils; @@ -27,6 +28,9 @@ import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; +import java.text.MessageFormat; +import java.util.Map; + @Slf4j @NoArgsConstructor(access = AccessLevel.PRIVATE) public class GrafanaSetup { @@ -37,6 +41,50 @@ public static ShellResult config(Params params) { String group = grafanaParams.group(); LinuxFileUtils.createDirectories(grafanaParams.dataDir(), user, group, Constants.PERMISSION_755, true); + LinuxFileUtils.createDirectories(grafanaParams.dataSourceDir(), user, group, Constants.PERMISSION_755, true); + + LinuxFileUtils.toFileByTemplate( + grafanaParams.getGrafanaContent(), + MessageFormat.format("{0}/grafana.ini", grafanaParams.confDir()), + user, + group, + Constants.PERMISSION_644, + grafanaParams.getGlobalParamsMap()); + + if (grafanaParams.getPrometheusServer() != null) { + LinuxFileUtils.toFileByTemplate( + grafanaParams.getDataSourceContent(), + MessageFormat.format("{0}/prometheus.yaml", grafanaParams.dataSourceDir()), + user, + group, + Constants.PERMISSION_644, + grafanaParams.getGlobalParamsMap()); + + LinuxFileUtils.toFileByTemplate( + grafanaParams.getGrafanaDashboardContent(), + MessageFormat.format("{0}/bm-dashboards.yaml", grafanaParams.dashboardsDir()), + user, + group, + Constants.PERMISSION_644, + grafanaParams.getGlobalParamsMap()); + + for (Map dashboard : grafanaParams.getDashboards()) { + String confPath = (String) dashboard.get("path"); + if (confPath == null) { + throw new StackException("Dashboard path is not set"); + } + + LinuxFileUtils.createDirectories(confPath, user, group, Constants.PERMISSION_755, true); + + LinuxFileUtils.toFileByTemplate( + grafanaParams.getBmAgentDashboardConfig(), + MessageFormat.format("{0}/{1}.json", confPath, dashboard.get("name")), + user, + group, + Constants.PERMISSION_644, + dashboard); + } + } return ShellResult.success("Grafana Configure success!"); } diff --git a/bigtop-manager-stack/bigtop-manager-stack-infra/src/main/java/org/apache/bigtop/manager/stack/infra/v1_0_0/prometheus/PrometheusParams.java b/bigtop-manager-stack/bigtop-manager-stack-infra/src/main/java/org/apache/bigtop/manager/stack/infra/v1_0_0/prometheus/PrometheusParams.java index e8efa718..910e0eee 100644 --- a/bigtop-manager-stack/bigtop-manager-stack-infra/src/main/java/org/apache/bigtop/manager/stack/infra/v1_0_0/prometheus/PrometheusParams.java +++ b/bigtop-manager-stack/bigtop-manager-stack-infra/src/main/java/org/apache/bigtop/manager/stack/infra/v1_0_0/prometheus/PrometheusParams.java @@ -44,7 +44,7 @@ public class PrometheusParams extends InfraParams { protected final String PROMETHEUS_SELF_JOB_NAME = "prometheus"; protected final String BM_AGENT_JOB_NAME = "bm-agent"; protected final String BM_AGENT_PORT = "8081"; - protected final String AGENT_TARGET_LABEL = "cluster"; + public static final String AGENT_TARGET_LABEL = "cluster"; private Map prometheusScrapeJob; private Map agentScrapeJob;