c_smrrds.sh 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. #!/bin/sh
  2. # $Id: c_smrrds.sh,v 1.35 2006/12/19 22:30:47 dijkstra Exp $
  3. #
  4. # Copyright (c) 2001-2006 Willem Dijkstra
  5. # All rights reserved.
  6. #
  7. # Redistribution and use in source and binary forms, with or without
  8. # modification, are permitted provided that the following conditions
  9. # are met:
  10. #
  11. # - Redistributions of source code must retain the above copyright
  12. # notice, this list of conditions and the following disclaimer.
  13. # - Redistributions in binary form must reproduce the above
  14. # copyright notice, this list of conditions and the following
  15. # disclaimer in the documentation and/or other materials provided
  16. # with the distribution.
  17. #
  18. # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  19. # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  20. # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  21. # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  22. # COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  23. # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
  24. # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  25. # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  26. # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  27. # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
  28. # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  29. # POSSIBILITY OF SUCH DAMAGE.
  30. # --- user configuration starts here
  31. INTERVAL=${INTERVAL:-5}
  32. # default RRA setup:
  33. # - 2 days of 5 second samples = 34560 x 5 second samples
  34. # - 14 days of 30 minutes samples = 672 x 360 x 5 second samples
  35. # - 50 days of 2 hour samples = 600 x 1440 x 5 second samples
  36. # - 600 days of 1 day samples = 600 x 17280 x 5 second samples
  37. RRA_SETUP=${RRA_SETUP:-"
  38. RRA:AVERAGE:0.5:1:34560
  39. RRA:AVERAGE:0.5:360:672
  40. RRA:AVERAGE:0.5:1440:600
  41. RRA:AVERAGE:0.5:17280:600
  42. RRA:MAX:0.5:1:34560
  43. RRA:MAX:0.5:360:672
  44. RRA:MAX:0.5:1440:600
  45. RRA:MAX:0.5:17280:600
  46. RRA:MIN:0.5:1:34560
  47. RRA:MIN:0.5:360:672
  48. RRA:MIN:0.5:1440:600
  49. RRA:MIN:0.5:17280:600"}
  50. # --- user configuration ends here
  51. create_rrd() {
  52. file=$1
  53. shift
  54. rrdtool create $file $RRD_ARGS $* $RRA_SETUP
  55. if [ "$?" = "0" -a -f $file ]; then
  56. echo "$file created"
  57. else
  58. echo "could not create $file"
  59. fi
  60. }
  61. # get arguments
  62. select_interval=""
  63. for i
  64. do
  65. case $i in
  66. interval)
  67. select_interval="yes"
  68. ;;
  69. child)
  70. child=1
  71. ;;
  72. oneday)
  73. config=$i
  74. # today only RRA setup:
  75. # - 1 day of 5 second samples = 17280 x 5 second samples
  76. RRA_SETUP=" RRA:AVERAGE:0.5:1:17280
  77. RRA:MAX:0.5:1:17280
  78. RRA:MIN:0.5:1:17280"
  79. if [ X"$child" = "X" ]; then
  80. echo "RRDs will only contain a single day of data"
  81. fi
  82. ;;
  83. *)
  84. if [ -n "$select_interval" ]; then
  85. INTERVAL=$i
  86. select_interval=""
  87. else
  88. args="$args $i"
  89. fi
  90. ;;
  91. esac
  92. done
  93. this=$0
  94. if [ X"$1$2$3$4$5$6$7$8$9" = "X" ]; then
  95. cat <<EOF
  96. Create rrd files for symux.
  97. Usage: `basename $0` [oneday] [interval <seconds>] [all] \
  98. <rrd files>
  99. Where:
  100. oneday = modify rrds to only contain one day of information
  101. seconds = modify rrds for non standard monitoring interval
  102. all = run symux -l to determine current configured rrd
  103. files
  104. <rrd files> = files ending in rrd that follow symux naming
  105. EOF
  106. exit 1;
  107. fi
  108. RRD_ARGS="--step=$INTERVAL --start=0"
  109. for i in $args
  110. do
  111. if [ -f $i ]; then
  112. echo "$i exists - ignoring"
  113. i="done"
  114. fi
  115. j=`basename $i`
  116. case $j in
  117. all)
  118. sh $this interval $INTERVAL child $config `symux -l`
  119. ;;
  120. cpu[0-9].rrd)
  121. # Build cpu file
  122. create_rrd $i \
  123. DS:user:GAUGE:$INTERVAL:0:100 \
  124. DS:nice:GAUGE:$INTERVAL:0:100 \
  125. DS:system:GAUGE:$INTERVAL:0:100 \
  126. DS:interrupt:GAUGE:$INTERVAL:0:100 \
  127. DS:idle:GAUGE:$INTERVAL:0:100
  128. ;;
  129. df_*.rrd)
  130. # Build df file
  131. create_rrd $i \
  132. DS:blocks:GAUGE:$INTERVAL:0:U \
  133. DS:bfree:GAUGE:$INTERVAL:0:U \
  134. DS:bavail:GAUGE:$INTERVAL:0:U \
  135. DS:files:GAUGE:$INTERVAL:0:U \
  136. DS:ffree:GAUGE:$INTERVAL:0:U \
  137. DS:syncwrites:COUNTER:$INTERVAL:U:U \
  138. DS:asyncwrites:COUNTER:$INTERVAL:U:U
  139. ;;
  140. sensor*.rrd)
  141. # Build sensor file
  142. create_rrd $i \
  143. DS:value:GAUGE:$INTERVAL:-U:U
  144. ;;
  145. mem.rrd)
  146. # Build memory file
  147. create_rrd $i \
  148. DS:real_active:GAUGE:$INTERVAL:0:U \
  149. DS:real_total:GAUGE:$INTERVAL:0:U \
  150. DS:free:GAUGE:$INTERVAL:0:U \
  151. DS:swap_used:GAUGE:$INTERVAL:0:U \
  152. DS:swap_total:GAUGE:$INTERVAL:0:U
  153. ;;
  154. if_*.rrd)
  155. # Build interface files
  156. create_rrd $i \
  157. DS:ipackets:COUNTER:$INTERVAL:U:U DS:opackets:COUNTER:$INTERVAL:U:U \
  158. DS:ibytes:COUNTER:$INTERVAL:U:U DS:obytes:COUNTER:$INTERVAL:U:U \
  159. DS:imcasts:COUNTER:$INTERVAL:U:U DS:omcasts:COUNTER:$INTERVAL:U:U \
  160. DS:ierrors:COUNTER:$INTERVAL:U:U DS:oerrors:COUNTER:$INTERVAL:U:U \
  161. DS:collisions:COUNTER:$INTERVAL:U:U DS:drops:COUNTER:$INTERVAL:U:U
  162. ;;
  163. debug.rrd)
  164. # Build debug file
  165. create_rrd $i \
  166. DS:debug0:GAUGE:$INTERVAL:U:U DS:debug1:GAUGE:$INTERVAL:U:U \
  167. DS:debug2:GAUGE:$INTERVAL:U:U DS:debug3:GAUGE:$INTERVAL:U:U \
  168. DS:debug4:GAUGE:$INTERVAL:U:U DS:debug5:GAUGE:$INTERVAL:U:U \
  169. DS:debug6:GAUGE:$INTERVAL:U:U DS:debug7:GAUGE:$INTERVAL:U:U \
  170. DS:debug8:GAUGE:$INTERVAL:U:U DS:debug9:GAUGE:$INTERVAL:U:U \
  171. DS:debug10:GAUGE:$INTERVAL:U:U DS:debug11:GAUGE:$INTERVAL:U:U \
  172. DS:debug12:GAUGE:$INTERVAL:U:U DS:debug13:GAUGE:$INTERVAL:U:U \
  173. DS:debug14:GAUGE:$INTERVAL:U:U DS:debug15:GAUGE:$INTERVAL:U:U \
  174. DS:debug16:GAUGE:$INTERVAL:U:U DS:debug17:GAUGE:$INTERVAL:U:U \
  175. DS:debug18:GAUGE:$INTERVAL:U:U DS:debug19:GAUGE:$INTERVAL:U:U
  176. ;;
  177. proc_*.rrd)
  178. # Build proc file
  179. create_rrd $i \
  180. DS:number:GAUGE:$INTERVAL:0:U DS:uticks:COUNTER:$INTERVAL:0:U \
  181. DS:sticks:COUNTER:$INTERVAL:0:U DS:iticks:COUNTER:$INTERVAL:0:U \
  182. DS:cpusec:GAUGE:$INTERVAL:0:U DS:cpupct:GAUGE:$INTERVAL:0:100 \
  183. DS:procsz:GAUGE:$INTERVAL:0:U DS:rsssz:GAUGE:$INTERVAL:0:U
  184. ;;
  185. pf.rrd)
  186. # Build pf file
  187. create_rrd $i \
  188. DS:bytes_v4_in:DERIVE:$INTERVAL:0:U DS:bytes_v4_out:DERIVE:$INTERVAL:0:U \
  189. DS:bytes_v6_in:DERIVE:$INTERVAL:0:U DS:bytes_v6_out:DERIVE:$INTERVAL:0:U \
  190. DS:packets_v4_in_pass:DERIVE:$INTERVAL:0:U DS:packets_v4_in_drop:DERIVE:$INTERVAL:0:U \
  191. DS:packets_v4_out_pass:DERIVE:$INTERVAL:0:U DS:packets_v4_out_drop:DERIVE:$INTERVAL:0:U \
  192. DS:packets_v6_in_pass:DERIVE:$INTERVAL:0:U DS:packets_v6_in_drop:DERIVE:$INTERVAL:0:U \
  193. DS:packets_v6_out_pass:DERIVE:$INTERVAL:0:U DS:packets_v6_out_drop:DERIVE:$INTERVAL:0:U \
  194. DS:states_entries:GAUGE:$INTERVAL:0:U \
  195. DS:states_searches:DERIVE:$INTERVAL:0:U \
  196. DS:states_inserts:DERIVE:$INTERVAL:0:U \
  197. DS:states_removals:DERIVE:$INTERVAL:0:U \
  198. DS:counters_match:DERIVE:$INTERVAL:0:U \
  199. DS:counters_badoffset:DERIVE:$INTERVAL:0:U \
  200. DS:counters_fragment:DERIVE:$INTERVAL:0:U \
  201. DS:counters_short:DERIVE:$INTERVAL:0:U \
  202. DS:counters_normalize:DERIVE:$INTERVAL:0:U \
  203. DS:counters_memory:DERIVE:$INTERVAL:0:U
  204. ;;
  205. pfq_*.rrd)
  206. # Build pfq file
  207. create_rrd $i \
  208. DS:sent_bytes:COUNTER:$INTERVAL:0:U \
  209. DS:sent_packets:COUNTER:$INTERVAL:0:U \
  210. DS:drop_bytes:COUNTER:$INTERVAL:0:U \
  211. DS:drop_packets:COUNTER:$INTERVAL:0:U
  212. ;;
  213. mbuf.rrd)
  214. # Build mbuf file
  215. create_rrd $i \
  216. DS:totmbufs:GAUGE:$INTERVAL:0:U DS:mt_data:GAUGE:$INTERVAL:0:U \
  217. DS:mt_oobdata:GAUGE:$INTERVAL:0:U DS:mt_control:GAUGE:$INTERVAL:0:U \
  218. DS:mt_header:GAUGE:$INTERVAL:0:U DS:mt_ftable:GAUGE:$INTERVAL:0:U \
  219. DS:mt_soname:GAUGE:$INTERVAL:0:U DS:mt_soopts:GAUGE:$INTERVAL:0:U \
  220. DS:pgused:GAUGE:$INTERVAL:0:U DS:pgtotal:GAUGE:$INTERVAL:0:U \
  221. DS:totmem:GAUGE:$INTERVAL:0:U DS:totpct:GAUGE:$INTERVAL:0:100 \
  222. DS:m_drops:COUNTER:$INTERVAL:0:U DS:m_wait:COUNTER:$INTERVAL:0:U \
  223. DS:m_drain:COUNTER:$INTERVAL:0:U
  224. ;;
  225. io_*.rrd)
  226. # Build disk files
  227. create_rrd $i \
  228. DS:rxfer:COUNTER:$INTERVAL:U:U \
  229. DS:wxfer:COUNTER:$INTERVAL:U:U \
  230. DS:seeks:COUNTER:$INTERVAL:U:U \
  231. DS:rbytes:COUNTER:$INTERVAL:U:U \
  232. DS:wbytes:COUNTER:$INTERVAL:U:U
  233. ;;
  234. io1_*.rrd)
  235. # Build disk files
  236. create_rrd $i \
  237. DS:transfers:COUNTER:$INTERVAL:U:U \
  238. DS:seeks:COUNTER:$INTERVAL:U:U \
  239. DS:bytes:COUNTER:$INTERVAL:U:U
  240. ;;
  241. "done")
  242. # ignore
  243. ;;
  244. *)
  245. # Default match
  246. echo $i - cannot determine filetype from filename
  247. ;;
  248. esac
  249. done