Code Monkey home page Code Monkey logo

lustreperfmon's Introduction

Lustre Monitoring System

LustrePerfMon is a monitoring system that can collect system statistics of Lustre (and other systems) for performance monitoring and analysis. It is based on multiple widely used open-source software.

Note: LustrePerfMon is provided as-is and is not part of the official DDN product portfolio.

This LustrePerfMon depends on a specific version of Collectd with Lustre plugins. It can be found at: https://github.com/DDNStorage/collectd

Quick Start

Building

To build an ISO, do:

  1. Edit /etc/esmon_build.conf. Most of the time this file can be left untouched, i.e. empty or even missing.
  2. yum install python-dateutil PyYAML -y
  3. ./esmon_build

Installation

To install the LustrePerfMon in the cluster, you need to:

  1. Install the esmon*.rpm included in the ISO
  2. Configure /etc/esmon_install.conf properly.
  3. Run esmon_install command.

Test

To run reguession tests to make sure ESMON works well, do:

  1. Build the ISO.
  2. Edit /etc/esmon_test.conf. This configuration is more complex than esmon_build.conf as you can imagine.
  3. ./esmon_test

Introduction

Terminology

  • LustrePerfMon: Abbreviation for Lustre Performance Monitoring System.
  • DDN SFA: DDN Storage Fusion Architecture provides the foundation for balanced, high-performance storage. Using highly parallelized storage processing technology, SFA delivers both unprecedented IOPS and massive throughput.
  • DDN EXAScaler: Software stack developed by DDN to overcome the toughest storage and data management challenges in extreme, data-intensive environments.
  • Installation Server: The server on which the installation process is triggered.
  • Monitoring Server: The server on which the database (Influxdb) and web server (Grafana) of the monitoring system will run.
  • Monitoring Agent(s): The hosts, from which the monitoring system will collect metrics from. The metrics includes information about CPU, memory, Lustre, SFA storage, and so on. A collectd daemon will run on each monitoring client.
  • DDN IME: DDN’s Infinite Memory Engine (IME) is a flash-native, software-defined, storage cache that streamlines application IO, eliminating system bottlenecks.
  • Lustre: The Lustre file system is an open-source, parallel file system that supports many requirements of leadership class HPC simulation environments.
  • OST: The Object Storage Target(OST) of Lustre is the storage target that store the file data objects.
  • OSS: The Object Storage Server(OSS) of Lustre is the server that manage the Object Storage Target.
  • MDT: The Metadata Target(MDT) of Lustre is the storage target that stores the file metadata.
  • MDS: The Metadata Servers(MDS) of Lustre is the server that provides metadata services for a file system and manages one or multiple Metadata Target (MDT).

Collectd plugins of DDN

One of the main components of LustrePerfMon is сollectd. collectd is a daemon, which collects system performance statistics periodically and provides mechanisms to store the values in a variety of ways. LustrePerfMon is based on the open-source collectd, yet includes more plugins, such as Filedata, Ganglia, Nagios, Stress, Zabbix and so on.

Several additional plugins are added to collectd in LustrePerfMon to support various functions.

  • Filedata plugin: The Filedata plugin is able to collect data by reading and parsing a set of files. An XML-formatted definition file is required for the Filedata plugin to understand which files to read and how to parse these files. The most common usage of the Filedata plugin is to collect metrics through /proc interfaces of a running Lustre system.

  • Ganglia plugin: The Ganglia plugin can send metrics collected by a collectd client daemon to Ganglia server.

  • IME plugin: The IME plugin can collect performance information from DDN IME. The IME plugin shares the similar definition file format and configuration format with the Filedata plugin.

  • SSH plugin: The SSH plugin is able to collect metrics by running commands on remote hosts by using SSH connections. The SSH plugin is used to collect metrics from DDN SFA Storage. Like the IME plugin, the SSH plugin shares the similar definition file format and configuration format with the Filedata plugin.

  • Stress plugin: The Stress plugin can push a large amount of metrics to server from collectd client in order to benchmark the performance of the collecting system under high pressure.

  • Stress2 plugin: Enhanced version of Stress plugin. The format of pushed metrics can be flexibly configured to simulate different real metrics.

  • Zabbix plugin: The Zabbix plugin is used to send metrics from collectd to Zabbix system.

Installation Requirements

Installation Server

  • OS distribution: CentOS7/RHEL7
  • Free disk space: > 500 MB. The Installation Server will save all installation logs to the /var/log/esmon_install directory, which requires some free disk space.
  • Network: The Installation Server must be able to start SSH connections to the Monitoring Server and Monitoring Clients without a password prompt.
  • LustrePerfMon ISO image: The LustrePerfMon ISO image must be available on the Installation Server.
  • Clock and Time Zone: The clock and time zone should be synchronized with other nodes in the cluster.

Monitoring Server

  • OS distribution: CentOS7/RHEL7
  • Free disk space: > 5 GB. Influxdb will be running on this server. More disk space is required to keep more data in Influxdb
  • Network: SSHD should be running on the Monitoring Server. The Installation Server must be able to connect to the Monitoring Server without a password prompt.
  • Clock and Time Zone: The clock and time zone should be synchronized with other nodes in the cluster.

Monitoring Agent

  • OS distribution: CentOS7/RHEL7 or CentOS6/RHEL6
  • Free disk space: > 200 MB. The installation server will save necessary RPMs in directory /var/log/esmon_install, which requires some free disk space.
  • Network: SSHD should be running on the Monitoring Agent. The Installation Server must be able to connect to the Monitoring Agent without a password prompt.
  • EXAScaler version: EXAScaler 2.x, EXAScaler 3.x or EXAScaler4.x.
  • Clock and Time Zone: The clock and time zone should be synchronized with other nodes in the cluster.

SFA

  • Firmware release: 3.x or 11.x

Installation Process

Preparing the Installation Server

  1. Copy the LustrePerfMon ISO image file to the Installation Server, for example, to /ISOs/esmon.iso.

  2. Mount the LustrePerfMon ISO image on the Installation Server:

    mount -o loop /ISOs/esmon.iso /media
  3. On the Installation Server, back up old LustrePerfMon configuration file, if there is any:

    cp /etc/esmon_install.conf /etc/esmon_install.conf_backup
  4. On the Installation Server, uninstall old LustrePerfMon RPM, if there is any:

    rpm -e esmon
  5. Install the LustrePerfMon RPM on the Installation Server:

rpm -ivh /media/RPMS/rhel7/esmon*.rpm

Monitoring Server

If firewall is started on the monitoring server, the ports 3000, 4242, 8086, 8088 and 25826 should be opened, otherwise the installation or running of LustrePerfMon might have problem. The 3000 port is for the webb interface of Grafana. The ports 4242, 8086, 8088, 25826 are for the data communication and management of Influxdb, Grafana and Collectd.

Updating the configuration

After the LustrePerfMon RPM has been installed on the Installation Server, update the configuration file /etc/esmon_install.conf, which includes all the necessary information for installation. Define the following parameters:

  • In the section agents, specify information about all of the hosts where LustrePerfMon agent packages should be installed and configured:

    • enable_disk —This option determines whether to collect disk metrics from this agent. Default value: false.
    • host_id — This option is the ID of the host. The ID of a host is a unique value to identify the host. Two hosts should not share the same host_id.
    • ime —This option determines whether to enable IME metrics collection on this LustrePerfMon agent. Default value: false.
    • infiniband —This option determines whether to enable Infiniband metrics collection on this LustrePerfMon agent. Default value: false.
    • lustre_mds — Define whether to enable (true) or disable (false) metrics collection of Lustre MDS. Default value: true.
    • lustre_oss — Define whether to enable (true) or disable (false) metrics collection of Lustre OSS. Default value: true.
    • sfas — This list includes the information of DDN SFAs on this LustrePerfMon agent.
    • controller0_host — This option is the hostname/IP of the controller 0 of this SFA. Default value: controller0_host.
    • controller****1_host — This option is the hostname/IP of the controller 1 of this SFA. Default value: controller1_host.
    • Name —This option is the unique name of this controller. This value will be used as the value of "fqdn" tag for metrics of this SFA. Thus, two SFAs shouldn't have the same name.
  • agents_reinstall — Define whether to reinstall (true) LustrePerfMon clients or not (False). Default value: true.

  • collect_interval — The interval (in seconds) to collect data points on LustrePerfMon clients. Default value: 60.

  • continuous_query_interval — The interval of continuous query. The value of continuous_query_interval * collect_interval is the real interval in seconds between two adjacent data points of each continuous query. Usually, in order to down sample the data and reduce performance impact, this value should be larger than "1". Default value: 4.

  • iso_path — The path where the LustrePerfMon ISO image is saved. Default value: /root/esmon.iso.

  • lustre_default_version — The default Lustre version to use, if the Lustre RPMs installed on the LustrePerfMon client is not the supported version. The current supported values of the parameter are 2.7, 2.10, 2.12, es2, es3, es4 and error. If the parameter error is configured, an error will be raised when an LustrePerfMon client is using an unsupported Lustre version.

  • lustre_exp_ost — Define whether to enable (true) or disable (false) metrics collection of export information of Lustre OST. To avoid a flood of metrics, this parameter is usually disabled in Lustre file systems with a large number of clients. Default value: false.

  • lustre_exp_mdt — Define whether to enable (true) or disable (false) metrics collection of export information of Lustre MDT. To avoid a flood of metrics, this parameter is usually disabled in Lustre file systems with a large number of clients. Default value: false.

  • In the section server, specify information about all of the hosts where LustrePerfMon server packages should be installed and configured:

    • drop_database —If the parameter is set to true, the LustrePerfMon database in Influxdb will be dropped. If the parameter is set to false, the LustrePerfMon database in Influxdb will be kept as it is. Default value: false.


      Important: drop_database should only be enabled when the data in Influxdb is not needed anymore.


    • erase_influxdb — If the parameter is enabled (set to true), all the data and metadata of Influxdb will be completely erased. By enabling erase_influxdb, some corruption problems of Influxdb could be fixed. If the parameter is disabled (set to False), the data and metadata of Influxdb will not be completely erased.


      Important: erase_influxdb should only be enabled when the data/metadata in Influxdb is not needed anymore. Please double check the influxdb_path option is properly configured before enabling this option.


    • host_id — The unique ID of the host.

    • influxdb_path — This option is Influxdb directory path on LustrePerfMon server node. Default value: /esmon/influxdb.


      Important: Please do not put any other files/directries under this directory of LustrePerfMon server node, because, with "erase_influxdb" option enabled, all of the files/directries under that directory will be removed.


    • reinstall —This option determines whether to reinstall the LustrePerfMon server. Default value: true.

  • In the section ssh_hosts, specify details necessary to log in to the Monitoring Server and to each Monitoring Agent using SSH connection:

    • host_id — The unique ID of the host. Two hosts should not share the same host_id.
    • hostname — The hostname/IP to use when connecting to the host using SSH. "ssh" command will use this hostname/IP to login into the host. If the host is the LustrePerfMon server, this hostname/IP will be used as the server host in the write_tsdb plugin of LustrePerfMon agent.
    • ssh_identity_file — The SSH key file used for connecting to the host. If the default SSH identity file works, this option can be set to None. Default value: None.
    • local_host —This option determines whether this host is local host. Default value: false.

    Note: host_id and hostname can be different for a host, because there can be multiple ways to connect to the same host.


Below is an example of /etc/esmon_install.conf:

Example:

agents:
  - enable_disk: false
    host_id: Agent1
    ime: false
    infiniband: false
    lustre_mds: true
    lustre_oss: true
    sfas:
      - controller0_host: 10.0.0.1
        controller1_host: 10.0.0.2
        name: SFA1
      - controller0_host: 10.0.0.3
        controller1_host: 10.0.0.4
        name: SFA2
  - host_id: Agent2
    sfas: []
agents_reinstall: true
collect_interval: 60
continuous_query_interval: 4
iso_path: /root/esmon.iso
lustre_default_version: es3
lustre_exp_mdt: false
lustre_exp_ost: false
server:
  drop_database: false
  erase_influxdb: false
  host_id: Server
  influxdb_path: /esmon/influxdb
  reinstall: true
ssh_hosts:
  - host_id: Agent1
    hostname: Agent1
    local_host: false
    ssh_identity_file: None
  - host_id: Agent2
    hostname: Agent2
  - host_id: Server
    hostname: Server

Running installation on the cluster

After the /etc/esmon_install.conf file has been updated correctly on the Installation Server, run the following command to start the installation on the cluster:

esmon_install

All the logs that are useful for debugging are saved under /var/log/esmon_install directory of the Installation Server.

Apart from installing LustrePerfMon on a fresh system, the command esmon_install can also be used for upgrading an existing LustrePerfMon system. The configuration file /etc/esmon_install.conf should be backed up after installation of LustrePerfMon in case of upgrading in the future.


Important: When upgrading an existing LustrePerfMon system, erase_influxdb and drop_database should be disabled, unless the data or metadata in Influxdb is not needed anymore.


When installing or upgrading, esmon_install will cleanup and install the default LustrePerfMon dashboards of Grafana. Except for the default LustrePerfMon dashboards, esmon_install will not change any other existing dashboards of Grafana.


Important: Before upgrading an existing LustrePerfMon system, all default LustrePerfMon dashboards customized via a Grafana web page should be saved under different names, otherwise the modifications will be overwritten.


Accessing the Monitoring Web Page

The Grafana service is started on the Monitoring Server automatically. The default HTTP port is 3000. A login web page will be shown through that port (see Figure 1 below). The default user and password are both “admin”.

Figure 1: Grafana Login Web Page

Login Dashboard


Important: The host that runs the web browser to access the monitoring web page should have the same time clock and time zone with the servers. Otherwise, the monitoring results might be shown incorrectly.


Dashboards

From the Home dashboard (see Figure 2) different dashboards can be chosen to view different metrics collected by LustrePerfMon.

