« | Camino 1.5リリース »

ラクチンで高機能な監視ツールmunin

Posted on 2007/06/06 (水) 13:09
Filed Under 技術 | | TrackBack | このエントリをはてなブックマークに追加 Share on Tumblr

page thumbnail設定が ラクチンで高機能だという評判の監視ツール「munin」を入れてみた。
読んだ記事:「MRTGよりお手軽に負荷やトラフィックをグラフ化できる「Munin」 - GIGAZINE
手もとのCentOSやFedoraCoreのLinux環境はyum一発で入っていきなりデフォルトの監視項目で動き出した、というぐらいラクチン設定だった。標準添付のps_プラグインを使ってffmpegのプロセス数を数えると走ってるfoltiaのトラコン数も数えられる。
 こりゃーいい、とおもって1日使ってみたところ温度を取得する項目が物足りない気がしたのでlm_sensorsの取得内容を元にグラフを描くプラグインを作ってみた。ただlm_sensorsの取得内容だけを描いてもまだ物足りなかったので、アメダスの実況気温をlivedoor 天気情報あたりから得て描くようにもした。
 自宅サーバなど年中エアコン入れると電気代がもったいないよなーという向きにも外気温がわかるとなんかの参考になりそう。

表示例はこんな感じ。
サンプルは宗子時空の動いてるサーバ。
まず一日の日中の動き。
munin 温度 merleawe day
一週間だとこんな。
munin 温度 merleawe day

ためしにfoltiaを動かしてる機械だとこんな感じ。
munin 温度 sync day
録画がおわってトラコンが走ると猛烈に熱くなるというのがとてもよくわかる。

 インストールは他のプラグインとおんなじで、lm_sensorsが入ってれば、ほぼ自動で動くはず。アメダスの地域を変えるには108行目のRSS URLを変える。

ダウンロードはこちら
munin lm_sensors温度プラグイン temperature.pl.txt

ソースはこんな。

