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);
}
 
[参考]


相关文章
|
2月前
|
存储 监控 Linux
Flume【部署 02】Flume监控工具Ganglia的安装与配置(CentOS 7.5 在线安装系统监控工具Ganglia + 权限问题处理 + Flume接入监控配置 + 图例说明)
【2月更文挑战第17天】Flume【部署 02】Flume监控工具Ganglia的安装与配置(CentOS 7.5 在线安装系统监控工具Ganglia + 权限问题处理 + Flume接入监控配置 + 图例说明)
44 1
Flume【部署 02】Flume监控工具Ganglia的安装与配置(CentOS 7.5 在线安装系统监控工具Ganglia + 权限问题处理 + Flume接入监控配置 + 图例说明)
|
5月前
|
存储 监控 Linux
Ganglia【部署 01】Flume监控工具Ganglia的安装与配置(CentOS 7.5 在线安装系统监控工具Ganglia + 权限问题处理 + Flume接入监控配置 + 图例说明)
Ganglia【部署 01】Flume监控工具Ganglia的安装与配置(CentOS 7.5 在线安装系统监控工具Ganglia + 权限问题处理 + Flume接入监控配置 + 图例说明)
51 0
|
监控 Ubuntu Linux
Centos7安装ganglia监控
Centos7安装ganglia监控
242 0
Centos7安装ganglia监控
|
2天前
|
前端开发 jenkins 持续交付
新的centos7.9安装docker版本的jenkins2.436.1最新版本-前端项目发布(五)
新的centos7.9安装docker版本的jenkins2.436.1最新版本-前端项目发布(五)
13 1
|
2天前
|
jenkins 网络安全 持续交付
新的centos7.9安装docker版本的jenkins2.436.1最新版本-后端项目发布(四)
新的centos7.9安装docker版本的jenkins2.436.1最新版本-后端项目发布(四)