private String createJsonMessage(Server server, Query query, Result result, List<String> valuePath, Object value) throws IOException { String keyString = getKeyString(server, query, result, typeNames, this.rootPrefix); String cleanKeyString = keyString.replaceAll("[()]", "_"); try ( ByteArrayOutputStream out = new ByteArrayOutputStream(); JsonGenerator generator = jsonFactory.createGenerator(out, UTF8) ) { generator.writeStartObject(); generator.writeStringField("keyspace", cleanKeyString); generator.writeStringField("value", value.toString()); generator.writeNumberField("timestamp", result.getEpoch() / 1000); generator.writeObjectFieldStart("tags"); for (Map.Entry<String, String> tag : this.tags.entrySet()) { generator.writeStringField(tag.getKey(), tag.getValue()); } for (ResultAttribute resultAttribute : this.resultAttributesToWriteAsTags) { generator.writeStringField(resultAttribute.getName(), resultAttribute.get(result)); } generator.writeEndObject(); generator.writeEndObject(); generator.close(); return out.toString("UTF-8"); } } }
@Override public void write( @Nonnull Writer writer, @Nonnull Server server, @Nonnull Query query, @Nonnull Iterable<Result> results) throws IOException { for (Result result : results) { log.debug("Query result: {}", result); Object value = result.getValue(); if (isValidNumber(value)) { String line = KeyUtils.getKeyString(server, query, result, typeNames, rootPrefix) .replaceAll("[()]", "_") + " " + value.toString() + " " + SECONDS.convert(result.getEpoch(), MILLISECONDS) + "\n"; log.debug("Graphite Message: {}", line); writer.write(line); } else { onlyOnceLogger.infoOnce("Unable to submit non-numeric value to Graphite: [{}] from result [{}]", value, result); } } } }
private void serialize(Server server, Query query, List<Result> results, OutputStream outputStream) throws IOException { JsonGenerator g = jsonFactory.createGenerator(outputStream, JsonEncoding.UTF8); g.useDefaultPrettyPrinter(); g.writeStartObject(); g.writeStringField("name", "jmxtrans"); g.writeStringField("type", "metric"); g.writeStringField("handler", handler); StringBuilder jsonoutput = new StringBuilder(); List<String> typeNames = getTypeNames(); for (Result result : results) { if (isNumeric(result.getValue())) { Object value = result.getValue(); jsonoutput.append(KeyUtils.getKeyString(server, query, result, typeNames, null)).append(" ") .append(value).append(" ") .append(TimeUnit.SECONDS.convert(result.getEpoch(), TimeUnit.MILLISECONDS)) .append(System.getProperty("line.separator")); } } g.writeStringField("output", jsonoutput.toString()); g.writeEndObject(); g.flush(); g.close(); }
g.writeStringField("source", source); g.writeNumberField("measure_time", SECONDS.convert(result.getEpoch(), MILLISECONDS)); Object value = result.getValue(); if (value instanceof Integer) {
g.writeStringField("key", key); g.writeStringField("value", value.toString()); g.writeNumberField("clock", result.getEpoch() / 1000); g.writeEndObject();
g.writeStringField("source", source); g.writeNumberField("measure_time", TimeUnit.SECONDS.convert(result.getEpoch(), TimeUnit.MILLISECONDS)); Object value = result.getValue(); if (value instanceof Integer) {
@Override public void internalWrite(Server server, Query query, ImmutableList<Result> results) throws Exception { Socket socket = null; PrintWriter writer = null; try { socket = pool.borrowObject(address); writer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream(), UTF_8), true); List<String> typeNames = this.getTypeNames(); for (Result result : results) { log.debug("Query result: {}", result); Object value = result.getValue(); if (isValidNumber(value)) { String line = KeyUtils.getKeyString(server, query, result, typeNames, rootPrefix) .replaceAll("[()]", "_") + " " + value.toString() + " " + result.getEpoch() / 1000 + "\n"; log.debug("Graphite Message: {}", line); writer.write(line); } else { onlyOnceLogger.infoOnce("Unable to submit non-numeric value to Graphite: [{}] from result [{}]", value, result); } } } finally { if (writer != null && writer.checkError()) { log.error("Error writing to Graphite, clearing Graphite socket pool"); pool.invalidateObject(address, socket); } else { pool.returnObject(address, socket); } } }
sb.append(result.getEpoch()); sb.append("] PROCESS_SERVICE_CHECK_RESULT;"); sb.append(nagiosHost);
/** * Process a single metric from the given JMX query result with the specified value. */ protected void processOneMetric(List<String> resultStrings, Server server, Result result, Object value, String addTagName, String addTagValue) { String metricName = this.metricNameStrategy.formatName(result); // // Skip any non-numeric values since OpenTSDB only supports numeric metrics. // if (isNumeric(value)) { StringBuilder resultString = new StringBuilder(); formatResultString(resultString, metricName, result.getEpoch() / 1000L, value); addTags(resultString, server); if (addTagName != null) { addTag(resultString, addTagName, addTagValue); } if (!typeNames.isEmpty()) { this.addTypeNamesTags(resultString, result); } resultStrings.add(resultString.toString()); } else { log.debug("Skipping non-numeric value for metric {}; value={}", metricName, value); } }
g.writeStringField("instance", instanceId); g.writeNumberField("collected_at", metric.getEpoch() / 1000); g.writeEndObject();
@Override protected void internalWrite(Server server, Query query, ImmutableList<Result> results) throws Exception { for (Result result : results) { log.debug("Query result: [{}]", result); if (isNumeric(result.getValue())) { Map<String, Object> map = new HashMap<>(); map.put("serverAlias", server.getAlias()); map.put("server", server.getHost()); map.put("port", server.getPort()); map.put("objDomain", result.getObjDomain()); map.put("className", result.getClassName()); map.put("typeName", result.getTypeName()); map.put("attributeName", result.getAttributeName()); map.put("valuePath", Joiner.on('/').join(result.getValuePath())); map.put("keyAlias", result.getKeyAlias()); map.put("value", Double.parseDouble(result.getValue().toString())); map.put("timestamp", result.getEpoch()); log.debug("Insert into Elastic: Index: [{}] Type: [{}] Map: [{}]", indexName, ELASTIC_TYPE_NAME, map); Index index = new Index.Builder(map).index(indexName).type(ELASTIC_TYPE_NAME).build(); JestResult addToIndex = jestClient.execute(index); if (!addToIndex.isSucceeded()) { throw new ElasticWriterException(String.format("Unable to write entry to elastic: %s", addToIndex.getErrorMessage())); } } else { log.warn("Unable to submit non-numeric value to Elastic: [{}] from result [{}]", result.getValue(), result); } } }
private void logValue(Server server, Query query, List<String> typeNames, Result result) throws IOException { Object value = result.getValue(); String resultAsString = resultSerializer.serialize(server, query, result); if (resultAsString == null) { return; } Closer closer = Closer.create(); try { closer.register(MDC.putCloseable("server", computeAlias(server))); closer.register(MDC.putCloseable("metric", KeyUtils.getKeyString(server, query, result, typeNames, null))); closer.register(MDC.putCloseable("value", value.toString())); if (result.getKeyAlias() != null) { closer.register(MDC.putCloseable("resultAlias", result.getKeyAlias())); } closer.register(MDC.putCloseable("attributeName", result.getAttributeName())); closer.register(MDC.putCloseable("key", KeyUtils.getValueKey(result))); closer.register(MDC.putCloseable("epoch", valueOf(result.getEpoch()))); logger.info(resultAsString); } catch (Throwable t) { throw closer.rethrow(t); } finally { closer.close(); } }
@Nullable @Override public Result apply(@Nullable Result input) { if (input == null) { return null; } return new Result( input.getEpoch(), input.getAttributeName(), input.getClassName(), input.getObjDomain(), input.getKeyAlias(), input.getTypeName(), input.getValuePath(), valueTransformer.apply(input.getValue()) ); }
filteredValues.put(JMX_PORT_KEY, Integer.parseInt(server.getPort())); Point point = Point.measurement(result.getKeyAlias()).time(result.getEpoch(), MILLISECONDS) .tag(resultTagsToApply).fields(filteredValues).build();
private KResult(Server server, Result result) { alias = server.getAlias(); pid = server.getPid(); host = server.getHost(); port = server.getPort(); source = server.getSource(); attributeName = result.getAttributeName(); className = result.getClassName(); objDomain = result.getObjDomain(); typeName = result.getTypeName(); typeNameMap = result.getTypeNameMap(); epoch = result.getEpoch(); keyAlias = result.getKeyAlias(); this.valuePath = result.getValuePath(); this.value = result.getValue(); } }
@Override public void write( @Nonnull Writer writer, @Nonnull Server server, @Nonnull Query query, @Nonnull Iterable<Result> results) throws IOException { for (Result result : results) { log.debug("Query result: {}", result); Object value = result.getValue(); if (isValidNumber(value)) { String line = KeyUtils.getKeyString(server, query, result, typeNames, rootPrefix) .replaceAll("[()]", "_") + " " + value.toString() + " " + SECONDS.convert(result.getEpoch(), MILLISECONDS) + "\n"; log.debug("Graphite Message: {}", line); writer.write(line); } else { onlyOnceLogger.infoOnce("Unable to submit non-numeric value to Graphite: [{}] from result [{}]", value, result); } } } }
/** * The meat of the output. Very similar to GraphiteWriter. */ @Override public void internalWrite(Server server, Query query, ImmutableList<Result> results) throws Exception { List<String> typeNames = getTypeNames(); for (Result result : results) { if (isNumeric(result.getValue())) { logger.info(KeyUtils.getKeyString(server, query, result, typeNames, null) + delimiter + result.getValue().toString() + delimiter + result.getEpoch()); } } }
/** * The meat of the output. Very similar to GraphiteWriter. */ @Override public void internalWrite(Server server, Query query, ImmutableList<Result> results) throws Exception { List<String> typeNames = getTypeNames(); for (Result result : results) { if (isNumeric(result.getValue())) { logger.info(KeyUtils.getKeyString(server, query, result, typeNames, null) + delimiter + result.getValue().toString() + delimiter + result.getEpoch()); } } }
@Nullable @Override public Result apply(@Nullable Result input) { if (input == null) { return null; } return new Result( input.getEpoch(), input.getAttributeName(), input.getClassName(), input.getObjDomain(), input.getKeyAlias(), input.getTypeName(), input.getValuePath(), valueTransformer.apply(input.getValue()) ); }
private KResult(Server server, Result result) { alias = server.getAlias(); pid = server.getPid(); host = server.getHost(); port = server.getPort(); source = server.getSource(); attributeName = result.getAttributeName(); className = result.getClassName(); objDomain = result.getObjDomain(); typeName = result.getTypeName(); typeNameMap = result.getTypeNameMap(); epoch = result.getEpoch(); keyAlias = result.getKeyAlias(); this.valuePath = result.getValuePath(); this.value = result.getValue(); } }