PERL:
  1. #!/usr/bin/perl -w
  2. #
  3. # Anime recording system foltia
  4. # http://www.dcc-jpl.com/soft/foltia/
  5. #
  6. # munin用温度監視モジュール/Linux / lm_sensors
  7. #
  8. # DCC-JPL Japan/foltia project
  9. #
  10. #
  11. # How to install to munin.
  12. # munin : http://munin.projects.linpro.no/
  13. #
  14. # su -
  15. # cp temperature.pl /usr/share/munin/plugins/temperature
  16. # ln -s /usr/share/munin/plugins/temperature /etc/munin/plugins/
  17. # restart munin-node Ex. service munin-node reload
  18. #
  19. #
  20. use strict;
  21. use warnings;
  22.  
  23. if ($#ARGV> -1 ){
  24.  
  25. if ( $ARGV[0] eq "autoconf" ){
  26.     my $lmsensorspath = `which sensors`;
  27.         if ($lmsensorspath eq ""){
  28.         print "no\n";
  29.         }else{
  30.         print "yes\n";
  31.         }
  32.     exit 0;
  33. }elsif($ARGV[0] eq "config"){
  34. print "graph_title Universal temperatures. \n";
  35. print "graph_args --base 1000 -l 0\n";
  36. print "graph_vlabel Celsius\n";
  37. print "graph_scale no\n";
  38. print "graph_category sensors\n";
  39. print "graph_info This graph shows the temperature in degrees Celsius of lm_sensors in the machine and AMEDAS.\n";
  40. &extracttempratures("config");
  41. print "amedas.label amedas\n";
  42. #print "amedas.type DERIVE\n";
  43. print "amedas.info temperature from amedas\n";
  44.  
  45. }else{
  46. &extracttempratures();
  47. my $amedasvalue = &getamedastemp();
  48. print "amedas.value $amedasvalue\n";
  49. }
  50.  
  51. }else{
  52. &extracttempratures();
  53. my $amedasvalue = &getamedastemp();
  54. print "amedas.value $amedasvalue\n";
  55. }
  56.  
  57. sub extracttempratures(){
  58. #print "$#_\n\n";
  59. my $flag = "";
  60. if ($#_ == 0){
  61.     if ($_[0] eq "config"){
  62.         $flag = "config";
  63.     }
  64. }else{
  65.     $flag = "value";
  66. }#endif value
  67.  
  68. #my $sensors=`cat ./mer-sensors.txt`;
  69. my $sensors = `which sensors`;
  70. $sensors = `$sensors`;
  71. my @sensor = split(/\n/, $sensors);
  72. my $data = "";
  73. my $counter = "0";
  74. my @tmp1 = "";
  75. my $temperature = "";
  76.  
  77. foreach $data (@sensor){
  78.     if ($data =~ /[0-9].*C/){
  79.         @tmp1 =split(/\(/, $data);
  80.         @tmp1 =split(/:/, $tmp1[0]);
  81.         $temperature = $tmp1[1];
  82.         $temperature =~ s/[^0-9.-]//gi;
  83.         if ($flag eq "config"){
  84.             print "$tmp1[0]_$counter.label $tmp1[0]_$counter\n";
  85.             #print "$tmp1[0]_$counter.type DERIVE\n";
  86.             print "$tmp1[0]_$counter.info temperature on $tmp1[0]_$counter\n";
  87.             #print "$tmp1[0]_$counter.max 200\n";
  88.             #print "$tmp1[0]_$counter.min -20\n";
  89.         }else{
  90.             print "$tmp1[0]_$counter.value $temperature\n";
  91.         }
  92.     $counter++;
  93.     }#if
  94. }#foreach
  95. }#endsub
  96.  
  97. sub getamedastemp(){
  98. use LWP::Simple;
  99. my $rssurl = "";
  100. if ($#_> -1 ){
  101.     $rssurl = $_[0] ;
  102. }else{
  103. #Config section
  104. #デフォルトで八王子
  105.     $rssurl = "http://weather.livedoor.com/forecast/rss/amedas/point/44112.xml";
  106. }
  107.  
  108. my ($content) = get("$rssurl");
  109. my (@line) = split(/\n/, $content);
  110.  
  111. foreach(@line){
  112.     if( /の気温/){
  113.     my (@linetmp) = "";
  114.     @linetmp = split(/]/, $_);
  115.     @linetmp = split(/</, $linetmp[1]);
  116.     my $temperature = "$linetmp[0]";
  117.     $temperature =~ s/[^0-9\.]//gi;
  118.     return ("$temperature");
  119.     last;
  120.     }
  121. }#foreach
  122. }#endsub

Comments

Leave a Comment

TrackBack URI :http://www.dcc-jpl.com/diary/2007/06/06/munin/trackback/

Name

Email

ウェブサイト

コメント

6 Comments so far
  1. ysn 2007/09/29 (土) 15:48

    line115の気温は文字コードきをつけないと乙るでし。
    livedoor amedasがUTF8なのでUTF8で保存やね。

  2. […] http://www.dcc-jpl.com/diary/2007/06/06/munin/ これの使い方がいまいちわかりません;; ソース落としてから、どうしたらいいのでしょうか? 普通のプラグインとは違うようですし・・・ […]

  3. ゲスト 2019/09/15 (日) 10:26

    八王子以外のポイントの RSS URL はどうやって知ることができますか。

  4. sorshi 2019/09/15 (日) 11:18

    いまどきは提供元の仕様が変更されててどのみちそのままでは動かないと思います。

  5. ゲスト 2019/09/15 (日) 17:04

    八王子は今でもちゃんと取れています

  6. ゲスト 2019/09/15 (日) 17:15

    ただし、”use utf8″ を追加し、”Core 0″のようにスペースが入るとデータが表示されないので若干の変更を加えていますが。

Recently


Categories


Archives


Wish list

宗子さんのほしい物リスト2015/5-