Figure 2: Home Dashboard

Home Dashboard

Cluster Status Dashboard

The Cluster Status dashboard (see Figure 3 below) shows a summarized status of the servers in the cluster. The background color of panels show the servers’ working status:

  • If the color of the panel is green, it means the server is under normal condition.

  • If the color of the panel is yellow, it means the server is under warning status due to one or more of the following conditions:

    • Idle CPU is less than 20%

    • Load is higher than 5

    • Free memory is less than 1000 MiB

    • Free space of “/” is less than 10 GiB

  • If the color of the panel is red, it means the server is under critical status due to one or more of the following conditions:

    • Idle CPU is less than 5%

    • Load is higher than 10

    • Free space of “/” is less than 1 GiB

    • Free memory is less than 100 MiB

Figure 3: Cluster Status Dashboard

Cluster Status Dashboard

Lustre Status Dashboard

The Lustre Statistics dashboard (Figure 4) shows metrics of Lustre file systems.

Figure 4: Lustre Statistics Dashboard

Lustre Statistics Dashboard

The following pictures are some of the panels in the Lustre Statistics dashboard.

  • The Free Capacity in Total panel (Figure 5) shows how much free capacity remains in the Lustre filesystem. The test case used in the figure is running “dd if=/dev/zero of=/mnt/lustre/file bs=1M” from about 18:40, and it shows that the free capacity is being consumed at a speed of about 20MB/s.

    Figure 5: Free Capacity in Total Panel

    Free Capacity in Total Panel of Lustre Statistics Dashboard

  • The Used Capacity in Total panel (Figure 6) shows how much capacity in total is used in the Lustre filesystem. The test case used in the figure is running “dd if=/dev/zero of=/mnt/lustre/file bs=1M” from about 18:40, and it can be seen from the figure that the used capacity has increased at the rate of about 20 MB/s.

    Figure 6: Used Capacity in Total Panel

    Lustre Used Capacity in Total Panel of Lustre Statistics Dashboard

  • The Free Capacity per OST panel (Figure 7) shows how much free capacity per OST remains in the Lustre filesystem. As shown in the figure, OST0002 free capacity is 946.47MB, OST0007 free capacity is 3.59GB, the free capacity of the remaining OSTs is 4.09GB each. To display the current free capacity per OST in the ascending or descending order, click on Current.

    Figure 7: Free Capacity per OST Panel

    Free Capacity per OST Panel of Lustre Statistics Dashboard

  • The Used Capacity per OST panel (Figure 8) shows how much capacity per OST is used in the Lustre filesystem. As shown in the figure, the used capacity of OST0002 is 3.97GB, the used capacity of OST0007 is 1.27GB, the used capacity of the remaining OSTs is 820.8MB. To display the current used capacity per OST in the ascending or descending order, click on Current.

    Figure 8: Used Capacity per OST Panel

