Ad Widget

Collapse

Проблема с динамическим поиском в списке c regmatch

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • daryset
    Junior Member
    • Mar 2025
    • 4

    #1

    Проблема с динамическим поиском в списке c regmatch

    Народ помогите, наставьте на путь истинный, как через vfs.file.regmatch добиться правильного поиска?
    Есть выражение: vfs.file.regmatch[\\192.168.0.1\FullSpisok\full_spisok.txt,last(Ente r0: extract_username)] оно выдаёт 0.
    Если разложить по элементам и собрать через Последние данные или в отдельности то работает, например: vfs.file.regmatch[\\192.168.0.1\FullSpisok\full_spisok.txt,"i.ivanov "] работает, результат 1.
    "Enter: extract_username" - зависимый элемент, получаю с события логин пользователя, который вошел в ПК: с предобработкой Пользователь: DOMAIN\\(.*)
    Основной элемент Enter0:: eventlog["Microsoft-Windows-TerminalServices-LocalSessionManager/Operational",,,,^(17|21|23|24|25)$,,skip]
    Отдельно, элемент "Enter0: extract_username" при локальном входе или выходе выдаёт в Последних действиях результат i.ivanov
    Отдельно, элемент "list_file" с содержимым: vfs.file.contents[\\192.168.0.1\FullSpisok\full_spisok.txt] возвращает логины в виде столбца:
    i.ivanov
    p.petrov
    a.sidorov
    Может нельзя использовать переменное значение для поиска в списке?
    Сталкивался кто-нибудь с такой проблемой? Может её решить по-другому? Готов эксперементировать!
    Zabbix 6.4
    Last edited by daryset; 21-03-2025, 11:28.
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    #2
    Originally posted by daryset
    Есть выражение: vfs.file.regmatch[\\192.168.0.1\FullSpisok\full_spisok.txt,last(Ente r0: extract_username)] оно выдаёт 0.
    Это не совсем выражение. Это ключ элемента данных, который имеет определённый формат (ссылка).
    Конкретно для метрики vfs.file.regmatch поддерживаемые параметры ключа оговорены в документации (ссылка).
    Использовать в параметрах ключа одного элемента данных значение другого элемента данных - такой возможности в Zabbix нет и никогда не было, как бы того ни хотелось.
    Может её решить по-другому?
    Вот это более правильный вопрос. Но для ответа на него нужно иметь более чёткую постановку задачи.
    Скорее всего, ваши "хотелки" можно реализовать при помощи правильного набора условий в выражении триггера.
    Опишите подробнее, чего вы пытаетесь добиться, - возможно, сможем подсказать, как это сделать.

    Comment

    • daryset
      Junior Member
      • Mar 2025
      • 4

      #3
      Задача уменьшить количество уведомлений в "Проблемах" о различных действиях пользователей в домене на основе журналов событий.
      Для этого в AD через Powershell-скрипт ввожу данные о пользователях которые вышли сегодня на работу. И собираю их логины в файл.
      Если сотрудник вышел сегодня на работу, то не надо выводить сообщения о его действиях на серверах и в сети. А вот если сотрудник болеет, не вышел на работу и не дистанте, то это уже надо выводить.
      Last edited by daryset; 21-03-2025, 13:56.

      Comment

      • daryset
        Junior Member
        • Mar 2025
        • 4

        #4
        Пробовал сделать триггер logeventid(eventlog["Microsoft-Windows-TerminalServices-LocalSessionManager/Operational",,,,^(17|21|23|24|25)$,,skip],,"21")=1 and find(vfs.file.contents[\\192.168.0.1\FullSpisok\full_spisok.txt],,"like",Enter: extract_username)=1 тоже не работает.
        Можно еще через теги попробовать. Но боюсь будет тоже самое.

        Comment

        • Kos
          Senior Member
          Zabbix Certified SpecialistZabbix Certified Professional
          • Aug 2015
          • 3404

          #5
          Вот ведь... я уже публиковал на этом форуме картинку, почему-то хочется опубликовать её ещё раз (найдёте поиском по этому форуму по слову "Бидструп").

          Но если отвлечься от организационных вопросов ("а нахрена...") и обсуждать чисто технические вещи ("как..."), то попробую порассуждать.
          Насколько я понимаю, уже есть элемент данных extract_username, который содержит имя последнего залогиненного на данном компьютере пользователя, так? Причём, при логине значение выставляется (или обновляется), а при логауте - обнуляется (если нет, то можно это сделать через предобработку).
          Тогда я бы мог предложить два подхода:
          • Вариант 1: объявить пользовательский макрос (например, {$USER_LOGGED_IN}) и использовать Zabbix API для того, чтобы обновлять значение этого макроса в случае, если меняется значение элемента данных extract_username. Тогда и в триггерных выражениях, и в ключах элемента данных можно использовать на этот макрос. Цепочка его обновлений несложная: триггер на изменение значения элемента данных extract_username​ -> действие на срабатывание этого триггера -> в качестве операции - запуск скрипта, которому передаётся как имя хоста (через макрос {HOST.HOST}), так и новое значение (через макрос {ITEM.LASTVALUE}). Самое интеллектуальное при таком подходе - это написать нужный скрипт; кстати, его можно оформить в виде веб-хука (в 6.4 они уже есть, ссылка на кусок документации к версии 6.0).
          • Вариант 2: использовать глобальные корреляции (ссылка). Тут логика такая: создаём триггер с уровнем "Not classified" (чтобы лишний раз не светить его на экране проблем), который срабатывает при логине пользователя и закрывается при логауте, добавляем в него тег с заданным именем (например, user_logged_in) и значением, содержащим логин, а также тег, содержащий имя хоста (со значением из системного макроса {HOST.HOST}). Остальные триггеры (которые надо "светить" на экране проблем) помечаем такими же тегами с такими же значениями, а в корреляции задаём правило: если значение тегов нового события совпадает со значением того же тега старого события, то новое событие тут же закрывать.

          Comment

          Working...