Collectd: 5.7.1 df не захватывает данные '/'

Созданный на 4 окт. 2017  ·  9Комментарии  ·  Источник: collectd/collectd

  • Версия collectd: 5.7.1

  • Операционная система / дистрибутив: RHEL 7.4

Ожидаемое поведение

Ожидайте, что данные 'df' для всех файловых систем xfs будут отправлены в graphite.

Фактическое поведение

Данные 'df' для всех файловых систем xfs, ЗА ИСКЛЮЧЕНИЕМ '/' отправляются в graphite.

Действия по воспроизведению

$ grep xfs /etc/fstab
/dev/mapper/vg_root-root /                       xfs     defaults        0 0
UUID=0ed1c0ae-53ef-468c-b820-8d9acf8856a4 /boot                   xfs     defaults        0 0
/dev/mapper/vg_root-opt /opt                    xfs     defaults        0 0
/dev/mapper/vg_root-tmp /tmp                    xfs     nosuid          0 0
/dev/mapper/vg_root-var /var                    xfs     defaults        0 0
$ df -h
Filesystem                Size  Used Avail Use% Mounted on
/dev/mapper/vg_root-root  9.8G  4.7G  5.2G  48% /
devtmpfs                  902M     0  902M   0% /dev
tmpfs                     912M     0  912M   0% /dev/shm
tmpfs                     912M  8.7M  904M   1% /run
tmpfs                     912M     0  912M   0% /sys/fs/cgroup
/dev/mapper/vg_root-var    16G  2.8G   13G  18% /var
/dev/mapper/vg_root-opt   7.9G  3.1G  4.8G  39% /opt
/dev/mapper/vg_root-tmp   7.9G  756M  7.1G  10% /tmp
/dev/sda1                 847M  197M  651M  24% /boot
tmpfs                     183M     0  183M   0% /run/user/64004
tmpfs                     183M     0  183M   0% /run/user/64000



md5-abd095d1c32cf08fc10dfb04b674be66



<Plugin df>
        # Tried also with the following line added. No help.
        # MountPoint "/"
        FSType "xfs"
        IgnoreSelected false
        ReportByDevice false
        ReportReserved false
        ReportInodes false
        ValuesPercentage true
</Plugin>



md5-2da1e81613b65a708c67380c56691bd5



$ ls -l collectd
total 28
drwxr-xr-x 2 root root 4096 Sep 28 12:15 cpu-0
drwxr-xr-x 2 root root 4096 Sep 28 12:15 cpu-1
drwxr-xr-x 2 root root 4096 Oct  3 18:28 df-boot
drwxr-xr-x 2 root root 4096 Oct  3 18:28 df-opt
drwxr-xr-x 2 root root 4096 Oct  3 18:28 df-tmp
drwxr-xr-x 2 root root 4096 Oct  3 18:29 df-var
drwxr-xr-x 7 root root  121 Sep 28 12:32 disk-sda
drwxr-xr-x 7 root root   92 Sep 28 12:17 disk-sda1
drwxr-xr-x 7 root root  121 Oct  4 03:58 disk-sda2
drwxr-xr-x 7 root root  121 Sep 28 12:32 disk-sda3
drwxr-xr-x 6 root root   72 Oct  3 18:29 interface-ens192
drwxr-xr-x 3 root root   17 Sep 28 12:13 load
drwxr-xr-x 2 root root  156 Sep 28 12:13 memory
drwxr-xr-x 2 root root  111 Sep 28 12:15 swap
drwxr-xr-x 5 root root 4096 Oct  3 18:29 vmem
$
Bug Pending feedback

Самый полезный комментарий

@jblaine @ChrisHeerschap имел ту же проблему в RHEL 7.4 - попробуйте FSType "rootfs"
это сработало для нас сразу

Все 9 Комментарий

Привет @jblaine!

спасибо, что сообщили об этом! Не могли бы вы также предоставить свои mtab ? Я помню, что раньше плагин df был сбит с толку из-за того, что rootfs монтировался поверх фактического (например, xfs) монтирования.