Used Capacity per OST Panel of Server Statistics Dashboard

  • The Used Capacity per User panel (Figure 9) shows how much capacity per user is used in the Lustre filesystem. As shown in the figure, the current used capacity of the user with UID=0 is 13.65GB, the current used capacity of the user with UID=1000 is 2.10GB, the current used capacity of the user with UID=1001 is 954.37MB.

    Figure 9: Used Capacity per User Panel
    Used Capacity per User Panel of Server Statistics Dashboard
  • The Used Capacity per Group panel (Figure 10) shows how much capacity per group is used in the Lustre filesystem. As shown in the figure, the current used capacity of the group with GID=0 is 13.65GB, the current used capacity of the group with GID=1000 is 2.10GB, the current used capacity of the group with GID=1001 is 954.37MB.

    Figure 10: Used Capacity per Group Panel

    Used Capacity per Group Panel of Server Statistics Dashboard

  • The Free Inode Number in Total panel (Figure 11) shows the total number of free inodes in the Lustre filesystem over time. The test case used in the figure is running“mdtest–C –n 900000 –d /mnt/lustre/mdtest/” from about 14:35. From the figure it can be seen that from that time on, the free inode number is decreased and exhausted at a speed of about 1100 Ops (Operation per Second).

    Figure 11: Free Inode Number in Total Panel

    Free Inode Number Panel of Server Statistics Dashboard

  • The Used Inode Number in Total panel (Figure 12) shows the total number of used inodes in the Lustre filesystem over time. The test case used in the figure is running “mdtest–C –n 900000 –d /mnt/lustre/mdtest/” from about 14:35, from the figure it can be seen that the used inode number is increased in a speed of about 1100 Ops (Operation per Second).

    Figure 12: Used Inode Number in Total Panel

    Free Inode Number Panel of Server Statistics Dashboard

  • The Free Inode Number per MDT panel (see Figure 13) shows the current number of free inodes per MDT in the Lustre filesystem. As shown in the figure, the number of free inodes of MDT0000 is 1.72Mil, the number of free inodes of all other MDTs is 2.62 Mil. By clicking on the “Current”, the current free inode number per MDT in the system can be sorted in the ascending of descending order. To display the current free inode number per MDT in the ascending or descending order, click on Current.

    Figure 13: Free Inode Number per MDT Panel

    Free Inode Number per MDT Panel of Server Statistics Dashboard

  • The Used Inode Number per User panel (Figure 14) shows the number of used inodes per user in the Lustre filesystem. As shown in the figure, the number of used nodes pertaining to the user with UID=1000 is 897.49K, the number of used inodes of the user with UID=1001 is 1.08K, the number of used inodes of the user with UID=0 is 1.01K. To display the current number of used inodes per user in the ascending or descending order, click on Current.

    Figure 14: Used Inode Number per User Panel

    Used Inode Number per User Panel of Server Statistics Dashboard

  • The Used Inode Number per Group panel (Figure 15) shows the number of used inodes per group in the Lustre Filesystem. As shown in the figure, the number of used inodes of the group with GID=1000 is 897.49K, the number of used inodes of the group with GID=1001 is 1.08K, the number of used inodes of the group with GID=0 is 1.01K. To display the current number of used inodes per group in the ascending or descending order, click on Current.

    Figure 15: Used Inode Number Per Group Panel

    ![Used Inode Number per Group Panel of Server Statistics Dashboard](doc/pic/used_inode

  • The Used Inode Number per MDT (Figure 16) shows the inode number per MDT used in the Lustre Filesystem. As shown in the figure, MDT0000 used inode number is 898.85K, MDT0001 is 254.

    Figure 16: Used Inode Number per MDT Panel

    Used Inode Number per MDT Panel of Server Statistics Dashboard

  • The I/O Throughput in Total panel (Figure 17) shows the total I/O throughput in the Lustre filesystem over time.

Figure 17: I/O Throughput in Total Panel

I/O Throughput Panel of Server Statistics Dashboard

  • The I/O Throughput per OST panel (Figure 18) shows the average, maximum, and current I/O throughput per OST in the Lustre filesystem.

    Figure 18: I/O Throughput per OST Panel

    I/O Throughput per OST Panel of Server Statistics Dashboard

  • The Write Throughput per OST panel (Figure 19) shows the average, maximum, and current write throughput per OST in the Lustre Filesystem.

    Figure 19: Write Throughput per OST Panel

    Write Throughput per OST Panel of Server Statistics Dashboard

  • The Read Throughput per OST panel (Figure 20) shows the average, maximum, and current read throughput per OST in the Lustre Filesystem.

    Figure 20: Read Throughput per OST Panel

    Read Throughput per OST Panel of Server Statistics Dashboard

  • The Metadata Operation Rate in Total panel (Figure 21) shows the total metadata operation rate in the Lustre Filesystem over time. The unit is Ops, i.e. Operation Per Second.

    Figure 21: Metadata Operation Rate in Total Panel

    Metadata Operation Rate Panel of Server Statistics Dashboard

  • The Metadata Operation Rate per MDT panel (Figure 22) shows the metric information of the metadata operation rate per MDT in the Lustre filesystem. The unit is OPS (Operation Per Second). The information includes the average, maximum, and current values.

    Figure 22: Metadata Operation Rate Per MDT Panel

    Metadata Operation Rate per MDT Panel of Server Statistics Dashboard

  • The Metadata Operation Rate per Client panel (Figure 23) shows the metric information of the metadata operation rate per client in the Lustre filesystem. The unit is OPS. The information includes the average, maximum, and current values.

    Figure 23: Metadata Operation Rate per Client Panel

    Metadata Operation Rate per Client Panel of Server Statistics Dashboard

  • The Metadata Operation Rate per Type panel (Figure 24) shows the metric information of the metadata operation rate per type in the Lustre filesystem. The unit is OPS. The information includes the average, maximum, and current values. The current test case used is the operations that remove all files in a directory.

    Figure 24: Metadata Operation Rate per Type Panel

    Metadata Operation Rate per Type Panel of Server Statistics Dashboard

  • The Write Bulk RPC Rate per Size panel (Figure 25) shows the write bulk RPC rate with different size in the Lustre Filesystem over time. The size of Lustre Bulk RPC could be a value between 4KiB and 16MiB. The figure below shows the information of write RPC Rate with different bulk size. The test case that generated the collected information is that two clients run ”dd if=/dev/zero of=/mnt/lustre/test1 bs=1M oflag=direct”, “dd if=/dev/zero of=/mnt/lustre/test2 bs=64k oflag=direct”, respectively.

    Figure 25: Write Bulk RPC Rate per Size

    Write Bulk RPC Rate per Size Panel of Server Statistics Dashboard

  • The Size Distribution of Write Bulk RPC panel (Figure 26) shows the ratio information of the write bulk RPC with different bulk size in the Lustre Filesystem. As shown in the figure, the percentage of total for the number of the write bulk RPC number with 256 pages is 100%.

    Figure 26: Size Distribution of Write Bulk RPC Panel

    Size Distribution of Write Bulk RPC Panel of Server Statistics Dashboard

  • The Read Bulk RPC Rate per Size panel (Figure 27) shows the read bulk RPC rate per size in the Lustre filesystem over time. The size of Lustre Bulk RPC could be a value between 4KiB and 16MiB. The figure below shows the read RPC rate with different bulk I/O size. The used test case to generate the collected information is that two clients run “dd if=/mnt/lustre/test1 of=/dev/zero bs=1M iflag=direct” and “dd if=/mnt/lustre/test2 of=/dev/zero bs=64k iflag=direct”, respectively.

    Figure 27: Read Bulk RPC Rate per Size Panel

    Read Bulk RPC Rate Panel of Server Statistics Dashboard

  • The Size Distribution of Read Bulk RPC panel (Figure 28) shows the ratio information of read bulk RPC with different bulk I/O size in the Lustre filesystem. As shown in the figure, the total percentage of the read bulk RPC number with 256 pages is 100% where the current used test case is running”dd if=/mnt/lustre/file of=/dev/zero bs=1M”.

    Figure 28: Size Distribution of Read Bulk RPC Panel

    Size Distribution of Read Bulk RPC Panel of Server Statistics Dashboard

  • In each Lustre I/O, if the next page to be written or read in the I/O is not with the next offset, that page is a discontinuous page. There could be multiple discontinuous pages in an I/O. I/Os with less discontinuous pages are more friendly to OSTs, and underlying disk system will obtain much better performance. The Distribution of Discontinuous Pages in Each Write I/O panel (Figure 29) shows the ratio information of the discontinuous pages in each write I/O in the Lustre filesystem. As shown in the figure, the total percentage of discontinuous pages “0_pages” is 100%, which means all pages are continuous.

    Figure 29: Distribution of Discontinuous Pages in Each Write I/O Panel

    Distribution of Discoutinuous Pages in Each Write I/O Panel of Server Statistics Dashboard

  • The Distribution of Discontinuous Pages in Each Read I/O panel (Figure 30) shows the ratio information of discontinuous pages in each read I/O in the Lustre filesystem. As shown in the figure, the percentage of discontinuous pages “0_pages” in each read I/O is 100%, which means all pages are continuous.

    Figure 30: Distribution of Discontinuous Pages in Each Read I/O Panel

    Distribution of Discoutinuous Pages in Each Read I/O Panel of Server Statistics Dashboard

  • The Distribution of Discontinuous Blocks panel (Figure 31) shows the ratio information of the discontinuous blocks in each write I/O in the Lustre filesystem. In each Lustre read/write I/O, the meaning of discontinuous blocks is similar to discontinuous pages. How many pages a block contains is determined by the underlying filesystem (ldiskfs).If an I/O has discontinuous blocks, there must exist discontinuous pages, but the opposite is not necessarily true. As shown in the figure, the percentage of write discontinuous blocks “0_blocks” in each write I/O is 100%, which means nearly all write I/O are continuous.

    Figure 31: Distribution of Discontinuous Blocks in Each Write I/O Panel

    Distribution of Discoutinuous Blocks in Each Write I/O

  • The Distribution of Discontinuous Blocks in Each Read I/O panel (Figure 32) shows the ratio information of discontinuous blocks in each read I/O in the Lustre filesystem. As shown in the figure, the percentage of discontinuous blocks “0_blocks” in each read I/O is 100%, and it means that none of the read I/Os is discontinous.

    Figure 32: Distribution of Discontinuous Blocks in Each Read I/O PanelDistribution of Discoutinuous Blocks in Each Read I/O
  • For various reasons (e.g. too many pages to read or write per single I/O), read or write I/O sent by Lustre OSD to the underlying disk system may be split into multiple disk I/Os. The Distribution of Fragments in Each Write I/O panel (Figure 33) shows the distribution of write I/Os by the number of disk I/Os each write I/O is split into. As shown in the figure, “1_fragments” denotes that I/O is not split. The percentage of “1_fragments” is 100%, which means that none of the write I/O is split and all of them are continuous. “2_fragments” denotes that Lustre write I/O is split into two disk block I/Os, and the percentage in the figure is 0%.

    Figure 33: Distribution of Fragments in Each Write I/O Panel

    Distribution of Fragements in Each Write I/O

  • The Distribution of Fragments in Each Read I/O panel (Figure 34) shows the distribution of read I/Os by the number of disk I/Os each read I/O is split into. In the figure, the percentage of “1_fragments” is 100%, which means that none of the read I/Os is split and all of them are continuous. “2_fragments” denotes that Lustre read I/O is split into two disk block I/Os, and the percentage in the figure is 0%.

    Figure 34: Distribution of Fragments in Each Read I/O Panel

    Distribution of Fragements in Each Read I/O

  • The Distribution of in-flight Write I/O Number when Starting Each Write I/O panel (Figure 35) shows the distribution of the number of write I/Os operations pending at the time of starting each write I/O in the Lustre filesystem. In the figure, ”1_ios” has percentage of 100%. That means, when the write I/O operations started on the OST, this I/O was the only one write I/O that is currently being submitted to disk.

    Figure 35: Distribution of in-flight Write I/O Number when Starting Each Write I/O Panel

    Distribution of in-flight write I/O Number

  • The Distribution of in-flight Read I/O Number when Starting Each Read I/O panel (Figure 36) shows the distribution of the number of read I/Os operations pending at the time of starting each read I/O in the Lustre filesystem. For example, “4_ios” has percentage of 49.80% in the figure. That means 49.80% of the read I/O operations started when there were four in-flight I/O operations on that OST.

    Figure 36: Distribution of in-flight Read I/O Number when Starting Each Read I/O Panel

    Distribution of in-flight Read I/O Number

  • The Distribution of Write I/O Time panel (Figure 37) shows the current distribution of OSD write I/O time in the Lustre filesystem. “1_milliseconds” represents the percentage of I/O operations whose duration is less than 1 millisecond, “2_milliseconds” represents the percentage of I/O operations whose duration is between 1 millisecond and 2 milliseconds, and so on.

    Figure 37: Distribution of Write I/O Time Panel

    Distribution of Write I/O Time

  • The Distribution of Read I/O Time panel (Figure 38) shows the current distribution of OSD write I/O size in the Lustre filesystem. In the figure, the percentage of “1_milliseconds” I/Os (I/Os whose duration is less than 1 millisecond) is 14.11%, “4K_milliseconds” I/Os (I/Os whose duration is between 2K milliseconds and 4K milliseconds) take up 42.62%.

    Figure 38: Distribution of Read I/O Time Panel

    Distribution of Read I/O Time

  • The Distribution of Write I/O size on Disk panel (Figure 39) shows the current distribution of OSD write I/O size in the Lustre filesystem. In the panel, “1M_Bytes” represents disk I/Os that have sizes between 512K and 1M bytes, “512K_Bytes” represents I/Os with disk I/O size between 256K and 512K bytes, etc.

    Figure 39: Distribution of Write I/O size on Disk Panel

    Distribution of Write I/O Size

  • The Distribution of Read I/O Size on Disk panel (Figure 40) shows the distribution of OSD read I/O size in the Lustre filesystem. In the panel, “1M_Bytes” represents I/Os with disk I/O size between 512K and 1M bytes, “512K_Bytes” represents I/Os with disk I/O size between 256K and 512K bytes, etc. In the figure, the percentage of “1M_Bytes” I/Os is 94.16% and the percentage of “512K_Bytes” I/Os is 5.84%.

    Figure 40: Distribution of Read I/O Size on Disk Panel

    Distribution of Read I/O Size

  • The Write Throughput per Client panel (Figure 41) shows the average, max, and current write throughput per client in the Lustre filesystem. As shown in the figure, the average/max/current values of the write throughput for the client with the IP address 10.0.0.195 are 14.71MBps/55.73MBps/42.62MBps, respectively.

    Figure 41: Write Throughput per Client Panel

    Write Throughput per Client Panel of Server Statistics Dashboard

  • The Read Throughput per Client panel (Figure 42) shows the metric information of the read throughput per client in the Lustre filesystem. It includes average, max, and current values. As shown in the figure, the average, max, and current values of the read throughput for the client with the IP address 10.0.0.194 are 32.01MBps/55.71MBps/23.50MBps.

    Figure 42: Read Throughput per Client Panel

    Read Throughput per Client Panel of Server Statistics Dashboard

  • The I/O Throughput per Job panel (Figure 43) shows the metric information of the I/O throughput per job in the Lustre filesystem. It includes average, max, and current values. As shown in the figure, for the job with JOBID “dd.0”, the average I/O throughput is 7.68MBps, the max value is 65.16MBps, and the current I/O throughput is 29.37MBps.

    Figure 43: I/O Throughput per Job Panel

    I/O Throughput Per Job Panel of Server Statistics Dashboard

  • The Write Throughput per Job panel (Figure 44) shows the metric information of the write throughput per job in the Lustre filesystem. It includes average, max, and current values. As shown in the figure, for the job with JOBID “dd.0”, the average I/O throughput is 7.68MBps, the max value is 64.16MBps, and the current I/O throughput is 29.37MBps.

    Figure 44: Write Throughput per Job Panel

    Write Throughput Per Job Panel of Server Statistics Dashboard

  • The Read Throughput per Job panel (Figure 45) shows the metric information of the read throughput per job in the Lustre filesystem. It includes average, max, and current values. As shown in the figure, for the job with JOBID “dd.0”, the average I/O throughput is 2.56MBps, the max value is 59.79MBps, and the current I/O throughput is 12.75MBps.

    Figure 45: Read Throughput per Job Panel

    Read Throughput Per Job Panel of Server Statistics Dashboard

  • The Metadata Performance per Job panel (Figure 46) shows the metric information of the metadata performance per job in the Lustre filesystem. It includes average, max, and current values, and the unit is OPS (Operations per Second). As shown in the figure, for the job with JOBID “rm.0”, the average metadata performance is 94.42 ops, max value is 1.19K ops, and the current performance is 7.00 ops.

    Figure 46: Metadata Performance per Job Panel

    Matadata Performance Per Job Panel of Server Statistics Dashboard

Lustre MDS Statistics

The Lustre MDS Statistics dashboard (Figure 47) shows detailed information about a Lustre MDS server.

Figure 47: Lustre MDS Statistics Dashboard

Server Statistics Dashboard

Below you will find description of some of the panels in the Lustre MDS Statistics dashboard:

  • The Number of Active Requests Panel (Figure 48) shows the maximum and minimum number of active requests varying on time on MDS. Active requests are the requests that is being actively handled by this MDS, not including the requests that are waiting in the queue. If the number of active requests is smaller than PTLRPC thread number minus two (one for incoming request handling and the other for incoming high priority request handling), it generally means the thread number should be enough. The value shown in the left graph blew is the maximum number during the last collect interval. The value shown in the right graph blew is the minimum number during the last collect interval.

    Figure 48:Number of Active Requests Panel

    Number of Active Requests Panel of Server Statistics Dashboard

  • The Number of Incoming Requests Panel (Figure 49) shows the maximum and minimum number of incoming requests varying on time on MDS. Incoming requests are the requests that waiting on preprocessing. A request is not incoming request any more when its proprocessing begins. And after preprocessing, the requests will be put into processing queue. The value shown in the left graph blew is the maximum number of incoming requests during the last collect interval; The value shown in the right graph blew is the minimum number of incoming requests during the last collect interval.

    Figure 49:Number of Incoming Requests Panel

    Number of Incoming Requests Panel of Server Statistics Dashboard

  • The Wait time of Requests Panel (Figure 50) shows the maximum and minimum wait time of requests varying on time on MDS. The wait time of a request is the time interval between its arrival time and the time when it starts to be handled. The value shown in the left graph blew is the maximum wait time of the requests during the last collect interval; The value shown in the right graph blew is the minimum wait time of the requests during the last collect interval.

    Figure 50:Wait time of Requests Panel

    Wait Time of Requests panel

  • The Adaptive Timeout Value Panel (Figure 51) shows the maximum and minimum adaptive timeout value varying on time on MDS. When a client sends a request, it has a timeout deadline for the reply. The timeout value of a service is an adaptive value negotiated between server and client during run-time. The value shown in the left graph is the maximum timeout of the MDS service during the last collect interval; The value shown in the right graph is the minimum timeout of the MDS service during the last collect interval.

    Figure 51:Adaptive Timeout Value Panel

    Adaptive Timeout Value panel

  • The Number of Available Request buffers Panel (Figure 52) shows the maximum and minimum number of available request buffers varying on time on MDS. When a request arrives, one request buffer will be used. When number of available request buffers is under low water, more buffers are needed to avoid performance bottleneck. The value shown in the left graph blew is the maximum number during the last collect interval; The value shown in the right graph blew is the minimum number during the last collect interval.

    Figure 52:Number of Available Request buffers Panel

    Number of Availabe Requests Buffers

  • The Handing time of LDLM Ibits Enqueue Requests Panel (Figure 53) shows the maximum and minimum Handling time of LDLM ibits enqueue request varying on time on MDS. The handling time of a request is the time interval between the time that it is started to be handled time and the time the handling finishes. The value shown in the left graph blew is the minimum handling time of the LDLM ibits enqueue requests during the last collect interval; The value shown in the left graph blew is the minimum handling time of the LDLM ibits enqueue requests during the last collect interval.

    Figure 53:Handing time of LDLM ibits Enqueue Requests Panel

    Handing Time of LDLM ibits Enqueue Requests

  • The Handing time of Getattr Requests Panel (Figure 54) shows the maximum and minimum Handling time of Getattr requests varying on time on MDS. The handling time of a request is the time interval between the time that it is started to be handled time and the time the handling finishes. The value shown in the left graph blew is the minimum handling time of the Getattr requests during the last collect interval; The value shown in the left graph blew is the minimum handling time of the Getattr requests during the last collect interval.

    Figure 54:Handing Time of Getattr Requests Panel

    Handing Time of Getattr Requests

  • The Handing time of Connect Requests Panel (Figure 55) shows the maximum and minimum Handling time of Connect requests varying on time on MDS. The handling time of a request is the time interval between the time that it is started to be handled time and the time the handling finishes. The value shown in the left graph blew is the minimum handling time of the Connect requests during the last collect interval; The value shown in the left graph blew is the minimum handling time of the Connect requests during the last collect interval.

    Figure 55:Handing Time of Connect Requests Panel

    Handing Time of Connect Requests

  • The Handing time of Get-root Requests Panel (Figure 56) shows the maximum and minimum Handling time of Get-root requests varying on time on MDS. The handling time of a request is the time interval between the time that it is started to be handled time and the time the handling finishes. The value shown in the left graph blew is the minimum handling time of the Get-root requests during the last collect interval; The value shown in the left graph blew is the minimum handling time of the Get-root requests during the last collect interval.

    Figure 56:Handing Time of Get-root Requests Panel

    Handing Time of getroot Requests

  • The Handing time of Statfs Requests Panel (Figure 57) shows the maximum and minimum Handling time of Statfs requests varying on time on MDS. The handling time of a request is the time interval between the time that it is started to be handled time and the time the handling finishes. The value shown in the left graph blew is the minimum handling time of the Statfs requests during the last collect interval; The value shown in the left graph blew is the minimum handling time of the Statfs requests during the last collect interval.

    Figure 57:Handing Time of Statfs Requests Panel

    Handing Time of Statfs Requests

  • The Handing time of Getxattr Requests Panel (Figure 58) shows the maximum and minimum Handling time of Getxattr requests varying on time on MDS. The handling time of a request is the time interval between the time that it is started to be handled time and the time the handling finishes. The value shown in the left graph blew is the minimum handling time of the Getxattr requests during the last collect interval; The value shown in the left graph blew is the minimum handling time of the Getxattr requests during the last collect interval.

    Figure 58:Handing Time of Getxattr Requests Panel

    Handing Time of Getattr Requests

  • The Handing time of Ping Requests Panel (Figure 59)shows the maximum and minimum Handling time of Ping requests varying on time on MDS. The handling time of a request is the time interval between the time that it is started to be handled time and the time the handling finishes. The value shown in the left graph blew is the minimum handling time of the Ping requests during the last collect interval; The value shown in the left graph blew is the minimum handling time of the Ping requests during the last collect interval.

    Figure 59:Handing Time of Ping Requests PanelHanding Time of Ping Requests
  • The Number of Active Readpage Requests Panel (Figure 48) shows the maximum and minimum number of active Readpage requests varying on time on MDS. Active requests are the requests that is being actively handled by this MDS, not including the requests that are waiting in the queue. If the number of active requests is smaller than PTLRPC thread number minus two (one for incoming request handling and the other for incoming high priority request handling), it generally means the thread number should be enough. The value shown in the left graph blew is the maximum number during the last collect interval. The value shown in the right graph blew is the minimum number during the last collect interval.

    Figure 60:Number of Active Readpage Requests Panel

    Number of Active Readpage Requests

  • The Number of Incoming Readpage Requests Panel (Figure 61) shows the maximum and minimum number of incoming Readpage requests varying on time on MDS. Incoming requests are the requests that waiting on preprocessing. A request is not incoming request any more when its proprocessing begins. And after preprocessing, the requests will be put into processing queue. The value shown in the left graph blew is the maximum number of incoming Readpage requests during the last collect interval; The value shown in the right graph blew is the minimum number of incoming Readpage requests during the last collect interval.

Figure 61:Number of Incoming Readpage Requests Panel

Number of Incoming Readpage Requests

  • The Wait time of Readpage Requests Panel (Figure 62) shows the maximum and minimum wait time of Readpage requests varying on time on MDS. The wait time of a request is the time interval between its arrival time and the time when it starts to be handled. The value shown in the left graph blew is the maximum wait time of the Readpage requests during the last collect interval; The value shown in the right graph blew is the minimum wait time of the Readpage requests during the last collect interval.

    Figure 62:Wait Time of Readpage Requests Panel

    Wait Time Of Readpage Requests

  • The Adaptive Timeout Value of Readpage Service Panel (Figure 63) shows the maximum and minimum adaptive timeout value of Readpage Service varying on time on MDS. When a client sends a request, it has a timeout deadline for the reply. The timeout value of a service is an adaptive value negotiated between server and client during run-time. The value shown in the left graph is the maximum timeout of the Readpage service during the last collect interval; The value shown in the right graph is the minimum timeout of the Readpage service during the last collect interval.

    Figure 63:Adaptive Timeout Value of Readpage ServiceAdaptive Timeout Value of Readpage Service
  • The Number of Available Readpage Request buffers Panel (Figure 64) shows the maximum and minimum number of available Readpage request buffers varying on time on MDS. When a request arrives, one request buffer will be used. When number of available request buffers is under low water, more buffers are needed to avoid performance bottleneck. The value shown in the left graph blew is the maximum number during the last collect interval; The value shown in the right graph blew is the minimum number during the last collect interval.

    Figure 64:Number of Available Readpage Request Buffers Panel

    Number Of Available Readpage Requests Buffers

  • The Handing time of Close Requests Panel (Figure 65) shows the maximum and minimum Handling time of Close requests varying on time on MDS. The handling time of a request is the time interval between the time that it is started to be handled time and the time the handling finishes. The value shown in the left graph blew is the minimum handling time of the Close requests during the last collect interval; The value shown in the left graph blew is the minimum handling time of the Close requests during the last collect interval.

    Figure 65:Handing Time of Close Requests Panel

    Handing Time of Close Requests

  • The Handing time of Readpage Requests Panel (Figure 66) shows the maximum and minimum Handling time of Readpage requests varying on time on MDS. The handling time of a request is the time interval between the time that it is started to be handled time and the time the handling finishes. The value shown in the left graph blew is the minimum handling time of the Readpage requests during the last collect interval; The value shown in the left graph blew is the minimum handling time of the Readpage requests during the last collect interval.

    Figure 66:Handing Time of Readpage Requests Panel

    Handing Time Of Readpage Requests

  • The Number of Active LDLM Canceld Requests Panel (Figure 67) shows the maximum and minimum number of active LDLM Canceld requests varying on time on MDS. Active requests are the requests that is being actively handled by this MDS, not including the requests that are waiting in the queue. If the number of active requests is smaller than PTLRPC thread number minus two (one for incoming request handling and the other for incoming high priority request handling), it generally means the thread number should be enough. The value shown in the left graph blew is the maximum number during the last collect interval. The value shown in the right graph blew is the minimum number during the last collect interval.

    Figure 67:Number of Active LDLM Canceld Requests Panel

    Number of Active LDLM Cancled Requests

  • The Number of Incoming LDLM Canceld Requests Panel (Figure 68) shows the maximum and minimum number of incoming LDLM Canceld requests varying on time on MDS. Incoming requests are the requests that waiting on preprocessing. A request is not incoming request any more when its proprocessing begins. And after preprocessing, the requests will be put into processing queue. The value shown in the left graph blew is the maximum number of incoming LDLM Canceld requests during the last collect interval; The value shown in the right graph blew is the minimum number of incoming LDLM Canceld requests during the last collect interval.

    Figure 68:Number of Incoming LDLM Canceld Requests Panel

    Number of Incoming LDLM Cancled Requests

  • The Wait time of LDLM Canceld Requests Panel (Figure 69) shows the maximum and minimum wait time of LDLM Canceld requests varying on time on MDS. The wait time of a request is the time interval between its arrival time and the time when it starts to be handled. The value shown in the left graph blew is the maximum wait time of the LDLM Canceld requests during the last collect interval; The value shown in the right graph blew is the minimum wait time of the LDLM Canceld requests during the last collect interval.

    Figure 69:Wait Time of LDLM Canceld Requests Panel

    Wait Timt of LDLM Canceld Requests

  • The Adaptive Timeout Value of LDLM Canceld Service Panel (Figure 70) shows the maximum and minimum adaptive timeout value of LDLM Canceld Service varying on time on MDS. When a client sends a request, it has a timeout deadline for the reply. The timeout value of a service is an adaptive value negotiated between server and client during run-time. The value shown in the left graph is the maximum timeout of the LDLM Canceld service during the last collect interval; The value shown in the right graph is the minimum timeout of the LDLM Canceld service during the last collect interval.

    Figure 70:Adaptive Timeout Value of LDLM Canceld Service

    Adaptive Timeout Value of LDLM Canceld Service

  • The Number of Available LDLM Canceld Request buffers Panel (Figure 71) shows the maximum and minimum number of available LDLM Canceld request buffers varying on time on MDS. When a request arrives, one request buffer will be used. When number of available request buffers is under low water, more buffers are needed to avoid performance bottleneck. The value shown in the left graph blew is the maximum number during the last collect interval; The value shown in the right graph blew is the minimum number during the last collect interval.

    Figure 71:Number of Available LDLM Canceld Request Buffers Panel

    Number of Available LDLM Canceld Requests Buffers

  • The Number of Active LDLM Callback Requests Panel (Figure 72) shows the maximum and minimum number of active LDLM Callback requests varying on time on MDS. Active requests are the requests that is being actively handled by this MDS, not including the requests that are waiting in the queue. If the number of active requests is smaller than PTLRPC thread number minus two (one for incoming request handling and the other for incoming high priority request handling), it generally means the thread number should be enough. The value shown in the left graph blew is the maximum number during the last collect interval. The value shown in the right graph blew is the minimum number during the last collect interval.

    Figure 72:Number of Active LDLM Callback Requests Panel

    Number of Active LDLM Callback Requests

  • The Number of Incoming LDLM Callback Requests Panel (Figure 73) shows the maximum and minimum number of incoming LDLM Callback requests varying on time on MDS. Incoming requests are the requests that waiting on preprocessing. A request is not incoming request any more when its proprocessing begins. And after preprocessing, the requests will be put into processing queue. The value shown in the left graph blew is the maximum number of incoming LDLM Callback requests during the last collect interval; The value shown in the right graph blew is the minimum number of incoming LDLM Callback requests during the last collect interval.

    Figure 73:Number of Incoming LDLM Callback Requests Panel

    Number of Incoming LDLM Callback Requests

  • The Wait time of LDLM Callback Requests Panel (Figure 74) shows the maximum and minimum wait time of LDLM Callback requests varying on time on MDS. The wait time of a request is the time interval between its arrival time and the time when it starts to be handled. The value shown in the left graph blew is the maximum wait time of the LDLM Callback requests during the last collect interval; The value shown in the right graph blew is the minimum wait time of the LDLM Callback requests during the last collect interval.

Figure 74:Wait time of LDLM Callback Requests Panel

Wait Time of LDLM Callback Requests

  • The Adaptive Timeout Value of LDLM Callback Service Panel (Figure 75) shows the maximum and minimum adaptive timeout value of LDLM Callback Service varying on time on MDS. When a client sends a request, it has a timeout deadline for the reply. The timeout value of a service is an adaptive value negotiated between server and client during run-time. The value shown in the left graph is the maximum timeout of the LDLM Callback service during the last collect interval; The value shown in the right graph is the minimum timeout of the LDLM Callback service during the last collect interval.

    Figure 75:Adaptive Timeout Value of LDLM Callback Service Panel

    Adaptive Timeout Value of LDLM Callback Service

  • The Number of Available LDLM Callback Request buffers Panel (Figure 76) shows the maximum and minimum number of available LDLM Callback request buffers varying on time on MDS. When a request arrives, one request buffer will be used. When number of available request buffers is under low water, more buffers are needed to avoid performance bottleneck. The value shown in the left graph blew is the maximum number during the last collect interval; The value shown in the right graph blew is the minimum number during the last collect interval.

    Figure 76:Number of Available LDLM Callback Request Buffers Panel

    Number of Available LDLM Callback Requests Buffers

Lustre OSS Statistics

The Lustre OSS dashboard (Figure 77) shows detailed information about a Lustre OSS server.

Figure 77: Lustre OSS Dashboard

Lustre OSS

Below you will find description of some of the panels in the Lustre OSS Statistics dashboard:

  • I/O Bandwidth Panel (Figure 78) shows the I/O throughput, write throughput and read throughput of an OSS server, respectively.
Figure 78:I/O Bandwidth Panel

I/O throughput

  • The Number of Active Requests Panel (Figure 79) shows the maximum and minimum number of active requests varying on time on OSS. Active requests are the requests that is being actively handled by this OSS, not including the requests that are waiting in the queue. If the number of active requests is smaller than PTLRPC thread number minus two (one for incoming request handling and the other for incoming high priority request handling), it generally means the thread number should be enough. The value shown in the left graph blew is the maximum number during the last collect interval. The value shown in the right graph blew is the minimum number during the last collect interval.

    Figure 79: Number of Active Requests Panel

    Number of Active Requests

  • The Number of Incoming Requests Panel (Figure 80) shows the maximum and minimum number of incoming requests varying on time on OSS. Incoming requests are the requests that waiting on preprocessing. A request is not incoming request any more when its proprocessing begins. And after preprocessing, the requests will be put into processing queue. The value shown in the left graph blew is the maximum number of incoming requests during the last collect interval; The value shown in the right graph blew is the minimum number of incoming requests during the last collect interval.

    Figure 80: Number of Incoming Requests Panel

    Number of Incoming Requests

  • The Wait time of Requests Panel (Figure 81) shows the maximum and minimum wait time of requests varying on time on OSS. The wait time of a request is the time interval between its arrival time and the time when it starts to be handled. The value shown in the left graph blew is the maximum wait time of the requests during the last collect interval; The value shown in the right graph blew is the minimum wait time of the requests during the last collect interval.

    Figure 81: Wait time of Requests Panel

    Wait Time of Requests

  • The Adaptive Timeout Value Panel (Figure 82) shows the maximum and minimum adaptive timeout value varying on time on OSS. When a client sends a request, it has a timeout deadline for the reply. The timeout value of a service is an adaptive value negotiated between server and client during run-time. The value shown in the left graph is the maximum timeout of the MDS service during the last collect interval; The value shown in the right graph is the minimum timeout of the MDS service during the last collect interval.

    Figure 82: Adaptive Timeout Value Panel

    Adaptive Time value

  • The Number of Available Request buffers Panel (Figure 83) shows the maximum and minimum number of available request buffers varying on time on OSS. When a request arrives, one request buffer will be used. When number of available request buffers is under low water, more buffers are needed to avoid performance bottleneck. The value shown in the left graph blew is the maximum number during the last collect interval; The value shown in the right graph blew is the minimum number during the last collect interval.

    Figure 83: Number of Available Request Buffers Panel

    Number Of Available Request Buffers

  • The Number of Active I/O Requests Panel (Figure 84) shows the maximum and minimum number of active I/O requests varying on time on OSS. Active requests are the requests that is being actively handled by this OSS, not including the requests that are waiting in the queue. If the number of active requests is smaller than PTLRPC thread number minus two (one for incoming request handling and the other for incoming high priority request handling), it generally means the thread number should be enough. The value shown in the left graph blew is the maximum number during the last collect interval. The value shown in the right graph blew is the minimum number during the last collect interval.

    Figure 84: Number of Active I/O Requests Panel

    Number Of Active I/O Request

  • The Number of Incoming I/O Requests Panel (Figure 85) shows the maximum and minimum number of incoming I/O requests varying on time on OSS. Incoming requests are the requests that waiting on preprocessing. A request is not incoming request any more when its proprocessing begins. And after preprocessing, the requests will be put into processing queue. The value shown in the left graph blew is the maximum number of incoming I/O requests during the last collect interval; The value shown in the right graph blew is the minimum number of incoming I/O requests during the last collect interval.

    Figure 85: Number of Incoming I/O Requests Panel

    Number Of Incoming I/O Request

  • The Wait time of I/O Requests Panel (Figure 86) shows the maximum and minimum wait time of I/O requests varying on time on OSS. The wait time of a request is the time interval between its arrival time and the time when it starts to be handled. The value shown in the left graph blew is the maximum wait time of the I/O requests during the last collect interval; The value shown in the right graph blew is the minimum wait time of the I/O requests during the last collect interval.

    Figure 86: Wait Time of I/O requests Panel

    Wait time of I/O Request

  • The Adaptive Timeout Value of I/O Service Panel (Figure 87) shows the maximum and minimum adaptive timeout value of I/O Service varying on time on OSS. When a client sends a request, it has a timeout deadline for the reply. The timeout value of a service is an adaptive value negotiated between server and client during run-time. The value shown in the left graph is the maximum timeout of the I/O service during the last collect interval; The value shown in the right graph is the minimum timeout of the I/O service during the last collect interval.

    Figure 87: Adaptive Timeout Value of I/O Service Panel

    Adaptive Time Value of I/O Service

  • The Number of Available I/O Request buffers Panel (Figure 88) shows the maximum and minimum number of available I/O request buffers varying on time on OSS. When a request arrives, one request buffer will be used. When number of available request buffers is under low water, more buffers are needed to avoid performance bottleneck. The value shown in the left graph blew is the maximum number during the last collect interval; The value shown in the right graph blew is the minimum number during the last collect interval.

    Figure 88: Number of Available I/O Request Buffers

    Number Of Available I/O Request Buffers

  • The Handing time of Punch Requests Panel (Figure 89) shows the maximum and minimum Handling time of Punch requests varying on time on OSS. The handling time of a request is the time interval between the time that it is started to be handled time and the time the handling finishes. The value shown in the left graph blew is the minimum handling time of the Punch requests during the last collect interval; The value shown in the left graph blew is the minimum handling time of the Punch requests during the last collect interval.

    Figure 89: Handing Time of Punch Requests Panel

    Handing Time Of Punch Requests

  • The Handing time of Read Requests Panel (Figure 90) shows the maximum and minimum Handling time of Read requests varying on time on OSS. The handling time of a request is the time interval between the time that it is started to be handled time and the time the handling finishes. The value shown in the left graph blew is the minimum handling time of the Read requests during the last collect interval; The value shown in the left graph blew is the minimum handling time of the Read requests during the last collect interval.

    Figure 90: Handing Time of Read Requests PanelHanding Time Of Read Requests
  • The Handing time of Write Requests Panel (Figure 91) shows the maximum and minimum Handling time of Write requests varying on time on OSS. The handling time of a request is the time interval between the time that it is started to be handled time and the time the handling finishes. The value shown in the left graph blew is the minimum handling time of the Write requests during the last collect interval; The value shown in the left graph blew is the minimum handling time of the Write requests during the last collect interval.

    Figure 91: Handing Time of Write Requests Panel

    Handing Time Of Write Requests

  • The Number of Active Create Requests Panel (Figure 92) shows the maximum and minimum number of active create requests varying on time on OSS. Active requests are the requests that is being actively handled by this OSS, not including the requests that are waiting in the queue. If the number of active requests is smaller than PTLRPC thread number minus two (one for incoming request handling and the other for incoming high priority request handling), it generally means the thread number should be enough. The value shown in the left graph blew is the maximum number during the last collect interval. The value shown in the right graph blew is the minimum number during the last collect interval.

    Figure 92: Number of Active Create Requests Panel

    Number Of Active Create Request

  • The Number of Incoming Create Requests Panel (Figure 93) shows the maximum and minimum number of incoming create requests varying on time on OSS. Incoming requests are the requests that waiting on preprocessing. A request is not incoming request any more when its proprocessing begins. And after preprocessing, the requests will be put into processing queue. The value shown in the left graph blew is the maximum number of incoming create requests during the last collect interval; The value shown in the right graph blew is the minimum number of incoming create requests during the last collect interval.

    Figure 93: Number of Incoming Create Requests Panel

    Number Of Incoming Create Request

  • The Wait time of Create Requests Panel (Figure 94) shows the maximum and minimum wait time of create requests varying on time on OSS. The wait time of a request is the time interval between its arrival time and the time when it starts to be handled. The value shown in the left graph blew is the maximum wait time of the create requests during the last collect interval; The value shown in the right graph blew is the minimum wait time of the create requests during the last collect interval.

    Figure 94: Wait Time of Create Requests Panel

    Wait Time of Create Requests

  • The Adaptive Timeout Value of Create Service Panel (Figure 95) shows the maximum and minimum adaptive timeout value of the create Service varying on time on OSS. When a client sends a request, it has a timeout deadline for the reply. The timeout value of a service is an adaptive value negotiated between server and client during run-time. The value shown in the left graph is the maximum timeout of the create service during the last collect interval; The value shown in the right graph is the minimum timeout of the create service during the last collect interval.

    Figure 95: Adaptive Timeout Value of Create Service Panel

    Adaptive Time Value of Create Service

  • The Number of Available Create Request buffers Panel (Figure 96) shows the maximum and minimum number of available create request buffers varying on time on OSS. When a request arrives, one request buffer will be used. When number of available request buffers is under low water, more buffers are needed to avoid performance bottleneck. The value shown in the left graph blew is the maximum number during the last collect interval; The value shown in the right graph blew is the minimum number during the last collect interval.

    Figure 96: Number of Available Create Request Buffers Panel

    Server Statistics Dashboard panel Disk: Disk Usage

  • The Number of Active LDLM Canceld Requests Panel (Figure 97) shows the maximum and minimum number of active LDLM Canceld requests varying on time on OSS. Active requests are the requests that is being actively handled by this OSS, not including the requests that are waiting in the queue. If the number of active requests is smaller than PTLRPC thread number minus two (one for incoming request handling and the other for incoming high priority request handling), it generally means the thread number should be enough. The value shown in the left graph blew is the maximum number during the last collect interval. The value shown in the right graph blew is the minimum number during the last collect interval.

    Figure 97: Number of Active LDLM Canceld Requests Panel

    Server Statistics Dashboard panel Disk: Disk Usage

  • The Number of Incoming LDLM Canceld Requests Panel (Figure 98) shows the maximum and minimum number of incoming LDLM Canceld requests varying on time on OSS. Incoming requests are the requests that waiting on preprocessing. A request is not incoming request any more when its proprocessing begins. And after preprocessing, the requests will be put into processing queue. The value shown in the left graph blew is the maximum number of incoming LDLM Canceld requests during the last collect interval; The value shown in the right graph blew is the minimum number of incoming LDLM Canceld requests during the last collect interval.

    Figure 98: Number of Incoming LDLM Canceld Requests Panel

    Number of Incoming LDLM Cancled Requests

  • The Wait time of LDLM Canceld Requests Panel (Figure 99) shows the maximum and minimum wait time of LDLM Canceld requests varying on time on MDS. The wait time of a request is the time interval between its arrival time and the time when it starts to be handled. The value shown in the left graph blew is the maximum wait time of the LDLM Canceld requests during the last collect interval; The value shown in the right graph blew is the minimum wait time of the LDLM Canceld requests during the last collect interval.

    Figure 99: Wait Time of LDLM Canceld Requests Panel

    Wait TIme of LDLM canceld Requests

  • The Adaptive Timeout Value of LDLM Canceld Service Panel (Figure 100) shows the maximum and minimum adaptive timeout value of LDLM Canceld Service varying on time on OSS. When a client sends a request, it has a timeout deadline for the reply. The timeout value of a service is an adaptive value negotiated between server and client during run-time. The value shown in the left graph is the maximum timeout of the LDLM Canceld service during the last collect interval; The value shown in the right graph is the minimum timeout of the LDLM Canceld service during the last collect interval.

    Figure 100: Adaptive Timeout Value of LDLM Canceld Service Panel

    Adaptive Time Value of LDLM canceld Service

  • The Number of Available LDLM Canceld Request buffers Panel (Figure 101) shows the maximum and minimum number of available LDLM Canceld request buffers varying on time on OSS. When a request arrives, one request buffer will be used. When number of available request buffers is under low water, more buffers are needed to avoid performance bottleneck. The value shown in the left graph blew is the maximum number during the last collect interval; The value shown in the right graph blew is the minimum number during the last collect interval.

    Figure 101: Number of Available LDLM Canceld Request Buffers Panel

    Number of Available LDLM canceld Request Buffers

  • The Number of Active LDLM Callback Requests Panel (Figure 102) shows the maximum and minimum number of active LDLM Callback requests varying on time on OSS. Active requests are the requests that is being actively handled by this OSS, not including the requests that are waiting in the queue. If the number of active requests is smaller than PTLRPC thread number minus two (one for incoming request handling and the other for incoming high priority request handling), it generally means the thread number should be enough. The value shown in the left graph blew is the maximum number during the last collect interval. The value shown in the right graph blew is the minimum number during the last collect interval.

    Figure 102: Number of Active LDLM Callback Requests Panel

    Number of Active LDLM canceld Requests

  • The Number of Incoming LDLM Callback Requests Panel (Figure 103) shows the maximum and minimum number of incoming LDLM Callback requests varying on time on OSS. Incoming requests are the requests that waiting on preprocessing. A request is not incoming request any more when its proprocessing begins. And after preprocessing, the requests will be put into processing queue. The value shown in the left graph blew is the maximum number of incoming LDLM Callback requests during the last collect interval; The value shown in the right graph blew is the minimum number of incoming LDLM Callback requests during the last collect interval.

    Figure 103: Number of Incoming LDLM Callback Requests Panel

    Number of Incoming LDLM canceld Requests

  • The Wait time of LDLM Callback Requests Panel (Figure 104) shows the maximum and minimum wait time of LDLM Callback requests varying on time on OSS. The wait time of a request is the time interval between its arrival time and the time when it starts to be handled. The value shown in the left graph blew is the maximum wait time of the LDLM Callback requests during the last collect interval; The value shown in the right graph blew is the minimum wait time of the LDLM Callback requests during the last collect interval.

    Figure 104: Wait Time of LDLM Callback Requests Panel

    Wait Time of LDLM Callback Requests

  • The Adaptive Timeout Value of LDLM Callback Service Panel (Figure 105) shows the maximum and minimum adaptive timeout value of LDLM Callback Service varying on time on OSS. When a client sends a request, it has a timeout deadline for the reply. The timeout value of a service is an adaptive value negotiated between server and client during run-time. The value shown in the left graph is the maximum timeout of the Readpage service during the last collect interval; The value shown in the right graph is the minimum timeout of the Readpage service during the last collect interval.

    Figure 105: Adaptive Timeout Value of LDLM Callback Service Panel

    Adaptive Time Value of LDLM Callback Service

  • The Number of Available LDLM Callback Request buffers Panel (Figure 106) shows the maximum and minimum number of available LDLM Callback request buffers varying on time on MDS. When a request arrives, one request buffer will be used. When number of available request buffers is under low water, more buffers are needed to avoid performance bottleneck. The value shown in the left graph blew is the maximum number during the last collect interval; The value shown in the right graph blew is the minimum number during the last collect interval.

    Figure 106: Number of Available LDLM Callback Request Buffers

    Number of Available LDLM Callback Requests Buffers

Server Statistics

The Server Statistics dashboard (Figure 107) shows detailed information about a server.

Figure 107: Server Statistics Dashboard

Server Statistics Dashboard

Below you will find description of some of the panels in the Server Statistics dashboard:

  • The CPU Usage panel (Figure 108) shows the amount of time spent by the CPU in various states, most notably executing user code, executing system code, waiting for IO-operations and being idle.
Figure 108: CPU Usage Panel
CPU Usage Panel of Server Statistics Dashboard
  • The Memory Usage panel (Figure 109) shows how much memory has been used. The values are reported by the operating system. The categories are: Used, Buffered, Cached, Free, Slab_recl, Slab_unrecl.

    Figure 109: Memory Usage Panel
    CPU Usage Panel of Server Statistics Dashboard
  • The Disk Write Rate panel (Figure 110) shows the disk write rate of the server.

    Figure 110: Disk Write Rate Panel
    Disk Write Panel of Server Statistics Dashboard
  • The Disk Read Rate panel (Figure 111) shows the disk read rate of the server.

    Figure 111: Disk Read Rate Panel
    Server Statistics Dashboard panel Read: Disk Read Rate
  • The Disk Usage on Root panel (Figure 112) shows free space, used space and reserved space on the disk that is mounted as Root. A warning message will be generated when there’s little free space left.

    Figure 112: Disk Usage on Root Panel
    Server Statistics Dashboard panel Disk: Disk Usage
  • The Load panel (Figure 113) shows the load on the server. The system load is defined as the number of runnable tasks in the run-queue and is provided by many operating systems as follows:

    • Shortterm — one minute average

    • Midterm — five minutes average

    • Longterm — fifteen minutes average

    Figure 113: Load Panel
    Server Statistics Dashboard panel Load: Load
  • The Uptime panel (Figure 114) shows how long the server has been working. It keeps track of the system uptime, providing such information as the average running time or the maximum reached uptime over a certain period of time.

    Figure 114: Uptime Panel
    Server Statistics Dashboard panel Uptime: Uptime
  • The User panel (Figure 115) shows the number of users currently logged into the system.

    Figure 115: User Panel
    Server Statistics Dashboard panel User: User
  • The Temperature panel (Figure 116) shows the temperature collected from sensors.

    Figure 116: Temperature Panel

    Server Statistics Dashboard panel temperature: Temperature

SFA Physical Disk Dashboard

The SFA Physical Disk dashboard shown in Figure 117 displays information about DDN SFA physical disks.

Figure 117: SFA Physical Disk Dashboard

SFA Physical Disk Dashboard

Below you will find description of some of the panels in the SFA Physical Disk dashboard:

  • The I/O Performance on Physical Disk panel (Figure 118 )shows I/O speed over time.

    Figure 118: I/O Performance on Physical Disk Panel
    I/O Performance Panel of SFA Physical Disk Dashboard
  • The IOPS on Physical Disk panel (Figure 119) shows I/O operations per second on Physical Disk.

    Figure 119: IOPS on Physical Disk Panel
    IOPS Panel of SFA Physical Disk Dashboard
  • The Bytes per I/O panel (Figure 120) shows the I/O bytes per second on each controller.

    Figure 120: Bytes per I/O on Physical Disk Panel
    Bytes per I/O Panel of SFA Physical Disk Dashboard
  • The Write Performance panel (Figure 121) shows the write performance on each controller.

    Figure 121: Write Performance on Physical Disk Panel
    Write Performance Panel of SFA Physical Disk Dashboard
  • The Write I/O Size Samples panel (Figure 122) shows the account of writting operation on each size.

    Figure 122: Write I/O Size Samples on Physical Disk Panel
    Write I/O size Panel of SFA Physical Disk Dashboard
  • The Write Latency Samples panel (Figure 123) shows the account of writing operation on each latency.

    Figure 123: Write Latency Samples on Physical Disk Panel

    Write Latency Samples Panel of SFA Physical Disk Dashboard

SFA Virtual Disk Dashboard

The SFA Virtual Disk dashboard (Figure 124 ) shows information about DDN SFA virtual disks:

Figure 124: SFA Virtual Disk Dashboard

SFA Virtual Disk Dashboard

Below you will find description of some of the panels in the SFA Virtual Disk dashboard:

  • The I/O Performance panel (Figure 125) in shows the I/O speed at a specific time.

    Figure 125: I/O Performance on Virtual Disk Panel

    I/O Performance Panel of SFA Virtual Disk Dashboard

  • The IOPS panel (Figure 126) shows I/O operations per second on Virtual Disk.

    Figure 126: I/O Operations per Second on Virtual Disk Panel

    IOPS Panel of SFA Virtual Disk Dashboard

  • The Bytes per I/O panel (Figure 127) shows I/O bytes per second on each controller.

    Figure 127: Bytes per I/O on Virtual Disk Panel

    Bytes per I/O Panel of SFA Virtual Disk Dashboard

  • The Write Performance panel (Figure 128) shows write performance on each controller.

    Figure 128: Write Performance on Virtual Disk Panel

    Write Performance Panel of SFA Virtual Disk Dashboard

  • The Write I/O Size Samples panel (Figure 129) shows the size distributions of write I/Os.

    Figure 129: Write I/O Size Samples on Virtual Disk Panel

    Write I/O Size Panel of SFA Virtual Disk Dashboard

  • The Write Latency Samples panel (Figure 130) shows the latency distributions of write I/Os.

    Figure 130: Write Latency Samples on Virtual Disk Panel

    Write Latency Samples Panel of SFA Virtual Disk Dashboard

Stress Testing

In order to check whether the monitoring system works well under high pressure, DDN designed the collectd-stress2 plugin for stress testing. It is an upgraded version of the Stress plugin, which can use a couple of collectd clients to simulate tens of thousands of metrics collected from hundreds of servers.

Installing stress2 RPM on collectd Client

Because the stress2 plugin generates a large amount of simulated monitoring data and contaminates the database, the plugin should not be installed on all clients by default. After the monitoring system has been installed using esmon_install, select a couple of collectd clients as testing hosts and install the stress2 plugins on each of the testing hosts. The RPM collectd-stress2 * .rpm should be located in the ISO directory. To install the RPM, run the following command:

rpm --ivh collectd-stress2*.rpm

Updating Configuration File of Collectd Client

After stress2 RPMs have been installed, update the configuration file /etc/collectd.conf and add the following configuration:

  • Thread —Defines the number of test threads.

  • Metric — Defines all the attributes of the monitoring target. It can be specified multiple times to simulate different monitoring targets at the same time. It contains the following attributes:

    • Variable — Defines the scope of the monitoring target changes and the speed of change, it can be specified multiple times.

      • Name — Defines the variable name.

      • Number — Defines the maximum range of variable changes.

      • UpdateInterval — Defines the time interval between variable changes.

    • Host—Defines the host name of the client, usually defined as "$ {key: hostname}", the program automatically sets the current host name. It describes the discriminator of the collection data object together with the following Plugin, PluginInstance, Type, TypeInstance. See Naming Schema for details.

    • Plugin—Defines the plugin member in the collectd identifier.

    • PluginInstance—Defines the plugininstance member in the collectd identifier.

    • Type—The type member of the collectd identifier. For details, see https://collectd.org/wiki/index.php/Derive.

    • TypeInstance—Defines the type instance member in the collectd identifier.

    • TsdbName—Defines the name submitted to the database format.

    • TsdbTags—Defined the tags submitted to the database format to facilitate the late classification search.

Below is an example of /etc/collectd.conf.

Example:

LoadPlugin stress2
<Plugin "stress2">
  Thread 32
  <Metric>
	<Variable>
	    Name "ost_index"
	    Number 10
	    UpdateIterval 0
	</Variable>
	<Variable>
	    Name "job_id"
	    Number 7000
	    UpdateIterval 10
	</Variable>
	  Host "${key:hostname}"
	  Plugin "stress-${variable:ost_index:OST%04x}"
	  PluginInstance "jobstat_${variable:job_id:job%d}"
	  Type "derive"
	  TypeInstance "sum_read_bytes"
	  TsdbName "ost_jobstats_samples"
	  TsdbTags "optype=sum_read_bytes fs_name=stress ost_index=${variable:ost_index:OST%04x} job_id=${variable:job_id:job%d}"
   </Metric>
  <Metric>
	<Variable>
	    Name "mdt_index"
	    Number 10
	    UpdateIterval 0
	</Variable>
	<Variable>
	    Name "md_stats"
	    Number 10
	    UpdateIterval 10
	</Variable>
	  Host "${key:hostname}"
	  Plugin "stress-${variable:mdt_index:MDT%04x}"
	  PluginInstance "md_stats"
	  Type "derive"
	  TypeInstance "open"
	  TsdbName "md_stats"
	  TsdbTags "optype=open fs_name=stress mdt_index=${variable:mdt_index:MDT%04x} mdt_stats_open=${variable:mdt_stats_open:%d}"
   </Metric>
</Plugin>

Start Testing

After modifying the configuration file, restart collectd:

service collectd restart

A message like the following should appear in /var/log/messages:

server11 collectd[20830]: stress2: time: 1.79244 for 70100 commits with 32 threads, 39108.70099 commits/second

The above information shows that stress2 plugin successfully loaded , and generated a lot of monitoring data. With the above configuration file and following specified hardware environment, the corresponding monitoring bottlenecks were checked.

  • **OS: **CentOS7.

  • Memory: 128GB.

  • CPU: Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz.

  • Disk: Samsung SSD 850 2B6Q.

The monitoring client and database server are running on the same host, Influxdb data is stored on SSD with ext4 file system.

Preconditions:

  • Collectd Interval: 60 seconds.

  • Grafana History: 1 hour.

  • Grafana Refresh Interval: 60 seconds.

  • Collectd Running Time: more than 1 hour.

Conclusion:

  • Grafana keeps on refreshing: monitor overload.

  • Grafana has idle time: monitor running well.

In theory, Grafana's refresh time equals the database query time plus the web page load time.

We can query the database to measure the performance of the database query. For example the following is the default query command for LustrePerfMon Grafana Read Throughput per Job:

influx -database esmon_database –execute \

"SELECT "value" FROM "ost_jobstats_samples" WHERE ("optype" = 'sum_read_bytes' AND "fs_name" = 'stress') AND time >= now() - 1h GROUP BY "job_id"" 

With the monitoring software running, the above command on the database host can be executed to verify the query time. As shown in Figure 71, the query time of the Influxdb grew linearly during the first hour, because the data points kept on accumulating . But after an hour, the query time became steady, which is also expected behavior.

Figure 131:Influxdb Query Time

Write Latency Samples Panel of SFA Virtual Disk Dashboard

After verifying the load on the database side, we also need to verify the loading status of Grafana. Log in to Grafana to see Read Throughput per Job (see Figure 72)

Figure 132:Read throughput per Job stress testing

Write Latency Samples Panel of SFA Virtual Disk Dashboard

If the page is always refreshing and the page can be loaded within 60 seconds, that means, under the current configuration, the monitoring system can handle the current pressure. Otherwise, the monitoring system can be considered overloaded. In that case, either hardware need to be upgraded or the data collecting/refreshing intervals need to be increased. By continuously adjusting the number of job_id in /etc/collectd.conf and checking the page refreshing latency, the maximum supported metrics can be known under the current hardware configuration. Tests show that if Lustre has 10 OSTs, with above hardware, the monitoring system can support up to 7000 running jobs at the same time without any problem.

Troubleshooting

The directory /var/log/esmon_install/[installing_date] on the Installation Server gathers all the logs that is useful for debugging. If a failure happens, some error messages will be written to the file /var/log/esmon_install/[installing_date]/error.log. The first error message usually contains the information about the cause of failure.

lustreperfmon's People

Contributors

deiter avatar echofoo avatar gaurangtapase avatar lixi-storage avatar mdiep25 avatar sihara avatar tshete1 avatar yingjinqian avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

lustreperfmon's Issues

After./esmon_build ,found RPM build errors:

RPM build errors:
make[2]: Leaving directory /root/LustrePerfMon-master' make[1]: Leaving directory /root/LustrePerfMon-master'
], stderr = [+ touch configure.ac

  • autoheader
  • aclocal
  • libtoolize --ltdl --copy --force
  • automake --add-missing --copy
  • autoconf
    warning: bogus date in %changelog: Fri Jul 5 2014 Wu Libin [email protected] 1.0
  • umask 022
  • cd /root/LustrePerfMon-master/xml_definition/BUILD
  • cd /root/LustrePerfMon-master/xml_definition/BUILD
  • rm -rf xml_definition-2.1.gb5211cb
  • /usr/bin/mkdir -p xml_definition-2.1.gb5211cb
  • cd xml_definition-2.1.gb5211cb
  • /usr/bin/gzip -dc /root/LustrePerfMon-master/xml_definition/SOURCES/xml_definition.tar.gz
  • /usr/bin/tar -xvvf -
  • STATUS=0
  • '[' 0 -ne 0 ']'
  • /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w .
  • exit 0
  • umask 022
  • cd /root/LustrePerfMon-master/xml_definition/BUILD
  • cd xml_definition-2.1.gb5211cb
  • exit 0
  • umask 022
  • cd /root/LustrePerfMon-master/xml_definition/BUILD
  • '[' /root/LustrePerfMon-master/xml_definition/BUILDROOT/xml_definition-2.1.gb5211cb-1.x86_64 '!=' / ']'
  • rm -rf /root/LustrePerfMon-master/xml_definition/BUILDROOT/xml_definition-2.1.gb5211cb-1.x86_64
    ++ dirname /root/LustrePerfMon-master/xml_definition/BUILDROOT/xml_definition-2.1.gb5211cb-1.x86_64
  • mkdir -p /root/LustrePerfMon-master/xml_definition/BUILDROOT
  • mkdir /root/LustrePerfMon-master/xml_definition/BUILDROOT/xml_definition-2.1.gb5211cb-1.x86_64
  • cd xml_definition-2.1.gb5211cb
  • /usr/bin/install -Dp -m0644 lustre-1.8.9.xml /root/LustrePerfMon-master/xml_definition/BUILDROOT/xml_definition-2.1.gb5211cb-1.x86_64/etc/lustre-1.8_definition .xml
  • /usr/bin/install -Dp -m0644 lustre-2.4.2.xml /root/LustrePerfMon-master/xml_definition/BUILDROOT/xml_definition-2.1.gb5211cb-1.x86_64/etc/lustre-2.4_definition .xml
  • /usr/bin/install -Dp -m0644 lustre-2.1.6.xml /root/LustrePerfMon-master/xml_definition/BUILDROOT/xml_definition-2.1.gb5211cb-1.x86_64/etc/lustre-2.1_definition .xml
  • /usr/bin/install -Dp -m0644 lustre-2.5.xml /root/LustrePerfMon-master/xml_definition/BUILDROOT/xml_definition-2.1.gb5211cb-1.x86_64/etc/lustre-2.5_definition.x ml
  • /usr/bin/install -Dp -m0644 lustre-ieel-2.5.xml /root/LustrePerfMon-master/xml_definition/BUILDROOT/xml_definition-2.1.gb5211cb-1.x86_64/etc/lustre-ieel-2.5_de finition.xml
  • /usr/bin/install -Dp -m0644 lustre-ieel-2.7.xml /root/LustrePerfMon-master/xml_definition/BUILDROOT/xml_definition-2.1.gb5211cb-1.x86_64/etc/lustre-ieel-2.7_de finition.xml
  • /usr/bin/install -Dp -m0644 lustre-es4-2.10.xml /root/LustrePerfMon-master/xml_definition/BUILDROOT/xml_definition-2.1.gb5211cb-1.x86_64/etc/lustre-es4-2.10.xm l
  • /usr/bin/install -Dp -m0644 lustre-2.12.xml /root/LustrePerfMon-master/xml_definition/BUILDROOT/xml_definition-2.1.gb5211cb-1.x86_64/etc/lustre-2.12.xml
  • /usr/bin/install -Dp -m0644 lustre-b_es5_1.xml /root/LustrePerfMon-master/xml_definition/BUILDROOT/xml_definition-2.1.gb5211cb-1.x86_64/etc/lustre-b_es5_1.xml
  • /usr/bin/install -Dp -m0644 lustre-b_es5_2.xml /root/LustrePerfMon-master/xml_definition/BUILDROOT/xml_definition-2.1.gb5211cb-1.x86_64/etc/lustre-b_es5_2.xml
  • /usr/bin/install -Dp -m0644 lustre-2.13.xml /root/LustrePerfMon-master/xml_definition/BUILDROOT/xml_definition-2.1.gb5211cb-1.x86_64/etc/lustre-2.13.xml
  • /usr/bin/install -Dp -m0644 gpfs-3.5.xml /root/LustrePerfMon-master/xml_definition/BUILDROOT/xml_definition-2.1.gb5211cb-1.x86_64/etc/gpfs-3.5_definition.xml
  • /usr/bin/install -Dp -m0644 sfa-3.0.xml /root/LustrePerfMon-master/xml_definition/BUILDROOT/xml_definition-2.1.gb5211cb-1.x86_64/etc/sfa-3.0_definition.xml
  • /usr/bin/install -Dp -m0644 sfa-11.0.xml /root/LustrePerfMon-master/xml_definition/BUILDROOT/xml_definition-2.1.gb5211cb-1.x86_64/etc/sfa-11.0_definition.xml
  • /usr/bin/install -Dp -m0644 sfa-11.6.xml /root/LustrePerfMon-master/xml_definition/BUILDROOT/xml_definition-2.1.gb5211cb-1.x86_64/etc/sfa-11.6_definition.xml
  • /usr/bin/install -Dp -m0644 collectd.conf.all /root/LustrePerfMon-master/xml_definition/BUILDROOT/xml_definition-2.1.gb5211cb-1.x86_64/etc/collectd.conf.all
  • /usr/bin/install -Dp -m0644 ime-1.1.xml /root/LustrePerfMon-master/xml_definition/BUILDROOT/xml_definition-2.1.gb5211cb-1.x86_64/etc
  • /usr/bin/install -Dp -m0644 ime-1.2.xml /root/LustrePerfMon-master/xml_definition/BUILDROOT/xml_definition-2.1.gb5211cb-1.x86_64/etc
  • /usr/bin/install -Dp -m0644 infiniband-0.1.xml /root/LustrePerfMon-master/xml_definition/BUILDROOT/xml_definition-2.1.gb5211cb-1.x86_64/etc/infiniband-0.1_defi nition.xml
  • /usr/bin/install -Dp -m0755 ime_monitor_bad_node_filter /root/LustrePerfMon-master/xml_definition/BUILDROOT/xml_definition-2.1.gb5211cb-1.x86_64/usr/bin/ime_mo nitor_bad_node_filter
  • /usr/lib/rpm/find-debuginfo.sh --strict-build-id -m --run-dwz --dwz-low-mem-die-limit 10000000 --dwz-max-die-limit 110000000 /root/LustrePerfMon-master/xml_def inition/BUILD/xml_definition-2.1.gb5211cb
  • /usr/lib/rpm/check-buildroot
  • /usr/lib/rpm/redhat/brp-compress
  • /usr/lib/rpm/redhat/brp-strip-static-archive /usr/bin/strip
  • /usr/lib/rpm/brp-python-bytecompile /usr/bin/python 1
  • /usr/lib/rpm/redhat/brp-python-hardlink
  • /usr/lib/rpm/redhat/brp-java-repack-jars
  • umask 022
  • cd /root/LustrePerfMon-master/xml_definition/BUILD
  • cd xml_definition-2.1.gb5211cb
  • exit 0
  • umask 022
  • cd /root/LustrePerfMon-master/build/BUILD
  • cd /root/LustrePerfMon-master/build/BUILD
  • rm -rf esmon-1.3.gb5211cb
  • /usr/bin/gzip -dc /root/LustrePerfMon-master/esmon-1.3.gb5211cb.tar.gz
  • /usr/bin/tar -xf -
  • STATUS=0
  • '[' 0 -ne 0 ']'
  • cd esmon-1.3.gb5211cb
  • /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w .
  • exit 0
  • umask 022
  • cd /root/LustrePerfMon-master/build/BUILD
  • cd esmon-1.3.gb5211cb
    ++ ls pyesmon/init.py pyesmon/collectd.py pyesmon/daemon.py pyesmon/esmon_build.py pyesmon/esmon_common.py pyesmon/esmon_config.py pyesmon/esmon_influxdb.py pyesmon/esmon_install.py pyesmon/esmon_install_common.py pyesmon/esmon_install_nodeps.py pyesmon/esmon_ioload.py pyesmon/esmon_test.py pyesmon/esmon_virt.py pyes mon/grafana.py pyesmon/lustre.py pyesmon/ssh_host.py pyesmon/time_util.py pyesmon/utils.py pyesmon/watched_io.py
  • PYESMON_FILES='pyesmon/init.py
    pyesmon/collectd.py
    pyesmon/daemon.py
    pyesmon/esmon_build.py
    pyesmon/esmon_common.py
    pyesmon/esmon_config.py
    pyesmon/esmon_influxdb.py
    pyesmon/esmon_install.py
    pyesmon/esmon_install_common.py
    pyesmon/esmon_install_nodeps.py
    pyesmon/esmon_ioload.py
    pyesmon/esmon_test.py
    pyesmon/esmon_virt.py
    pyesmon/grafana.py
    pyesmon/lustre.py
    pyesmon/ssh_host.py
    pyesmon/time_util.py
    pyesmon/utils.py
    pyesmon/watched_io.py'
  • for PYESMON_FILE in '$PYESMON_FILES'
  • pylint --disable=I pyesmon/init.py
    Traceback (most recent call last):
    File "/usr/bin/pylint", line 11, in
    sys.exit(run_pylint())
    File "/usr/lib/python2.7/site-packages/pylint/init.py", line 17, in run_pylint
    Run(sys.argv[1:])
    File "/usr/lib/python2.7/site-packages/pylint/lint.py", line 1287, in init
    linter.read_config_file()
    File "/usr/lib/python2.7/site-packages/pylint/config.py", line 638, in read_config_file
    parser.readfp(fp)
    File "/usr/lib/python2.7/site-packages/backports/configparser/init.py", line 835, in readfp
    self.read_file(fp, source=filename)
    File "/usr/lib/python2.7/site-packages/backports/configparser/init.py", line 789, in read_file
    self._read(f, source)
    File "/usr/lib/python2.7/site-packages/backports/configparser/init.py", line 1162, in _read
    raise MissingSectionHeaderError(fpname, lineno, line)
    backports.configparser.MissingSectionHeaderError: File contains no section headers.
    file: '/root/LustrePerfMon-master/build/BUILD/esmon-1.3.gb5211cb/.pylintrc', line: 1
    u'pyesmon/.pylintrc'
    error: Bad exit status from /var/tmp/rpm-tmp.QFvvMT (%build)
    Bad exit status from /var/tmp/rpm-tmp.QFvvMT (%build)
    make[2]: *** [build/RPMS/x86_64/esmon-1.3.gb5211cb-7.el7.x86_64.rpm] Error 1
    make[1]: *** [all-recursive] Error 1
    make: *** [all] Error 2
    ]
    [2020/10/20-03:14:35] [ERROR] [esmon_build.py:1429] build failed

