Ad Widget

Collapse

Ключ log (logrt) и кодировка UCS-2 Little Endian

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • karik-himik
    Senior Member
    • Oct 2015
    • 116

    #1

    Ключ log (logrt) и кодировка UCS-2 Little Endian

    Добрый день, коллеги.
    Сразу оговорюсь, что своими силами проблему борол, но она меня уделала.

    Есть лог файл, который нужно полносттью передавать в zabbix и этот файл в кодировке UCS-2 Little Endian
    Никак не могу понять, каким образом её правильно указать в ключе log или logrt

    Ради чистоты эксперимента создал файл, в NP++ сменил кодировку на Little Endian и начал заполнять его отсебятиной, меняя кодировку в zabbix после нескольких новых строк в файле.
    В итоге, сложилось впечатление, что сегодня не мой день )

    Нашел кучу информации о том, то UTF-16 - Неофициальный синоним для UCS-2
    Протестил вот эти варианты и уже готов сдаться:

    "UCS2"
    UCS2
    "UCS-2"
    UCS-2
    "UCS-2LE"
    UCS-2LE
    "UCS-2 LE"
    UCS-2 LE
    "UCS-2 Little Endian"
    UCS-2 Little Endian

    "UTF-16"
    UTF-16
    "UTF-16LE"
    UTF-16LE
    "UTF-16 LE"
    UTF-16 LE
    "UTF-16 Little Endian"
    UTF-16 Little Endian
    "1202"
    1202
    "cp1202"
    cp1202

    С кавычками и без проверял на всякий случай.

    В логах агента видно, что в некоторых кодировках он передаёт серверу value:'(null)' или value:''
    В истории элемента видно, что поступают новые записи, но эти записи - пустые строки.

    На данном форуме в нерусских ветках нашел сообщения от вроде бы матёрых пользователей, которые утверждают, что вариант "UTF-16" отлично обрабатывает логи MSSQL Server, который как оказалось тоже в кодировке UCS-2 Little Endian

    Проверил - точно не мой день сегодня ! ) У меня такой вариант не работает. Вот для примера ключ:

    log["C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Log\SQLAGENT.OUT" ,*,"UTF-16"]
    В результате получаю кучу каких-то Китайских иероглифов

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

    Смущает и то, что у некоторых UTF-16 нормально отрабатывает, но может это еще и из-за того, что windows server у меня в Русской редакции, а SQL Английский ?

    Может кто-нибудь настраивал мониторинг файлов в UCS-2 ?
    Что я еще не учел ?

    Очень надеюсь на помощь, так как как минимум на выходных не смогу спать спокойно ))
  • sadman
    Senior Member
    • Dec 2010
    • 1611

    #2
    Это же под виндой происходит? Тогда, быть может, вам поможет массив структур codepage_tиз функции get_codepage(const char *encoding, unsigned int *codepage), которая находится в файле /src/libs/zbxcommon/str.c. В конечном итоге там происходит сопоставление заданной через ключ кодировки и кодовой страницы, основываясь на которой происходит конвертация из исходной строки в UTF-8 перед закидыванием на Zabbix Server.

    Comment

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

      #3
      Originally posted by sadman
      Это же под виндой происходит? Тогда, быть может, вам поможет массив структур codepage_tиз функции get_codepage(const char *encoding, unsigned int *codepage), которая находится в файле /src/libs/zbxcommon/str.c. В конечном итоге там происходит сопоставление заданной через ключ кодировки и кодовой страницы, основываясь на которой происходит конвертация из исходной строки в utf-8 перед закидыванием на zabbix server.
      Хм, любопытная табличка.
      Кроме utf-7 и utf-8, рядом с utf-16 в ней есть unicodefffe.

      Замечание: все кодировки в Uppercase, почему-то движок форума по-прежнему автоматически преобразует всё, что хочет, в нижний регистр.
      Last edited by Kos; 28-10-2016, 13:35. Reason: добавлено замечание

      Comment

      • karik-himik
        Senior Member
        • Oct 2015
        • 116

        #4
        Ух, ребят... я как протрезвею, попробую прошерстить то, что Вы посоветовали ))
        Но, заранее спасибо за отклик )

        Comment

        • karik-himik
          Senior Member
          • Oct 2015
          • 116

          #5
          Попробовал.
          Нашел в /src/libs/zbxcommon/str.c запись {1200, "UTF-16"}.
          Чуть ниже этого массива есть как раз проверка того, как я эту кодировку укажу: /* by name */, * by number */ и /* by 'cp' + number */

          Внимательное изучение этих блоков натолкнуло на мысль, что я всё делал правильно. Перепроверил еще раз и... при указании UTF-16 увидел в логе агента запись типа meta_data_update FAIL
          Дословно уже не помню, так как лог периодически очищал для удобства.
          В общем этот FAIL и натолкнул на мысль обновить агент с 3.0 до 3.2 ))

          И... о чудо ! Всё заработало.
          Хотя, как-то странно это.
          Доберусь до работы попробую еще на нескольких серверах. Может дело всё-таки не в версии агента, а в какой-то особенности конкретной ОС.


          Так что спасибо за наводку. Если бы не этот файлик, то я бы еще долго думал, что это я как-то не правильно пишу UTF-16

          Comment

          • karik-himik
            Senior Member
            • Oct 2015
            • 116

            #6
            Перепроверил на других серверах - проблема была не в zabbix агенте и его версии. В чем её суть, так и не понял - какой-то одноразовый глюк.
            На других серверах в версии 3.0 всё отлично работает с UTF-16.

            Более того - на проблемном сервере откатил версию агента обратно до 3.0 и всё замечательно работает. Мистика.

            Comment

            Working...