Chrometric: System telemetry for Chrome OS

Making it easy to understand the state of your Chrome OS fleet

Reddit
LinkedIn

When it comes to managing Chrome OS in a distributed work environment one of the biggest challenges is understanding how well Chrome OS is performing and the health of the network environment it finds itself in.

Chrometric is a Chrome OS extension which gathers key telemetry about your Chrome OS machines. These metrics are important to understand as they give insight into what the user is experiencing as well as the network conditions of the current location.

Chrometric runs in the background every 15 minutes and by default gathers an assortment of useful metrics.

At Square, we use this data to monitor overall health of the Chrome OS machines as well as possibly connectivity issues between the Chrome OS machines and the services they use. Here is an example of average network jitter over a 7 day period:

Average Jitter

Memory is also a useful metric for determining if the current Chrome OS hardware is adequate for the work being done. As we can see here, memory drops around 2GB during the peak hours of the day while still having plenty of free memory. If the Chrome OS fleet were chronically low on available memory, it would make sense to look into different hardware to ensure a good user experience.

Average Free Memory

The below json is what Chrometric ships back to the data logger of your choice. Optional upload and download speeds can be collected by clicking the Chrometric icon and selecting Run Test.

{
    "testState": 4,
    "googleDeviceID": "0EE0E347-7434-4FD2-995A-A991102EE768",
    "serialNumber": "098436272F48",
    "memory": {
        "availableCapacity": 1596272640,
        "capacity": 8251527168
    },
    "runType": "auto",
    "cpu": {
        "threads": 8,
        "model": "Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz",
        "arch": "x86_64"
    },
    "jitterStatus": "4.38",
    "dlProgress": 0,
    "consoleUser": "username@company.com",
    "pingStatus": "70.07",
    "version": "1.2.0",
    "dlStatus": "",
    "pingProgress": 1,
    "osVersion": "92.0.4515.111",
    "ulStatus": "",
    "ulProgress": 0,
    "testId": null,
    "speedtest_timestamp": "2021-07-26T14:02:03.500Z",
    "tabCount": 14,
    "successful": true
}

For all network related metrics, a LibreSpeed endpoint is required. A LibreSpeed endpoint can be placed in the same region or cluster as the services the Chrome OS machines are using on a day to day basis, which allows reasonably accurate results without testing against the service endpoints themselves.

The data logger backend for Chrometric is pluggable, so it is easy to create a new logger and configure it via Chrome Policy. For example, the below config configures Chrometric to ship the data to Humio using the token specified and do all network telemetry testing against the supplied LibreSpeed server. If a LibreSpeed server is not provided, Chrometric will not ship any network telemetry.

{
  "dataLoggerConfig": {
    "Value": {
      "name": "humio",
      "token": "TOKEN_GOES_HERE"
    }
  },
  "speedtestUrls": {
    "Value": [
      {
        "name": "Librespeed Server",
        "server": "https://some.speedtestserver.here",
        "dlURL": "garbage.php",
        "ulURL": "empty.php",
        "pingURL": "empty.php",
        "getIpURL": "getIP.php"
      }
    ]
  }
}

Future plans include adding CPU usage, more data loggers and configurable behavior for how frequent Chrometric runs as well as doing a full speedtest by default.

Chrometric is written with the goal of collecting as many data points as possible from a Chrome OS fleet while making it flexible enough to use in any environment. Head over to https://github.com/square/chrometric to give it a test drive, check out the code, or get involved in the project.