lustre2.12

my esmon_config:
agents:

  • enable_disk: false
    host_id: 1fbbd100
    ime: false
    infiniband: false
    lustre_mds: false
    lustre_oss: false
    agents_reinstall: true
    collect_interval: 60
    continuous_query_periods: 4
    iso_path: /lustre_install/esmon/esmon-1.3.ge627284.x86_64.iso
    jobid_var: unknown
    lustre_default_version: es3
    lustre_exp_mdt: false
    lustre_exp_ost: false
    server:
    auto_open_ports_on_firewall: false
    drop_database: false
    erase_influxdb: false
    host_id: 1fba6f1e
    influxdb_path: /esmon/influxdb
    reinstall: false
    ssh_hosts:
  • host_id: 1fbbd100
    hostname: mds
    local_host: false
    ssh_identity_file: None
  • host_id: oss
    hostname: oss
  • host_id: 1fba6f1e
    hostname: cloudos111

the error:
[2020/10/14-14:13:26] [INFO] [connectionpool.py:203] Starting new HTTP connection (1): cloudos111
[2020/10/14-14:14:57] [ERROR] [utils.py:464] timeout when waiting condition
[2020/10/14-14:14:57] [ERROR] [esmon_install_nodeps.py:2110] failed to check measurement [memory.buffered.memory]
[2020/10/14-14:14:57] [ERROR] [esmon_install_nodeps.py:2153] Influxdb doesn't have expected datapoints from host [mds ]
[2020/10/14-14:14:57] [ERROR] [esmon_install_nodeps.py:2504] failed to reinstall ESMON client on host [mds]
[2020/10/14-14:14:57] [INFO] [filelock.py:310] Lock 140693326294864 released on /etc/esmon_install.conf.lock
[2020/10/14-14:14:57] [ERROR] [esmon_install_nodeps.py:2674] installation failed, please check [/var/log/esmon_instal l/2020-10-14-14_13_14] for more log

