Версия 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
$
Привет @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;
};
Самый полезный комментарий
@jblaine @ChrisHeerschap имел ту же проблему в RHEL 7.4 - попробуйте
FSType "rootfs"
это сработало для нас сразу