iT邦幫忙

0

機房異常該如何第一時間得知?

上星期週休時因公司供電異常造成冷氣秀斗未啟動,結果機房溫度飆高,一直到星期一進公司才發現10幾台server因為過熱而當機或關閉,所以想問問有沒有什麼硬體能檢測溫度或濕度,超過設定值就會發送mail或簡訊告知的?

魯大 iT邦高手 1 級 ‧ 2012-02-15 17:44:56 檢舉
我公司的做法是把冷氣的啟動開關改為自動
只要電來了,就自動開機
如果是長時間停電,那就請守衛給個通知
+1

將冷氣機改裝成『來電自動啟動』
平常都一樣用法

通常停電都只是幾秒鐘,長時間停電會通知
13
一級屠豬士
iT邦高手 1 級 ‧ 2012-02-17 16:22:18
最佳解答

第一時間要得知,可能需要增加設備,或是改良電路,上面許多網友都提出很好的建議.
除了這些以外,也有網友提出一些程式可以提供警報.但是多為Windows方面的.
敝人在此提供一個在Linux上的Python模組.然後再搭配後續發送email的程式,
可以作簡易的系統溫度警報.Linux要先安裝lm_sensors模組,就可以讀取溫度資訊.
lm_sensors官網: http://lm-sensors.org/
以下為溫度模組程式碼:

<pre class="c" name="code">#!/usr/bin/env python
# ---------------------------
# Linux Temperature Utility
# coordinate with lm_sensors
# by Bunko
# ---------------------------

from subprocess import Popen, PIPE, STDOUT

def get_sensors():
    """Get Core Temperature, FAN Speed and MB Temperature"""
    result_sensor = Popen("sensors", stdout=PIPE, stderr=STDOUT).communicate()[0]
    results = result_sensor.split('\n')
    cores = {}
    fans = {}
    boards = {}
    for line in results:
        data = line.split()
        if len(data) > 0:
            # Core Temp
            if data[0].startswith('Core'):
                corevar = data[0] + data[1][:-1]
                coretemp = data[2][:-3]
                coretemp = coretemp[1:]
                cores[corevar] = coretemp
            # -----------------
            if data[0].startswith('CPU'):
                if data[1] == 'FAN':
                    # CPU FAN Speed
                    fans[data[0]] = data[3]
                if data[1] == 'Temperature:':
                    # CPU Temperature
                    ctemp = data[2][:-3]
                    ctemp = ctemp[1:]
                    boards[data[0]] = ctemp
            # ----------------
            if data[0].startswith('CHASSIS'):
                # CHASSIS FAN Speed
                speed = data[2][5:]
                fans[data[0]] = speed
            #
            if data[0].startswith('MB'):
                # MB Temperature
                mtemp = data[2][:-3]
                mtemp = mtemp[1:]
                boards[data[0]] = mtemp
            #
    # -------------------------
    return cores, boards, fans
# ------------------------------------------

if __name__ == '__main__':
    cores,boards,fans = get_sensors()
    print 'Cores:', cores
    print 'Boards:', boards
    print 'FAN Speeds:', fans

執行情形:
Cores: {'Core0': '41.0', 'Core1': '25.0'}
Boards: {'CPU': '25.0', 'MB': '22.0'}
FAN Speeds: {'CHASSIS': ':1341', 'CPU': '816'}

看更多先前的回應...收起先前的回應...

將前面的程式碼存為temputil.py,置於相同目錄.
再來是簡易系統溫度報警程式程式碼:
程式碼放不下....
先放一部分:

<pre class="c" name="code">#!/usr/bin/env python
# encoding: utf-8
# --------------------------------
# Simple System Temperature Alert
# by Bunko
# --------------------------------
import temputil
import smtplib
from email import utils
from email.mime.text import MIMEText

# ----- 發送用的帳號 ------
MAIL_USER = 'test1@gmail.com'
MAIL_PASS = 'testpass'

# ----- 通知郵箱 可以輸入多個 ------
ALERT_MAILS = ['test1@gmail.com','test2@gmail.com']

# ----- 溫度報警值 -----
CORE0 = 40
MB = 26
CPU = 30
<pre class="c" name="code">def send_gmail(fromaddr, passwd, toaddrs, subject, tranmsg):
    server = 'smtp.gmail.com'
    to = ', '.join(toaddrs)
    msg = MIMEText(tranmsg, _subtype='plain', _charset='utf-8')
    msg['To'] = to
    msg['From'] = fromaddr
    msg['Subject'] = subject
    msg['Date'] = utils.formatdate(localtime=1)
    msg['Message-ID'] = utils.make_msgid()
    #  ---- login smtp server ----
    smtpserver = smtplib.SMTP(server, 587)
    smtpserver.ehlo()
    smtpserver.starttls()
    smtpserver.ehlo()
    smtpserver.login(fromaddr, passwd)
    # ---- Try to Send Mail ----
    try:
        smtpserver.sendmail(fromaddr, toaddrs, msg.as_string())
        rtnval = True
    except smtplib.SMTPException:
        rtnval = False
