Introduction and History
Goals
Issues with Current VSD
Desired features in JVSD v1.0
Future features for post 1.0 versions of JVSD
Documentation
Build and Usage Requirements
Statistics File Format
JVSD Features From VSD
Classic VSD Features
JVSD Functional Differences
Appendix
Introduction and History
The Geode framework software creates statistical archive files logging collected metrics from various subsystems such as the number of puts for a region. The primary application to read the statistics files for over the last 10 years has been the Visual Statistics Display (VSD) tool which can read the sampled statistics data and can produce time-series/value graphs. The original design and usage of VSD was to address a need by consulting and engineering to do performance analysis of the commercial GemStone/S Smalltalk server and later the GemFire product line. The VSD tool has since grown out of its initial role as a consulting tool and is now used by support, users and engineering as a critical post-mortem tool to identify performance issue such as GC and along with other kinds of failures within a distributed system.
Goals
Replace the current TCL based VSD with a new Java based version (JVSD). The initial release will focus on features of VSD used for post-mortem analysis of performance issues and will be essentially a clone of the functionality in the current classic VSD.
- Issues with Current VSD (classic VSD)
- 32 bit only binaries and difficult to setup (install issues)
- Difficulty managing large files
- Difficulty managing multiple files
- Issues running on different platforms (ex. must use Windows XP compatibility mode and additional X11 application is needed on OSX)
- Not using a modern UI design (ex. Copy/Paste on different menus)
- UI issues (ex. selecting two points for log delta, selecting two lines to diff)
- Non-native look and feel (Motif L&F on all platforms, not visually appealing)
- Requires shipping a TCL interpreter
- Possibly licensing issues in making VSD open source
- Issues with finding developer talent with TCL skills
- Desired features in JVSD v1.0
- Meet critical features of legacy VSD
- Minimize differences in initial usage and GUI from classic VSD
- Open source and community developed
- Split out library for users to independently process Statistics files for use by third party software or for monitoring applications
- Provide test cases and data to validate functionality
- Make new architecture amenable to extension and future features
- Manage timezones correctly
- Use human readable scales ( nanoseconds ->milliseconds/seconds, bytes->megabytes)
- Needs to be selectable preference
- Identify default or common statistics/metrics
- Filter stats list displayed by common/default, advanced, no flatlines
- Future features for post 1.0 versions of JVSD
- Enhance Performance
- Best practices usage guide
- Snap to sample
- Increase abilities to manage a large number of files concurrently
- Increase abilities to manage large files with potentially millions of samples
- Provide a robust template system to enhance chart reuse
- Simplify sharing of statistics and charts (email, web uploads…)
- Annotate charts with notes
- Have the possibility to merge two charts instead of having to create a third and add the metrics from the two charts
- Change timezone without having to change the environment timezone to easier sync stats with logs
- Provide an overview of the loaded gfs files with the gfs file header information and the start and end time of the stats file.
- Save charts and state of application for fast restarts
- Provide plug-ins to process statistics data for third party applications
- Provide export to alternative file formats (csv, excel…)
- Provide import for alternative file formats (csv, excel...)
- Provide intelligence/rules to identify and highlight potential issues
- Consider Javascript or similar for rules language to make it easy to extend for other users, ideally an interface that permits usage of user prefered rules engine or scripting interface (JRules, Dools...)
- Interface to live system via JMX
- Log file analysis (match log file exceptions to times in statistics for events)
- Add new chart type - timeline, showing when a process is up relative to others
- Encourage outside development and customization (community building)
- Mobile version ( iOS, Android) stretch goal to ease system management
- Web based version (possibly integrate with Pulse )
- Support for compressed stats. (gz, zip, etc.)
- Easy uploads to Pivotal support or other third parties.
- Separate out the statarchiver for use without Geode or a distributed system.
Documentation
Site Classic VSD public documentation http://www.gemstone.com/docs/tools/VSD/index.html Current VSD public documentation http://gemfire.docs.pivotal.io/latest/userguide/index.html#gemfire_tools/vsd/chapter_overview.html VSD analysis tips and tricks http://gemfirexd.docs.pivotal.io/1.0.0/userguide/manage_guide/Topics/system_performance.html Analysis advice http://blogs.vmware.com/vfabric/2012/10/using-visual-statistics-display-to-analyze-gemfire-runtime-configuration-resources-and-performance.html JavaFX (Interface) https://docs.oracle.com/javase/8/javase-clienttechnologies.htm Web based plotting tools (example/ideas from third parties) https://plot.ly/feed/https://zeppelin.incubator.apache.org/ Vernier tools and plotting (example/ideas from third parties) http://www.vernier.com/products/software/ga/ - Build and Usage Requirements
The build environment should follow common open source practices and hence use tools that support those principles. A secondary goal will be to minimize the usage of third party libraries outside of the JVM to minimize the requirements for users during installation and to reduce the knowledge requirements for new developers to begin contributing to the project.- JDK 8 - will target and support only JDK 8 given JDK 7 has been EOL’ed
- JavaFX as primary UI library - currently ships with JDK and replaces Swing (no additional libraries)
- Minimal third party libraries including not requiring either GemFire or Geode classes and where required will use the common and well known libraries
- JUnit will be used for basic testing
- Maven - build and dependency management
- The Geode Gradle should be updated to drive the maven build used by JVSD, the maven build will remain separate to allow JVSD to be forked into a possible future independent project.
- The development branch will be jvsdfx-mm (temporary during transition to Geode) and other branches will be retired or deleted. The goal will be to move this prototype forward into a production ready release.
- Current prototype is hosted at Apache Geode repository https://github.com/apache/incubator-geode.git
- Currently in branch feature/GEODE-78
- No classic VSD source code will be reused in the new JVSD, individuals with licenses for GemFire can use and compare VSD to address functional requirements for JVSD.
- Statistics File Format
- No file or format changes of the statistics will be required or expected for the 1.0 release
- Dependency on Geode and tool will need to track any statistics file format changes within it
- Will continue to use default gfs file extension for file filters to identify statistics files
- Support for gzip files needs to be reviewed and determined if this is critical
- Provide ability to export data in CSV format for third party usage
- No file or format changes of the statistics will be required or expected for the 1.0 release
- JVSD Features From VSD
Fundamentally the initial JVSD release will be a clone of the classic VSD in regards to basic functionality and features. The basic interface should remain similar for most users with a default table or data selection window which will be the primary interface to selecting which data to chart. This data selection window will continue in the new version with only minor updates in form or function to accommodate the change in interface libraries or modern GUI design style. This window will also remain a singleton interface element and home base for user to access other elements such as the charts created. The chart window is still the primary method for visualizing the statistics data. As with the table window, there are no significant changes expected in how users will interact with the chart window and will continue to only draw time-series line graphs. All GUI enhancements in this release will only to simplify usage such as selecting a line or saving a snapshot.
GUI
- Table Window (Statistics selection) - See Figure 5 prototype.
- Chart Window - See Figure 6 prototype.
- Log Info Window - a simple scrolling text window where data produced by “Log Delta” operation is displayed - No prototype yet.
- Analysis tools - There are currently no analysis tools to aid in the processing or understanding of events within statistical files. The first release will not change this basic usage or workflow of correlating events via adding one or more data sets to a time series line graph/chart. But hooks to plug in processing will need to be added for future options.
- Classic VSD Features
The following captures in text the basic functional features (menus and actions) of the classic VSD tool and provides a baseline of expected functionality for any replacement tool to meet. As JVSD is initially intended to be a clone of the classic VSD functionality, developers will use and reference the old version for comparison of a feature and to insure it works in a similar and familiar manner.
Features marked with a (*) will be targeted for inclusion in the first JVSD release.
Basic Features of Table Window: See Figure 1.- Load Data File * - open file
- Monitor - Smalltalk usage to connect to a statsmonitor process ( may return via JMX in future release)
- Append Data File * - Add new data to currently active data set based on PID, concatenate file to currently open files
- Statistic Info * - Help screen which defines statistics data types, can set specifics about stat such as default sample style/filter (per Second, no filter...) and the statistics level (common, advanced). See Figure 4.
- New Chart *
- Close All Charts *
- Close Chart *
- Print Chart
- Add to Chart / Add Line *
- Sort table data via column (PID, Statistic Type…)*
- Help *
- How To *
- Main Window *
- Chart Window *
- All Topics
- All Help text
- Choose Text Font
- About VSD *
- Chart Options in Table Window:
- Settings for default creation of new charts or adding data/lines to an existing chart.
- Show Legend *
- Time Format *
- Elapsed Time Seconds *
- Hour:Minute:Second *
- Month/Day Hour:Minute:Second *
- Default Line Style
- linear *
- step
- natural, quadratic
- Show Time Axis Title *
- Show Left Axis Title *
- Show Right Axis Title *
- Show Current Values *
- Show Axis on Left or Right (Graph on Left Axis) *
- Show Min/Max *
- Show Line Stats *
- Show Cross Hairs *
- Select Line Color (dialog)
- Choose Chart Font (dialog)
- Sample Point Symbol
- None <default> *
- Cross
- Plus
- Square
- Triangle
- Circle *
- Diamond
- Plus
- Settings for default creation of new charts or adding data/lines to an existing chart.
- Table Selection Options - Context Menu: Using right mouse button(context menu) to select a group of statistics for inclusion in a chart or search for name of statistic type in table.
- Search *
- Select Statistic *
- clear *
- by Statistic *
- by Type *
- All
- Chart Select
- File:
- Browse Open Files
- Select Single File
- Select Recent File
- General Options:
- Statistics Level - Intended to provide a filter for statistics that are useful and commonly used and the more specialized ones that may additional understanding of the product to be useful.
- Common
- Advanced
- All
- Absolute Time Stamps
- Copy Reference Lines
- Single File Mode *
- No Flatlines *
- Combine Across Files *
- Combine *
- Change Directory - changes working directory for vsd, effects saving of snapshots or writing of postscripts data used for printing (temp data)
- Update - reload data from one file
- Update All - reload data from all files
- Auto Update - periodically update one one
- Templates
- Reload Template File
- New Template Chart
- Templates Use Selection
- Statistics Level - Intended to provide a filter for statistics that are useful and commonly used and the more specialized ones that may additional understanding of the product to be useful.
- Information about a selected line or chart including display of values.
- X value (time) *
- Y value *
- Min *
- Max *
- Standard Deviation *
- Sample Style
- No Filter * - Displays the raw values for the statistic with no filtering at all.
Per Second * - Displays the difference between two consecutive samples of the statistic, divided by the number of elapsed seconds between the two samples.
- Per Sample * - Displays the difference between two consecutive samples of the statistic.
- Aggregate * - Displays a running total of per-sample deltas for the statistic. Resets to zero when the delta is zero or changes direction.
- Scaler (*,/,+,-) with value
- Legend for each statistic *
- Delete statistic via legend * - using middle mouse button
- Select legend to highlight line in chart *
- Select line to highlight by clicking on a point on the line *
- Chart Functions: Adjusts the visual presentation of the charted data
- Update Chart
- Zoom/unzoom using middle/right mouse buttons *
- Zoom In *
- Zoom Out *
- Compare Two Points - similar to Log Delta
- Compute Scale
- Compute Scale All
- Unscale
- Unscale All
- Snapshot - generate a gif file of the chart for sharing *
- Add From Template
- Save Template
- Copy Line * - Copy line from chart to clipboard
- Paste Line * - Add line from clipboard to chart
- Cut Line * - remove line from chart and store on clipboard
- Delete Line * - remove line from chart
- Trim/untrim Left * - Ignore older data to the left of trim line
- Trim/untrim Right * - Ignore later data to the right of trim line
- Normalize
- Add Lines * - Add the values of two lines and put result on current chart
- Diff Lines * - Subtract second selected line from first and put result on current chart
- Divide Lines * - Divide second selected line from first and put result on current chart
- Log Delta * - Computes mean, min, max, stddev between two points on a line. Results displayed in Log Info window. See Figure 3.
- Log Info * - results from Log delta and Compare two points operations
- Select/highlight line/data via Legend *
- JVSD Functional Differences
- Changes
- Menus will be significantly rearranged, in particular will follow the common GUI standards for “File”, “Edit”, “View” and “Help” menus capturing specific context related functionality.
- Scaling of data/charts will only have limited support in first release, this feature is not critical for many users and multiple independent vertical axis will be supported rather than only two as in classic VSD. For a few users this is a critical feature for certain kinds of performance analysis and aids in comparing two sample runs with different configurations.
- Chart display is based on sampled data with refinements when zooming
- Future option to allow non-sampled or high resolution view with associated degrading of performance when drawing chart
- Multiple vertical axis will be support with one for each data type (bytes, entries…) being the default rather than only two in VSD ( a single left and right)
- Many of the charting options should be part of a preferences dialog rather than as menu items of the table window as the defaults once set for a user are rarely changed
- Statistics Info window will dropped and its display info added to the help system
- Displaying of metadata such as stat file path and machine name that generated file when selecting a legend item needs to addressed to simplify analysis tasks
- Chart legend needs to be scrollable or limit the number of items that can on an individual chart (legend can not consume the whole chart window)
- Will not support classic VSD preferences stored in the .vsdconfig, .vsdrc and .vsdtempates under the user home directory
- Gif output of snapshots will be dropped in favor of PNG output
- Legacy features specific to older GemStone products such as GemStone/S will be dropped ( help descriptions, monitor…)
- Support library for reading statistics will be provided with examples on usage
- Changes
- Appendix
1. Figure 1 Classic VSD Table Window
2. Figure 2 Classic VSD Chart Window
3. Figure 3 Classic VSD Log Info Window
4. Figure 4 Classic VSD Statistics Info Window
5. Figure 5 JVSD Table Window
6. Figure 6 JVSD Chart Window
PDF File link JVSDFunctionalSpecification.pdf
2 Comments
Nitin Lamba
Does it make sense to export stats in a time series database, which already has good visualization/ querying tools built? Something like graphite (DB) + grafana (Web UI) may be considered.
Vince Ford
Yes. It makes a lot of sense for a secondary later goal I have to capture stats/metrics over longer periods of time and possibly could fill the web and mobile access issues that we currently have in reviewing stats today. I am not sure it will work for the case where I have 5 or 6 parameters from 20 or 30 vm's being reviewed on a single chart for correlation of events or issues that I do in VSD today. Grafana or other similar dashboard style graphing tools feel best for me in quick looks/glances for just a few parameters, so not sure it will fit my goal to keep the same workflow and usage patterns people are familiar with from the commercial GemFire product and the VSD tool. Making the Geode stats data exportable is critical to open up new options and I like the idea here of using Graphite and Grafana for creating another alternative view or downsampling the stats to track say the last 6 months of a metric (like say CPU activity) to compare historical patterns to present issues.