http://metrics.dropwizard.io/ - Developed by Yammer to instrument their JVM-based backend services, it’s a really comprehensive Java metrics library and works well with Hosted Graphite.
Java’s default JVM behaviour includes an optimisation/attempt to prevent DNS cache poisoning whereby it will read DNS entries for a service and then cache them forever. This is something that will result in problems with Hosted Graphite.
To service our hundreds of customers we run a lot of different machines and we swap machines in and out all the time. This means that if you have cached the DNS entry for a machine that no longer exists, you’re going to drop a lot of data.
To prevent this, you can set the JVM cache behaviour to only cache entries for 60 seconds:
importjava.util.Base64;importjavax.net.ssl.HttpsURLConnection;importjava.io.*;importjava.net.URL;// Assumes the reader will try/catch the appropriate exceptions, and clean up// The connection when they're done with it!String data ="foo.java-http 1.2";URL url =newURL("https://www.hostedgraphite.com/api/v1/sink");HttpsURLConnection connection = (HttpsURLConnection)url.openConnection();String key ="YOUR_API_KEY";String authHeader =Base64.getEncoder().encodeToString(key.getBytes());connection.setRequestProperty("Authorization","Basic "+ authHeader);connection.setRequestMethod("POST");connection.setRequestProperty("Content-Length",String.valueOf(data.getBytes().length));connection.setUseCaches (false);connection.setDoInput(true);connection.setDoOutput(true);OutputStream wr =connection.getOutputStream();wr.write(data.getBytes("UTF-8"));wr.flush();wr.close();