mysql可视化软件netcat,MySQL漫談,由使用Python撰寫之MySQL工具程式出發(26)

今天將探討系統溫度的監測.

系統溫度在Linux 常用lm-sensor 與 hddtemp 來獲得相關資訊.

以下是某機器上的回報結果:

$ sensors

coretemp-isa-0000

Adapter: ISA adapter

Core 0: +41.0°C (high = +78.0°C, crit = +100.0°C)

coretemp-isa-0001

Adapter: ISA adapter

Core 1: +30.0°C (high = +78.0°C, crit = +100.0°C)

atk0110-acpi-0

Adapter: ACPI interface

Vcore Voltage: +1.06 V (min = +0.85 V, max = +1.60 V)

+3.3 Voltage: +3.34 V (min = +2.97 V, max = +3.63 V)

+5 Voltage: +4.96 V (min = +4.50 V, max = +5.50 V)

+12 Voltage: +12.14 V (min = +10.20 V, max = +13.80 V)

CPU FAN Speed: 838 RPM (min = 600 RPM)

CHASSIS FAN Speed:1360 RPM (min = 200 RPM)

CPU Temperature: +33.0°C (high = +60.0°C, crit = +95.0°C)

MB Temperature: +30.0°C (high = +45.0°C, crit = +95.0°C)

hddtemp 已經設定為 Daemon Mode,會使用 7634 Port,用NetCat 測試反應

$ nc localhost 7634

|/dev/sda|ST3500413AS|34|C|

這樣子我們就可以很輕易的來長期觀察系統溫度.

以下將以 CPU Temperature, MB Temperature, CPU FAN Speed, CHASSIS FAN Speed,HD Temperature 幾項來蒐集資料.

首先是建立rrd file.

#!/usr/bin/env python

# ------------------------

# Python RRDTool MySQL

# System temperature

# create rrd file

# -----------------------

import rrdtool

rrdtool.create(

'systemp.rrd', '--step', '60',

'DS:cputemp:GAUGE:120:0:U',

'DS:mbtemp:GAUGE:120:0:U',

'DS:hdtemp:GAUGE:120:0:U',

'DS:cpufan:GAUGE:120:0:U',

'DS:chassisfan:GAUGE:120:0:U',

'RRA:AVERAGE:0.5:1:2880',

'RRA:AVERAGE:0.5:30:672',

'RRA:AVERAGE:0.5:60:744',

'RRA:AVERAGE:0.5:720:732',

'RRA:MAX:0.5:1:2880',

'RRA:MAX:0.5:30:672',

'RRA:MAX:0.5:60:744',

'RRA:MAX:0.5:720:732',

'RRA:MIN:0.5:1:2880',

'RRA:MIN:0.5:30:672',

'RRA:MIN:0.5:60:744',

'RRA:MIN:0.5:720:732',

'RRA:LAST:0.5:1:2880',

'RRA:LAST:0.5:30:672',

'RRA:LAST:0.5:60:744',

'RRA:LAST:0.5:720:732')

接著蒐集系統溫度的函式.

#!/usr/bin/env python

# ---------------------------

# Linux Temperature Utility

# with lm_sensors

# and HDDTemp

# ---------------------------

from subprocess import Popen, PIPE, STDOUT

import socket

HOST = 'localhost'

PORT = 7634

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][6:]

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

# ------------------------------------------

def get_hdd_temp():

"""For One HD"""

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect((HOST, PORT))

tempdata = s.makefile().read()

s.close()

tempdata = tempdata.split('|')

hd_columns = ['hd_path', 'hd_type', 'hd_temp', 'hd_temp_unit_type']

hd_values = tempdata[1:5]

hddict = dict(zip(hd_columns, hd_values))

return hddict

# ----------------------------

if __name__ == '__main__':

cores,boards,fans = get_sensors()

print 'Cores:', cores

print 'Boards:', boards

print 'FAN Speeds:', fans

print 'HD Temp:', get_hdd_temp()

然後是使用上述溫度函式,將資料存放到 rrd file的程式.

#!/usr/bin/env python

# ------------------------------

# Python RRDTool MySQL

# System temperature

# store data into rrd file

# -----------------------------

import rrdtool

import time

import temp_util

def update_systemp_rrd(rrdfile):

coredict, mbdict, fandict = temp_util.get_sensors()

# MB and CPU Temp

mbtemp = float(mbdict['MB'])

cputemp = float(mbdict['CPU'])

# FAN Speed

chassis_fan = int(fandict['CHASSIS'])

cpu_fan = int(fandict['CPU'])

# HD Temp

hddict = temp_util.get_hdd_temp()

hd1_temp = int(round(float(hddict['hd_temp'])))

# Update RRD

rrdtool.update(rrdfile, 'N:' + `cputemp` + ':' + `mbtemp` + ':' + \

`hd1_temp` + ':' + `cpu_fan` + ':' + `chassis_fan`)

#

if __name__ == '__main__':

while 1:

