Почему большинство пакетов UDP из фильтра сервлетов не отображаются в графите?
У меня есть следующее в фильтре сервлетов:
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
long startTimeNano = System.nanoTime();
chain.doFilter(request, response);
long endTimeNano = System.nanoTime();
long differenceNano = endTimeNano - startTimeNano;
long differenceMilliseconds = differenceNano / 1000000;
try {
reportResponseTimeToGraphite(differenceMilliseconds);
} catch(Exception e) {
Logger.log(getClass(), "Response time measure failed.");
}
}
reportResponseTimeToGraphite
просто отправляет пакет UDP на сервер Graphite:
private void reportResponseTimeToGraphite(long differenceMilliseconds) throws IOException {
int currentUnixTimeSeconds = (int) (System.currentTimeMillis() / 1000L);
String message = GRAPHITE_LABEL + " " + String.valueOf(differenceMilliseconds) + " " + String.valueOf(currentUnixTimeSeconds);
DatagramSocket clientSocket = new DatagramSocket();
InetAddress recipientIP = InetAddress.getByName(GRAPHITE_SERVER);
byte[] sendData = message.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, recipientIP, GRAPHITE_PORT);
clientSocket.send(sendPacket);
clientSocket.close();
}
Странно, но иногда это работает. Вот пример раздела Graph для машины, которая обрабатывает более 1000 запросов в минуту:
В большинстве случаев существуют отрезки продолжительностью в час (с) без точек данных, показанных на графике.
Если это актуально, сервер Graphite работает на EC2.