#
    smtpserver.close()
    return rtnval
<pre class="c" name="code"># ----- Main() -----
def Main():
    cores,boards,fans = temputil.get_sensors()
    # --- 可視需要增加 ---
    core0_temp = float(cores['Core0'])
    cpu_temp = float(boards['CPU'])
    mb_temp = float(boards['MB'])
    
    if core0_temp > CORE0 or cpu_temp > CPU or mb_temp > MB:
        # print 'Alert!'
        subj = u'測試系統溫度過高'
        msg = u'設定值為 CPU:%d    核心:%d    主板:%d\n' % (CPU, CORE0, MB)
        msg += u'測量值為 CPU:%5.2f 核心:%5.2f 主板:%5.2f' % (cpu_temp, core0_temp, mb_temp)
        send_gmail(MAIL_USER, MAIL_PASS, ALERT_MAILS, subj, msg)
    
# -------------------------
if __name__ == '__main__':
    Main()

郵箱帳號,密碼,被通知郵箱,均需修改.報警值可自行增加,設定的數值視實際情況調整.配合Cron使用,即可排成檢查.
發送的mail大略如圖所示:

上面有錯字,修正:配合Cron使用,即可排程檢查.
模組與報警程式ssta,亦在敝人blog發布.歡迎試用與指正.
http://bunko666.wordpress.com/2012/02/17/linux%E7%B3%BB%E7%B5%B1%E6%BA%AB%E5%BA%A6%E7%9B%A3%E6%8E%A7%E5%A0%B1%E8%AD%A6%E7%A8%8B%E5%BC%8F/

10
lhs
iT邦研究生 4 級 ‧ 2012-02-15 15:40:54

可能要用類似物連網之類的溫度感測裝置與無線網路或3G的組合吧!!

希望對你有所幫助囉!!

CalvinKuo iT邦大師 7 級 ‧ 2012-02-15 16:57:52 檢舉

第一時間 UPS應該會檢測到市電異常(除非冷氣與電腦設備是吃不同迴路),我是覺得市電異常就要發訊息了,不然長時間斷電單靠UPS應該也撐不了多久(就算有設定UPS多少電力以下開始自動關機,管理人員最好還是能夠知道)。
溫度通知還是必要的.... 我遇過水冷式冷氣水塔出問題。
另外,伺服器高溫運作後,小心後遺症(如我的大頭照)。

鐵殼心 iT邦高手 1 級 ‧ 2012-02-15 17:26:38 檢舉

國內幾家UPS大廠都有環境控制的選購配件和解決方案, 問一問UPS的業務應該就會有答案.

super747 iT邦研究生 5 級 ‧ 2012-02-16 10:47:15 檢舉