update_systemp_rrd('systemp.rrd')

time.sleep(60)

放到背景執行,會每分鐘更新rrd.

讓程式蒐集一陣子後,就可以繪圖了.

#!/usr/bin/env python

# ---------------------------

# Python RRDTool

# Memory Data

# Create Image from rrd file

# ---------------------------

import rrdtool

import datetime

def cpu_temp_graph(rrdfile, period):

timenow = datetime.datetime.now()

disptime = datetime.datetime.strftime(timenow, '%Y-%m-%d %H-%M-%S')

title = 'CPU_Temp_FAN_Speed_%s' % period

filename = title + '.png'

# -------------------

cputemp = 'DEF:cputemp=%s:cputemp:AVERAGE' % rrdfile

cpufan = 'DEF:cpufan=%s:cpufan:AVERAGE' % rrdfile

sfan = 'CDEF:sfan=cpufan,10,/'

# -------------------

if period == 'yesterday':

start = 'end-1d'

end = '00:00'

if period == 'today':

start = '00:00'

end = '23:59'

if period == '2h':

start = '-2h'

end = 'now'

rrdtool.graph(

filename,

'--start', start,

'--end', end,

'--title', title,

'-a', 'PNG',

'-W', 'Hitomitanaka for ITHelp',

'--slope-mode',

'--vertical-label=Celsius',

'--rigid',

'--lower-limit', '0',

'--width', '500',

'--height', '150',

'--right-axis', '10:0',

'--right-axis-label=RPM',

'--x-grid', 'HOUR:1:HOUR:2:HOUR:2:0:%H',

'--alt-y-grid',

'--color', 'BACK#000000',

'--color', 'CANVAS#000000',

'--color', 'FONT#FFF978',

'--font=LEGEND:7',

'--font', 'TITLE:8:',

'--font', 'UNIT:7:',

'--font', 'WATERMARK:9',

# ---------------------------------

cputemp,

cpufan,

sfan,

#----------------------------------

'AREA:cputemp#FF32B1:CPU Temp',

'GPRINT:cputemp:LAST: Current\\: %.01lf',

'GPRINT:cputemp:AVERAGE: Average\\: %.01lf',

'GPRINT:cputemp:MIN: Min\\: %.01lf',

'GPRINT:cputemp:MAX: Max\\: %.01lf\\n',

'LINE:sfan#EEEE00:FAN Speed',

'GPRINT:cpufan:LAST: Current\\: %.01lf',

'GPRINT:cpufan:AVERAGE: Average\\: %.01lf',

'GPRINT:cpufan:MIN: Min\\: %.01lf',

'GPRINT:cpufan:MAX: Max\\: %.01lf\\n',

'COMMENT:\t\t\t\t\tUpdate Time %s' % disptime)

#

def mb_temp_graph(rrdfile, period):

timenow = datetime.datetime.now()

disptime = datetime.datetime.strftime(timenow, '%Y-%m-%d %H-%M-%S')

title = 'MB_Temp_CHASSIS_FAN_Speed_%s' % period

filename = title + '.png'

# -------------------

mbtemp = 'DEF:mbtemp=%s:mbtemp:AVERAGE' % rrdfile

chassisfan = 'DEF:chassisfan=%s:chassisfan:AVERAGE' % rrdfile

sfan = 'CDEF:sfan=chassisfan,10,/'

# -------------------

if period == 'yesterday':

start = 'end-1d'

end = '00:00'

if period == 'today':

start = '00:00'

end = '23:59'

if period == '2h':

start = '-2h'

end = 'now'

rrdtool.graph(

filename,

'--start', start,

'--end', end,

'--title', title,

'-a', 'PNG',

'-W', 'Hitomitanaka for ITHelp',

'--slope-mode',

'--vertical-label=Celsius',

'--rigid',

'--lower-limit', '0',

'--width', '500',

'--height', '150',

'--right-axis', '10:0',

'--right-axis-label=RPM',

'--x-grid', 'HOUR:1:HOUR:2:HOUR:2:0:%H',

'--alt-y-grid',

'--color', 'BACK#000000',

'--color', 'CANVAS#000000',

'--color', 'FONT#FFF978',

'--font=LEGEND:7',

'--font', 'TITLE:8:',

'--font', 'UNIT:7:',

'--font', 'WATERMARK:9',

# ---------------------------------

mbtemp,

chassisfan,

sfan,

#----------------------------------

'AREA:mbtemp#FF32B1:MB Temp',

'GPRINT:mbtemp:LAST: Current\\: %.01lf',

'GPRINT:mbtemp:AVERAGE: Average\\: %.01lf',

'GPRINT:mbtemp:MIN: Min\\: %.01lf',

'GPRINT:mbtemp:MAX: Max\\: %.01lf\\n',

'LINE:sfan#EEEE00:CHASSIS FAN Speed',

'GPRINT:chassisfan:LAST: Current\\: %.01lf',

'GPRINT:chassisfan:AVERAGE: Average\\: %.01lf',

'GPRINT:chassisfan:MIN: Min\\: %.01lf',

'GPRINT:chassisfan:MAX: Max\\: %.01lf\\n',

'COMMENT:\t\t\t\t\tUpdate Time %s' % disptime)

