Awesome
os_stats
os_stats
aim to collect linux system information such as kernel vsn, loadavg, disk, memory usage, cpu utilization, IO statistics.
It also provides a plugin for observer_cli.
Example
1>os_stats:kernel_vsn().
"2.6.32-504.el6.x86_64"
2> os_stats:loadavg().
#{avg1 => 0.23,avg15 => 0.1,avg5 => 0.15,p_last_pid => 29373,
p_running => 1,p_threads => 785,
raw_bin => <<"0.23 0.15 0.10 1/785 29373\n">>}
3> {os_stats:avg1(),os_stats:avg5(), os_stats:avg15()}.
{0.33,0.2,0.12}
4> os_stats:uptime().
#{human_uptime =>
#{days => 3,hours => 4,mins => 18,secs => 40},
idletime => 4237044.47,uptime => 274719.86}
5> os_stats:disk().
{ok,[#{available => 418599600128,capacity => 3,
files_system => "/dev/mapper/VolGroup-lv_home",
mount => "/home",size => 450870231040,type => "ext4",
used => 9360924672},
#{available => 209223680,capacity => 1,
files_system => "/dev/sda1",mount => "/boot/efi",
size => 209489920,type => "vfat",used => 266240},
#{available => 438453248,capacity => 8,
files_system => "/dev/sda2",mount => "/boot",
size => 499355648,type => "ext4",used => 34688000},
#{available => 33712881664,capacity => 0,
files_system => "tmpfs",mount => "/dev/shm",
size => 33712881664,type => "tmpfs",used => 0},
#{available => 51859554304,capacity => 49,
files_system => "/dev/mapper/VolGroup-lv_root",mount => "/",
size => 105557286912,type => "ext4",used => 48328814592}]}
6> os_stats:memory().
{ok,#{buffers => 265760,cached => 34460248,mem_free => 28102360,
mem_total => 65845472,swap_cached => 0,
swap_free => 32989180,swap_total => 32989180}}
7> {ok, PrevDiskStat} = os_stats:disk_stat().
{ok,[#{dev_name => 'dm-2',ios_pgr => 0,rd_ios => 393,
rd_merges => 0,rd_secs => 3138,rd_ticks => 2301,
rq_ticks => 2304,
timestamp => {1550,646958,567568},
tot_ticks => 212,wr_ios => 3,wr_merges => 0,wr_secs => 24,
wr_ticks => 3},
#{dev_name => 'dm-1',ios_pgr => 0,rd_ios => 324,
rd_merges => 0,rd_secs => 2592,rd_ticks => 518,
rq_ticks => 518,
timestamp => {1550,646958,567492},
tot_ticks => 358,wr_ios => 0,wr_merges => 0,wr_secs => 0,
wr_ticks => 0},
#{dev_name => 'dm-0',ios_pgr => 0,rd_ios => 58410,
rd_merges => 0,rd_secs => 943554,rd_ticks => 338704,
rq_ticks => 1440798529,
timestamp => {1550,646958,567416},
tot_ticks => 8423557,wr_ios => 24599307,wr_merges => 0,
wr_secs => 196794456,wr_ticks => 1440328539},
#{dev_name => sda,ios_pgr => 0,rd_ios => 42599,
rd_merges => 18352,rd_secs => 978878,rd_ticks => 272820,
rq_ticks => 41749964,
timestamp => {1550,646958,567169},
tot_ticks => 8423848,wr_ios => 3017785,
wr_merges => 21581489,wr_secs => 196794498,
wr_ticks => 41477748}]}
8> {ok, NewDiskStat} = os_stats:disk_stat().
{ok,[#{dev_name => 'dm-2',ios_pgr => 0,rd_ios => 393,
rd_merges => 0,rd_secs => 3138,rd_ticks => 2301,
rq_ticks => 2304,
timestamp => {1550,647027,602667},
tot_ticks => 212,wr_ios => 3,wr_merges => 0,wr_secs => 24,
wr_ticks => 3},
#{dev_name => 'dm-1',ios_pgr => 0,rd_ios => 324,
rd_merges => 0,rd_secs => 2592,rd_ticks => 518,
rq_ticks => 518,
timestamp => {1550,647027,602598},
tot_ticks => 358,wr_ios => 0,wr_merges => 0,wr_secs => 0,
wr_ticks => 0},
#{dev_name => 'dm-0',ios_pgr => 0,rd_ios => 58410,
rd_merges => 0,rd_secs => 943554,rd_ticks => 338704,
rq_ticks => 1440831027,
timestamp => {1550,647027,602527},
tot_ticks => 8426337,wr_ios => 24602753,wr_merges => 0,
wr_secs => 196822024,wr_ticks => 1440361037},
#{dev_name => sda,ios_pgr => 0,rd_ios => 42599,
rd_merges => 18352,rd_secs => 978878,rd_ticks => 272820,
rq_ticks => 41757515,
timestamp => {1550,647027,602281},
tot_ticks => 8426629,wr_ios => 3018753,
wr_merges => 21583967,wr_secs => 196822066,
wr_ticks => 41485299}]}
9> os_stats:disk_stat_diff(NewDiskStat, PrevDiskStat).
[#{dev_name => sda,rd_secs => 0,rd_secs_ps => 0.0,
timestamp => {1550,647027,602281},
tps => 19.86,wr_secs => 21416,wr_secs_ps => 862.75},
#{dev_name => 'dm-0',rd_secs => 0,rd_secs_ps => 0.0,
timestamp => {1550,647027,602527},
tps => 107.84,wr_secs => 21416,wr_secs_ps => 862.75},
#{dev_name => 'dm-1',rd_secs => 0,rd_secs_ps => 0.0,
timestamp => {1550,647027,602598},
tps => 0.0,wr_secs => 0,wr_secs_ps => 0.0},
#{dev_name => 'dm-2',rd_secs => 0,rd_secs_ps => 0.0,
timestamp => {1550,647027,602667},
tps => 0.0,wr_secs => 0,wr_secs_ps => 0.0}]
10> {ok, PrevIfStat} = os_stats:if_stat().
{ok,[#{dev_name => lo,rx_bytes => 19739163269,rx_dropped => 0,
rx_errors => 0,rx_packets => 16072781,
timestamp => {1550,647207,825629},
tx_bytes => 19739163269,tx_dropped => 0,tx_errors => 0,
tx_packets => 16072781},
#{dev_name => eth0,rx_bytes => 88366078169,rx_dropped => 0,
rx_errors => 0,rx_packets => 176353439,
timestamp => {1550,647207,825917},
tx_bytes => 92110748617,tx_dropped => 0,tx_errors => 0,
tx_packets => 230339388},
#{dev_name => eth1,rx_bytes => 0,rx_dropped => 0,
rx_errors => 0,rx_packets => 0,
timestamp => {1550,647207,826176},
tx_bytes => 0,tx_dropped => 0,tx_errors => 0,
tx_packets => 0},
#{dev_name => eth2,rx_bytes => 0,rx_dropped => 0,
rx_errors => 0,rx_packets => 0,
timestamp => {1550,647207,826455},
tx_bytes => 0,tx_dropped => 0,tx_errors => 0,
tx_packets => 0},
#{dev_name => eth3,rx_bytes => 0,rx_dropped => 0,
rx_errors => 0,rx_packets => 0,
timestamp => {1550,647207,826729},
tx_bytes => 0,tx_dropped => 0,tx_errors => 0,
tx_packets => 0},
#{dev_name => virbr0,rx_bytes => 0,rx_dropped => 0,
rx_errors => 0,rx_packets => 0,
timestamp => {1550,647207,826995},
tx_bytes => 0,tx_dropped => 0,tx_errors => 0,
tx_packets => 0},
#{dev_name => 'virbr0-nic',rx_bytes => 0,rx_dropped => 0,
rx_errors => 0,rx_packets => 0,
timestamp => {1550,647207,827252},
tx_bytes => 0,tx_dropped => 0,tx_errors => 0,
tx_packets => 0}]}
11> {ok, NewIfStat} = os_stats:if_stat().
{ok,[#{dev_name => lo,rx_bytes => 19740096665,rx_dropped => 0,
rx_errors => 0,rx_packets => 16073510,
timestamp => {1550,647217,266452},
tx_bytes => 19740096665,tx_dropped => 0,tx_errors => 0,
tx_packets => 16073510},
#{dev_name => eth0,rx_bytes => 88366143949,rx_dropped => 0,
rx_errors => 0,rx_packets => 176354008,
timestamp => {1550,647217,266736},
tx_bytes => 92110817993,tx_dropped => 0,tx_errors => 0,
tx_packets => 230339726},
#{dev_name => eth1,rx_bytes => 0,rx_dropped => 0,
rx_errors => 0,rx_packets => 0,
timestamp => {1550,647217,267002},
tx_bytes => 0,tx_dropped => 0,tx_errors => 0,
tx_packets => 0},
#{dev_name => eth2,rx_bytes => 0,rx_dropped => 0,
rx_errors => 0,rx_packets => 0,
timestamp => {1550,647217,267252},
tx_bytes => 0,tx_dropped => 0,tx_errors => 0,
tx_packets => 0},
#{dev_name => eth3,rx_bytes => 0,rx_dropped => 0,
rx_errors => 0,rx_packets => 0,
timestamp => {1550,647217,267524},
tx_bytes => 0,tx_dropped => 0,tx_errors => 0,
tx_packets => 0},
#{dev_name => virbr0,rx_bytes => 0,rx_dropped => 0,
rx_errors => 0,rx_packets => 0,
timestamp => {1550,647217,267770},
tx_bytes => 0,tx_dropped => 0,tx_errors => 0,
tx_packets => 0},
#{dev_name => 'virbr0-nic',rx_bytes => 0,rx_dropped => 0,
rx_errors => 0,rx_packets => 0,
timestamp => {1550,647217,268002},
tx_bytes => 0,tx_dropped => 0,tx_errors => 0,
tx_packets => 0}]}
12> os_stats:if_stat_diff(NewIfStat,PrevIfStat).
[#{dev_name => 'virbr0-nic',rx_bps => 0.0,rx_pps => 0.0,
timestamp => {1550,647217,268002},
tx_bps => 0.0,tx_pps => 0.0},
#{dev_name => virbr0,rx_bps => 0.0,rx_pps => 0.0,
timestamp => {1550,647217,267770},
tx_bps => 0.0,tx_pps => 0.0},
#{dev_name => eth3,rx_bps => 0.0,rx_pps => 0.0,
timestamp => {1550,647217,267524},
tx_bps => 0.0,tx_pps => 0.0},
#{dev_name => eth2,rx_bps => 0.0,rx_pps => 0.0,
timestamp => {1550,647217,267252},
tx_bps => 0.0,tx_pps => 0.0},
#{dev_name => eth1,rx_bps => 0.0,rx_pps => 0.0,
timestamp => {1550,647217,267002},
tx_bps => 0.0,tx_pps => 0.0},
#{dev_name => eth0,rx_bps => 6967.62,rx_pps => 60.27,
timestamp => {1550,647217,266736},
tx_bps => 7348.51,tx_pps => 35.8},
#{dev_name => lo,rx_bps => 98868.08,rx_pps => 77.22,
timestamp => {1550,647217,266452},
tx_bps => 98868.08,tx_pps => 77.22}]
13> {ok, PrevCpuStat} = os_stats:cpu_stat().
{ok,[#{core => 0,hardware_interrupts => 8,idle => 25851737,
software_interrupts => 18858,steal_time => 0,
system => 281884,user => 990224,user_nice => 4,
wait => 269252},
#{core => avg,hardware_interrupts => 8,idle => 25851737,
software_interrupts => 18858,steal_time => 0,
system => 281884,user => 990224,user_nice => 4,
wait => 269252}]}.
14> {ok, NewCpuStat} = os_stats:cpu_stat().
{ok,[#{core => 0,hardware_interrupts => 8,idle => 25852421,
software_interrupts => 18858,steal_time => 0,
system => 281888,user => 990228,user_nice => 4,
wait => 269260},
#{core => avg,hardware_interrupts => 8,idle => 25852421,
software_interrupts => 18858,steal_time => 0,
system => 281888,user => 990228,user_nice => 4,
wait => 269260}]}
15> CpuStatDiff = os_stats:cpu_stat_diff(NewCpuStat,PrevCpuStat).
[#{core => avg,hardware_interrupts => 0,idle => 684,
software_interrupts => 0,steal_time => 0,system => 4,
user => 4,user_nice => 0,wait => 8},
#{core => 0,hardware_interrupts => 0,idle => 684,
software_interrupts => 0,steal_time => 0,system => 4,
user => 4,user_nice => 0,wait => 8}]
16> os_stats:cputime_util(CpuStatDiff).
[#{core => avg,hardware_interrupts_util => 0.0,
idle_util => 0.9771,software_interrupts_util => 0.0,
steal_time_util => 0.0,system_util => 0.0057,
user_nice_util => 0.0,user_util => 0.0057,
wait_util => 0.0114},
#{core => 0,hardware_interrupts_util => 0.0,
idle_util => 0.9771,software_interrupts_util => 0.0,
steal_time_util => 0.0,system_util => 0.0057,
user_nice_util => 0.0,user_util => 0.0057,
wait_util => 0.0114}]
Plugin observer_cli
sys.config
[{observer_cli, {plugins,[#{module => os_stats_plug, title => "OS", interval => 2000, shortcut => "O", sort_column => 2}]}]