public void sendMetricDashboardBulkAsync(final String resource) { // skip sending dashboards if init parameter is set to false if (!corePlugin.isInitializeElasticsearch()) { logger.info("skip Elasticsearch init due to stagemonitor.elasticsearch.init=false"); return; } // only send metric dashboards if metrics are reported to elasticsearch if (corePlugin.isReportToElasticsearch()) { sendClassPathRessourceBulkAsync(resource, true); } }
/** * Saves a dashboard to Grafana * <p> * If the Grafana url or the API Key is not configured, this method does nothing. * * @param classPathLocation The location of the dashboard */ public void sendGrafanaDashboardAsync(final String classPathLocation) { if (!corePlugin.isReportToElasticsearch()) { return; } try { final ObjectNode dashboard = getGrafanaDashboard(classPathLocation); Map<String, Object> body = new HashMap<String, Object>(); body.put("dashboard", dashboard); body.put("overwrite", true); asyncGrafanaRequest("POST", "/api/dashboards/db", body); } catch (IOException e) { logger.warn(e.getMessage(), e); } }
private void reportToElasticsearch(Metric2Registry metricRegistry, int reportingInterval, final MeasurementSession measurementSession) { if (corePlugin.isReportToElasticsearch()) { logger.info("Sending metrics to Elasticsearch ({}) every {}s", corePlugin.getElasticsearchUrlsWithoutAuthenticationInformation(), reportingInterval); } if (corePlugin.isReportToElasticsearch() || corePlugin.isOnlyLogElasticsearchMetricReports()) { final ElasticsearchReporter reporter = ElasticsearchReporter.forRegistry(metricRegistry, corePlugin) .globalTags(measurementSession.asMap()) .build(); reporter.start(reportingInterval, TimeUnit.SECONDS); corePlugin.closeOnShutdown(reporter); } else { logger.info("Not sending metrics to Elasticsearch (url={}, interval={}s)", corePlugin.getElasticsearchUrlsWithoutAuthenticationInformation(), reportingInterval); } }
private static void manageMetricsIndex(ElasticsearchClient elasticsearchClient, CorePlugin corePlugin) { if (corePlugin.isReportToElasticsearch()) { elasticsearchClient.updateKibanaIndexPattern("stagemonitor-metrics-*", elasticsearchClient.getElasticsearchResourcePath() + "stagemonitor-metrics-kibana-index-pattern.json"); final String mappingJson = ElasticsearchClient.modifyIndexTemplate( corePlugin.getMetricsIndexTemplate(), corePlugin.getMoveToColdNodesAfterDays(), corePlugin.getNumberOfReplicas(), corePlugin.getNumberOfShards()); elasticsearchClient.sendMappingTemplate(mappingJson, "stagemonitor-metrics"); elasticsearchClient.createEmptyIndex(ElasticsearchReporter.getTodaysIndexName()); } }
@Override public void initializePlugin(InitArguments initArguments) { this.metricRegistry = initArguments.getMetricRegistry(); this.healthCheckRegistry = initArguments.getHealthCheckRegistry(); final Integer reloadInterval = getReloadConfigurationInterval(); if (reloadInterval > 0) { initArguments.getConfiguration().scheduleReloadAtRate(reloadInterval, TimeUnit.SECONDS); } initArguments.getMetricRegistry().register(MetricName.name("online").build(), new Gauge<Integer>() { @Override public Integer getValue() { return 1; } }); // it's important to initialize the ElasticsearchClient via getElasticsearchClient() // otherwise the periodic availability check might not get started getElasticsearchClient(); if (isReportToElasticsearch()) { final GrafanaClient grafanaClient = getGrafanaClient(); grafanaClient.createElasticsearchDatasource(getElasticsearchUrl()); grafanaClient.sendGrafanaDashboardAsync("grafana/ElasticsearchCustomMetricsDashboard.json"); } registerReporters(initArguments.getMetricRegistry(), initArguments.getConfiguration(), initArguments.getMeasurementSession()); }
@Override public void initializePlugin(StagemonitorPlugin.InitArguments initArguments) { registerPooledResources(initArguments.getMetricRegistry(), tomcatThreadPools()); final CorePlugin corePlugin = initArguments.getPlugin(CorePlugin.class); ElasticsearchClient elasticsearchClient = corePlugin.getElasticsearchClient(); if (corePlugin.isReportToGraphite()) { elasticsearchClient.sendGrafana1DashboardAsync("grafana/Grafana1GraphiteServer.json"); elasticsearchClient.sendGrafana1DashboardAsync("grafana/Grafana1GraphiteKPIsOverTime.json"); } if (corePlugin.isReportToElasticsearch()) { final GrafanaClient grafanaClient = corePlugin.getGrafanaClient(); elasticsearchClient.sendClassPathRessourceBulkAsync("kibana/ApplicationServer.bulk"); grafanaClient.sendGrafanaDashboardAsync("grafana/ElasticsearchApplicationServer.json"); } }
@Override public void initializePlugin(StagemonitorPlugin.InitArguments initArguments) { final CorePlugin corePlugin = initArguments.getPlugin(CorePlugin.class); final ElasticsearchClient elasticsearchClient = corePlugin.getElasticsearchClient(); final GrafanaClient grafanaClient = corePlugin.getGrafanaClient(); final String requestsMappingJson = ElasticsearchClient.modifyIndexTemplate( requestIndexTemplate.getValue(), corePlugin.getMoveToColdNodesAfterDays(), corePlugin.getNumberOfReplicas(), corePlugin.getNumberOfShards()); elasticsearchClient.sendMappingTemplateAsync(requestsMappingJson, "stagemonitor-requests"); final String mappingJson = ElasticsearchClient.modifyIndexTemplate( externalRequestsIndexTemplate.getValue(), corePlugin.getMoveToColdNodesAfterDays(), corePlugin.getNumberOfReplicas(), corePlugin.getNumberOfShards()); elasticsearchClient.sendMappingTemplateAsync(mappingJson, "stagemonitor-external-requests"); if (corePlugin.isReportToGraphite()) { elasticsearchClient.sendGrafana1DashboardAsync("grafana/Grafana1GraphiteRequestDashboard.json"); } if (corePlugin.isReportToElasticsearch()) { elasticsearchClient.sendClassPathRessourceBulkAsync("kibana/RequestDashboard.bulk"); grafanaClient.sendGrafanaDashboardAsync("grafana/ElasticsearchRequestDashboard.json"); grafanaClient.sendGrafanaDashboardAsync("grafana/ElasticsearchExternalRequestsDashboard.json"); } if (!corePlugin.getElasticsearchUrls().isEmpty()) { elasticsearchClient.sendClassPathRessourceBulkAsync("kibana/StagemonitorRequestsIndexPattern.bulk"); elasticsearchClient.sendClassPathRessourceBulkAsync("kibana/RequestAnalysis.bulk"); elasticsearchClient.sendClassPathRessourceBulkAsync("kibana/WebAnalytics.bulk"); elasticsearchClient.sendClassPathRessourceBulkAsync("kibana/ExternalRequests.bulk"); elasticsearchClient.scheduleIndexManagement("stagemonitor-requests-", corePlugin.getMoveToColdNodesAfterDays(), deleteRequestTracesAfterDays.getValue()); elasticsearchClient.scheduleIndexManagement("stagemonitor-external-requests-", corePlugin.getMoveToColdNodesAfterDays(), deleteRequestTracesAfterDays.getValue()); } }