Add new fileinfinbiand xml definition

I would add another infiniband (e.g. infiniband2) definition file with perfquery rather than scan /sys/class/infiniband/xxxx/ports/x/counters, but would aslo keep current infinbiand xml file for compatibility.
The reason of why it needs new infiniband xml files because systems don't have /sys/class/infiniband/xxxx/ports/x/counters (e.g. docker environment) that is not able to collect infiniband metrics by filedata.

Here is example how to capture IB stats with perfquery.

[root@amd01 ~]# ibstat
CA 'mlx5_4'
	CA type: MT4123
	Number of ports: 1
	Firmware version: 20.26.4012
	Hardware version: 0
	Node GUID: 0x0c42a1030017c078
	System image GUID: 0x0c42a1030017c078
	Port 1:
		State: Active
		Physical state: LinkUp
		Rate: 200
		Base lid: 90
		LMC: 0
		SM lid: 2
		Capability mask: 0x2651e848
		Port GUID: 0x0c42a1030017c078
		Link layer: InfiniBand
CA 'mlx5_2'
	CA type: MT4123
	Number of ports: 1
	Firmware version: 20.26.4012
	Hardware version: 0
	Node GUID: 0x0c42a1030017bb48
	System image GUID: 0x0c42a1030017bb48
	Port 1:
		State: Down
		Physical state: Disabled
		Rate: 10
		Base lid: 65535
		LMC: 0
		SM lid: 0
		Capability mask: 0x2651e848
		Port GUID: 0x0c42a1030017bb48
		Link layer: InfiniBand
