You are here

GLIMPSE

Description

GLIMPSE is an active end host-based network measurement tool. It is written in C++ with Qt and is cross-platform by design. The main focus of GLIMPSE is troubleshooting.

GLIMPSE Architecture

The key features are

  • Plugin system for measurements
  • On-demand troubleshooting if the user experiences problems or bad performance
  • Scheduled measurements and measurement campaigns
  • User-defined measurements
  • Measurements against server hosts as well as other end-users

Usage scenarios

There are two different usage scenarios for the GLIMPSE probe at the moment:

  1. Server systems where the GLIMPSE probe runs continuously as a service in the background (console version). These deployments provide fixed measurement points to execute measurements from but also to provide measurement end points for other probes (e.g. BTC measurements).
  2. End user systems at home and on mobile devices (GUI version). We expect these devices to execute measurements for troubleshooting. The user can trigger the execution of measurements once he/she realizes something is wrong with his/her network connection. The GLIMPSE backend and/or the probe have to perform reasoning tasks to locate the problem.

Metrics and Capabilities

Metrics

The measurement tools included in GLIMPSE are:

  • Ping: Measures the round-trip-time from the probe to a given destination (by IPv4, IPv6, or hostname). There are multiple parameters available for this measurement to modify the ping (like ports, interval-time, or timeout). The ping-type parameter determines which protocol is used for the measurement: "UDP", "TCP", or "System Ping (ICMP)". The later uses the systems ping-tool and parses the output (screen scraping).
  • Traceroute: Measures the path from the probe to a given destination (by IPv4, IPv6, or hostname) and returns also the round-trip-time to each hop on the path. This measurement uses the previously described ping measurement to retrieve this information. Note that TCP pings are not available for this measurement on Linux due to operating system limitations. There are multiple parameters available for this measurement similar to the ping options.
  • HTTP download speed: Measures the speed of a file download from an HTTP-server. It is possible to execute this measurement in multiple parallel threads and get results for each thread separately.
  • Bulk transfer capacity (BTC): Measures the bulk transfer capacity from this probe to another probe using either TCP or UDP. The used port and initial data size can be set through options. This measurement needs another GLIMPSE-probe running at the destination.
  • DNS lookup: This measurement returns all available DNS records for a given hostname. The used DNS server can be set by a parameter.
  • Reverse DNS lookup: Determines the hostname for a given IP by doing a reverse DNS lookup.
  • Trains of packet pairs: Determines the sending and receiving speed for the probe by using trains of packet pairs. This measurement is considered experimental.
  • UPnP discovery: This measurement returns all devices found by a UPnP discovery using the MiniUPnP library. The result format is a dump of the raw data returned by this library.

Capabilities

The JSON capabilities for GLIMPSE can be found on the following pages. Note that no temporal
scope is given in this listing, the following are supported:

  • singleton measurements: 'now', '2015-07-02 12:00:00'
  • finite repeated measurements with an (implicit) inner scope of now: 'repeat now + 60s / 10s', 'repeat 2015-07-02 12:00:00 ... 2015-07-02 12:10:00 / 1m'

The GLIMPSE-registry defines the parameter and result columns needed which are not specified by the mPlane-core-registry and can be found at http://www.measure-it.eu/static/glimpse_registry.json. Details for the parameters can be obtained from there and from the mPlane core registry.

