문제

We're trying to reduce the overhead of AppStats on a high traffic website. AppStats for Python has a configuration setting appstats_RECORD_FRACTION which limits the number of requests that are recorded. This allow you to record the stats for only a small percentage of all request, e.g. 1%.

I cannot find any reference in the documentation for a similar configuration setting for AppStats for Java. Does anyone know how to configure this?

도움이 되었습니까?

해결책

It seems that after years there still isn't support for "Record Fraction" in appstats for Java. The workaround I found for it was implementing a custom filter:

package com.example.server.servlet;

import com.google.appengine.tools.appstats.AppstatsFilter;

import java.io.IOException;
import java.util.Random;

import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class AppstatsImprovedFilter extends AppstatsFilter {

    private double recordFraction;
    private Random random;

    @Override
    public synchronized void init(FilterConfig config) {
        super.init(config);
        String recordFractionConfig = config.getInitParameter("recordFraction");
        recordFraction = recordFractionConfig == null ? 1.0 : Double.parseDouble(recordFractionConfig);
        random = new Random();
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain filters)
            throws IOException, ServletException {
        if (recordFraction < 1.0 && random.nextDouble() > recordFraction) {
            filters.doFilter(request, response);
        } else {
            super.doFilter(request, response, filters);
        }
    }
}

Then you use this filter instead of AppstatsFilter one in web.xml:

<filter>
    <filter-name>appstats</filter-name>
    <filter-class>com.example.server.servlet.AppstatsImprovedFilter</filter-class>
    <init-param>
        <param-name>calculateRpcCosts</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>recordFraction</param-name>
        <param-value>0.05</param-value>
    </init-param>
</filter>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top