#

def hd_temp_graph(rrdfile, period):

timenow = datetime.datetime.now()

disptime = datetime.datetime.strftime(timenow, '%Y-%m-%d %H-%M-%S')

title = 'HD_Temp_%s' % period

filename = title + '.png'

# -------------------

hdtemp = 'DEF:hdtemp=%s:hdtemp:AVERAGE' % rrdfile

# -------------------

if period == 'yesterday':

start = 'end-1d'

end = '00:00'

if period == 'today':

start = '00:00'

end = '23:59'

if period == '2h':

start = '-2h'

end = 'now'

rrdtool.graph(

filename,

'--start', start,

'--end', end,

'--title', title,

'-a', 'PNG',

'-W', 'Hitomitanaka for ITHelp',

'--slope-mode',

'--vertical-label=Celsius',

'--rigid',

'--lower-limit', '0',

'--width', '500',

'--height', '150',

'--x-grid', 'HOUR:1:HOUR:2:HOUR:2:0:%H',

'--alt-y-grid',

'--color', 'BACK#000000',

'--color', 'CANVAS#000000',

'--color', 'FONT#FFF978',

'--font=LEGEND:7',

'--font', 'TITLE:8:',

'--font', 'UNIT:7:',

'--font', 'WATERMARK:9',

# ---------------------------------

hdtemp,

#----------------------------------

'AREA:hdtemp#FF32B1:HD Temp',

'GPRINT:hdtemp:LAST: Current\\: %.01lf',

'GPRINT:hdtemp:AVERAGE: Average\\: %.01lf',

'GPRINT:hdtemp:MIN: Min\\: %.01lf',

'GPRINT:hdtemp:MAX: Max\\: %.01lf\\n',

'COMMENT:\t\t\t\tUpdate Time %s' % disptime)

#

if __name__ == '__main__':

cpu_temp_graph('systemp.rrd', 'today')

mb_temp_graph('systemp.rrd', 'today')

hd_temp_graph('systemp.rrd', 'today')

會分別繪製 CPU溫度與風扇轉速, MB溫度與機箱風扇轉速, HD溫度,其中

溫度與風扇轉速,分別使用各自的Y軸.以利將不同單位的兩種數據放在一起觀察.

20121029192234508e66fa7237c_resize.png

20121029192252508e670c89a6f_resize.png

20121029192303508e6717cfcc9_resize.png

溫度與風扇轉速的數據長期蒐集,對我們了解系統運作的情形,可以提供很好的幫助.

例如發覺風扇轉速突然變高,溫度變高,就需要檢查一下硬體.

當機房裡面的Server 都有長期間蒐集溫度數據,我們就可以根據不同機櫃裡的

Server溫度差距,來了解機房空調配置是否有需要改良的地方.

甚至適當的調高機房溫度,以達到節能減碳.

以上種種都需要長時期且普遍的蒐集數據,進而得到整體平均數值,有利於適當調節溫度.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
森林防火应急联动指挥系统是一个集成了北斗定位/GPS、GIS、RS遥感、无线网络通讯、4G网络等技术的现代化智能系统,旨在提高森林火灾的预防和扑救效率。该系统通过实时监控、地图服务、历史数据管理、调度语音等功能,实现了现场指挥调度、语音呼叫通讯、远程监控、现场直播、救火人员生命检测等工作的网络化、智能化、可视化。它能够在火灾发生后迅速组网,确保现场与指挥中心的通信畅通,同时,系统支持快速部署,适应各种极端环境,保障信息的实时传输和历史数据的安全存储。 系统的设计遵循先进性、实用性、标准性、开放性、安全性、可靠性和扩展性原则,确保了技术的领先地位和未来的发展空间。系统架构包括应急终端、无线专网、应用联动应用和服务组件,以及安全审计模块,以确保用户合法性和数据安全性。部署方案灵活,能够根据现场需求快速搭建应急指挥平台,支持高并发视频直播和大容量数据存储。 智能终端设备具备三防等级,能够在恶劣环境下稳定工作,支持北斗+GPS双模定位,提供精确的位置信息。设备搭载的操作系统和处理器能够处理复杂的任务,如高清视频拍摄和数据传输。此外,设备还配备了多种传感器和接口,以适应不同的使用场景。 自适应无线网络是系统的关键组成部分,它基于认知无线电技术,能够根据环境变化动态调整通讯参数,优化通讯效果。网络支持点对点和点对多点的组网模式,具有低功耗、长距离覆盖、强抗干扰能力等特点,易于部署和维护。 系统的售后服务保障包括安装实施服务、系统维护服务、系统完善服务、培训服务等,确保用户能够高效使用系统。提供7*24小时的实时故障响应,以及定期的系统优化和维护,确保系统的稳定运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值