Created
November 3, 2014 02:58
-
-
Save andrewchilds/a615a27f1c230dea9265 to your computer and use it in GitHub Desktop.
Librato.sh: send basic VM health stats to Librato
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Librato.sh | |
# Send basic VM health stats to Librato: | |
# - Network bytes sent/received | |
# - IO reads/writes | |
# - 1min, 5min, 15min load averages | |
# - Disk used/free | |
# - Memory used/free | |
# - Cached used/free | |
# - Swap used/free | |
# - TCP connection count | |
# Tested on: | |
# - Debian 7.0 | |
# - Ubuntu 12.04 | |
# - Ubuntu 14.04 | |
# Run every minute using cron: | |
# * * * * * /path/to/librato.sh | |
LIBRATO_USER="[email protected]" | |
LIBRATO_TOKEN="abc123" | |
LIBRATO_SOURCE="my-server-01" | |
rx_bytes="$(cat /sys/class/net/eth0/statistics/rx_bytes)" | |
tx_bytes="$(cat /sys/class/net/eth0/statistics/tx_bytes)" | |
io_usage="$(cat /sys/block/xvda/stat 2>/dev/null || cat /sys/block/vda/stat 2>/dev/null || cat /sys/block/sda/stat 2>/dev/null)" | |
io_reads="$(echo $io_usage | awk '{ print $3 }')" | |
io_writes="$(echo $io_usage | awk '{ print $7 }')" | |
load_avg="$(cat /proc/loadavg)" | |
cpu_1min="$(echo $load_avg | awk '{ print $1 }')" | |
cpu_5min="$(echo $load_avg | awk '{ print $2 }')" | |
cpu_15min="$(echo $load_avg | awk '{ print $3 }')" | |
disk_info="$(df -m / | tail -n 1)" | |
disk_used="$(echo $disk_info | awk '{ print $3 }')" | |
disk_free="$(echo $disk_info | awk '{ print $4 }')" | |
mem_info="$(free -m | grep Mem)" | |
mem_used="$(echo $mem_info | awk '{ print $3 }')" | |
mem_free="$(echo $mem_info | awk '{ print $4 }')" | |
cache_info="$(free -m | grep 'buffers/cache')" | |
cache_used="$(echo $cache_info | awk '{ print $3 }')" | |
cache_free="$(echo $cache_info | awk '{ print $4 }')" | |
swap_info="$(free -m | grep Swap)" | |
swap_used="$(echo $swap_info | awk '{ print $3 }')" | |
swap_free="$(echo $swap_info | awk '{ print $4 }')" | |
tcp_count="$(wc -l /proc/net/tcp | awk '{ print $1 }')" | |
curl \ | |
--silent \ | |
-u ${LIBRATO_USER}:${LIBRATO_TOKEN} \ | |
-d "counters[0][name]=network.rx.bytes" \ | |
-d "counters[0][value]=$rx_bytes" \ | |
-d "counters[0][source]=$LIBRATO_SOURCE" \ | |
-d "counters[1][name]=network.tx.bytes" \ | |
-d "counters[1][value]=$tx_bytes" \ | |
-d "counters[1][source]=$LIBRATO_SOURCE" \ | |
-d "counters[2][name]=io.reads" \ | |
-d "counters[2][value]=$io_reads" \ | |
-d "counters[2][source]=$LIBRATO_SOURCE" \ | |
-d "counters[3][name]=io.writes" \ | |
-d "counters[3][value]=$io_writes" \ | |
-d "counters[3][source]=$LIBRATO_SOURCE" \ | |
-d "gauges[0][name]=cpu.1min" \ | |
-d "gauges[0][value]=$cpu_1min" \ | |
-d "gauges[0][source]=$LIBRATO_SOURCE" \ | |
-d "gauges[1][name]=cpu.5min" \ | |
-d "gauges[1][value]=$cpu_5min" \ | |
-d "gauges[1][source]=$LIBRATO_SOURCE" \ | |
-d "gauges[2][name]=cpu.15min" \ | |
-d "gauges[2][value]=$cpu_15min" \ | |
-d "gauges[2][source]=$LIBRATO_SOURCE" \ | |
-d "gauges[3][name]=disk.used" \ | |
-d "gauges[3][value]=$disk_used" \ | |
-d "gauges[3][source]=$LIBRATO_SOURCE" \ | |
-d "gauges[4][name]=disk.free" \ | |
-d "gauges[4][value]=$disk_free" \ | |
-d "gauges[4][source]=$LIBRATO_SOURCE" \ | |
-d "gauges[5][name]=mem.used" \ | |
-d "gauges[5][value]=$mem_used" \ | |
-d "gauges[5][source]=$LIBRATO_SOURCE" \ | |
-d "gauges[6][name]=mem.free" \ | |
-d "gauges[6][value]=$mem_free" \ | |
-d "gauges[6][source]=$LIBRATO_SOURCE" \ | |
-d "gauges[7][name]=cache.used" \ | |
-d "gauges[7][value]=$cache_used" \ | |
-d "gauges[7][source]=$LIBRATO_SOURCE" \ | |
-d "gauges[8][name]=cache.free" \ | |
-d "gauges[8][value]=$cache_free" \ | |
-d "gauges[8][source]=$LIBRATO_SOURCE" \ | |
-d "gauges[9][name]=swap.used" \ | |
-d "gauges[9][value]=$swap_used" \ | |
-d "gauges[9][source]=$LIBRATO_SOURCE" \ | |
-d "gauges[10][name]=swap.free" \ | |
-d "gauges[10][value]=$swap_free" \ | |
-d "gauges[10][source]=$LIBRATO_SOURCE" \ | |
-d "gauges[11][name]=tcp.count" \ | |
-d "gauges[11][value]=$tcp_count" \ | |
-d "gauges[11][source]=$LIBRATO_SOURCE" \ | |
-X POST "https://metrics-api.librato.com/v1/metrics" | |
exit 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment