Ansible Quickie - Checking the Memory Status on All Machines
source link: https://fuzzyblog.io/blog/ansible/2016/10/08/ansible-quickie-checking-the-memory-status-on-all-machines.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Ansible Quickie - Checking the Memory Status on All Machines
Oct 8, 2016
As I've related in depth, I've been dealing with a problem of reliability and it is looking like its a memory issue. Now there are lots and lots of ways to monitor memory usage on a cluster of machines. I don't think I could even enumerate them if I tried. However I'm a software engineer and I'm specifically not the kind of guy who has a dashboard and systems monitoring tools like HP OpenView, etc. I've also been using Unix since 1986 and I fundamentally believe in the core Unix model of tiny tools so here's how I did it.
What I Wanted
Getting control of a bad ops situation with servers is often about representing data in a way that you can understand and process it. All I wanted was a command in a terminal that I could run periodically which would show me free memory on all machines. Here's an example of what I put together:
ficrawlerbig | SUCCESS | rc=0 » 5103412
fiweb1 | SUCCESS | rc=0 » 55826760
ficrawler3 | SUCCESS | rc=0 » 9196424
ficrawler4 | SUCCESS | rc=0 » 7576948
ficrawler5 | SUCCESS | rc=0 » 8054688
ficrawler6 | SUCCESS | rc=0 » 10718960
ficrawler7 | SUCCESS | rc=0 » 8730928
ficrawler8 | SUCCESS | rc=0 » 13203552
ficrawler9 | SUCCESS | rc=0 » 7196620
ficrawler10 | SUCCESS | rc=0 » 5102220
That's all I want and I wasn't going to setup some kind of elaborate tool to get that. I was going to use Ansible to execute a command on a batch of machines. All I needed was that command.
The Command
There are all kinds of ways to get memory stats on unix and I wasn't about to make this hard. And you have to remember that at my core I'm a Ruby guy. And while I mastered awk in 1990 or so, I haven't written a line of awk since about 1996 when my own implementation of awk, HyperAwk (see below), disappeared from this world. I'm also not a shell guy; I struggle with bash / zsh. So I wanted a ruby solution. And I came up with this:
#!/usr/local/rvm/rubies/ruby-2.3.1/bin/ruby
output = %x(free)
puts output.split(" ")[9]
Which I'm pretty sure I shamelessly stole from a Stack Overflow post somewhere. I think I closed the tab in a browser crash. Sorry.
The Ansible Side of things - An Ad Hoc Routine:
ansible all -i inventories/production2 -u ubuntu -a "/var/www/apps/banks/current/script/free_memory.rb"
Sidebar: HyperAwk
Ever wonder would would happen if you took an Awk implementation
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK