Lol*_*olo 7 java spring metrics annotations yammer
这是一个后续使用Yammer的定时注解描述了我的奋斗这里.
我的春天上下文文件很简单:
<metrics:annotation-driven />
Run Code Online (Sandbox Code Playgroud)
我有以下课程:
import com.yammer.metrics.annotation.ExceptionMetered;
import com.yammer.metrics.annotation.Metered;
import com.yammer.metrics.annotation.Timed;
...
@Component
public class GetSessionServlet extends HttpServlet {
private final static Logger log = LoggerFactory.getLogger(GetSessionServlet.class);
@Override
public void init(final ServletConfig config) throws ServletException {
super.init(config);
SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(
this, config.getServletContext());
}
@Override
@Timed(name = "get-session", rateUnit = TimeUnit.MILLISECONDS)
@Metered
@ExceptionMetered(name = "get-session-failures", rateUnit = TimeUnit.MILLISECONDS)
public void doGet(final HttpServletRequest req,
final HttpServletResponse resp) throws ServletException, IOException {
final String sessionId = req.getParameter("sessionId");
final String fields = req.getParameter("fields");
final String format = req.getParameter("format");
if (StringUtils.isEmpty(sessionId)) {
resp.getWriter().write("sessionId parameter missing!\n");
return;
}
...
}
Run Code Online (Sandbox Code Playgroud)
我在本地运行我的应用程序mvn clean tomcat7:run,然后连接jconsole.
在MBeans选项卡中,我可以看到一个包含我的GetSessionServlet类的包名称的条目,其中包含三个子文件夹doGet(对于@Metered数字),get-session和get-session-failures.
但是,无论我调用多少次servlet,上面子文件夹中的所有值都保持为零.我错过了什么?此外,我们将非常感谢有关这些计量指标的任何文档,这些指标比官方文档更详细.
小智 5
我想我有这个工作.
我注意到的第一件事是示例spring上下文文件的schemaLocation属性中的URI:http: //www.yammer.com/schema/metrics/metrics.xsd 返回404错误.
我搜索了这个问题,看看是否有人抱怨架构无法访问并找到了这个帖子,github.com/codahale/metrics/issues/322,其中用户注意到metrics-spring模块已从核心度量库中删除并转移到:github.com/ryantenney/metrics-spring.
按照该网站上的示例,我从我的pom中删除了旧的metrics-spring依赖项,并添加了以下内容:
<dependency>
<groupId>com.ryantenney.metrics</groupId>
<artifactId>metrics-spring</artifactId>
<version>2.1.4</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
然后我在spring-context.xml文件中更新了xmlns声明:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:metrics="http://www.ryantenney.com/schema/metrics"
xsi:schemaLocation="
http://www.ryantenney.com/schema/metrics
http://www.ryantenney.com/schema/metrics/metrics.xsd
...other schemas...">
Run Code Online (Sandbox Code Playgroud)
添加了注释驱动元素:
<metrics:annotation-driven proxy-target-class="true" />
Run Code Online (Sandbox Code Playgroud)
我启用了proxy-target-class来使基于类的自动装配工作.
在bean中,我希望时间添加@Timed注释和@PostConstruct方法,以使ConsoleReporter每10秒转储一次统计信息:
@PostConstruct
public void init() {
ConsoleReporter.enable(10, TimeUnit.SECONDS);
}
@Timed
public void doService(...) {
.... do stuff ....
}
Run Code Online (Sandbox Code Playgroud)
然后我启动了我的webapp ....并从解析spring context.xml文件的sax解析器中得到了一个令人讨厌的错误.
似乎www.ryantenney.com/schema/metrics/metrics.xsd 404s也是如此!
解决方法很简单,但是,我从github存储库下载了xsd:https: //github.com/ryantenney/metrics-spring/blob/master/src/main/resources/com/ryantenney/metrics/spring/配置/度量-3.0.xsd
然后在我的maven项目的src/main/resources/META-INF目录中添加了以下文件:
META-INF/
- spring.schemas
- xsd/
- metrics.xsd
Run Code Online (Sandbox Code Playgroud)
metrics.xsd是从github下载的xsd文件,spring.schemas是一个文本文件,包含:
http\://www.ryantenney.com/schema/metrics/metrics.xsd=META-INF/xsd/metrics.xsd
Run Code Online (Sandbox Code Playgroud)
Spring.schemas文件在启动时由spring读取,并告诉它从本地文件下拉xsd.
有了上述原因,我能够成功启动我的应用程序并点击使用该服务方法的端点.
看着控制台我确实看到以下每10秒抛弃一次:
com.sample.service.MyServiceClass:
doService:
count = 8
mean rate = 0.27 calls/s
1-minute rate = 0.23 calls/s
5-minute rate = 0.21 calls/s
15-minute rate = 0.20 calls/s
min = 0.13ms
max = 19.59ms
mean = 2.59ms
stddev = 6.87ms
median = 0.18ms
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5780 次 |
| 最近记录: |