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接入监控配置 + 图例说明)
338 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接入监控配置 + 图例说明)
298 0
|
监控 Ubuntu Linux
Centos7安装ganglia监控
Centos7安装ganglia监控
375 0
Centos7安装ganglia监控
|
2月前
|
存储 Ubuntu Linux
VMware-安装CentOS系统教程及安装包
虚拟机相当于是一个独立于你电脑的环境,在这个环境上面,你可以安装Linux、Windows、Ubuntu等各个类型各个版本的系统,在这个系统里面你不用担心有病读等,不用担心文件误删导致系统崩溃。 虚拟机也和正常的电脑系统是一样的,也可以开关机,不用的时候,你关机就可以了,也不会占用你的系统资源,使用起来还是比较方便 这里也有已经做好的CentOS 7系统,下载下来解压后直接用VMware打开就可以使用
479 69
|
10天前
|
存储 分布式计算 Linux
安装篇--CentOS 7 虚拟机安装
VMware 装 CentOS 7 不知道从哪下手?这篇超详细图文教程手把手教你在 VMware Workstation 中完成 CentOS 7 桌面系统的完整安装流程。从 ISO 镜像下载、虚拟机配置,到安装图形界面、设置用户密码,每一步都有截图讲解,适合零基础新手快速上手。装好之后无论你是要搭 Hadoop 集群,还是练 Linux ,这个环境都够你折腾一整天!
285 2
|
2月前
|
Ubuntu Linux 索引
Centos 7、Debian及Ubuntu系统中安装和验证tree命令的指南。
通过上述步骤,我们可以在CentOS 7、Debian和Ubuntu系统中安装并验证 `tree`命令。在命令行界面中执行安装命令,然后通过版本检查确认安装成功。这保证了在多个平台上 `tree`命令的一致性和可用性,使得用户无论在哪种Linux发行版上都能使用此工具浏览目录结构。
259 78
|
10天前
|
安全 关系型数据库 MySQL
CentOS 7 yum 安装 MySQL教程
在CentOS 7上安装MySQL 8,其实流程很清晰。首先通过官方Yum仓库来安装服务,然后启动并设为开机自启。最重要的环节是首次安全设置:需要先从日志里找到临时密码来登录,再修改成你自己的密码,并为远程连接创建用户和授权。最后,也别忘了在服务器防火墙上放行3306端口,这样远程才能连上。
208 16