{"id":13489355,"url":"https://github.com/ovh/noderig","last_synced_at":"2026-01-14T22:22:51.958Z","repository":{"id":45960568,"uuid":"79458745","full_name":"ovh/noderig","owner":"ovh","description":"Export OS stats as Sensision Metrics","archived":true,"fork":false,"pushed_at":"2021-11-24T10:03:57.000Z","size":132,"stargazers_count":55,"open_issues_count":4,"forks_count":19,"subscribers_count":15,"default_branch":"master","last_synced_at":"2026-01-14T17:38:34.347Z","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":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ovh.png","metadata":{"files":{"readme":"Readme.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-01-19T14:00:47.000Z","updated_at":"2023-01-28T05:10:16.000Z","dependencies_parsed_at":"2022-08-28T15:20:32.184Z","dependency_job_id":null,"html_url":"https://github.com/ovh/noderig","commit_stats":null,"previous_names":["runabove/noderig"],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/ovh/noderig","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ovh%2Fnoderig","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ovh%2Fnoderig/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ovh%2Fnoderig/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ovh%2Fnoderig/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ovh","download_url":"https://codeload.github.com/ovh/noderig/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ovh%2Fnoderig/sbom","scorecard":{"id":715454,"data":{"date":"2025-08-11","repo":{"name":"github.com/ovh/noderig","commit":"c37f58ee76e9a3a248579c396376ce3df422e31f"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.9,"checks":[{"name":"Maintained","score":0,"reason":"project is archived","details":["Warn: Repository is archived."],"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":5,"reason":"Found 9/16 approved changesets -- score normalized to 5","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: containerImage not pinned by hash: Dockerfile:1: pin your Docker image by updating debian:stretch to debian:stretch@sha256:c5c5200ff1e9c73ffbf188b4a67eb1c91531b644856b4aefe86a58d2f0cb05be","Info:   0 out of   1 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v2.5.7 not signed: https://api.github.com/repos/ovh/noderig/releases/32047946","Warn: release artifact v2.5.6 not signed: https://api.github.com/repos/ovh/noderig/releases/23836538","Warn: release artifact v2.5.5 not signed: https://api.github.com/repos/ovh/noderig/releases/23249746","Warn: release artifact v2.5.4 not signed: https://api.github.com/repos/ovh/noderig/releases/22830061","Warn: release artifact v2.5.3 not signed: https://api.github.com/repos/ovh/noderig/releases/18519230","Warn: release artifact v2.5.7 does not have provenance: https://api.github.com/repos/ovh/noderig/releases/32047946","Warn: release artifact v2.5.6 does not have provenance: https://api.github.com/repos/ovh/noderig/releases/23836538","Warn: release artifact v2.5.5 does not have provenance: https://api.github.com/repos/ovh/noderig/releases/23249746","Warn: release artifact v2.5.4 does not have provenance: https://api.github.com/repos/ovh/noderig/releases/22830061","Warn: release artifact v2.5.3 does not have provenance: https://api.github.com/repos/ovh/noderig/releases/18519230"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 28 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":6,"reason":"4 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GO-2022-0493 / GHSA-p782-xgp4-8hr8","Warn: Project is vulnerable to: GO-2020-0015 / GHSA-5rcv-m4m3-hfh7","Warn: Project is vulnerable to: GO-2021-0113 / GHSA-ppp9-7jff-5vj2","Warn: Project is vulnerable to: GO-2022-1059 / GHSA-69ch-w2m2-3vjp"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-22T09:29:00.879Z","repository_id":45960568,"created_at":"2025-08-22T09:29:00.880Z","updated_at":"2025-08-22T09:29:00.880Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28436289,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T21:32:52.117Z","status":"ssl_error","status_checked_at":"2026-01-14T21:32:33.442Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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-07-31T19:00:24.333Z","updated_at":"2026-01-14T22:22:51.924Z","avatar_url":"https://github.com/ovh.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"# Noderig - Export OS stats as Sensision or Prometheus Metrics\n\n[![Build Status](https://travis-ci.org/ovh/noderig.svg?branch=master)](https://travis-ci.org/ovh/noderig)\n\nNoderig collect OS metrics and expose them through a Sensision HTTP endpoint. Each collector is easily configurable, thanks to a simple level cursor\n\nNoderig metrics:\n- CPU\n- Memory\n- Load\n- Disk\n- Net\n- External collectors\n\n## Status\n\nNoderig is not under development. We are moving toward [node_exporter](https://github.com/prometheus/node_exporter)\n\n## Building\n\nNoderig is pretty easy to build.\n\n- Clone the repository\n- Install glide, follow instructions here https://glide.sh/\n- Download dependencies `glide install`\n- Build and run `go run noderig.go`\n\n## Usage\n\n```\nnoderig [flags]\n\nFlags:\n      --config string       config file to use\n  -l  --listen string       listen address (default \"127.0.0.1:9100\")\n  -v  --verbose             verbose output\n      --period uint         default collection period (default 1000)\n      --cpu uint8           cpu metrics level (default 1)\n      --disk uint8          disk metrics level (default 1)\n      --mem uint8           memory metrics level (default 1)\n      --net uint8           network metrics level (default 1)\n      --load uint8          load metrics level (default 1)\n  -c  --collectors string   external collectors directory (default \"./collectors\")\n  -k  --keep-for uint       keep collectors data for the given number of fetch (default 3)\n      --net-opts.interfaces give a filtering list of network interfaces to collect metrics on\n      --disk-opts.names     give a filtering list of disks names to collect metrics on\n```\n\n## Collectors\nNoderig have some built-in collectors.\n\n### CPU\n\u003ctable\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cb\u003eLevel\u003c/b\u003e\u003c/td\u003e\u003ctd\u003e\u003cb\u003eMetric\u003c/b\u003e\u003c/td\u003e\u003ctd\u003e\u003cb\u003eDescription\u003c/b\u003e\u003c/td\u003e\u003ctd\u003e\u003cb\u003eModule\u003c/b\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e0\u003c/td\u003e\u003ctd\u003e\u003c/td\u003e\u003ctd\u003edisabled metrics\u003c/td\u003e\u003ctd\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e1\u003c/td\u003e\u003ctd\u003eos.cpu{}\u003c/td\u003e\u003ctd\u003ecombined percentage of cpu usage\u003c/td\u003e\u003ctd\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd rowspan=\"7\"\u003e2\u003c/td\u003e\u003ctd\u003eos.cpu.iowait{}\u003c/td\u003e\u003ctd\u003ecombined percentage of cpu iowait\u003c/td\u003e\u003ctd\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eos.cpu.user{}\u003c/td\u003e\u003ctd\u003ecombined percentage of cpu user\u003c/td\u003e\u003ctd\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eos.cpu.systems{}\u003c/td\u003e\u003ctd\u003ecombined percentage of cpu systems\u003c/td\u003e\u003ctd\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eos.cpu.nice{}\u003c/td\u003e\u003ctd\u003ecombined percentage of cpu nice\u003c/td\u003e\u003ctd\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eos.cpu.irq{}\u003c/td\u003e\u003ctd\u003ecombined percentage of cpu irq\u003c/td\u003e\u003ctd\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eos.cpu.steal{}\u003c/td\u003e\u003ctd\u003ecombined percentage of cpu stolen\u003c/td\u003e\u003ctd\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eos.cpu.idlel{}\u003c/td\u003e\u003ctd\u003ecombined percentage of cpu idle\u003c/td\u003e\u003ctd\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eos.cpu.temperature{id=n}\u003c/td\u003e\u003ctd\u003etemperature of cpu n\u003c/td\u003e\u003ctd\u003etemperature\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd rowspan=\"7\"\u003e3\u003c/td\u003e\u003ctd\u003eos.cpu.iowait{chore=n}\u003c/td\u003e\u003ctd\u003echore percentage of cpu iowait\u003c/td\u003e\u003ctd\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eos.cpu.user{chore=n}\u003c/td\u003e\u003ctd\u003echore percentage of cpu user\u003c/td\u003e\u003ctd\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eos.cpu.systems{chore=n}\u003c/td\u003e\u003ctd\u003echore percentage of cpu systems\u003c/td\u003e\u003ctd\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eos.cpu.nice{chore=n}\u003c/td\u003e\u003ctd\u003echore percentage of cpu nice\u003c/td\u003e\u003ctd\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eos.cpu.irq{chore=n}\u003c/td\u003e\u003ctd\u003echore percentage of cpu irq\u003c/td\u003e\u003ctd\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eos.cpu.steal{chore=n}\u003c/td\u003e\u003ctd\u003echore percentage of cpu stolen\u003c/td\u003e\u003ctd\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eos.cpu.idle{chore=n}\u003c/td\u003e\u003ctd\u003echore percentage of cpu idle\u003c/td\u003e\u003ctd\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eos.cpu.temperature{core=n}\u003c/td\u003e\u003ctd\u003etemperature of cpu core n\u003c/td\u003e\u003ctd\u003etemperature\u003c/td\u003e\u003c/tr\u003e\n\u003c/table\u003e\n\n### Memory\n\u003ctable\u003e\n\u003ctr\u003e\u003ctd\u003e0\u003c/td\u003e\u003ctd\u003e\u003c/td\u003e\u003ctd\u003edisabled metrics\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd rowspan=\"2\"\u003e1\u003c/td\u003e\u003ctd\u003eos.mem{}\u003c/td\u003e\u003ctd\u003epercentage of memory used\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eos.swap{}\u003c/td\u003e\u003ctd\u003epercentage of swap used\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd rowspan=\"4\"\u003e2\u003c/td\u003e\u003ctd\u003eos.mem.used{}\u003c/td\u003e\u003ctd\u003eused memory (bytes)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eos.mem.total{}\u003c/td\u003e\u003ctd\u003etotal memory (bytes)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eos.swap.used{}\u003c/td\u003e\u003ctd\u003eused swap (bytes)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eos.swap.total{}\u003c/td\u003e\u003ctd\u003etotal swap (bytes)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd rowspan=\"3\"\u003e3\u003c/td\u003e\u003ctd\u003eos.mem.free{}\u003c/td\u003e\u003ctd\u003efree memory (bytes)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eos.mem.buffers{}\u003c/td\u003e\u003ctd\u003ebuffers memory (bytes)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eos.mem.cached{}\u003c/td\u003e\u003ctd\u003ecached memory (bytes)\u003c/td\u003e\u003c/tr\u003e\n\u003c/table\u003e\n\n### Load\n\u003ctable\u003e\n\u003ctr\u003e\u003ctd\u003e0\u003c/td\u003e\u003ctd\u003e\u003c/td\u003e\u003ctd\u003edisabled metrics\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e1\u003c/td\u003e\u003ctd\u003eos.load1{}\u003c/td\u003e\u003ctd\u003eload 1\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd rowspan=\"2\"\u003e2\u003c/td\u003e\u003ctd\u003eos.load5{}\u003c/td\u003e\u003ctd\u003eload 5\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eos.load15{}\u003c/td\u003e\u003ctd\u003eload 15\u003c/td\u003e\u003c/tr\u003e\n\u003c/table\u003e\n\n### Disk\n\u003ctable\u003e\n\u003ctr\u003e\u003ctd\u003e0\u003c/td\u003e\u003ctd\u003e\u003c/td\u003e\u003ctd\u003edisabled metrics\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e1\u003c/td\u003e\u003ctd\u003eos.disk.fs{disk=/dev/sda1}\u003c/td\u003e\u003ctd\u003edisk used percent\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd rowspan=\"4\"\u003e2\u003c/td\u003e\u003ctd\u003eos.disk.fs.used{disk=/dev/sda1, mount=/}\u003c/td\u003e\u003ctd\u003edisk used capacity (bytes)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eos.disk.fs.total{disk=/dev/sda1,mount=/}\u003c/td\u003e\u003ctd\u003edisk total capacity (bytes)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eos.disk.fs.inodes.used{disk=/dev/sda1,mount=/}\u003c/td\u003e\u003ctd\u003edisk used inodes\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eos.disk.fs.inodes.total{disk=/dev/sda1,mount=/}\u003c/td\u003e\u003ctd\u003edisk total inodes\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd rowspan=\"2\"\u003e3\u003c/td\u003e\u003ctd\u003eos.disk.fs.bytes.read{name=sda1}\u003c/td\u003e\u003ctd\u003edisk read count (bytes)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eos.disk.fs.bytes.write{name=sda1}\u003c/td\u003e\u003ctd\u003edisk write count (bytes)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd rowspan=\"2\"\u003e4\u003c/td\u003e\u003ctd\u003eos.disk.fs.io.read{name=sda1}\u003c/td\u003e\u003ctd\u003edisk io read count (bytes)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eos.disk.fs.io.write{disk=/sda1}\u003c/td\u003e\u003ctd\u003edisk io write count (bytes)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd rowspan=\"5\"\u003e5\u003c/td\u003e\u003ctd\u003eos.disk.fs.io.read.ms{name=sda1}\u003c/td\u003e\u003ctd\u003edisk io read time (ms)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eos.disk.fs.io.write.ms{name=sda1}\u003c/td\u003e\u003ctd\u003edisk io write time (ms)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eos.disk.fs.io{name=sda1}\u003c/td\u003e\u003ctd\u003edisk io in progress (count)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eos.disk.fs.io.ms{name=sda1}\u003c/td\u003e\u003ctd\u003edisk io time (ms)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eos.disk.fs.io.weighted.ms{name=sda1}\u003c/td\u003e\u003ctd\u003edisk io weighted time (ms)\u003c/td\u003e\u003c/tr\u003e\n\u003c/table\u003e\n\n### Net\n\u003ctable\u003e\n\u003ctr\u003e\u003ctd\u003e0\u003c/td\u003e\u003ctd\u003e\u003c/td\u003e\u003ctd\u003edisabled metrics\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd rowspan=\"2\"\u003e1\u003c/td\u003e\u003ctd\u003eos.net.bytes{direction=in}\u003c/td\u003e\u003ctd\u003ein bytes count (bytes)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eos.net.bytes{direction=out}\u003c/td\u003e\u003ctd\u003eout bytes count (bytes)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd rowspan=\"2\"\u003e2\u003c/td\u003e\u003ctd\u003eos.net.bytes{direction=in,iface=eth0}\u003c/td\u003e\u003ctd\u003eiface in bytes count (bytes)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eos.net.bytes{direction=out,iface=eth0}\u003c/td\u003e\u003ctd\u003eiface out bytes count (bytes)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd rowspan=\"6\"\u003e3\u003c/td\u003e\u003ctd\u003eos.net.packets{direction=in,iface=eth0}\u003c/td\u003e\u003ctd\u003eiface in packet count (packets)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eos.net.packets{direction=out,iface=eth0}\u003c/td\u003e\u003ctd\u003eiface out packet count (packets)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eos.net.errs{direction=in,iface=eth0}\u003c/td\u003e\u003ctd\u003eiface in error count (errors)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eos.net.errs{direction=out,iface=eth0}\u003c/td\u003e\u003ctd\u003eiface out error count (errors)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eos.net.dropped{direction=in,iface=eth0}\u003c/td\u003e\u003ctd\u003eiface in drop count (drops)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eos.net.dropped{direction=out,iface=eth0}\u003c/td\u003e\u003ctd\u003eiface out drop count (drops)\u003c/td\u003e\u003c/tr\u003e\n\u003c/table\u003e\n\n### Custom\n\nWith Noderig you can define set-up custom collectors as defined in http://bosun.org/scollector/external-collectors. \nTo be enable you need to define a collectors folder using the noderig parameter \"collectors\". \nThis fold need to have a strict arborescence: a number folder and then the exectutable collectors.\n\nFor example to define a script shell collectors reach the noderig collectors file:\n\n```sh\ncd ~/collectors\nmkdir 10\n```\n\nThen inside the 10 folder write the following executable `test.sh` shell script.\n\n```sh\n#!/bin/sh\n\nnow=$(date +%s)\n\necho my.metric $now 42\n```\n\nAnd execute noderig:\n\n```sh\n./build/noderig --collectors ~/collectors\n```\n\nTo conclude you can tun noderig custom collectors with the following configuration parameters:\n\n```yaml\nkeep-metrics: true # To always keep in Noderig the last metrics values\nkeep-for: 3 # Keep-for returned the number values to keep\n```\n\nThe `keep-for` parameter with `keep-metrics` at true keep the last N values otherwise it keep each values for n calls to the noderig metrics endpoint.\n\n## Configuration\n\nNoderig can read a simple default [config file](config.yaml).\n\nConfiguration is load and override in the following order:\n\n- /etc/noderig/config.yaml\n- ~/noderig/config.yaml\n- ./config.yaml\n- config filepath from command line\n\n### Definitions\n\nConfig is composed of three main parts and some config fields:\n\n#### Collectors\n\nNoderig have some built-in collectors. They could be configured by a log level.\nYou can also defined custom collectors, in an scollector way. (see: http://bosun.org/scollector/external-collectors)\nTo configure a custom collectors in noderig reach [custom collectors](https://github.com/ovh/noderig#custom).\n\n```yaml\ncpu: 1  # CPU collector level     (Optional, default: 1)\nmem: 1  # Memory collector level  (Optional, default: 1)\nload: 1 # Load collector level    (Optional, default: 1)\ndisk: 1 # Disk collector level    (Optional, default: 1)\nnet: 1  # Network collector level (Optional, default: 1)\n```\n\n#### Collectors Modules\n\nSome collectors have additionals modules.\nAdd module to `\u003ccollector\u003e-mods` list to enable them.\n\n```yaml\ncpu-mods:\n  - temperature\n```\n\n#### Collectors Options\n\nSome collectors can accept optional parameters.\n\n```yaml\nnet-opts:\n  interfaces:            # Give a filtering list of interfaces for which you want metrics\n    - eth0\n    - eth1\n```\n\nNet-opts, interfaces field support now regular expression to white-list interface based on [golang MatchString](https://golang.org/pkg/regexp/#MatchString) implementation. However to use a regular expression you need to prefix the string value by a `~`. To whitelist all eth interfaces, you can set:\n\n```yaml\nnet-opts:\n  interfaces:            # Give a filtering list of interfaces for which you want metrics\n    - ~eth*\n```\n\n\n```yaml\ndisk-opts:\n  names:            # Give a filtering list of disks for which you want metrics\n    - sda1\n    - sda3\n```\n\nDisk-opts, names field support now regular expression to white-list disks names based on [golang MatchString](https://golang.org/pkg/regexp/#MatchString) implementation. However to use a regular expression you need to prefix the string value by a `~`. To whitelist all disk names, you can set:\n\n```yaml\ndisk-opts:\n  names:            # Give a filtering list of disks names for which you want metrics\n    - ~disk*\n```\n\n#### Parameters\n\nNoderig can be customized through some parameters.\n\n```yaml\nperiod: 1000             # Duration within all the sources should be scraped in ms (Optional, default: 1000)\nlisten: none             # Listen address, set to none to disable http endpoint    (Optional, default: 127.0.0.1:9100)\ncollectors: /opt/noderig # Custom collectors directory                             (Optional, default: none)\n```\n\nTo force default labels to each metrics in Noderig, you can set up a configuration key called `labels`. It expects a label string map as defined below:\n\n```yaml\nlabels: { \n  host: \"srv001\", \n  dc: \"uk1\", \n  type: \"web_server\", \n}\n```\n\n## Sample metrics\n\n```\n1484828198557102// os.cpu{} 2.5202020226869237\n1484828198560976// os.mem{} 24.328345730457112\n1484828198560976// os.swap{} 0\n1484828198557435// os.load1{} 0.63\n1484828198561366// os.net.bytes{direction=in} 858\n1484828198561366// os.net.bytes{direction=out} 778\n1484828197570759// os.disk.fs{disk=/dev/sda1} 4.967614357908193\n```\n\n## Prometheus output format\n\nTo use Noderig and expose a Prometheus native format, just set the following two configuration lines in the config file:\n\n```yaml\nformat: \"prometheus\"  # Expose a Prometheus format in Noderig as: https://prometheus.io/docs/instrumenting/exposition_formats/\nseparator: \"_\"        # Metrics classnames separator, '_' is the default one for Prom, but you can use any other supported by your storage backend\n```\n\n## Contributing\n\nInstructions on how to contribute to Noderig are available on the [Contributing] page.\n\n## Get in touch\n\n- Twitter: [@notd33d33](https://twitter.com/notd33d33)\n\n[contributing]: CONTRIBUTING.md\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fovh%2Fnoderig","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fovh%2Fnoderig","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fovh%2Fnoderig/lists"}