Rtop – agentless sever monitoring tool built with Go
rtop-monitor.org
rtop-monitor.org
ssh -t hostname top ssh host 'bash -s' < /path/to/local/scriptI thought at first that this was going to be a thing where you could feed it a list of hostnames and it would go to all the hosts in parallel and show you aggregated metrics across them, like "what is the distribution of cpu load caused by my main app server" or "what is the distribution of free memory on these 20 machines" over the next N minutes while I change something", sort of a halfway point between opening a few windows with "ssh -t host1 top" "ssh -t host2 top" ... etc, and having full-blown centralized stats gathering like with e.g. datadog.
That would be a pretty sweet tool; I haven't heard of anything in this space yet.
>Invite
Wtf is this? Why would self hosted shit need invites?
Self Hosted for example doesn't necessarily also mean Open Source or Free.
1) when you don't have something like opsdash or datadog already set up
or
2) when you don't want to bother creating some new metrics just for this one-off thing that will live forever in your auto-complete list of metrics
Having e.g. datadog set up is strategic: knowing what is going on in your fleet over time (over long periods of time) is very useful (for noticing performance regressions, finding out cyclic traffic patterns, the list goes on). Something like what I'm describing would be tactical rather than strategic. It's bubbling up to the top of my "when I have some spare time" side projects list, just because I want to explore whether it would be useful.
On the other hand, installing this agentless setup is going to be dramatically easier, and this is way less likely to accidentally blow up the box being monitored, say, than snmpd.
(clearly, with snmpd and other agents, you want to make it so that only the monitoring server can see those services, either through tunnels or what have your. Leaving a snmpd port open to the general internet is crazy.)
I think the idea with rtop in particular is not to have it running headless ever, but you'd only use it interactively. There would not be a "monitoring server", at least not running rtop.
If you wanted to use it this way, note that rtop currently sshes around places and then execs a bunch of local commands. That gives me both the heebies and the jeebies. I'd much rather deploy an rtop-server compiled binary and restrict the ssh key that rtop uses to connect with something like "command=/usr/bin/rtop-server" in the .ssh/authorized_keys file for the local user that will accept rtop-initiated ssh connections.
Aah. I misunderstood. I've not figured out how to run a cluster without giving myself through one of my workstations or a jump box or something ssh access to all of them, so I'm generally okay with a program that automates some of that SSHing I do, like ansible; far more comfortable than I am with a box that is running some monitoring web frontend having any kind of access to my backend servers. (I usually try to give that box read-only access to the storage that another server which queries the agents writes to.)
To be clear, I'm not super comfortable with this situation, but I don't see any way around of having my own login everywhere, or of making it so that if I do have my own login everywhere, my logging in from a compromised machine is not a game over.
(as an aside, you and I mean different things by headless; usually when i say 'headless' - i mean 'the video port is disabled or unused' - all the servers I use are managed via serial console, and I would call them 'headless' - I think my usage is more standard than yours, but I could be wrong.)
>If you wanted to use it this way, note that rtop currently sshes around places and then execs a bunch of local commands. That gives me both the heebies and the jeebies. I'd much rather deploy an rtop-server compiled binary and restrict the ssh key that rtop uses to connect with something like "command=/usr/bin/rtop-server" in the .ssh/authorized_keys file for the local user that will accept rtop-initiated ssh connections.
Yeah, that is what I meant by "some sort of agent." - I personally make rather extensive use of the forced-command bit in ssh.
why have a makefile and not just allow "go get github.com/rapidloop/rtop" to function?
As a fellow gopher, I've decided to consider support for `go get` a non-goal in my projects for similar reasons.
[1] https://walledcity.com/supermighty/building-go-projects-with...
For a set of alternative package managers that are perhaps more in the "spirit of go get", see https://github.com/golang/go/wiki/PackageManagementTools
Not sure if you consider feature requests but I would love to be able to monitor ZFS as well with it.
As a JavaScript developer I can get my head around Go programs. Java hurts my brain, I'm not sure why.
I like using programs I can get my head around.
I think this project was maybe just posted way too early, it doesn't even provide 'top' - there is no breakdown of CPU by PID which is why top has its name... all the files are committed yesterday...
This is a pretty big selling point for command-line utilities like rtop, as opposed to utilities written in Java/Python/Ruby/Node/etc. which require their respective runtime to be installed.
In Java's case only by those that don't know what the Java eco-system offers.
There are plenty of commercial JVMs that offer AOT compilation, including static linking.
Plus as of Java 8, there is even a packager as part of the reference JDK.
I tried robovm, it actually worked nicely but apparently only does 32 bit. Also, the simple reference HelloWorld was nearly 10MB, the build process took 20 seconds, and running it took 15x longer than a comparable one in Go. I don't mean to knock it, what it does is amazing, but it's not a viable replacement for simple static command line tools.
No, most of those that produce good quality code are commercial, hence why I stated that on my comment.
Some of most well known,
http://www.atego.com/products/atego-perc/
https://www.aicas.com/cms/en/JamaicaVM
http://www-03.ibm.com/software/products/en/real-time
Oracle Research has SubstrateVM as part of Graal, but it is still experimental.
https://wiki.openjdk.java.net/display/Graal/Publications+and...
Compiling python does not feel right.
Using native packages is better[1], but you have to plan it out. You can package virtualenvs into native packages[2] - and this is probably the most solid way, but you'll need packaging setups for various package managers.
In short, "written in Go" for me means with a high probability, just run "go get x" - or download a binary.
Since we are at it, I'd love to hear about better shipping strategies for Python projects.
[1] https://hynek.me/talks/python-deployments/ [2] https://labs.spotify.com/2013/10/10/packaging-in-your-packag...
I thought we were just talking about resource monitoring something. I think deployment is a totally separate subject. But for a top-like Python tool, I really like "glances". It has way more features than this Go version.
But regarding deployments, everything works if you make your own pip packages stored locally for your project. That way if it works on your clean VM, it works when you push to the cloud.
Then you have to install & compile `go get` first, no?
OCaml -> http://caml.inria.fr/pub/docs/manual-ocaml-4.00/manual025.ht... Rust -> rustc -C link-args=-static-libgcc hello.rs C -> gcc -o foo main.o -static -lbaz -lbar Python -> http://www.py2exe.org/ Ruby -> https://github.com/larsch/ocra
* Go here being a proxy for any language. The same goes for Rust, Haskell, Javascript, etc - this trend certainly isn't unique to Go.
Java has never been very good for command-line tools, though, due to startup time.
Safe development? What does that mean?
Pretty sure there have been plenty of posts saying "written in Java", though of course fashionable languages get more of this.
Or am I missing something ?