§アラートメールの送信設定

さて、測定した温度が一定の数値を超えたら、アラートメールを送信したい場合があります。 そんな場合には、以下のように設定します。 まずは、設定ファイルを開きます。

pi@raspberrypi:~ $ sudo vim /etc/munin/munin.conf

100行目付近に以下を記述します。

contact.email.command mail -s "Munin Alerts!!!" yyy@gmail.com
#contact.email.max_messages 1
contact.email.always_send warning critical
        
# a simple host tree
[localhost.localdomain]
    address 127.0.0.1
    use_node_name yes
    temp.temp.warning 4:16
    temp.temp.critical 3:15

このセクションの内容は、参考文献[1]に詳しく掲載されています。 設定ファイル編集の1行目は、宛先のメールアドレスを記載してください。 9,10行目は、4度から16度という温度域から外れた時にwarningアラートメールを、3度から15度という温度域から外れた時にcriticalアラートメールを送信しなさいという命令です。

§平均気温を自動で算出・メール送信

本セクションのpythonモジュールは、自作のため、よりよいコードがあるかもしれません。 それに関しましては、ご了承ください。 まずは新規ファイルを開きましょう。

pi@raspberrypi:~ $ sudo vim /home/pi/program/log_handle.py

以下のように記述します。

# -*- coding: utf-8 -*-

import smtplib
from email.MIMEText import MIMEText
from email.Utils    import formatdate
from email.Header import Header
import datetime

if __name__ == "__main__":

  file_in = open("log.txt")
         
  data = file_in.read()
  lines = data.split('\n')

  counter = 0
  sum_num = 0

  for line in lines:

    counter += 1
    bad_line = "nan" in line

    if counter == 1 or counter == 2:    # 二行目までは無視
      pass
    elif bad_line == 1:                 # 1=True
      counter -= 1
    elif line == "":
      counter -= 1
    else:
      value = float(line[12:17]) # 有効数字部
      expo = line[26:28]    	 # 指数部

      if expo == "01":
        value = value * 10

      sum_num += value

  element = counter - 2
  if element > 0:
    average = sum_num / element
  else:
    average = 0
          
  file_in.close()

############################################

  today = datetime.date.today()

  from_address = "xxx@gmail.com"
  to_address   = "yyy@gmail.com"

  login_user = 'xxx@gmail.com'
  login_pass = 'passward'

  charset = "ISO-2022-JP"
  subject = u"Munin Data"
  text    = u"Temperature Average of Today(%s) is %f C." % (today, average)

  msg = MIMEText(text.encode(charset),"plain",charset)
  msg["Subject"] = Header(subject,charset)
  msg["From"]    = from_address
  msg["To"]      = to_address
  msg["Date"]    = formatdate(localtime=True)

  smtp = smtplib.SMTP('smtp.gmail.com', 587)
  smtp.ehlo()
  smtp.starttls()
  smtp.ehlo()
  smtp.login(login_user, login_pass)
  smtp.sendmail(from_address, [to_address], msg.as_string())
  smtp.close()

ファイルをコピーします。

pi@raspberrypi:~ $ cd /
        
pi@raspberrypi:/ $ mkdir temp_avg
          
pi@raspberrypi:/ $ sudo cp /home/pi/program/log_handle.py /temp_avg

モジュールを実行させるための設定をします。以下のファイルを開きます。

pi@raspberrypi:~ $ sudo vim /usr/share/munin/plugins/temp

以下のように編集します。一部のみ抜粋。

  echo 'temp.draw LINE2'
  echo 'temp.type GAUGE'
  exit 0
fi

day1=`date '+%d'`
day2=`date -d '6 minutes' '+%d'`
day3=`date '+%Y%m%d'`
day4=`date -d '1 days' '+%Y%m%d'`

if [ $day1 != $day2 ]; then
#if [ $day1 = $day2 ]; then
  rrdtool fetch /var/lib/munin/localdomain/localhost.localdomain-temp-temp -g.rrd AVERAGE -s $day3 -e $day4 > /temp_avg/log.txt
  python /temp_avg/log_handle.py
fi

echo "temp.value $GETNUM";

実はday1,2,3,4が少し粗削りな設定ですが、お許しください。 以上で設定は終了です。

前のページへ

冒頭に戻る

参考文献/URL

  1. 棚からパルチャギ
メニューを閉じる