ganglia mtu metric BUG? on CentOS 6.x x64

简介:
今天在添加mtu的metric时, 发现一个ganglia bug, MTU值获取的应该是所有UP端口的最小MTU值, 但是实际上得到的结果并非如此.
gmond.conf配置如下 : 
gmond.conf
collection_group {
  collect_once = yes
  time_threshold = 1200
  metric {
    name = "mtu"
    title = "MTU"
  }

所有端口的MTU, 
# ifconfig -a|grep MTU
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          BROADCAST MULTICAST  MTU:1500  Metric:1
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          BROADCAST MULTICAST  MTU:1500  Metric:1

UP端口的mtu最小值是第一条1500, 但是实际ganglia画出来的是回环口的MTU 16436.

ganglia mtu metric BUG? on CentOS 6.x x64 - 德哥@Digoal - PostgreSQL research

获取mtu的代码如下 : 
libmetrics/linux/metrics.c

/* --------------------------------------------------------------------------- */
g_val_t
mtu_func ( void )
{
   /* We want to find the minimum MTU (Max packet size) over all UP interfaces. */
   g_val_t val;

   val.uint32 = get_min_mtu();

   /* A val of 0 means there are no UP interfaces. Shouldn't happen. */
   return val;
}


libmetrics/
interface.c
int
get_min_mtu( void )
{
  struct ifi_info *info, *n;
  unsigned min_mtu_set = 0;
  unsigned min_mtu = 0;

  info = Get_ifi_info(AF_INET, 0);

  for(n = info; n; n = n->ifi_next)
    {
      if(!min_mtu_set)
        {
          min_mtu = n->ifi_mtu;
          min_mtu_set = 1;
        }
      else if( n->ifi_mtu < min_mtu )
        {
          min_mtu = n->ifi_mtu;
        }
    }

  free_ifi_info(info);
  return min_mtu;
}

libmetrics/get_ifi_info.c
struct ifi_info *
get_ifi_info(int family, int doaliases)
{
        struct ifi_info         *ifi, *ifihead, **ifipnext;
        int                                     sockfd, len, lastlen, flags, myflags;
        char                            *ptr, *buf, lastname[IFNAMSIZ], *cptr;
        struct ifconf           ifc;
        struct ifreq            *ifr, ifrcopy;
        struct sockaddr_in      *sinptr;
        struct ifreq            mtu;
#ifdef SOLARIS
        int _c_virt = 0;
#endif /* SOLARIS */
        int _all_virt = 0;

        sockfd = Socket(AF_INET, SOCK_DGRAM, 0);
        if (sockfd == -1) {
                err_ret("get_ifi_info error: socket returns -1");
                return NULL;
        }

        lastlen = 0;
        len = 100 * sizeof(struct ifreq);       /* initial buffer size guess */
        for ( ; ; ) {
                buf = Malloc(len);
                ifc.ifc_len = len;
                ifc.ifc_buf = buf;
                if (ioctl(sockfd, SIOCGIFCONF, &ifc) < 0) {
                        if (errno != EINVAL || lastlen != 0)
                                err_sys("ioctl error");
                } else {
                        if (ifc.ifc_len == lastlen)
                                break;          /* success, len has not changed */
                        lastlen = ifc.ifc_len;
                }
                len += 10 * sizeof(struct ifreq);       /* increment */
                free(buf);
        }

        ifihead = NULL;
        ifipnext = &ifihead;
        lastname[0] = 0;
/* end get_ifi_info1 */
.......
略
struct ifi_info *
Get_ifi_info(int family, int doaliases)
{
        struct ifi_info *ifi;

        if ( (ifi = get_ifi_info(family, doaliases)) == NULL)
                err_quit("get_ifi_info error");
        return(ifi);
}
 
[参考]


目录
相关文章
|
存储 监控 Linux
Flume【部署 02】Flume监控工具Ganglia的安装与配置(CentOS 7.5 在线安装系统监控工具Ganglia + 权限问题处理 + Flume接入监控配置 + 图例说明)
【2月更文挑战第17天】Flume【部署 02】Flume监控工具Ganglia的安装与配置(CentOS 7.5 在线安装系统监控工具Ganglia + 权限问题处理 + Flume接入监控配置 + 图例说明)
396 1
Flume【部署 02】Flume监控工具Ganglia的安装与配置(CentOS 7.5 在线安装系统监控工具Ganglia + 权限问题处理 + Flume接入监控配置 + 图例说明)
|
存储 监控 Linux
Ganglia【部署 01】Flume监控工具Ganglia的安装与配置(CentOS 7.5 在线安装系统监控工具Ganglia + 权限问题处理 + Flume接入监控配置 + 图例说明)
Ganglia【部署 01】Flume监控工具Ganglia的安装与配置(CentOS 7.5 在线安装系统监控工具Ganglia + 权限问题处理 + Flume接入监控配置 + 图例说明)
431 0
|
监控 Ubuntu Linux
Centos7安装ganglia监控
Centos7安装ganglia监控
410 0
Centos7安装ganglia监控
|
6月前
|
存储 Ubuntu Linux
VMware-安装CentOS系统教程及安装包
虚拟机相当于是一个独立于你电脑的环境,在这个环境上面,你可以安装Linux、Windows、Ubuntu等各个类型各个版本的系统,在这个系统里面你不用担心有病读等,不用担心文件误删导致系统崩溃。 虚拟机也和正常的电脑系统是一样的,也可以开关机,不用的时候,你关机就可以了,也不会占用你的系统资源,使用起来还是比较方便 这里也有已经做好的CentOS 7系统,下载下来解压后直接用VMware打开就可以使用
1223 69
|
5月前
|
存储 分布式计算 Linux
安装篇--CentOS 7 虚拟机安装
VMware 装 CentOS 7 不知道从哪下手?这篇超详细图文教程手把手教你在 VMware Workstation 中完成 CentOS 7 桌面系统的完整安装流程。从 ISO 镜像下载、虚拟机配置,到安装图形界面、设置用户密码,每一步都有截图讲解,适合零基础新手快速上手。装好之后无论你是要搭 Hadoop 集群,还是练 Linux ,这个环境都够你折腾一整天!
2190 3
|
6月前
|
Ubuntu Linux 索引
Centos 7、Debian及Ubuntu系统中安装和验证tree命令的指南。
通过上述步骤,我们可以在CentOS 7、Debian和Ubuntu系统中安装并验证 `tree`命令。在命令行界面中执行安装命令,然后通过版本检查确认安装成功。这保证了在多个平台上 `tree`命令的一致性和可用性,使得用户无论在哪种Linux发行版上都能使用此工具浏览目录结构。
553 78
|
7月前
|
Linux 网络安全 Apache
针对在Centos/Linux安装Apache过程中出现的常见问题集锦
以上每个问题的解决方案应深入分析错误日志、系统消息和各种配置文件,以找到根本原因并加以解决。务必保持系统和Apache软件包更新到最新版本,以修复已知的bugs和安全漏洞。安装和管理Web服务器是一项需要细致关注和不断学习的任务。随着技术的发展,推荐定期查看官方文档和社区论坛,以保持知识的更新。
309 80