在Mac上安装rrdtool问题

224 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情 [rrdtool] [mac]

前天用安装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已经出到第三个版本的协议,其功能较以前已经大大地加强和改进了。

 

  1. SNMP版本:

V1:三种模式:1、ro 只读模式 2、RW 读写模式 3、trap模式 agent主动通知NMS。

V2:认证加强,采用community-string-based也称为V2C

V3:认证更加加强,数据传输使用加密方式。

  1. 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

clip_image001

  1. SNMP报文总计有5类:

    1. get OID:获取某个OID对应的值。
    2. get next:子节点上所有信息(只能在末端的上层使用)
    3. getbulk (v2或者V3)获取从某个OID开始,之下的OID对应的值。
    4. set 设置某个OID的值
    5. get response
  2. 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哪些是运行主动通知的。

clip_image002

这里定义了community为public的密码可以访问.1.3.6.1.2.1.1 根据上图就是可以查看系统相关信息,以及.1.3.6.1.2.1.6tcp的相关信息

  1. 验证和使用snmp的相关信息

    1. 上面的默认配置我们先不进行改动,可以使用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信息。