С наилучшими пожеланиями,
—Окто

Для справки: # 1402

rootfs / rootfs rw 0 0
...
/dev/mapper/vg_root-root / xfs rw,relatime,attr2,inode64,noquota 0 0

Я вижу именно это и потратил немного времени на то, чтобы возиться с настройками плагина df, и я могу заставить его работать _только_, если я укажу MountPoint "/" - если я укажу что-нибудь еще, я получу / boot, а не /. Это на CentOS 7

@jblaine @ChrisHeerschap имел ту же проблему в RHEL 7.4 - попробуйте FSType "rootfs"
это сработало для нас сразу

@ xneo64 Я попробовал это и подтвердил, что это работает - не подумал попробовать, спасибо! Также работает без проблем в 6.x, поэтому добавляйте его повсеместно. Спасибо!

Я думаю, что эта проблема возникает из-за того, что определено, что /dev/mapper/vg_root-root / xfs rw,relatime,attr2,inode64,noquota 0 0 дублируется с rootfs / rootfs rw 0 0 (оба собирают '/').
Следовательно, '/' не собирается в условиях, которые определяют только строку /dev/mapper/vg_root-root / xfs ~ , например, здесь: FSType "xfs" или Device "/dev/mapper/vg_root-root" .

Я хочу исправить эту ошибку. # 2564 - это один план, или есть также план по удалению "rootfs device (или filetype)" из цели дублирования. Что лучше?

Правильное решение здесь - не пропускать файловую систему, которая является дубликатом файловой системы, которая была проигнорирована. Это означает, что если запись в списке файловой системы для «/» игнорируется из-за того, что она является rootfs (а не ext4 или xfs), то позже, когда встречается код «/» для ext4 / xfs / etc, тогда эта запись не t игнорируется. Это работает и с другими комбинациями. Игнорируемая запись в списке монтирования не должна препятствовать записи, которая не игнорируется.

diff --git a/src/df.c b/src/df.c
index dd90f24..e7d2019 100644
--- a/src/df.c
+++ b/src/df.c
@@ -173,12 +180,18 @@ static int df_read(void) {
     char const *dev =
         (mnt_ptr->spec_device != NULL) ? mnt_ptr->spec_device : mnt_ptr->device;

-    if (ignorelist_match(il_device, dev))
+    if (ignorelist_match(il_device, dev)) {
+      mnt_ptr->ignored = 1;
       continue;
-    if (ignorelist_match(il_mountpoint, mnt_ptr->dir))
+    }
+    if (ignorelist_match(il_mountpoint, mnt_ptr->dir)) {
+      mnt_ptr->ignored = 1;
       continue;
-    if (ignorelist_match(il_fstype, mnt_ptr->type))
+    }
+    if (ignorelist_match(il_fstype, mnt_ptr->type)) {
+      mnt_ptr->ignored = 1;
       continue;
+    }

     /* search for duplicates *in front of* the current mnt_ptr. */
     for (dup_ptr = mnt_list; dup_ptr != NULL; dup_ptr = dup_ptr->next) {
@@ -188,6 +201,8 @@ static int df_read(void) {
         dup_ptr = NULL;
         break;
       }
+      if (dup_ptr->ignored == 1)
+        continue;

       /* Duplicate found: leave non-NULL dup_ptr. */
       if (by_device && (mnt_ptr->spec_device != NULL) &&
diff --git a/src/utils_mount.h b/src/utils_mount.h
index 0ad7d02..fd62c09 100644
--- a/src/utils_mount.h
+++ b/src/utils_mount.h
@@ -82,6 +82,7 @@ struct _cu_mount_t {
   char *device;      /* "none" or "proc" or "/dev/hda1" */
   char *type;        /* "sysfs" or "ext3" */
   char *options;     /* "rw,noatime,commit=600,quota,grpquota" */
+  int  ignored;
   cu_mount_t *next;
 };

Была ли эта страница полезной?
0 / 5 - 0 рейтинги