- Notifications
You must be signed in to change notification settings - Fork19
Export OS stats as Sensision Metrics
License
ovh/noderig
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
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
Noderig is not under development. We are moving towardnode_exporter
Noderig is pretty easy to build.
- Clone the repository
- Install glide, follow instructions herehttps://glide.sh/
- Download dependencies
glide install
- Build and run
go run noderig.go
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
Noderig have some built-in collectors.
Level | Metric | Description | Module |
0 | disabled metrics | ||
1 | os.cpu{} | combined percentage of cpu usage | |
2 | os.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 n | temperature | |
3 | os.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 n | temperature |
0 | disabled metrics | |
1 | os.mem{} | percentage of memory used |
os.swap{} | percentage of swap used | |
2 | os.mem.used{} | used memory (bytes) |
os.mem.total{} | total memory (bytes) | |
os.swap.used{} | used swap (bytes) | |
os.swap.total{} | total swap (bytes) | |
3 | os.mem.free{} | free memory (bytes) |
os.mem.buffers{} | buffers memory (bytes) | |
os.mem.cached{} | cached memory (bytes) |
0 | disabled metrics | |
1 | os.load1{} | load 1 |
2 | os.load5{} | load 5 |
os.load15{} | load 15 |
0 | disabled metrics | |
1 | os.disk.fs{disk=/dev/sda1} | disk used percent |
2 | os.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 | |
3 | os.disk.fs.bytes.read{name=sda1} | disk read count (bytes) |
os.disk.fs.bytes.write{name=sda1} | disk write count (bytes) | |
4 | os.disk.fs.io.read{name=sda1} | disk io read count (bytes) |
os.disk.fs.io.write{disk=/sda1} | disk io write count (bytes) | |
5 | os.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) |
0 | disabled metrics | |
1 | os.net.bytes{direction=in} | in bytes count (bytes) |
os.net.bytes{direction=out} | out bytes count (bytes) | |
2 | os.net.bytes{direction=in,iface=eth0} | iface in bytes count (bytes) |
os.net.bytes{direction=out,iface=eth0} | iface out bytes count (bytes) | |
3 | os.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) |
With Noderig you can define set-up custom collectors as defined inhttp://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:
cd~/collectorsmkdir 10
Then inside the 10 folder write the following executabletest.sh
shell script.
#!/bin/shnow=$(date +%s)echo my.metric$now 42
And execute noderig:
./build/noderig --collectors~/collectors
To conclude you can tun noderig custom collectors with the following configuration parameters:
keep-metrics:true# To always keep in Noderig the last metrics valueskeep-for:3# Keep-for returned the number values to keep
Thekeep-for
parameter withkeep-metrics
at true keep the last N values otherwise it keep each values for n calls to the noderig metrics endpoint.
Noderig can read a simple defaultconfig file.
Configuration is load and override in the following order:
- /etc/noderig/config.yaml
- ~/noderig/config.yaml
- ./config.yaml
- config filepath from command line
Config is composed of three main parts and some config fields:
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 reachcustom collectors.
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)
Some collectors have additionals modules.Add module to<collector>-mods
list to enable them.
cpu-mods: -temperature
Some collectors can accept optional parameters.
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 ongolang 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:
net-opts:interfaces:# Give a filtering list of interfaces for which you want metrics -~eth*
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 ongolang 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:
disk-opts:names:# Give a filtering list of disks names for which you want metrics -~disk*
Noderig can be customized through some parameters.
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 calledlabels
. It expects a label string map as defined below:
labels:{host:"srv001",dc:"uk1",type:"web_server",}
1484828198557102// os.cpu{} 2.52020202268692371484828198560976// os.mem{} 24.3283457304571121484828198560976// os.swap{} 01484828198557435// os.load1{} 0.631484828198561366// os.net.bytes{direction=in} 8581484828198561366// os.net.bytes{direction=out} 7781484828197570759// os.disk.fs{disk=/dev/sda1} 4.967614357908193
To use Noderig and expose a Prometheus native format, just set the following two configuration lines in the config file:
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
Instructions on how to contribute to Noderig are available on theContributing page.
- Twitter:@notd33d33
About
Export OS stats as Sensision Metrics
Resources
License
Code of conduct
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors15
Uh oh!
There was an error while loading.Please reload this page.