我们正在尝试减少 AppStats 在高流量网站上的开销。适用于 Python 的 AppStats 有一个配置设置appstats_RECORD_FRACTION
,用于限制记录的请求数量。这允许您只记录所有请求的一小部分的统计信息,例如 1%。
我在文档中找不到 AppStats for Java 的类似配置设置的任何参考。有谁知道如何配置这个?
我们正在尝试减少 AppStats 在高流量网站上的开销。适用于 Python 的 AppStats 有一个配置设置appstats_RECORD_FRACTION
,用于限制记录的请求数量。这允许您只记录所有请求的一小部分的统计信息,例如 1%。
我在文档中找不到 AppStats for Java 的类似配置设置的任何参考。有谁知道如何配置这个?
似乎多年后在 Java 的 appstats 中仍然不支持“记录分数”。我找到的解决方法是实现自定义过滤器:
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);
}
}
}
然后在 web.xml 中使用此过滤器而不是 AppstatsFilter 之一:
<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>