前天用安装rrdtool时遇到一个bug:
(process:16981): GLib-GObject-CRITICAL **: gtype.c:2720: You forgot to call g_type_init() (process:16981): GLib-CRITICAL **: void g_once_init_leave(volatile void *, gsize): assertion `result != 0' failed (process:16981): GLib-GObject-CRITICAL **: gtype.c:2720: You forgot to call g_type_init() (process:16981): GLib-CRITICAL **: void g_once_init_leave(volatile void *, gsize): assertion `result != 0' failed (process:16981): GLib-GObject-CRITICAL **: gtype.c:2720: You forgot to call g_type_init() (process:16981): GLib-GObject-CRITICAL **: gtype.c:2720: You forgot to call g_type_init() 复制代码
几番搜索后找到这个补丁: github.com/oetiker/rrd…
当然,那个补丁不能直接用,所以我又重新生成了一个 git 版的新补丁:
diff --git a/src/rrd_graph.c b/src/rrd_graph.c index 5f70a38..303d3f3 100644 --- a/src/rrd_graph.c +++ b/src/rrd_graph.c @@ -4066,6 +4066,8 @@ void rrd_graph_init( static PangoFontMap *fontmap = NULL; PangoContext *context; + g_type_init(); + #ifdef HAVE_TZSET tzset(); #endif 复制代码
使用这个补丁的方法是:
brew edit rrdtool 复制代码
进入 formula 的编辑界面,把上面的补丁粘贴到文件尾部存盘退出就行了。最后重新使用 brew install 在安装就能把刚才的补丁打进去。
还没来得及怎么研究把补丁提交给组织,不过,下面说说我是怎么生成这个补丁的。先要学习一下这个: github.com/mxcl/homebr…
原来 brew 可以交互式的产生补丁,直接使用以下命令可以进到一个新的shell中。
brew install --interactive --git foo 复制代码
| 然后手工修改文件,最后使用 git diff | pbcopy 将补丁粘帖到剪贴板。按 exit 退出交互式 shell。 |
简单网络管理协议(SNMP),由一组网络管理的标准组成,包含一个
应用层协议(application layer protocol)、数据库模型(database schema)和一组资源对象。该协议能够支持网络管理系统,用以监测连接到网络上的设备是否有任何引起管理上关注的情况。该协议是互联网工程工作小组(IETF,Internet Engineering Task Force)定义的internet协议簇的一部分。SNMP的目标是管理互联网Internet上众多厂家生产的软硬件平台,因此SNMP受Internet标准网络管理框架的影响也很大。SNMP已经出到第三个版本的协议,其功能较以前已经大大地加强和改进了。
- SNMP版本:
V1:三种模式:1、ro 只读模式 2、RW 读写模式 3、trap模式 agent主动通知NMS。
V2:认证加强,采用community-string-based也称为V2C
V3:认证更加加强,数据传输使用加密方式。
- SNMP监控对象:
MIB库里面定义被监控的对象,OID采用树形结构来定义:其中1.3.6.1是用来定义internet的。1.3.6.1.2.1为mib-2 的标准库,里面包含了system,interface,at(address translation),ip,icmp,tcp,udp,egp等相关的信息定义,在linux中就可以直接使用,不用再去定义和实现。只谈internet时候:{1.3.6.1.2.1}等同于{internet(1).2.1} 也就是mib-2
- SNMP报文总计有5类:
- get OID:获取某个OID对应的值。
- get next:子节点上所有信息(只能在末端的上层使用)
- getbulk (v2或者V3)获取从某个OID开始,之下的OID对应的值。
- set 设置某个OID的值
- get response
- centos下开启snmp管理和代理的功能。
LINUX下提供SNMP功能的主要是两个包:net-snmp(agent)是snmp的代理实现,net-snmp-utils(NMS-comand) 管理端命令行。
我们在测试的情况下本机即作为代理,又作为管理端,所以两个软件都装。直接利用yum install net-snmp net-snmp-utils -y
然后进行配置。net-snmp的配置文件在/etc/snmp/snmp.conf和/etc/snmp/smtptrap.conf两个配置文件
我们先来配置/etc/snmp/snmp.conf
先定义密码,community就是指密码,source定义访问源,可以定义为其他的网络,sec.name就是指密码的名称,后面会用到。
下面的组配置 groupname就是组名称 sercuitymodel指加密版本v1还是v2c,sercurityname就是定义这个组使用哪个密码配置。
接着定义可以查看的MIB的选项,name对此view定义一个别名组,后面的授权访问会用到。subtree就是使用MIB的OID。
access定义了访问选项 group定义了访问的组,ace.model指访问版本,read 是指哪些MIB是允许读取的,write是指哪些MIB是允许写入数据的。notif哪些是运行主动通知的。
这里定义了community为public的密码可以访问.1.3.6.1.2.1.1 根据上图就是可以查看系统相关信息,以及.1.3.6.1.2.1.6tcp的相关信息
- 验证和使用snmp的相关信息
- 上面的默认配置我们先不进行改动,可以使用net-snmp和net-snmp-utils 来进行验证。先开启snmpd的服务
service snmpd start
然后分别查看系统和网络的相关信息
查看系统相关的:snmpwalk -v 2c -c public 192.168.8.21 system
查看TCP相关的:[root@rs1 snmp]# snmpwalk -v 2c -c public 192.168.8.21 tcp
也可以使用:[root@rs1 snmp]# snmpwalk -v 2c -c public 192.168.8.21 查看所有的SNMP信息。