What is gmx ?
gmx is an experimental package for instrumenting Go applications. gmx is similar to Java’s jmx and provides a simple method of querying the internal state of your Go application by invoking anonymous functions bound to published keys. Here is an example using the included client, gmxc
.
% ./gmxc -p 16378 runtime.version runtime.numcpu os.args os.args: [./godoc -v -http=:8080] runtime.numcpu: 4 runtime.version: weekly.2012-01-27 11688+
How can I use gmx in my applications ?
In the example above, a stock godoc
was instrumented by importing the github.com/davecheney/gmx
package into main
.
package main import _ "github.com/davecheney/gmx"
The runtime
and os
instruments are provided by default by gmx.
How can I export my own values via gmx ?
You can publish gmx instruments at any point in your application. The most logical place is inside your package’s init
function.
package foo import "github.com/davecheney/gmx" var c1 = 1 var c2 = 2 func init() { // publish c1 via a closure gmx.Publish("c1", func() interface{} { return c1 }) // publish c2 via a function gmx.Publish("c2", getC2) } func getC2() interface{} { return c2 }
Using gmxc
the values can be queried at runtime:
./gmxc -p 16467 c1 c2 c2: 2 c1: 1
Who is gmx aimed at ?
If you are developing an application in Go, especially a daemon or some other long running process, then gmx may appeal to you. If you live on the other side of the DevOps table, gmx will hopfully allow you to gain a greater understanding of the internal workings of applications you have been charged with caring for.
If you find gmx useful for you, please let me know. I plan to continue to develop the default instrumentation bundled with gmx and am always open to pull requests for additional functionality.
You can find the source to gmx on github, https://github.com/davecheney/gmx.