對啊,高級一點的UPS,都有這種功能,
(但是話說回來,冷氣故障,室內溫度升高,但主機不故障,那就不知如何監控了,因為電腦只是當機,又不是沒有電
只能靠人工,用手機或電腦,連進公司看看囉,(像我們十台SERVER,也不能有人值班)

6
vino1
iT邦大師 1 級 ‧ 2012-02-15 15:57:08

應該跟老闆爭取經費找專業廠商來做機房環控系統~
google 一下應該就很多資料, 小弟就不再贅述囉

2
bzbz
iT邦新手 2 級 ‧ 2012-02-15 16:04:21

講了好像在幫別人賺錢也...XD

2
ghost234
iT邦新手 4 級 ‧ 2012-02-15 17:29:26

機房不都會有值班人員???

沒值班人員??那代表機房不重要~~讓他停電吧.....

4
adaam
iT邦新手 5 級 ‧ 2012-02-15 17:40:34

機器本身應該都有溫度感測器,可以從主機拿到數值才對
要監測之後觸發事件的話可以自己寫小程式或是用一下nagios來管理吧

8
Jerry
iT邦研究生 1 級 ‧ 2012-02-16 02:21:41

要由機房的全規劃談起,因為不只是你的server會過熱等問題。
冷氣是有多少台,有10多台的server,冷氣應該也要有異常通告吧。
我們公司初期未導入時,在機房門口放個溫度計,守衛尋廠時要去觀看一下溫度,有異常要馬上通報。
後續就開始做環境的一些偵測了,冷氣斷電會馬上有警告。其它的,你可以詢問一下你的代理商,server中有沒有這些異常的通告。

12
cklin
iT邦新手 2 級 ‧ 2012-02-16 10:23:56

機房的環境控制是很重要的,如果建置時沒有環控系統做恆溫恆溼控制與異常告警
這一部分大多是請機電/冷房空調專業人員來做設計。

不過後來由IT/MIS人員接手自己用一些小工具,也是可以做得到的機房溫控告警
以小弟的經驗,提供幾個解決方案給您參考

1.透過SNMP 簡單網路管理協定來做監控程式
機房裡大多有的東西(UPS / Cisco 網路設備 / Windwos Server / HP Server),這些東西都有支援SNMP,且內部自己都有溫度的sensor,透過SNMPget 方式抓到數值以後再做發送mail或簡訊告知。
以下是之前我做過的幾個SNMP OID
UPS 電池溫度 1.3.6.1.2.1.33.1.2.7

Cisco 機箱溫度 1.3.6.1.4.1.9.5.1.2.13
chassisTempAlarm OBJECT-TYPE
SYNTAX INTEGER {
off(1), -- temperature within normal range
on(2), -- temperature too high
critical(3) -- critical temperature, system
-- shut down imminent
}

2.另外Windows 系統可以透過第三方的免費軟體,也可以得到一些主機部件(如CPU/HDD)的溫度與風扇數值
透過硬體監控溫度軟體SpeedFan,提供 .1.3.6.1.4.1.30503.1.2.x
http://www.almico.com/speedfan.php
透過磁碟溫度監控軟體 DiskTemp.exe
http://www.satsignal.eu/software/disk.html#DiskTemp

3.如果不想自己開發程式,也有很便宜的USB溫度感測器可以買,附贈的軟體就可以發 MSN & Mail
http://www.pcsensor.com/index.php?\_a=viewProd&productId=6

4
jachin
iT邦新手 4 級 ‧ 2012-02-16 13:39:49

這很簡單~
雖然大型公司可以設製溫度控制機制,
但那是高成本的一個方式,
建議冷氣可以設置兩個以上,
一台壞了,還有一台在運作~
如果是中央系統,那更不用擔心啦,
中央系統壞了一定會馬上知道~

2
palulidx
iT邦新手 4 級 ‧ 2012-02-16 16:19:08

可參考IDC機房的環控方法,溫度高過設定值或其它環境異常都會 告警,並發簡訊通知管理者。

6
wind1336
iT邦新手 5 級 ‧ 2012-02-16 19:54:10

待過銀行的OP,當時機房是24小時都有人看管,每天都要記錄冷氣溫度,一個禮拜要測試一次UPS是否有正常?有兩台冷氣,要手動切換,只要斷電,地下室的UPS就會啟動(有馬達那種)。
現在待的公司比較小,所以沒有專人看管,只有裝兩台冷氣,會自動切換,白天A冷氣,晚上B冷氣,一台壞了,還有另外一台~我每天都會去機房看一下~兩年多了還沒發生過Server當機的情形~
所以建議最好有兩台冷氣,互相切換,再加上UPS不斷電系統,一天至少一次巡視機房,也比你讓Server過熱再來補救來的重要~

6
aaron3399
iT邦新手 3 級 ‧ 2012-02-17 00:05:46

之前也跟你煩惱同樣的問題~
我只是想要能在機房溫度超標時通知我而已...但台灣市面上要的溫控通知系統都不便宜...唉~~~

後來我找到這個便宜又達到功能的小東西,一端接在電話線上,當機房溫度超過設定值就會撥市話打我手機...大陸很多這種機房溫濕報警器產品,還不錯用~

機房溫度報警器/機房超溫報警器(帶拔號報警)(200T)
http://big5.made-in-china.com/showroom/szchjkj/product-detailqMrmeRYvCuWw/%E6%9C%BA%E6%88%BF%E6%B8%A9%E5%BA%A6%E6%8A%A5%E8%AD%A6%E5%99%A8/%E6%9C%BA%E6%88%BF%E8%B6%85%E6%B8%A9%E6%8A%A5%E8%AD%A6%E5%99%A8%EF%BC%88%E5%B8%A6%E6%8B%94%E5%8F%B7%E6%8A%A5%E8%AD%A6%EF%BC%89%EF%BC%88200T%EF%BC%89.html

一台約RMB 350左右....

4
chenhsinan
iT邦新手 4 級 ‧ 2012-02-17 02:58:34

小弟之前遭遇過相同慘痛經驗,後來使用了"SENSAPHONE"後就解決了此問題,當時買的機型算是一般,好像可外接8個感測器,但一般你只會用到"溫度"、"濕度"、"煙霧"、"供電"等感測器來幫你偵測是否超過你所設定之標準值,超過時它會自動撥打你所設定之聯絡人的電話,並告知聯絡人目前所偵測到之狀況為何?
細節如你有需要可聯絡:映碩科技-楊文亮先生 0925989582
"SENSAPHONE"的產品,個人使用的經驗算是很耐用並且它在國外還蠻有名的.

0
lu500926
iT邦見習生 0 級 ‧ 2016-06-24 15:59:14

機電系統與設備溫度偵測解決應用方案....請各位參考http://www.chw-roc.com.tw/front/bin/home.phtml 有不懂之處歡迎請教//

0
chenlidu
iT邦新手 5 級 ‧ 2019-09-04 12:29:18

遠程溫度計 | 高精度溫溼度記錄器 | 過溫手機告警

USB送電,行動電源可,遠端監控、歷史數據曲線、歷史數據轉CSV
https://chenlidu.gitbooks.io/eirs/content/

我要發表回答

立即登入回答