Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ovh/noderig
Export OS stats as Sensision Metrics
https://github.com/ovh/noderig
Last synced: 14 days ago
JSON representation
Export OS stats as Sensision Metrics
- Host: GitHub
- URL: https://github.com/ovh/noderig
- Owner: ovh
- License: other
- Archived: true
- Created: 2017-01-19T14:00:47.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2021-11-24T10:03:57.000Z (almost 3 years ago)
- Last Synced: 2024-08-01T19:31:34.584Z (3 months ago)
- Language: Go
- Size: 129 KB
- Stars: 55
- Watchers: 17
- Forks: 19
- Open Issues: 4
-
Metadata Files:
- Readme: Readme.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# Noderig - Export OS stats as Sensision or Prometheus Metrics
[![Build Status](https://travis-ci.org/ovh/noderig.svg?branch=master)](https://travis-ci.org/ovh/noderig)
Noderig collect OS metrics and expose them through a Sensision HTTP endpoint. Each collector is easily configurable, thanks to a simple level cursor
Noderig metrics:
- CPU
- Memory
- Load
- Disk
- Net
- External collectors## Status
Noderig is not under development. We are moving toward [node_exporter](https://github.com/prometheus/node_exporter)
## Building
Noderig is pretty easy to build.
- Clone the repository
- Install glide, follow instructions here https://glide.sh/
- Download dependencies `glide install`
- Build and run `go run noderig.go`## Usage
```
noderig [flags]Flags:
--config string config file to use
-l --listen string listen address (default "127.0.0.1:9100")
-v --verbose verbose output
--period uint default collection period (default 1000)
--cpu uint8 cpu metrics level (default 1)
--disk uint8 disk metrics level (default 1)
--mem uint8 memory metrics level (default 1)
--net uint8 network metrics level (default 1)
--load uint8 load metrics level (default 1)
-c --collectors string external collectors directory (default "./collectors")
-k --keep-for uint keep collectors data for the given number of fetch (default 3)
--net-opts.interfaces give a filtering list of network interfaces to collect metrics on
--disk-opts.names give a filtering list of disks names to collect metrics on
```## Collectors
Noderig have some built-in collectors.### CPU
LevelMetricDescriptionModule
0disabled metrics
1os.cpu{}combined percentage of cpu usage
2os.cpu.iowait{}combined percentage of cpu iowait
os.cpu.user{}combined percentage of cpu user
os.cpu.systems{}combined percentage of cpu systems
os.cpu.nice{}combined percentage of cpu nice
os.cpu.irq{}combined percentage of cpu irq
os.cpu.steal{}combined percentage of cpu stolen
os.cpu.idlel{}combined percentage of cpu idle
os.cpu.temperature{id=n}temperature of cpu ntemperature
3os.cpu.iowait{chore=n}chore percentage of cpu iowait
os.cpu.user{chore=n}chore percentage of cpu user
os.cpu.systems{chore=n}chore percentage of cpu systems
os.cpu.nice{chore=n}chore percentage of cpu nice
os.cpu.irq{chore=n}chore percentage of cpu irq
os.cpu.steal{chore=n}chore percentage of cpu stolen
os.cpu.idle{chore=n}chore percentage of cpu idle
os.cpu.temperature{core=n}temperature of cpu core ntemperature### Memory
0disabled metrics
1os.mem{}percentage of memory used
os.swap{}percentage of swap used
2os.mem.used{}used memory (bytes)
os.mem.total{}total memory (bytes)
os.swap.used{}used swap (bytes)
os.swap.total{}total swap (bytes)
3os.mem.free{}free memory (bytes)
os.mem.buffers{}buffers memory (bytes)
os.mem.cached{}cached memory (bytes)### Load
0disabled metrics
1os.load1{}load 1
2os.load5{}load 5
os.load15{}load 15### Disk
0disabled metrics
1os.disk.fs{disk=/dev/sda1}disk used percent
2os.disk.fs.used{disk=/dev/sda1, mount=/}disk used capacity (bytes)
os.disk.fs.total{disk=/dev/sda1,mount=/}disk total capacity (bytes)
os.disk.fs.inodes.used{disk=/dev/sda1,mount=/}disk used inodes
os.disk.fs.inodes.total{disk=/dev/sda1,mount=/}disk total inodes
3os.disk.fs.bytes.read{name=sda1}disk read count (bytes)
os.disk.fs.bytes.write{name=sda1}disk write count (bytes)
4os.disk.fs.io.read{name=sda1}disk io read count (bytes)
os.disk.fs.io.write{disk=/sda1}disk io write count (bytes)
5os.disk.fs.io.read.ms{name=sda1}disk io read time (ms)
os.disk.fs.io.write.ms{name=sda1}disk io write time (ms)
os.disk.fs.io{name=sda1}disk io in progress (count)
os.disk.fs.io.ms{name=sda1}disk io time (ms)
os.disk.fs.io.weighted.ms{name=sda1}disk io weighted time (ms)### Net
0disabled metrics
1os.net.bytes{direction=in}in bytes count (bytes)
os.net.bytes{direction=out}out bytes count (bytes)
2os.net.bytes{direction=in,iface=eth0}iface in bytes count (bytes)
os.net.bytes{direction=out,iface=eth0}iface out bytes count (bytes)
3os.net.packets{direction=in,iface=eth0}iface in packet count (packets)
os.net.packets{direction=out,iface=eth0}iface out packet count (packets)
os.net.errs{direction=in,iface=eth0}iface in error count (errors)
os.net.errs{direction=out,iface=eth0}iface out error count (errors)
os.net.dropped{direction=in,iface=eth0}iface in drop count (drops)
os.net.dropped{direction=out,iface=eth0}iface out drop count (drops)### Custom
With Noderig you can define set-up custom collectors as defined in http://bosun.org/scollector/external-collectors.
To be enable you need to define a collectors folder using the noderig parameter "collectors".
This fold need to have a strict arborescence: a number folder and then the exectutable collectors.For example to define a script shell collectors reach the noderig collectors file:
```sh
cd ~/collectors
mkdir 10
```Then inside the 10 folder write the following executable `test.sh` shell script.
```sh
#!/bin/shnow=$(date +%s)
echo my.metric $now 42
```And execute noderig:
```sh
./build/noderig --collectors ~/collectors
```To conclude you can tun noderig custom collectors with the following configuration parameters:
```yaml
keep-metrics: true # To always keep in Noderig the last metrics values
keep-for: 3 # Keep-for returned the number values to keep
```The `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.
## Configuration
Noderig can read a simple default [config file](config.yaml).
Configuration is load and override in the following order:
- /etc/noderig/config.yaml
- ~/noderig/config.yaml
- ./config.yaml
- config filepath from command line### Definitions
Config is composed of three main parts and some config fields:
#### Collectors
Noderig have some built-in collectors. They could be configured by a log level.
You can also defined custom collectors, in an scollector way. (see: http://bosun.org/scollector/external-collectors)
To configure a custom collectors in noderig reach [custom collectors](https://github.com/ovh/noderig#custom).```yaml
cpu: 1 # CPU collector level (Optional, default: 1)
mem: 1 # Memory collector level (Optional, default: 1)
load: 1 # Load collector level (Optional, default: 1)
disk: 1 # Disk collector level (Optional, default: 1)
net: 1 # Network collector level (Optional, default: 1)
```#### Collectors Modules
Some collectors have additionals modules.
Add module to `-mods` list to enable them.```yaml
cpu-mods:
- temperature
```#### Collectors Options
Some collectors can accept optional parameters.
```yaml
net-opts:
interfaces: # Give a filtering list of interfaces for which you want metrics
- eth0
- eth1
```Net-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:
```yaml
net-opts:
interfaces: # Give a filtering list of interfaces for which you want metrics
- ~eth*
``````yaml
disk-opts:
names: # Give a filtering list of disks for which you want metrics
- sda1
- sda3
```Disk-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:
```yaml
disk-opts:
names: # Give a filtering list of disks names for which you want metrics
- ~disk*
```#### Parameters
Noderig can be customized through some parameters.
```yaml
period: 1000 # Duration within all the sources should be scraped in ms (Optional, default: 1000)
listen: none # Listen address, set to none to disable http endpoint (Optional, default: 127.0.0.1:9100)
collectors: /opt/noderig # Custom collectors directory (Optional, default: none)
```To 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:
```yaml
labels: {
host: "srv001",
dc: "uk1",
type: "web_server",
}
```## Sample metrics
```
1484828198557102// os.cpu{} 2.5202020226869237
1484828198560976// os.mem{} 24.328345730457112
1484828198560976// os.swap{} 0
1484828198557435// os.load1{} 0.63
1484828198561366// os.net.bytes{direction=in} 858
1484828198561366// os.net.bytes{direction=out} 778
1484828197570759// os.disk.fs{disk=/dev/sda1} 4.967614357908193
```## Prometheus output format
To use Noderig and expose a Prometheus native format, just set the following two configuration lines in the config file:
```yaml
format: "prometheus" # Expose a Prometheus format in Noderig as: https://prometheus.io/docs/instrumenting/exposition_formats/
separator: "_" # Metrics classnames separator, '_' is the default one for Prom, but you can use any other supported by your storage backend
```## Contributing
Instructions on how to contribute to Noderig are available on the [Contributing] page.
## Get in touch
- Twitter: [@notd33d33](https://twitter.com/notd33d33)
[contributing]: CONTRIBUTING.md