Using → Storage Metrics

The Storage Realm provides metrics relating to storage subsystems including local disk and network attached storage. Each individual storage subsystem is treated as a separate storage resource (e.g., GPFS, Isilon, NFS, Lustre, etc.) This provides a mechanism for tracking utilization for a single storage resource as well as an aggregate across resources and allows for viewing this data by mount point, department, PI/project, and user. In addition, storage metrics can be plotted alongside data from other realms such as Job Accounting and Job Performance.

The data currently required to provide these metrics is described below in Input Format and are typically collected from the quota system on these storage resource. Detailed information such as access and modification times of individual files is not currently supported as the collection of this information is meta-data intensive and can adversely affect the performance of the filesystem.

These instructions use the file paths from the RPM installation. If you’ve installed from source they will need to be adjusted accordingly.

Input Format

Storage data must be formatted in JSON files and these files must use the .json file extension (e.g. 2019-01-01.json). These files will be validated against the JSON Schema /etc/xdmod/etl/etl_schemas.d/storage/usage.schema.json.

NOTE: The thresholds and usage numbers are all measured in bytes. Mountpoint names are currently limited to 255 characters.

Input Fields

  • resource - Storage resource name.
  • mountpoint - File system mountpoint.
  • user - User system username.
  • pi - PI system username.
  • dt - Date and time data was collected. Must be in RFC 3339 format (e.g. 2017-01-01T00:00:00Z). Must be UTC.
  • soft_threshold - Quota soft threshold measured in bytes.
  • hard_threshold - Quota hard threshold measured in bytes.
  • file_count - Number of files.
  • logical_usage - Logical usage measured in bytes.
  • physical_usage - Physical usage measured in bytes.

Example

[
    {
        "resource": "nfs",
        "mountpoint": "/home",
        "user": "jdoe",
        "pi": "pi_username",
        "dt": "2017-01-01T00:00:00Z",
        "soft_threshold": 1000000,
        "hard_threshold": 1200000,
        "file_count": 10000,
        "logical_usage": 100000,
        "physical_usage": 100000
    },

    ...
]

Setup

Add Storage Resource

Add a storage resource using the xdmod-setup script or by manually modifying /etc/xdmod/resources.json. If you use the xdmod-setup script be sure to select a storage resource type or you will need to manually add the roles configuration as described in the following section.

The resource name (also referred to as the resource code; not the formal name) must then be used in the JSON storage input files described above.

Update Roles Configuration

If you did not use the xdmod-setup script you must enable the storage query descripters manually. This can be done by creating a new file, roles.d/storage.json, with the appropriate contents. An example is shown below and can be copied from /usr/share/xdmod/templates/roles.d/storage.json.

{
    "+roles": {
        "+default": {
            "+query_descripters": [
                {
                    "realm": "Storage",
                    "group_by": "none"
                },
                {
                    "realm": "Storage",
                    "group_by": "resource"
                },
                {
                    "realm": "Storage",
                    "group_by": "resource_type"
                },
                {
                    "realm": "Storage",
                    "group_by": "mountpoint"
                },
                {
                    "realm": "Storage",
                    "group_by": "person"
                },
                {
                    "realm": "Storage",
                    "group_by": "pi"
                },
                {
                    "realm": "Storage",
                    "group_by": "username"
                },
                {
                    "realm": "Storage",
                    "group_by": "nsfdirectorate"
                },
                {
                    "realm": "Storage",
                    "group_by": "parentscience"
                },
                {
                    "realm": "Storage",
                    "group_by": "fieldofscience"
                }
            ]
        },
         "+pub": {
            "+query_descripters": [
                {
                    "realm": "Storage",
                    "group_by": "none"
                },
                {
                    "realm": "Storage",
                    "group_by": "resource"
                },
                {
                    "realm": "Storage",
                    "group_by": "resource_type"
                },
                {
                    "realm": "Storage",
                    "group_by": "mountpoint"
                },
                {
                    "realm": "Storage",
                    "group_by": "person"
                },
                {
                    "realm": "Storage",
                    "group_by": "pi"
                },
                {
                    "realm": "Storage",
                    "group_by": "username",
                    "disable": true
                },
                {
                    "realm": "Storage",
                    "group_by": "nsfdirectorate"
                },
                {
                    "realm": "Storage",
                    "group_by": "parentscience"
                },
                {
                    "realm": "Storage",
                    "group_by": "fieldofscience"
                }
            ]
        }
    }
}

After adding the file you must update the ACL database tables:

$ acl-config

Data Ingestion

Storage data is shredded and ingested using the xdmod-shredder and xdmod-ingestor commands. Please see their respective guides for further information.

All of the following commands must be executed in the order specified below to fully ingest storage data into the data warehouse.

Ingest all files in the /path/to/storage/logs directory:

$ xdmod-shredder -f storage -r resource-name -d /path/to/storage/logs

NOTE: The above command will ingest all files in the /path/to/storage/logs directory even if they have already been ingested.

Ingest and aggregate data:

$ last_modified_start_date=$(date +'%F %T')
$ xdmod-ingestor --datatype storage
$ xdmod-ingestor --aggregate=storage --last-modified-start-date "$last_modified_start_date"