为什么来自servlet过滤器的大多数UDP数据包都没有出现在Graphite中?

时间:2013-03-26 15:11:47

标签: java networking udp packet datagram

我在servlet过滤器中有以下内容:

@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();
}

奇怪的是,它只在某些时候工作。以下是图表的示例部分,用于处理每分钟超过1000个请求的计算机:

Graph with partial data

很多时候,有一小时(s)长的延伸,图中没有数据点。

如果相关,则Graphite服务器在EC2上运行。

0 个答案:

没有答案