Designing an unobtrusive analytics framework for monitoring java applications sampo suonsyrjä

Post on 21-Jan-2017

207 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

Transcript

Designing an Unobtrusive Analytics Framework

for Monitoring Java Applications Sampo Suonsyrjä and Tommi Mikkonen

Dept. of Pervasive Computing Tampere University of Technology

Contents •  Context

–  Paradigm change in software development

–  Web apps vs. installable programs

•  Motivation –  Why the

unobtrusiveness?

•  Case –  Vaadin framework as the

platform of a target program –  The designed analytics

framework

•  Discussion •  Conclusions

17.10.15 2

Paradigm Change in Software Development

•  Waterfall method and such –  User involvement only before

development –  Requirements defined before

any use –  Systems remained the same

throughout their life –  Changes in user

requirements? No more use! Throw the cd away

•  Agile methods –  Requirements defined as late

as possible –  Users involved iteratively –  More knowledge of what is

possible and needed –  Developing less, but with a

greater accuracy –  Changes in user requirements?

Order an extension to the sw. dev. project

17.10.15 3

Paradigm Change and the First Frontier

•  Feedback with agile methods –  User surveys, thinking aloud,

observations –  Manually collected

qualitative data –  Stops when development

stops •  Continuous Delivery &

Deployment systems –  New versions are delivered

faster than ever

–  Developing experiments, not just reacting to requirements

–  Usage Data = results from these experiments

–  Automatic collecting needed •  Web as a platform for analytics

–  Channel is clear –  Tools are available –  A/B testing is easier than ever –  Continuous experimentation

17.10.15 4

Why the Unobtrusiveness?

•  Collecting usage data leads to changes in the target program •  Target program is continuously under change •  Target program can be built by others •  Data should remain

–  Collectable –  Comparable between different versions

•  If data collecting is independent of the target.. •  ..then data collecting mechanism could be reused

17.10.15 5

Vaadin Framework •  Open source framework

for developing Rich Internet Applications

•  Applications are written in Java..

•  ..and then transformed into AJAX applications

17.10.15 6

Target Program •  Demo app of the Vaadin

Framework •  QuickTickets Dashboard

Demo •  Source code available •  Built by someone else

than the researchers

17.10.15 7

Target Program public DashboardView() {

HorizontalLayout top = new HorizontalLayout();

addComponent(top);Button notify = new Button('2'); Notify.addClickListener(

new ClickListener(){...

});top.addComponent(notify);

};

17.10.15 8

The Designed Framework for Unobtrusive Analytics

•  AspectJ for usage monitoring

•  Fluentd for collecting •  ElasticSearch for storing •  Kibana for visualizing

17.10.15 9

AspectJ public aspect AddComponentListener {pointcut addComponentCall(Button b):

call(* *.addComponent(*))&& args(b);

after(final Button b):addComponentCall(b) {

b.addClickListener(new Button.ClickListener()

{ public void click(ClickEvent e) {

dataCollector.logEvent(b, e);}});

}}

public DashboardView() {HorizontalLayout top = new HorizontalLayout();addComponent(top);Button notify = new Button('2'); Notify.addClickListener(new ClickListener(){

...

});top.addComponent(notify);

};

17.10.15 10

AspectJ

•  Aspect-oriented programming is unobtrusive by nature

•  No alteration of the original source code •  Tooling is affected however

–  AspectJ dependency inserted –  Aspect class file inserted –  Normal compiling + aspect weaving

17.10.15 11

Fluentd

•  Implemented similarly as aspects –  Fluentd dependency added –  A logging class added

•  Parses data into JSON •  Sends data for storing •  In this case, Fluentd was

installed and run on the same machine as the target program

17.10.15 12

Fluentd

public class DataLogger {private static FluentLogger LOG = FluentLogger.getLogger("button.click");

public void logButtonClick(Button b, ClickEvent event){ Map<String, Object> data = new HashMap<String, Object>();

data.put("Button Caption", b.getCaption());data.put("Button ID", b.getId());...

LOG.log("click", data);}}

17.10.15 13

ElasticSearch and Kibana •  ElasticSearch is document

oriented •  Data was already in JSON

àName fields automatically •  Real-time access with Kibana •  Different visualizations readily

available

17.10.15 14

Discussion

•  RQ1: To what extent can a data collecting feature be implemented without compromising the evolution of the target program?

•  Usage monitoring inserted without changing the source code •  Aspect and logging class files and dependencies inserted •  Target application’s evolution was not compromised

–  No additional effort needed if new version has different buttons –  However, if the new version introduces new ways of implementing

buttons aspects need changing as well

17.10.15 15

Discussion

•  RQ2: What types of data can be collected with the given approach?

•  Aspect-oriented monitoring is flexible –  Pointcuts could be made on a vast variety of different points –  Advices can include almost arbitrary code –  Access to the target program in source code level

•  Vaadin Framework provided an abundant platform for collecting data •  Usage data collected in this case •  Perhaps end-user feedback in the future?

17.10.15 16

Discussion

•  RQ3: How to connect the data collecting feature with an analysis framework?

•  Aspect-code can be put to produce data in various formats àUnified logging layer (Fluentd: JSON) àPossibility to use standardized storing and visualization tools àUseful when combining different kinds of data (access, error, application logs etc.)

17.10.15 17

Conclusions •  New means of getting feedback

from end-users are needed à Analytics with usage data

•  New versions continuously à Need for unobtrusiveness à Aspect-oriented collecting

Thank you!

17.10.15 18

top related