Edward Muller
SHH
AKA System Heuristics Herald
Polls the system in different ways at a given interval,
relaying the collected metrics somewhere
Yes, it's a backronym
Use the same metrics path that heroku uses for apps
but for systems
app ⇢ logs ⇢ logplex ⇢ l2met ⇢ librato
(anything can drain)
collectd ⇢ write_http plugin ⇢ backstop ⇢ graphite | librato
shh ⇢ logs ⇢ logplex ⇢ l2met ⇢ librato
(anything can drain)
logs ⇢ logplex ⇢ l2met ⇢ librato
- No real difference between apps & systems (less cognitive overhead)
- Not running collectd anymore
- Can retire backstop
- Single metric sink/source: libratro (at least for now)
- Which means no more Graphite to maintain
- 12 Factor isn't just for apps.
-
I wanted to learn/use Go
-
I believe existing solutions are
- antiquated
- hard to manage
- hard to modify
- overly complicated
I dislike purpose built config files.
shh uses environment variables ONLY.
These are usually encoded via envdir
(some 12 Factor influence here)
Main loop ticks pollers every interval as Goroutines
Pollers send measurements via a channel
Outputters receive measurments from that channel and do what they will with them.
A sample of something at a point in time
type Measurement struct {
When time.Time
Poller string
What []string
Value interface{}
}
generate measurements each tick via Poll()
type Poller interface {
Name() string
Exit()
Poll(tick time.Time)
}
- Conntrack
- CPU
- Df
- Disk
- Listen (simple plugin interface)
- Load
- Memory
- Network Interface
- Ntpdate
- Processes
- Self
type Outputter interface {
Start()
}
- Standard Out Raw
- Standard Out Derivative
- Librato
Integers are counters
Floats are guages
- Go is new(ish).
- Taking naive approaches to pollers in many cases.
- Possible over use of channels
- Linux Only (atm)
- .....
- More Pollers
- More Outputters
- More adoption