本文参考Ganglia 3.7.2版本代码完成。
代码一开始就定义了2个指向NULL的数组指针metric_info和metric_mapping_info,这是两个全局变量,其值在metric_init中初始化(metric_init函数把metric字典解析后存入这两个数组),然后在call back函数中展开,这样就完成了2个函数之间数据传递。
函数解读:
一. static char* is_python_module(const char* fname)
传入文件名,检检文件中是否有"."符号和是否以.py结尾,返回.py前面部分,否则返回NULL
二. int get_pydict_callable_value(PyObject* pdict, char* key, PyObject** pobj)
查找pdict字典对象的keys中是否存在key这个元素,取出这个元素的值并赋给指标pobj。这个函数是用来取出call back定义的函数。
三. static void fill_metric_info(PyObject* pdict, py_metric_init_t* minfo, char *modname, apr_pool_t *pool)
传入modname和metric_init函数返回的metric字典pdict,循环解析pdict的key,并把key对应的 value 存入结构 minfo中(minfo为py_metric_init_t结构)
四. static void fill_gmi(Ganglia_25metric* gmi, py_metric_init_t* minfo)
把结构 minfo 里的参数及值复制到结构 gmi 中,gmi结构比minfo结构多了2个类型,int key和 int msg_size。gmi->key 会自动地赋值给gmond。gmi应该是gmond可以识别的结构变量。
五. static cfg_t* find_module_config(char *modname)
查找指定module的配置信息。
函数处理过程:
(1). 查找到modules
(2). 查找到modules下的module,对所有module(用cfg_t类型的指针pymodule指向当前module配置)依次循环,返回符合以下条件的pymodule对像
(1). 查找module下的language值,判断是否为"python"(其中"python"不区分大小写,程序中用的都是小写),找不到或者不符合条件则continue到下一个module(2). 查找module下的name,判断与传入的模块名称(char *modname)与此处配置的名称是否一致,不匹配时continue到下一个module(3). 查找module下的enabled,判断是该module是否为有效状态(enabled = 1为有效,enabled = 0为无效), 无效时continue到下一个module(4). 以上条件都满足时立即退出并返回pymodule对象
(3). 循环结束,返回NULL(没有找到满足的module)
六. static PyObject* build_params_dict(cfg_t *pymodule)
构造param字典
(1)把pymodule对象传入函数,找到pymodule下面所有的param,并依次循环
1) 找到param对应的name和value2) 把value转换为string类型3) 当name和value同时为真时,将其写入params_dict字典中对象
(2)循环结束,返回params_dict字典对象
相关推荐
在suse11-sp1_x64下安装ganglia所需的rpm包。花了很多精力才找到。 ganglia-3.6.0-1.1.src.rpm ganglia-gmetad-3.5.0-56.1.x86_64.rpm ganglia-gmond-3.1.7-8.1.x86_64.rpm libconfuse0-2.7-86.1.x86_64.rpm ...
ganglia-web-3.7.2.tar.gz 监控可视化页面,ganglia-web-3.7.2.tar.gz 监控可视化页面ganglia-web-3.7.2.tar.gz 监控可视化页面 修改/var/www/html/ganglia/header.php <?php session_start(); ini_set('date...
Ganglia的核心设计理念是简单、可扩展和可依赖,使得它成为许多大规模分布式系统监控的首选工具。 标题中的"ganglia-3.7.2.tar.gz"表明这是一个使用tar归档工具和gzip压缩算法打包的文件,通常在Linux或类Unix系统...
ganglia 3.7.2 基于centos7可安装rpm包(rpmbuild/RPMS/x86_64目录中) 配合ganglia-web-3.7.2.tar.gz使用 参考:https://blog.csdn.net/lswnew/article/details/79175539
`gmond`可以通过插件扩展其功能,这些插件可以是用C语言编写的,也可以是用Python等脚本语言编写。Python模块的引入,使得开发自定义监控指标变得更加方便和灵活。 `gmond_python_modules-master`很可能包含了多个...
在本文中,我们将深入探讨Ganglia 3.7.2版本,了解其核心功能和安装配置过程,以及如何利用其提供的数据进行系统性能分析。 Ganglia的核心设计思想是层次化和模块化。层次化体现在它允许监控系统按照集群、子集群和...
1. **Ganglia简介** Ganglia是一个分布式监控系统,能够收集并展示集群中各个节点的CPU利用率、内存使用、磁盘I/O等关键指标。它通过Gmond(Ganglia监控代理)在每个节点上收集数据,然后由Gmetad(聚合数据)将...
spark gangglia
1. 横向扩展性:Ganglia可以轻松地添加更多节点进行监控,适应大规模集群环境。 2. 实时性:Ganglia提供了近乎实时的监控数据更新,帮助管理员快速响应系统问题。 3. 自定义指标:通过编写自定义插件,可以监控任何...
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
2. 监控工具:利用Hadoop自带的Web界面以及Ambari、Ganglia等第三方工具监控集群状态,及时发现和解决问题。 总结,"hadoop-2.7.5-with-centos7.6.tar.gz"不仅是一个预编译的Hadoop版本,更是一个在特定环境下快速...
官方离线安装包,测试可用。请使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。请使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。请使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。请使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。请使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。请使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。请使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。请使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。请使用rpm -ivh [rpm完整包名] 进行安装