Ad Widget

Collapse

Чтение из динамически изменяемого файла

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Krustyish
    Junior Member
    • Sep 2016
    • 17

    #1

    Чтение из динамически изменяемого файла

    Всем привет!
    Уважаемые форумчане, может у кого будет идея как решить следующую задачу,
    есть текстовый файл с примерно следующим содержимым

    Process ID:3848
    Last Message Time:2017-01-06T00:45:05+04:00
    OsMemoryPeak_Historical_stats:40.13
    OsMemoryTotal_Historical_stats:34.0436
    ==
    Process ID:2232
    Last Message Time:2017-01-01T00:21:05+04:00
    OsMemoryPeak_Historical_stats:10.13
    OsMemoryTotal_Historical_stats:22.0436
    ==
    и тд.

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

    попытка использовать
    vfs.file.regexp["/tmp/pool_manager_state","[Process ID:]([0-9.]+)",,,,"\1"]
    не увенчалась успехом, считывается первый в файле Process ID, а мне нужно все считать, и так собственно для каждого поля.

    Буду признателен за любую идею, спасибо и с праздниками!
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3406

    #2
    Мысли:

    1) вместо метрики vfs.file.regexp, про которую в документации открытым текстом сказано:
    Only the first matching line is returned.
    использовать другую метрику - log[file,<regexp>,<encoding>,<maxlines>,<mode>,<output >] (с аналогичным параметром <output>).

    2) подправить регулярное выражение, убрав ненужные квадратные скобки вокруг "Process ID:". Кстати, рекомендую для отладки регулярных выражений использовать сайт https://regex101.com/ - наглядно показывает, как парсится исходный текст в соответствии с вашим регулярным выражением.

    Comment

    • Krustyish
      Junior Member
      • Sep 2016
      • 17

      #3
      Originally posted by Kos
      Мысли:

      1) вместо метрики vfs.file.regexp, про которую в документации открытым текстом сказано:

      использовать другую метрику - log[file,<regexp>,<encoding>,<maxlines>,<mode>,<output >] (с аналогичным параметром <output>).

      2) подправить регулярное выражение, убрав ненужные квадратные скобки вокруг "Process ID:". Кстати, рекомендую для отладки регулярных выражений использовать сайт https://regex101.com/ - наглядно показывает, как парсится исходный текст в соответствии с вашим регулярным выражением.
      Спасибо за идею!
      Но наверное придется дробить подобный лог файл на n-оe кол-во файлов и их втаскивать через LLD

      Comment

      Working...