Подтвердить что ты не робот

Понимание файлов sincedb из ввода файла Logstash

При использовании ввода файла в Logstash записывается файл sincedb, чтобы отслеживать текущую позицию контролируемых файлов журнала. Как понять его содержание?

Пример файла sincedb:

 286105 0 19 20678374
4b9b3361

Ответ 1

Есть 4 поля (источник):

  • инода
  • номер основного устройства
  • номер младшего устройства
  • смещение байта

Предполагая, что жесткий диск будет сегментирован в тысячах очень маленьких частей с номером для каждого из них, inode будет более или менее похож на число крошечной части, где начинается файл. Таким образом, заданный индексный дескриптор уникален для каждого жесткого диска, но для того, чтобы разрешить случаи, когда на одном и том же сервере имеется несколько дисков, требуется использование основного и младшего номера устройства, чтобы гарантировать уникальность триплета {inode, младшего номера устройства, номер младшего устройства}. Более точную информацию об инодах на Wikipedia.

Тем не менее, я не уверен, что (например) файлы, смонтированные через NFS, не могли столкнуться с локальными файлами, так как индексный файл файла, установленного через NFS, кажется удаленным. Несмотря на то, что я не думаю, что писатель плагинов беспокоился о таких случаях, и, несмотря на то, что сам использовал NFS, до сих пор не возникало никаких проблем. Также я подозреваю, что вероятность столкновения очень мала.

Теперь с помощью триплета, образованного inode и номерами основных и второстепенных устройств, мы можем настроить таргетинг на единственный файл журнала, который плагин читает без ошибок (или, по крайней мере, это было первоначальное намерение). Последний номер, смещение байта, отслеживает, насколько далеко файл входного журнала уже был прочитан и выведен в Logstash.

В некоторых конкретных архитектурах, таких как Solaris или Windows, были ошибки с рубином, ошибочно обнаруживающим номер inode, равное 0. Это могло бы привести к таким проблемам, как logstash, не обнаруживая вращения файла.

Ответ 2

Это было очень полезно. Я хотел отобразить все мои файлы сDDB на вкладки logstash, поэтому я собрал немного bash двухстрочный слой для печати этого сопоставления.

filesystems=$(grep path /etc/logstash/conf.d/*.conf | awk -F'=>' '{ print $2 }' | xargs -I {} df -P {} 2>/dev/null | grep -v Filesystem | sort | uniq | cut -d' ' -f 1)
for fs in $filesystems; do for f in $(ls -a .sincedb_*); do echo $f; inodes=$(cut -d' ' -f 1 $f); for inode in $inodes; do sudo debugfs -R "ncheck $inode" $fs 2>/dev/null | grep -v Inode | cut -f 2; done; echo; done; done

Я только что задокументировал подробности сопоставление файловDD с входом в logstash.