CA 'mlx5_0'
	CA type: MT4123
	Number of ports: 1
	Firmware version: 20.26.4012
	Hardware version: 0
	Node GUID: 0x0c42a1030017c090
	System image GUID: 0x0c42a1030017c090
	Port 1:
		State: Active
		Physical state: LinkUp
		Rate: 200
		Base lid: 88
		LMC: 0
		SM lid: 2
		Capability mask: 0x2651e848
		Port GUID: 0x0c42a1030017c090
		Link layer: InfiniBand
CA 'mlx5_5'
	CA type: MT4123
	Number of ports: 1
	Firmware version: 20.26.4012
	Hardware version: 0
	Node GUID: 0x0c42a1030017c079
	System image GUID: 0x0c42a1030017c078
	Port 1:
		State: Down
		Physical state: Disabled
		Rate: 40
		Base lid: 0
		LMC: 0
		SM lid: 0
		Capability mask: 0x00010000
		Port GUID: 0x0e42a1fffe17c079
		Link layer: Ethernet
CA 'mlx5_3'
	CA type: MT4123
	Number of ports: 1
	Firmware version: 20.26.4012
	Hardware version: 0
	Node GUID: 0x0c42a1030017bb49
	System image GUID: 0x0c42a1030017bb48
	Port 1:
		State: Down
		Physical state: Disabled
		Rate: 40
		Base lid: 0
		LMC: 0
		SM lid: 0
		Capability mask: 0x00010000
		Port GUID: 0x0e42a1fffe17bb49
		Link layer: Ethernet
CA 'mlx5_1'
	CA type: MT4123
	Number of ports: 1
	Firmware version: 20.26.4012
	Hardware version: 0
	Node GUID: 0x0c42a1030017c091
	System image GUID: 0x0c42a1030017c090
	Port 1:
		State: Down
		Physical state: Disabled
		Rate: 40
		Base lid: 0
		LMC: 0
		SM lid: 0
		Capability mask: 0x00010000
		Port GUID: 0x0e42a1fffe17c091
		Link layer: Ethernet

LID can be found from /sys/class/infiniband/mlx5_$i/ports/1/lid

[root@amd01 ~]# for i in `seq 0 5`; do cat /sys/class/infiniband/mlx5_$i/ports/1/lid; done
0x58
0x0
0xffff
0x0
0x5a
0x0

perfquery requires LID and port number. "0xffff" means presented and 0x0 means not Infiniband mode.

[root@amd01 ~]# for i in `seq 0 5`; do                                                    
> perf
perf       perfquery  
> perfquery $(cat /sys/class/infiniband/mlx5_$i/ports/1/lid) 1
> done
# Port counters: Lid 88 port 1 (CapMask: 0x5A00)
PortSelect:......................1
CounterSelect:...................0x0000
SymbolErrorCounter:..............0
LinkErrorRecoveryCounter:........0
LinkDownedCounter:...............1
PortRcvErrors:...................0
PortRcvRemotePhysicalErrors:.....0
PortRcvSwitchRelayErrors:........0
PortXmitDiscards:................0
PortXmitConstraintErrors:........0
PortRcvConstraintErrors:.........0
CounterSelect2:..................0x00
LocalLinkIntegrityErrors:........0
ExcessiveBufferOverrunErrors:....0
QP1Dropped:......................0
VL15Dropped:.....................0
PortXmitData:....................4294967295
PortRcvData:.....................4294967295
PortXmitPkts:....................4294967295
PortRcvPkts:.....................4294967295
PortXmitWait:....................4294967295
perfquery: iberror: failed: can't resolve destination port 0x0
perfquery: iberror: failed: can't resolve destination port 0xffff
perfquery: iberror: failed: can't resolve destination port 0x0
# Port counters: Lid 90 port 1 (CapMask: 0x5A00)
PortSelect:......................1
CounterSelect:...................0x0000
SymbolErrorCounter:..............0
LinkErrorRecoveryCounter:........0
LinkDownedCounter:...............1
PortRcvErrors:...................0
PortRcvRemotePhysicalErrors:.....0
PortRcvSwitchRelayErrors:........0
PortXmitDiscards:................0
PortXmitConstraintErrors:........0
PortRcvConstraintErrors:.........0
CounterSelect2:..................0x00
LocalLinkIntegrityErrors:........0
ExcessiveBufferOverrunErrors:....0
QP1Dropped:......................0
VL15Dropped:.....................0
PortXmitData:....................4294967295
PortRcvData:.....................4294967295
PortXmitPkts:....................4294967295
PortRcvPkts:.....................4294967295
PortXmitWait:....................4294967295
perfquery: iberror: failed: can't resolve destination port 0x0

Help~~Building Errors

When i try to build the project, i got the error as below.
Any one can help?

