Назад | Перейти на главную страницу

Мониторинг папок на разных серверах с помощью zabbix

Проблема: я хочу убедиться, что определенная папка одинакова в отношении своего содержимого на всех моих серверах.

Я не хочу, чтобы автоматическая синхронизация файлов оставила их равными, изменение выполняется вручную.

Моя первоначальная мысль заключалась в том, чтобы раз в день вычислять некоторый crc / hash для папки и отправлять их в Zabbix, и запускать, когда значения отличаются.

Есть ли какие-нибудь хорошие инструменты, которые могут вычислить crc или что-то подобное для папки?

Кто-нибудь знает другое решение, которое решает мою проблему?

Есть два варианта того, что вы хотите: tripwire (3070678sourceforge.net/projects/tripwire/) и Aide (http://aide.sourceforge.net/).

Рабочий процесс с обоими более или менее одинаков, но, поскольку я знаю Aide, я расскажу вам об этом. Для начала вы инициализируете БД суммами (MD5 и SHA1) каждого файла, который вы хотите отслеживать. Aide позволяет вам выбрать, какие изменения вы хотите отслеживать: содержимое файла, uid или gid, биты выполнения, количество блоков ... Затем вы ежедневно сравниваете текущее состояние отслеживаемых файлов с теми, которые находятся в БД. Если есть разница, Эйд сообщит вам. Каждый раз, когда вы делаете контролируемое изменение, вы снова инициализируете БД.

Не очень хорошо интегрироваться с Zabbix или Nagios, но, возможно, это поможет.

Если вы все еще ищете инструмент, который может различать несколько серверов и отправлять предупреждения, когда есть какие-либо различия, посетите www.metaforsoftware.com. Вы можете настроить его на ежедневные или ежечасные изменения. Сейчас он находится в бесплатной бета-версии. (Полное раскрытие информации: я соучредитель)

Некоторое время назад у меня была точно такая же проблема, и я написал этот фрагмент кода Python для генерации этой контрольной суммы:

def checksum(root):
    md5sums = {}
    items = os.path.walk(root, checksum_dir, md5sums)
    _md5sums = []
    for k in sorted(md5sums.keys()):
        _md5sums += md5sums[k]
    return md5.new(''.join(_md5sums)).hexdigest()

def checksum_dir(md5sums, path, names):
    names.sort()
    if '.git' in names:
        names.remove('.git')
    md5sums[path] = []
    for name in names:
        name = os.path.join(path, name)
        if os.path.islink(name):
            md5sums[path].append(os.readlink(name))
        elif os.path.isdir(name):
            continue
        elif os.path.isfile(name):
            fd = open(name)
            md5sums[path].append(md5.new(fd.read()).hexdigest())
            fd.close()
        else:
            raise ValueError("File %s is not a normal name or a symlink")

Я завернул его в модуль func и запустил соответствующую проверку funcmaster через nrpe (мы используем nagios, а не zabbix).