{"id":13716452,"url":"https://github.com/treydock/gpfs_exporter","last_synced_at":"2025-08-02T00:07:08.552Z","repository":{"id":43318266,"uuid":"234810391","full_name":"treydock/gpfs_exporter","owner":"treydock","description":null,"archived":false,"fork":false,"pushed_at":"2025-06-09T13:16:34.000Z","size":373,"stargazers_count":47,"open_issues_count":5,"forks_count":16,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-06-10T07:43:23.172Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/treydock.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-01-18T23:11:04.000Z","updated_at":"2025-04-28T17:15:25.000Z","dependencies_parsed_at":"2023-11-20T19:27:18.280Z","dependency_job_id":"1cb3f16b-27b9-41b4-a10f-e1e96239bf11","html_url":"https://github.com/treydock/gpfs_exporter","commit_stats":null,"previous_names":[],"tags_count":42,"template":false,"template_full_name":null,"purl":"pkg:github/treydock/gpfs_exporter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/treydock%2Fgpfs_exporter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/treydock%2Fgpfs_exporter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/treydock%2Fgpfs_exporter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/treydock%2Fgpfs_exporter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/treydock","download_url":"https://codeload.github.com/treydock/gpfs_exporter/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/treydock%2Fgpfs_exporter/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268315941,"owners_count":24231059,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-01T02:00:08.611Z","response_time":67,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-03T00:01:10.629Z","updated_at":"2025-08-02T00:07:08.541Z","avatar_url":"https://github.com/treydock.png","language":"Go","funding_links":[],"categories":["Monitoring"],"sub_categories":["Prometheus Based"],"readme":"# GPFS Prometheus exporter\n\n[![Build Status](https://circleci.com/gh/treydock/gpfs_exporter/tree/master.svg?style=shield)](https://circleci.com/gh/treydock/gpfs_exporter)\n[![GitHub release](https://img.shields.io/github/v/release/treydock/gpfs_exporter?include_prereleases\u0026sort=semver)](https://github.com/treydock/gpfs_exporter/releases/latest)\n![GitHub All Releases](https://img.shields.io/github/downloads/treydock/gpfs_exporter/total)\n[![Go Report Card](https://goreportcard.com/badge/github.com/treydock/gpfs_exporter)](https://goreportcard.com/report/github.com/treydock/gpfs_exporter)\n[![codecov](https://codecov.io/gh/treydock/gpfs_exporter/branch/master/graph/badge.svg)](https://codecov.io/gh/treydock/gpfs_exporter)\n\n# GPFS Prometheus exporter\n\nThe GPFS exporter collects metrics from the GPFS filesystem.\nThe exporter supports the `/metrics` endpoint to gather GPFS metrics and metrics about the exporter.\n\n## Collectors\n\nCollectors are enabled or disabled via `--collector.\u003cname\u003e` and `--no-collector.\u003cname\u003e` flags.\n\nName | Description | Default\n-----|-------------|--------\nmmgetstate | Collect state via mmgetstate | Enabled\nmmpmon| Collect metrics from `mmpmon` using `fs_io_s` | Enabled\nmount | Check status of GPFS mounts. | Enabled\nconfig | Collect configs via 'mmdiag --config' | Enabled\nverbs | Test if GPFS is using verbs interface | Disabled\nmmhealth | Test node health through `mmhealth` | Disabled\nwaiter | Collect waiters via 'mmdiag --waiters' | Disabled\nmmdf | Collect filesystem space for inodes, block and metadata. | Disabled\nmmces | Collect state of CES | Disabled\nmmrepquota | Collect fileset quota information | Disabled\nmmlssnapshot | Collect GPFS snapshot information | Disabled\nmmlsfileset | Collect GPFS fileset information | Disabled\nmmlsqos | Collect GPFS I/O performance values of a file system, when you enable Quality of Service | Disabled\nmmlspool | Collect GPFS pool data | Disabled\n\n### mount\n\nThe default behavior of the `mount` collector is to collect mount statuses on GPFS mounts in /proc/mounts or /etc/fstab. The `--collector.mount.mounts` flag can be used to adjust which mount points to check.\n\n### mmhealth\n\nThe mmhealth statuses and events collected can be filtered with the following flags that all take a regex.\n\n* `--collector.mmhealth.ignored-component` - The component regex to ignore.\n* `--collector.mmhealth.ignored-entityname` - The entity name regex to ignore.\n* `--collector.mmhealth.ignored-entitytype` - The entity type regex to ignore.\n* `--collector.mmhealth.ignored-event` - The event regex to ignore.\n\n### waiter\n\nThe waiter's seconds are stored in Histogram buckets defined by `--collector.waiter.buckets` which is a comma separated list of durations that are converted to seconds so `1s,5s,30s,1m` would have buckets of `[]float64{1,5,30,60}`.\n\nThe flag `--collector.waiter.exclude` defines a regular expression of waiter names to exclude.\n\nThe flag `--collector.waiter.log-reason` can enable logging of waiter reasons. The reason can produce very high cardinality so it is not included in metrics.\n\n### mmdf\n\nDue to the time it can take to execute mmdf that is an executable provided that can be used to collect mmdf via cron. See `gpfs_mmdf_exporter`.\n\nFlags:\n\n* `--output` - This is expected to be a path collected by the Prometheus node_exporter textfile collector\n* `--collector.mmdf.filesystems` - A comma separated list of filesystems to collect. Default is to collect all filesystems listed by `mmlsfs`.\n\n### mmces\n\nThe command used to collect CES states needs a specific node name.\nThe `--collector.mmces.nodename` flag can be used to specify which CES node to check.\nThe default is FQDN of those running the exporter.\n\n### mmrepquota\n\n* `--collector.mmrepquota.filesystems` - A comma separated list of filesystems to collect. Default is to collect all filesystems.\n* `--collector.mmrepquota.quota-types` - Comma seperated list of filesystem types to collect (`fileset` for FILESET, `user` for USR, `group` for GRP). Default is FILESET only. Ex: `fileset,user` collects FILESET and USR.\n\n### mmlssnapshot\n\n* `--collector.mmlssnapshot.filesystems` - A comma separated list of filesystems to collect. Default is to collect all filesystems listed by `mmlsfs`.\n* `--collector.mmlssnapshot.get-size` - Pass this flag to collect snapshot sizes. This operation could take a long time depending on filesystem size, consider using `gpfs_mmlssnapshot_exporter` instead.\n\nThe exporter `gpfs_mmlssnapshot_exporter` is provided to allow snapshot collection, including size (with `--collector.mmlssnapshot.get-size`) to be collected with cron rather than a Prometheus scrape through the normal exporter.\n\n### mmlsfileset\n\n* `--collector.mmlsfileset.filesystems` - A comma separated list of filesystems to collect. Default is to collect all filesystems listed by `mmlsfs`.\n\n**NOTE**: This collector does not collect used inodes. To get used inodes look at using the [mmrepquota](#mmrepquota) collector.\n\n### mmlsqos\n\nDisplays the I/O performance values of a file system, when you enable Quality of Service for I/O operations (QoS) with the mmchqos command.\n\nFlags:\n* `--collector.mmlsqos.filesystems` - A comma separated list of filesystems to collect. Default is to collect all filesystems listed by `mmlsfs`.\n* `--collector.mmlsqos.timeout` - Count of seconds for running mmlsqos command before timeout error will be raised. Default value is 60 seconds.\n* `--collector.mmlsqos.seconds` - Displays the I/O performance values for the previous number of seconds. The valid range of seconds is 1-999. The default value is 60 seconds.\n\n### mmlspool\n\nCollects GPFS pool data\n\nFlags:\n* `--collector.mmlspool.filesystems` - A comma separated list of filesystems to collect. Default is to collect all filesystems listed by `mmlsfs`.\n* `--collector.mmlspool.timeout` - Count of seconds for running mmlspool command before timeout error will be raised. Default value is 30 seconds.\n\n## Sudo\n\nEnsure the user running `gpfs_exporter` can execute GPFS commands necessary to collect metrics.\nThe following sudo config assumes `gpfs_exporter` is running as `gpfs_exporter`.\n\n```\nDefaults:gpfs_exporter !syslog\nDefaults:gpfs_exporter !requiretty\n# mmgetstate collector\ngpfs_exporter ALL=(ALL) NOPASSWD:/usr/lpp/mmfs/bin/mmgetstate -Y\n# mmpmon collector\ngpfs_exporter ALL=(ALL) NOPASSWD:/usr/lpp/mmfs/bin/mmpmon -s -p\n# config collector\ngpfs_exporter ALL=(ALL) NOPASSWD:/usr/lpp/mmfs/bin/mmdiag --config -Y\n# mmhealth collector\ngpfs_exporter ALL=(ALL) NOPASSWD:/usr/lpp/mmfs/bin/mmhealth node show -Y\n# verbs collector\ngpfs_exporter ALL=(ALL) NOPASSWD:/usr/lpp/mmfs/bin/mmfsadm test verbs status\n# mmdf/mmlssnapshot collector if filesystems not specified\ngpfs_exporter ALL=(ALL) NOPASSWD:/usr/lpp/mmfs/bin/mmlsfs all -Y -T\n# waiter collector\ngpfs_exporter ALL=(ALL) NOPASSWD:/usr/lpp/mmfs/bin/mmdiag --waiters -Y\n# mmces collector\ngpfs_exporter ALL=(ALL) NOPASSWD:/usr/lpp/mmfs/bin/mmces state show *\n# mmdf collector, each filesystem must be listed\ngpfs_exporter ALL=(ALL) NOPASSWD:/usr/lpp/mmfs/bin/mmdf project -Y\ngpfs_exporter ALL=(ALL) NOPASSWD:/usr/lpp/mmfs/bin/mmdf scratch -Y\n# mmrepquota collector, filesystems not specified\ngpfs_exporter ALL=(ALL) NOPASSWD:/usr/lpp/mmfs/bin/mmrepquota -j -Y -a\n# mmrepquota collector, filesystems specified\ngpfs_exporter ALL=(ALL) NOPASSWD:/usr/lpp/mmfs/bin/mmrepquota -j -Y project scratch\n# mmlssnapshot collector, each filesystem must be listed\ngpfs_exporter ALL=(ALL) NOPASSWD:/usr/lpp/mmfs/bin/mmlssnapshot project -s all -Y\ngpfs_exporter ALL=(ALL) NOPASSWD:/usr/lpp/mmfs/bin/mmlssnapshot ess -s all -Y\n# mmlsfileset collector, each filesystem must be listed\ngpfs_exporter ALL=(ALL) NOPASSWD:/usr/lpp/mmfs/bin/mmlsfileset project -Y\ngpfs_exporter ALL=(ALL) NOPASSWD:/usr/lpp/mmfs/bin/mmlsfileset ess -Y\n# mmlsqos collector, each filesystem must be listed\ngpfs_exporter ALL=(ALL) NOPASSWD:/usr/lpp/mmfs/bin/mmlsqos mmfs1 -Y\ngpfs_exporter ALL=(ALL) NOPASSWD:/usr/lpp/mmfs/bin/mmlsqos ess -Y\n# mmlspool collector, each filesystem must be listed\ngpfs_exporter ALL=(ALL) NOPASSWD:/usr/lpp/mmfs/bin/mmlspool mmfs1\ngpfs_exporter ALL=(ALL) NOPASSWD:/usr/lpp/mmfs/bin/mmlspool ess\n```\n\n## Install\n\nDownload the [latest release](https://github.com/treydock/gpfs_exporter/releases)\n\nAdd the user that will run `gpfs_exporter`\n\n```\ngroupadd -r gpfs_exporter\nuseradd -r -d /var/lib/gpfs_exporter -s /sbin/nologin -M -g gpfs_exporter -M gpfs_exporter\n```\n\nInstall compiled binaries after extracting tar.gz from release page.\n\n```\ncp /tmp/gpfs_exporter /usr/local/bin/gpfs_exporter\n```\n\nAdd sudo rules, see [sudo section](#sudo)\n\nAdd systemd unit file and start service. Modify the `ExecStart` with desired flags.\n\n```\ncp systemd/gpfs_exporter.service /etc/systemd/system/gpfs_exporter.service\nsystemctl daemon-reload\nsystemctl start gpfs_exporter\n```\n\n## Build from source\n\nTo produce the `gpfs_exporter`, `gpfs_mmdf_exporter`, and `gpfs_mmlssnapshot_exporter` binaries:\n\n```\nmake build\n```\n\nOr\n\n```\ngo get github.com/treydock/gpfs_exporter/cmd/gpfs_exporter\ngo get github.com/treydock/gpfs_exporter/cmd/gpfs_mmdf_exporter\ngo get github.com/treydock/gpfs_exporter/cmd/gpfs_mmlssnapshot_exporter\n```\n\n## TLS and basic auth\n\n`gpfs_exporter` supports TLS and basic auth using [exporter-toolkit](https://github.com/prometheus/exporter-toolkit). To use TLS and/or basic auth, users need to use `--web.config.file` CLI flag as follows\n\n```\ngpfs_exporter --web.config.file=web-config.yaml\n```\n\nA sample `web-config.yaml` file can be fetched from [exporter-toolkit repository](https://github.com/prometheus/exporter-toolkit/blob/master/docs/web-config.yml). The reference of the `web-config.yaml` file can be consulted in the [docs](https://github.com/prometheus/exporter-toolkit/blob/master/docs/web-configuration.md).\n\n## Grafana\n\nThere is an example [GPFS Performance](https://grafana.com/grafana/dashboards/14844) dashboard.  See the description on that dashboard for additional information on labels needed to utilize that dashboard.\n\n## Prometheus Configuration\n\nThis is an example scrape config with some metrics excluded for HPC compute nodes with label `role=compute`:\n\n```yaml\n- job_name: gpfs\n  scrape_timeout: 2m\n  scrape_interval: 3m\n  relabel_configs:\n  - source_labels: [__address__]\n    regex: \"([^.]+)..*\"\n    replacement: \"$1\"\n    target_label: host\n  metric_relabel_configs:\n  - source_labels: [__name__,role]\n    regex: gpfs_(mount|health|verbs)_status;compute\n    action: drop\n  - source_labels: [__name__,collector,role]\n    regex: gpfs_exporter_(collect_error|collector_duration_seconds);(mmhealth|mount|verbs);compute\n    action: drop\n  - source_labels: [__name__,role]\n    regex: \"^(go|process|promhttp)_.*;compute\"\n    action: drop\n  file_sd_configs:\n  - files:\n    - \"/etc/prometheus/file_sd_config.d/gpfs_*.yaml\"\n```\n\nAn example scrape target configuration:\n\n```yaml\n- targets:\n  - c0001.example.com:9303\n  labels:\n    host: c0001\n    cluster: example\n    environment: production\n    role: compute\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftreydock%2Fgpfs_exporter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftreydock%2Fgpfs_exporter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftreydock%2Fgpfs_exporter/lists"}