Skip to content

Instantly share code, notes, and snippets.

@andrewchilds
Created November 3, 2014 02:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save andrewchilds/a615a27f1c230dea9265 to your computer and use it in GitHub Desktop.
Save andrewchilds/a615a27f1c230dea9265 to your computer and use it in GitHub Desktop.
Librato.sh: send basic VM health stats to Librato
#!/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="me@example.com"
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