Как вывести на график общее количество открытых файлов, сокетов, каталогов, … Используя Ubuntu, telegraf, influxdb, grafana.
Напишем скрипт, который будет преобразовывать результат вывода команды lsof (выводит типы открытых файлов) в статистику с помощью awk, и далее в формат influx_line также с помощью awk
lsof -F t | awk '{a["ALL"]++;a[$1]++}END{for(i in a){ printf "%s %s\n",a[i],i}}' | sort -nr | head -n 30 | awk '{a[$2]=$1}END{printf("system_fds_types ");for(i in a){printf "%s=%s,",i,a[i]};printf("none=0\n")}'
Пример результата:
system_fds_types f14=791,f6=963,ftxt=1480,f7=949,tFIFO=9369,tIPv4=827,f8=910,fcwd=1480,tunix=17241,f9=874,ta_inode=6410,fmem=160258,tDIR=1975,tunknown=1485,tsock=5319,f0=984,fDEL=48767,f1=984,tREG=238620,f10=849,f2=984,frtd=1480,ALL=572311,f11=831,f3=965,f12=807,f4=967,f13=791,f5=963,tCHR=3123,none=0
Теперь если создать исполняемый файл /tmp/fds.sh с текстом
#! /bin/bash
lsof -F t | \
awk '{ a["ALL"]++; a[$1]++ } \
END \
{ for(i in a) \
{ \
printf "%s %s\n",a[i],i \
} \
}' | \
sort -nr | \
head -n 30 | \
awk '{ a[$2]=$1 } \
END \
{ \
printf("system_fds_types ");\
for(i in a){ \
printf "%s=%s,",i,a[i] \
}; \
printf("none=0\n") \
}'
А в файле конфигурации telegraf добавить секцию
[[inputs.exec]]
commands = [
'/tmp/fds.sh'
]
timeout = "10s"
interval = "20s"
data_format = "influx"
То будет собираться статистика по разным типам объектов. Примеры объектов ниже:
259501 tREG
177321 fmem
51518 fDEL
19162 tunix
9512 tFIFO
7621 ta_inode
5254 tsock
3703 tCHR
2968 tDIR
1478 ftxt
1478 frtd
1478 fcwd
1362 tIPv4
629 tnetlink
401 tIPv6
Расшифровку типов объектов можно посмотреть в документации к команде lsof
man lsof
``IPv4'' for an IPv4 socket;
``IPv6'' for an open IPv6 network file - even if its address is IPv4, mapped in an IPv6 address;
``ax25'' for a Linux AX.25 socket;
``inet'' for an Internet domain socket;
``lla'' for a HP-UX link level access file;
``rte'' for an AF_ROUTE socket;
``sock'' for a socket of unknown domain;
``unix'' for a UNIX domain socket;
``x.25'' for an HP-UX x.25 socket;
``BLK'' for a block special file;
``CHR'' for a character special file;
``DEL'' for a Linux map file that has been deleted;
``DIR'' for a directory;
``DOOR'' for a VDOOR file;
``FIFO'' for a FIFO special file;
``KQUEUE'' for a BSD style kernel event queue file;
``LINK'' for a symbolic link file;
``MPB'' for a multiplexed block file;
``MPC'' for a multiplexed character file;
``NOFD'' for a Linux /proc/<PID>/fd directory that can't be opened -- the directory path appears in the NAME column, followed by an error message;
``PAS'' for a /proc/as file;
``PAXV'' for a /proc/auxv file;
``PCRE'' for a /proc/cred file;
``PCTL'' for a /proc control file;
``PCUR'' for the current /proc process;
``PCWD'' for a /proc current working directory;
``PDIR'' for a /proc directory;
``PETY'' for a /proc executable type (etype);
``PFD'' for a /proc file descriptor;
``PFDR'' for a /proc file descriptor directory;
``PFIL'' for an executable /proc file;
``PFPR'' for a /proc FP register set;
``PGD'' for a /proc/pagedata file;
``PGID'' for a /proc group notifier file;
``PIPE'' for pipes;
``PLC'' for a /proc/lwpctl file;
``PLDR'' for a /proc/lpw directory;
``PLDT'' for a /proc/ldt file;
``PLPI'' for a /proc/lpsinfo file;
``PLST'' for a /proc/lstatus file;
``PLU'' for a /proc/lusage file;
``PLWG'' for a /proc/gwindows file;
``PLWI'' for a /proc/lwpsinfo file;
``PLWS'' for a /proc/lwpstatus file;
``PLWU'' for a /proc/lwpusage file;
``PLWX'' for a /proc/xregs file;
``PMAP'' for a /proc map file (map);
``PMEM'' for a /proc memory image file;
``PNTF'' for a /proc process notifier file;
``POBJ'' for a /proc/object file;
``PODR'' for a /proc/object directory;
``POLP'' for an old format /proc light weight process file;
``POPF'' for an old format /proc PID file;
``POPG'' for an old format /proc page data file;
``PORT'' for a SYSV named pipe;
``PREG'' for a /proc register file;
``PRMP'' for a /proc/rmap file;
``PRTD'' for a /proc root directory;
``PSGA'' for a /proc/sigact file;
``PSIN'' for a /proc/psinfo file;
``PSTA'' for a /proc status file;
``PSXSEM'' for a POSIX semaphore file;
``PSXSHM'' for a POSIX shared memory file;
``PUSG'' for a /proc/usage file;
``PW'' for a /proc/watch file;
``PXMP'' for a /proc/xmap file;
``REG'' for a regular file;
``SMT'' for a shared memory transport file;
``STSO'' for a stream socket;
``UNNM'' for an unnamed type file;
``XNAM'' for an OpenServer Xenix special file of unknown type;
``XSEM'' for an OpenServer Xenix semaphore file;
``XSD'' for an OpenServer Xenix shared data file;
Добавляем график в Grafana

И теперь можно по графикам выявлять сколько ресурсов определённого типа используется системой в целом
