Chinaunix首页 | 论坛 | 博客
  • 博客访问: 360372
  • 博文数量: 64
  • 博客积分: 2975
  • 博客等级: 少校
  • 技术积分: 831
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-14 10:59
文章存档

2014年(2)

2012年(7)

2010年(40)

2009年(5)

2008年(8)

2007年(2)

分类: Windows平台

2014-02-12 16:00:00

我们知道coretemp可以监控windows下的cpu各个核的温度,coretemp又发布了sdk(CoreTempSDK.zip),解压后,在
Shared Memory Framework for Native\Code Samples\SMCoreTempCPPReader中,附带一个命令行方式下采集cpu温度的项目。
其原理是coretemp开放一个共享内存对象,SMCoreTempCPPReader打开该对象,读取coretemp获取的温度值。
使用vs2008打开该项目,对其进行适当修改,实现输出一个温度值的目的。
修改后的代码如下:

#include "stdafx.h"
#include "SMCoreTempCPPReader.h"
#include "GetCoreTempInfo.h"

int _tmain(int argc, _TCHAR* argv[])
{

    ULONG index;
    CoreTempProxy coreTempProxy;

    if (coreTempProxy.GetData())
    {
        if(coreTempProxy.IsFahrenheit()) perror("error1");//是华氏温度,报错,希望是摄氏温度
        float sum = 0;
        int num = 0;
       //遍历所有cpu
        for (UINT i = 0; i < coreTempProxy.GetCPUCount(); i++)
        {
           //遍历所有核
            for (UINT g = 0; g < coreTempProxy.GetCoreCount(); g++)
            {
                num ++;
                index = g + (i * coreTempProxy.GetCoreCount());
                if (coreTempProxy.IsDistanceToTjMax())
                {
                    perror("error2");
                }
                else
                {
                    sum += coreTempProxy.GetTemp(index);//累计温度
                }
            }
        }
        printf("%d",(int)sum/num);//计算平均值
    }
    else
    {        
        printf("error3");//其他错误
    }

    return 0;
}

在服务器上启动coretemp,运行程序是否正常输出温度。

根据下面的文章在在服务器上安装snmptools

利用snmptools实现cacti自定义监控Windows性能计数器

将SMCoreTempCPPReader.exe,GetCoreTempInfo.dll,msvcr100d.dll复制到服务器的windows目录下
编辑c:\counters.ini

输入
[1.3.6.1.4.1.15.1]
type=exec
counter=SMCoreTempCPPReader.exe
重启snmp服务,找一台linux机器,使用snmpwalk -c xxxx -v1 a.b.c.d 1.3.6.1.4.1.15.1测试能否获取温度值.
本人测试的时候,一直报错error3,几经试验,找到部分原因:
coretemp运行中administrator用户下,snmptools启动SMCoreTempCPPReader.exe是在system用户下,无法打开coretemp开放的

CoreTempMappingObject对象。
使用sysinternals工具中的psexec,获取运行在system用户下的cmd窗口。
psexec -s cmd
在该窗口中重新运行coretemp程序,使用snmpwalk就能获取温度值了。

在cacti里创建data模块cpu temp,oid栏中填.1.3.6.1.4.1.15.1,再创建graph模板,最后应用到服务器上。



下一步就是创建thold监控,当温度高于一定值时,发送邮件到手机上,前提是要开通139邮箱,允许短信通知。
详细的步骤就不罗嗦了。
阅读(6082) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~