RPM build errors:
], stderr = [/etc/host.conf: line 3: bad command `nospoof on'

  • umask 022
  • cd /root/LustrePerfMon-DDN/build_esmon/2021-05-31-11_06_38/collectd.git/BUILD
  • cd /root/LustrePerfMon-DDN/build_esmon/2021-05-31-11_06_38/collectd.git/BUILD
  • rm -rf collectd-5.7.4.ddn
  • /usr/bin/bzip2 -dc /root/LustrePerfMon-DDN/build_esmon/2021-05-31-11_06_38/collectd.git/SOURCES/collectd-5.7.4.ddn.tar.bz2
  • /usr/bin/tar -xf -
  • STATUS=0
  • '[' 0 -ne 0 ']'
  • cd collectd-5.7.4.ddn
  • /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w .
  • exit 0
  • umask 022
  • cd /root/LustrePerfMon-DDN/build_esmon/2021-05-31-11_06_38/collectd.git/BUILD
  • cd collectd-5.7.4.ddn
  • CFLAGS='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic'
  • export CFLAGS
  • CXXFLAGS='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic'
  • export CXXFLAGS
  • FFLAGS='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic -I/usr/lib64/gfortran/modules'
  • export FFLAGS
  • FCFLAGS='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic -I/usr/lib64/gfortran/modules'
  • export FCFLAGS
  • LDFLAGS='-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld'
  • export LDFLAGS
  • '[' 1 == 1 ']'
  • '[' x86_64 == ppc64le ']'
    ++ find . -name config.guess -o -name config.sub
  • for i in '$(find . -name config.guess -o -name config.sub)'
    ++ basename ./build-aux/config.guess
  • '[' -f /usr/lib/rpm/redhat/config.guess ']'
  • /usr/bin/rm -f ./build-aux/config.guess
    ++ basename ./build-aux/config.guess
  • /usr/bin/cp -fv /usr/lib/rpm/redhat/config.guess ./build-aux/config.guess
  • for i in '$(find . -name config.guess -o -name config.sub)'
    ++ basename ./build-aux/config.sub
  • '[' -f /usr/lib/rpm/redhat/config.sub ']'
  • /usr/bin/rm -f ./build-aux/config.sub
    ++ basename ./build-aux/config.sub
  • /usr/bin/cp -fv /usr/lib/rpm/redhat/config.sub ./build-aux/config.sub
  • ./configure --build=x86_64-redhat-linux-gnu --host=x86_64-redhat-linux-gnu --program-prefix= --disable-dependency-tracking --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib64 --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/var/lib --mandir=/usr/share/man --infodir=/usr/share/info 'CFLAGS=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic -DLT_LAZY_OR_NOW="RTLD_LAZY|RTLD_GLOBAL"' --disable-static --enable-all-plugins=yes --enable-match_empty_counter --enable-match_hashed --enable-match_regex --enable-match_timediff --enable-match_value --enable-target_notification --enable-target_replace --enable-target_scale --enable-target_set --enable-target_v5upgrade --enable-aggregation --disable-amqp --enable-apache --enable-apcups --disable-apple_sensors --disable-aquaero --enable-ascent --disable-barometer --enable-battery --enable-bind --enable-ceph --enable-cgroups --enable-chrony --enable-conntrack --enable-contextswitch --enable-cpufreq --enable-cpusleep --enable-cpu --enable-csv --enable-curl_json --enable-curl_xml --enable-curl --enable-dbi --enable-df --enable-disk --enable-dns --disable-dpdkstat --enable-drbd --disable-dpdkevents --disable-dpdkstat --enable-email --enable-entropy --enable-ethstat --enable-exec --enable-fhcount --enable-filecount --enable-filedata --enable-fscache --disable-gmond --disable-gps --disable-grpc --enable-hddtemp --enable-hugepages --disable-intel_pmu --disable-intel_rdt --enable-interface --enable-ipc --enable-ipmi --enable-iptables --enable-ipvs --enable-irq --disable-java --enable-load --enable-log_logstash --enable-logfile --disable-lpar --enable-lua --disable-lvm --enable-madwifi --enable-mbmon --enable-mcelog --enable-md --enable-memcachec --enable-memcached --enable-memory --disable-mic --enable-modbus --enable-mqtt --enable-multimeter --enable-mysql --disable-netapp --enable-netlink --enable-network --enable-nfs --enable-nginx --enable-notify_desktop --enable-notify_email --enable-notify_nagios --enable-ntpd --enable-numa --disable-nut --enable-olsrd --disable-onewire --enable-openldap --enable-openvpn --disable-oracle --enable-ovs_events --enable-ovs_stats --enable-perl --with-perl-bindings=INSTALLDIRS=vendor --disable-pf --disable-pinba --disable-ping --enable-postgresql --enable-powerdns --enable-processes --enable-protocols --enable-python --disable-redis --disable-routeros --enable-rrdcached --enable-rrdtool --enable-sensors --enable-serial --disable-sigrok --enable-smart --enable-snmp --enable-snmp_agent --enable-statsd --enable-swap --enable-syslog --enable-table --enable-tail_csv --enable-tail --disable-tape --enable-tcpconns --enable-teamspeak2 --enable-ted --enable-thermal --enable-threshold --disable-tokyotyrant --disable-turbostat --enable-unixsock --enable-uptime --enable-users --enable-uuid --disable-varnish --enable-virt --enable-vmem --enable-vserver --enable-wireless --enable-write_graphite --enable-write_http --enable-write_http --disable-write_kafka --enable-write_log --disable-write_mongodb --enable-write_prometheus --disable-write_redis --enable-write_riemann --enable-write_sensu --enable-write_tsdb --disable-xencpu --disable-xmms --enable-zfs_arc --disable-zone --enable-zookeeper --enable-ganglia --enable-gpfs --enable-ime --enable-ssh --enable-stress --enable-stress2 --enable-zabbix
  • /usr/bin/make -j8
    In file included from src/libcollectdclient/client.c:33:0:
    src/libcollectdclient/client.c: In function 'lcc_version':
    src/libcollectdclient/collectd/lcc_features.h:49:9: error: expected expression before ')' token
    ((major) * 10000 + (minor) * 100 + (patch))
    ^
    src/libcollectdclient/collectd/lcc_features.h:52:2: note: in expansion of macro 'LCC_VERSION_ENCODE'
    LCC_VERSION_ENCODE(LCC_VERSION_MAJOR, LCC_VERSION_MINOR, LCC_VERSION_PATCH)
    ^
    src/libcollectdclient/client.c:528:10: note: in expansion of macro 'LCC_VERSION'
    return LCC_VERSION;
    ^
    src/libcollectdclient/client.c:529:1: error: control reaches end of non-void function [-Werror=return-type]
    } /* }}} unsigned int lcc_version */
    ^
    cc1: all warnings being treated as errors
    make[1]: *** [src/libcollectdclient/libcollectdclient_la-client.lo] Error 1
    make[1]: *** Waiting for unfinished jobs....
    make: *** [all] Error 2
    error: Bad exit status from /var/tmp/rpm-tmp.Q3CkDU (%build)
    Bad exit status from /var/tmp/rpm-tmp.Q3CkDU (%build)
    ]
    [2021/05/31-11:23:58] [ERROR] [esmon_build.py:404] failed to build Collectd on host [localhost]
    [2021/05/31-11:23:58] [ERROR] [esmon_build.py:1192] failed to prepare RPMs of CentOS7 on local host
    [2021/05/31-11:23:58] [ERROR] [esmon_build.py:1434] build failed

Error message of wrong config should be more comprehensible

Following error messages are printed if /etc/esmon_install.conf is invalid. But it is not helpful to understand where the problem is.

[ERROR] [esmon_config.py:2043] config option [host_id] is not configured and has no default value
[ERROR] [esmon_install_nodeps.py:2428] failed to parse config [/etc/esmon_install.conf]

No data in Write Throughput per client in Lustre Statistics panel

I have turned lustre_exp_ost=true,and after that I can see data in Write/Read Throughtput per Client in Lustre OST panel,but in Lustre STatistics panel the Write/Read Throughtput per Client panel is blank.And another issue is I/O Throughput panel also has no data.

CentOS 7.7 - additional undocumented dependencies

Hi,
When building esmon on a new CentOS7.7 server installed with minimal iso, there are few more dependencies than as documented currently.

  • java
  • bzip2
  • rpm-build
  • python-devel
  • wget

FMPOV, these additional dependencies should be added to the documentation.

can't deterimine Lustre version according to RPM names on host,possible version are [es2 es3 es4 2.7 2.12],using default [es3]

My lustre version is 2.12.0.The debug info shows:
can't deterimine Lustre version according to RPM names 0n host [10.10.18.2],possible version are [es2 es3 es4 2.7 2.12],using default [es3]
10.10.18.2 is my MDS node,and i exec "rpm -qa |grep lustre" in this node it shows:
lustre-2.12.0-957.el7.x86_64
kernel-3.10.0-957.el7_lustre.x86_64
kmod-lustre-2.12.0-1.el7.x86_64
kmod-lustre-osd-ldiskfs-2.12.0-1.el7.x86_64
lustre-iokit-2.12.0-1.el7.x86_64
kernel-devel-3.10.0-957.el7_lustre.x86_64
kernel-devel-3.10.0-957.10.1.el7_lustre.x86_64
lustre-osd-ldiskfs-mount-2.12.0-1.el7.x86_64
kernel-3.10.0-862.2.3.el7_lustre.x86_64

Failed to check measurement

I run esmon_install to setup LustrePerfMon in my lustre clustre,but failed white the debug log shows:
[ERROR][utils.py:464] timeout when waiting condition
[ERROR][esmon_install_nodeps.py:2110] failed to check measurement [memory.buffered.memory]
[ERROR][esmon_install_nodeps.py:2504] Influxdb doesn't have expected datapoints from host

In grafana the lustre MDT panel has not data

Hi @LiXi-storage I run esmon_install successfully(Lustre version is 2.12.0),when i enter the grafana UI,the Lustre MDT panel has not data,the Filesystem Name: lustre MDT Index: None,I don'n know why,however the Lustre OST panel has data.I exec "systemctl status collected" every shows well

Failed to disabled SELinux on host

I run esmon_install and it occurs an error,the logs shows:
[ssh_host.py:1564] failed to run command [sed -i 's/SELinux=./SELinux=disabled/' /etc/selinux/config] on host 10.10.11.200
[ERROR][esmon_install_nodeps.py:2203] failed to disabled SELinux on host [10.10.11.200]
However i can exec ssh -a -x -l root -o StrictHostKeychecking=no -o BatchMode=yes -i /root/.ssh/id_rsa 10.10.11.200 "sed -i 's/SELinux=.
/SELinux=disabled/' /etc/selinux/config'"

Build failed

Hello.
I am trying to build esmon on CentOS 7. /etc/esmon_build.conf is empty.

But executing ./esmon_build outputs an error:

cp: cannot stat 'xml_definition/RPMS/noarch/xml_definition-2.2-1.g%{?rev}.noarch.rpm': No such file or directory 

It seems to be something wrong with the process of converting %{?rev}.

Grafana plugins are not installed

Similar problem reported before in ticket #14

This might be caused by the build problem in esmon_build. If the plugin was not downloaded fully, at the next build time, it will never be downloaded because the directory is already there.

CentOS 8

Hej all,

any information if LustrePerfMon will be able to properly run on CentOS 8.1 or 8.2 (Especially on the monitoring agents)?

Greetings,
Bjoern

type of data source is incorrect

# lctl get_param llite.*.stats
llite.ai400x-ffff96c77325c000.stats=
snapshot_time             1602841753.046578144 secs.nsecs
read_bytes                10556773 samples [bytes] 1 16777216 41809545646900
write_bytes               29461907 samples [bytes] 1 8388608 12108075547325
read                      9322645 samples [usec] 0 2452935 439997359929
write                     29461908 samples [usec] 0 13424175 246414418996
ioctl                     13327 samples [reqs]
open                      841501 samples [usec] 0 269934 370300646
close                     841461 samples [usec] 0 133320 518838693
mmap                      158922 samples [usec] 1 441 551480
page_fault                68572074 samples [usec] 0 111924 35539384
page_mkwrite              8456 samples [usec] 2 56400 8116217
seek                      692298 samples [usec] 0 906 235054
readdir                   56712 samples [usec] 0 7426 7049590
setattr                   4034 samples [usec] 68 23557 1174819
truncate                  2847 samples [usec] 157 5706 1327775
flock                     1008 samples [usec] 52 344 85065
getattr                   3119348 samples [usec] 0 114133 169403137
unlink                    230879 samples [usec] 104 133784 194829841
mkdir                     18840 samples [usec] 105 65748 11818963
rmdir                     18232 samples [usec] 97 13584 2944967
rename                    22124 samples [usec] 100 101265 21533752
statfs                    1906 samples [usec] 0 388 65867
getxattr                  252700 samples [usec] 0 226532 332799370
getxattr_hits             4597 samples [reqs]
inode_permission          11771031 samples [usec] 0 1495 187190
In Lustre client stats, client_stats_write_bytes_samples, client_stats_read_bytes_samples, client_stats_write_bytes_sum and client_stats_read_bytes_sum shoudl be derive, not gauge.

got exception with query [SELECT * FROM "memory.buffered.memory" WHERE fqdn = 'mds' ORDER BY time DESC LIMIT 1;]

[2020/10/14-14:58:38] [INFO] [filelock.py:247] Lock 140164392906576 acquired on /etc/esmon_install.conf.lock
[2020/10/14-14:58:39] [WARNING] [ssh_host.py:232] lsb_release is needed on host [mds] for accurate distro identification
[2020/10/14-14:58:40] [INFO] [esmon_install_nodeps.py:1514] can't deterimine Lustre version according to RPM names on host [mds], possible versions are [es2 es3 es4 2.7 2.12], using default [es3]
[2020/10/14-14:58:40] [INFO] [esmon_install_nodeps.py:2470] ESMON server won't be reinstalled according to the config
[2020/10/14-14:58:40] [INFO] [esmon_install_nodeps.py:2484] support for metrics of [memory, CPU, df(/), load, sensors, uptime, users, Lustre MDS] will be enabled on ESMON client [mds] according to the config
[2020/10/14-14:58:51] [INFO] [connectionpool.py:203] Starting new HTTP connection (1): cloudos112
[2020/10/14-14:58:51] [ERROR] [esmon_influxdb.py:60] got exception with query [SELECT * FROM "memory.buffered.memory" WHERE fqdn = 'mds' ORDER BY time DESC LIMIT 1;]: Traceback (most recent call last):
File "pyesmon/esmon_influxdb.py", line 57, in ic_query
File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 464, in request
resp = self.send(prep, **send_kwargs)
File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 576, in send
r = adapter.send(request, **kwargs)
File "/usr/lib/python2.7/site-packages/requests/adapters.py", line 415, in send
raise ConnectionError(err, request=request)
ConnectionError: ('Connection aborted.', error(111, 'Connection refused'))

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.