{
    "capability": "measure",
    "label": "glimpse-ping",
    "parameters": {
        "destination.port": "*",
        "destination.url": "*",
        "glimpse.ping.interval.ms": "*",
        "glimpse.ping.payload": "*",
        "glimpse.ping.timeout.ms": "*",
        "glimpse.ping.type": "*",
        "packets.ip": "*",
        "source.port": "*",
        "ttl": "*"
    },
    "registry": "https://www.measure-it.net/static/glimpse_registry.json",
    "results": [
        "rtt.ms.min",
        "rtt.ms.max",
        "rtt.ms.avg",
        "rtt.ms.stdev",
        "packets.ip.sent",
        "packets.ip.received"
    ],
    "version": 0,
},
{
    "capability": "measure",
    "label": "glimpse-httpdownload",
    "parameters": {
        "destination.url": "*",
        "glimpse.http.thread.count": "*"
    },
    "registry": "https://www.measure-it.net/static/glimpse_registry.json",
    "results": [
        "glimpse.http.bandwidth.imputed.bps.avg",
        "glimpse.http.thread.count",
        "untainted"
    ],
    "version": 0,
},
{
    "capability": "measure",
    "label": "glimpse-dnslookup",
    "parameters": {
        "destination.url": "*"
    },
    "registry": "https://www.measure-it.net/static/glimpse_registry.json",
    "results": [
        "glimpse.dns.record-name",
        "ttl",
        "glimpse.dns.record-value",
        "glimpse.dns.record-type"
    ],
    "version": 0,
},
{
    "capability": "measure",
    "label": "glimpse-traceroute",
    "parameters": {
        "destination.port": "*",
        "destination.url": "*",
        "glimpse.ping.interval.ms": "*",
        "glimpse.ping.payload": "*",
        "glimpse.ping.timeout.ms": "*",
        "packets.ip": "*",
        "source.port": "*"
    },
    "registry": "https://www.measure-it.net/static/glimpse_registry.json",
    "results": [
        "glimpse.traceroute.start-time",
        "glimpse.traceroute.hop-ip",
        "ttl",
        "rtt.ms.min",
        "rtt.ms.max",
        "rtt.ms.avg",
        "rtt.ms.stdev",
        "packets.ip"
    ],
    "version": 0,
},
{
    "capability": "measure",
    "label": "glimpse-reversednslookup",
    "parameters": {
        "destination.ip4": "*"
    },
    "registry": "https://www.measure-it.net/static/glimpse_registry.json",
    "results": [
        "glimpse.dns.record-name",
        "glimpse.dns.record-value"
    ],
    "version": 0,
}

 

Probe execution environment

GLIMPSE can be executed on every environment supporting Qt5 (http://www.qt.io/). This includes:

  • Linux (tested on Ubuntu, Debian, and Arch Linux)
  • Embedded Linux
  • Microsoft Windows
  • Mac OSX
  • Android (version 2.3 and higher)
  • iOS
  • WinRT

Note that not all measurement tools might be available on all platforms at the moment due to technical limitations of certain platforms. At the moment the development version is mainly tested on Linux and Android.

Quick start

There are two GLIMPSE-releases available: the standard release of GLIMPSE found at http://www.measure-it.net and the Github repository (https://github.com/HSAnet/glimpse_client) automatically connects to the GLIMPSE infrastructure and does multiple things which are out of scope of mPlane (for example user- and device-registration). To use this version follow the instructions under "Installation of standalone probe (standard release)".

The infrastructure-less release of GLIMPSE was stripped of all additional server-communication and can connect to any mPlane compliant supervisor. Infrastructure-less, since the GLIMPSE live infrastructure is not involved, but any mPlane-compliant infrastructure components can be used in this release. Using this version, no registration is required and it allows to do arbitrary testing with GLIMPSE. This release enables a user to set up a GLIMPSE probe, connect it to the mPlane reference implementation supervisor and interact with it through the mPlane command line interface by sending specifications and receiving results. To use this release follow the instructions under "Integration into an mPlane environment (infrastructure-less release)".

The following restrictions apply to the infrastructure-less release at the moment (this might change in the future):

  • Only the console version is available
  • The measurements which need another probe as end-point are disabled
  • Temporal scopes with a crontab are implemented but disabled until further tested

Both relases of GLIMPSE (standard and infrastructure-less) can be installed with the help of pre-build binary packages or by compiling it yourself.

Installation of standalone probe (standard release)

Pre-build packages can be found at http://distributor.measure-it.net/packages/, note that the Windows installer was not fully tested yet. We recommend using the ubuntu-trusty packages for which the detailed installation process is described here:

  • Add the package repository to your system: echo "deb http://distributor.measure-it.net/packages/ ubuntu-trusty/" | sudo tee /etc/apt/sources.list.d/glimpse.list
  • Install GLIMPSE (console version): sudo apt-get update && sudo apt-get install glimpse-console
  • To update GLIMPSE regularly (which we highly recommend): sudo apt-get install cron-apt && echo "install glimpse-console -y --force-yes --allow-unauthenticated" | sudo tee /etc/cron-apt/action.d/2-glimpse

The GLIMPSE console client will start automatically after a reboot (initial setup as described in the next section has to be completed). To change this you can disable the service glimpse-console.

If you want to use the GUI version install glimpse-gui and stop the glimpse-console background service before using it:

  • sudo apt-get install glimpse-gui
  • sudo service glimpse-probe stop
  • For automatic updates: sudo apt-get install cron-apt && echo "install glimpse-gui -y --force-yes --allow-unauthenticated" | sudo tee /etc/cron-apt/action.d/2-glimpse

To compile the software you should download and install Qt and QtCreator from here. At the time of this writing, GLIMPSE was tested with Qt 5.2.1. The requirements for the different platforms are:

  • Linux: libwnck (Arch & Gentoo) libwnck-dev (Debian & Ubuntu based) libwnck-devel (for RPM), openssl
  • Android: Android SDK and NDK
  • Windows: openssl, WinPcap

Clone and initialize the GLIMPSE Github repository:

  • git clone git@github.com:HSAnet/glimpse_client.git
  • cd glimpse_client && git submodule init && git submodule update

Run QtCreator, open the client.pro from the source-code, add your Qt configuration and select the "mobile" (= GUI version) or "console" project near the "Play" button. Hit "build" to compile GLIMPSE.

Usage of standalone probe

This section is divided into the execution of the application itself including the setup on the first run and how to run measurements within GLIMPSE.

Execution and first time setup

After the installation you need to register a GLIMPSE-account or login into an existing one. The GUI version does this on startup with a wizard, for the console version execute the following commands (the program will promt for the password to register with or to login with and exist afterwards):

  • Registration: sudo -H -u glimpse glimpse-console --register <mail address>
  • Login: sudo -H -u glimpse glimpse-console --login <mail address>

Note: if you have compiled the software yourself you don't need to use sudo and you can just execute glimpse-console directly.

To start the GLIMPSE console version (prebuild):

  • In the foreground: sudo -H -u glimpse glimpse-console
  • In the background: sudo service glimpse-probe start

Note: if you have compiled the software yourself you don't have the start up service.

To start the GLIMPSE GUI version (prebuild):

  • glimpse-gui

To start the GLIMPSE console or GUI version from within the Qt Creator:

  • Hit the play button after selecing the "mobile" or "console" project.
  • For the console version you still have to register/login with command line arguments like described before, you can set them in the project-settings.

Measurements

GLIMPSE will receive specifications from our servers and execute them in the background. You can execute specifications yourself in the GUI version with the help of the Toolbox and view results on the Results page (the later is still a working in progress). The console version does not display results or allow the execution of own measurements, but the results from remotely scheduled measurements can be viewed in the project directory (~/.local/share/HS-Augsburg/mPlaneClient/results/).

Integration into an mPlane environment (infrastructure-less release)

Apply the same installation-steps as described for the pre-build console version above but use "http://distributor.measure-it.net/packages_mplane/" as package repository. You don't need to do the first time setup for this version.

To start GLIMPSE and connect it to an mPlane compliant supervisor use

  • glimpse-console --supervisor <address of supervisor with http oder https*>

*if using https you have to set the client certificate file (--client-cert), client private key file (--private-key) and the root ca cert file (--ca-cert)

This pushes the available capabilities to the supervisor and pulls new specifications regularly. Here are the steps to use the reference implementation with GLIMPSE

  • start mpsup with the config set to component-initiated workflow and using http for communicating with the component (listen-spec-link)
  • start mpcli to connect to the supervisor (listen-cap-link)
  • start glimpse-console with the address and port of the supervisor (using http and the address of listen-spec-link)
  • get the capabilities in the mpcli (address of listen-cap-link)
  • use showcap, runcap, listmeas and showmeas to show and execute capabilities and see the results once available

Official versions

New features supported by the mPlane project

GLIMPSE was completely developed as part of the mPlane project.

Changes since D2.2

The mPlane proxy interface was replaced by an infrastructure-less release version which can connect to any mPlane compliant supervisor. This makes it possible for other partners to use GLIMPSE with their own mPlane infrastructure.

The DNS and reverse DNS lookup measurements were added.

The GUI version now displays results in a table view instead of just dumping JSON files.

References

GLIMPSE project page

Links to sources, binaries

GLIMPSE Github project (standard release)

GLIMPSE Github project (infrastructure-less release)

GLIMPSE binary packages (standard release)

GLIMPSE binary packages (infrastructure-less release)