Ad Widget

Collapse

Баг: Zabbix 1.8.2 + linux agent + кодировка koi8 на клиенте

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • sire
    Senior Member
    • Jul 2010
    • 210

    #1

    Баг: Zabbix 1.8.2 + linux agent + кодировка koi8 на клиенте

    Ситуация такая. Есть сервер Zabbix 1.8.2 и PostgreSQL 8.1.21. Всё это работает на CentOS 5. Есть клиентская машина, которую надо мониторить. На ней стоит специфический Linux с ядром серии 2.4 и системной кодировкой koi8. На клиентской машине стоит агент Zabbix.

    Команда uname -a на клиентской машине выдаёт строку, содержащую русские буквы в кодировке koi8, - дата сборки ядра. При попытке сохранить данные uname -a в базе данных СУБД Postgres ругается на кодировку. Сообщения об ошибках в файлах журналов Zabbix и Postgres очень быстро забивают свободное место на диске.

    Вот выдержка из файла журнала сервера Zabbix:
    Code:
    1889:20100727:120026.858 [Z3005] Query failed: [0] PGRES_FATAL_ERROR:ERROR:  неверная последовательность байт имя кодировки "UTF8": 0xfe
    HINT:  This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding".
    [update dservices set status=0,lastup=1280217626,lastdown=0,value='Linux client 2.4.32-release #1 SMP ??? ??? 11 12:13:14 MSD 2008 i686 i686 i386 GNU/Linux' where dserviceid=330]
    1889:20100727:120026.858 [Z3005] Query failed: [0] PGRES_FATAL_ERROR:ERROR:  current transaction is aborted, commands ignored until end of transaction block
    Последняя строка повторяется в журналах многократно до заполнения свободного места на диске.
    Клиентских машин с этим специфическим линуксом у нас много, пересобрать ядро без русских букв
    возможности нет.

    Regards,
    Sergey Sireskin
    Last edited by sire; 28-07-2010, 10:09.
    Regards,
    Sergey Syreskin

    Monitored hosts: 2646 / Active items: 23604 / Server performance: 765.74

    Temporary out of Zabbix business
  • zalex_ua
    Senior Member
    Zabbix Certified Trainer
    Zabbix Certified SpecialistZabbix Certified Professional
    • Oct 2009
    • 1286

    #2
    Чисто для информирования даю ссылку на похожую проблему под Виндовсом. (она как раз вчера всплыла опять)

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

    Comment

    • sire
      Senior Member
      • Jul 2010
      • 210

      #3
      Originally posted by zalex_ua
      Чисто для информирования даю ссылку на похожую проблему под Виндовсом. (она как раз вчера всплыла опять)

      Может быть это натолкнет на какие то хорошие мысли. Под линуксом все же легче искать решение проблемы.
      Спасибо, видел эту тему. С виндами действительно сложнее. В линуксе всё понятно - надо перед тем, как сохранять строку вывода команды "uname -a", обработать означенную строку и либо сконвертировать её в utf8, либо просто удлить "опасные" для юникода символы, ну или заменить их на знаки вопроса, например. Я даже нашёл место в коде, где это можно сделать. Если в ближайшее время реакции от команды Zabbix'а не последует, сделаю сам, но по-простому.
      Regards,
      Sergey Syreskin

      Monitored hosts: 2646 / Active items: 23604 / Server performance: 765.74

      Temporary out of Zabbix business

      Comment

      • sire
        Senior Member
        • Jul 2010
        • 210

        #4
        А по-хорошему, преобразование кодировки клиента в utf8 перед отправкой данных на сервер должны делать агенты Zabbix, т.к. они "знают" всё о кодировках клиента. Тогда всё будет корректно работать и в виндах, и в линуксах, и в других осях.
        Regards,
        Sergey Syreskin

        Monitored hosts: 2646 / Active items: 23604 / Server performance: 765.74

        Temporary out of Zabbix business

        Comment

        • sire
          Senior Member
          • Jul 2010
          • 210

          #5
          Для агента написал патч, который тупо конвертирует uname и hostname из koi8 в utf8. Но как оказалось, тот же сбой происходит при обнаружении устройств по SNMP в случае если в uname устройства присутствует кириллица не в utf8. Тут однозначно надо править сервер.
          Attached Files
          Last edited by sire; 11-08-2010, 14:01. Reason: приложил патч
          Regards,
          Sergey Syreskin

          Monitored hosts: 2646 / Active items: 23604 / Server performance: 765.74

          Temporary out of Zabbix business

          Comment

          • zalex_ua
            Senior Member
            Zabbix Certified Trainer
            Zabbix Certified SpecialistZabbix Certified Professional
            • Oct 2009
            • 1286

            #6
            Уверен что никто сервер для этого править не будет, та и не правильно это.
            Вспомнил что для ключа
            log[файл,<regexp>,<кодировка>,<макс кол-во строк>,<режим>]
            есть опциональный параметр <кодировка>, так вот наверное было бы правильным чтобы эта опция каким то способом поддерживалась для пользовательских параметров. Это кажется мне вполне универсальным.

            Comment

            • sire
              Senior Member
              • Jul 2010
              • 210

              #7
              Originally posted by zalex_ua
              Уверен что никто сервер для этого править не будет, та и не правильно это.
              Ну почему же неправильно? Проверить данные на валидность перед записью в БД - это нормально. Несовместимые символы можно вырезать или заменить знаками вопроса, например.

              Originally posted by zalex_ua
              Вспомнил что для ключа
              log[файл,<regexp>,<кодировка>,<макс кол-во строк>,<режим>]
              есть опциональный параметр <кодировка>, так вот наверное было бы правильным чтобы эта опция каким то способом поддерживалась для пользовательских параметров. Это кажется мне вполне универсальным.
              В обнаружении оборудования это неприменимо, так как заранее неизвестно, какой uname или sysName.0 (с какими "кривыми символами") выдаст обнаруживаемое оборудование.
              Regards,
              Sergey Syreskin

              Monitored hosts: 2646 / Active items: 23604 / Server performance: 765.74

              Temporary out of Zabbix business

              Comment

              • zalex_ua
                Senior Member
                Zabbix Certified Trainer
                Zabbix Certified SpecialistZabbix Certified Professional
                • Oct 2009
                • 1286

                #8
                Originally posted by sire
                Ну почему же неправильно? Проверить данные на валидность перед записью в БД - это нормально. Несовместимые символы можно вырезать или заменить знаками вопроса, например.
                Ну ладно, не буду так категоричен, в данном случае наверно накладно сервера нагружать еще такой вещью как проверкой кодировки и поиском несовместимых символов, хотя по иному получается проблему не решишь, ведь лог сервера забивается этим сообщением. Сервер же и так может быть конкретно нагружен. А идея по поводу вырезки или замены на ??? как бы искажает четкость и однозначность системы, непредсказуемо как сервер себя может повести в разных ситуациях ИМХО. Тут сложно сказать, нужно иметь достаточный опыт чтобы сказать уверенно в этом плане.

                Originally posted by sire
                В обнаружении оборудования это неприменимо, так как заранее неизвестно, какой uname или sysname.0 (с какими "кривыми символами") выдаст обнаруживаемое оборудование.
                Мда, нечего сказать, могу посоветовать хорошенько все обдумать и делать обоснованный запрос на трекер.

                Comment

                • sire
                  Senior Member
                  • Jul 2010
                  • 210

                  #9
                  Посмотрел исходники сервера Zabbix. Запись некорректных символов из строки sysName.0 в БД происходит в функциях update_dservice и update_dservice_value, которые определены в файле src/zabbix_server/discovery/discover.c. Перед записью в БД строка пропускается через функцию DBdyn_escape_string_len, которая определена в файле src/libs/zbxdbhigh/db.c, и похоже занимается тем, что экранирует обратными слэшами кавычки в SQL-запросах. Можно попробовать в этой функции заодно заменять символы, недопустимые в utf8, на вопросы.
                  Regards,
                  Sergey Syreskin

                  Monitored hosts: 2646 / Active items: 23604 / Server performance: 765.74

                  Temporary out of Zabbix business

                  Comment

                  • sire
                    Senior Member
                    • Jul 2010
                    • 210

                    #10
                    Написал патч, который заменяет символы, недопустимые в utf8, на знаки вопроса перед тем, как записать в БД информацию об обнаруживаемых хостах. Мне помогло.

                    Патч может быть полезен тем, у кого в настройках оборудования, поддерживающего SNMP, прописано имя организации, ответственного лица и т.п., содержащие символы, не входящие в набор ASCII. Например у меня это терминал видеоконференцсвязи, в настройках которого прописано название нашей организации русскими буквами.
                    Attached Files
                    Last edited by sire; 12-08-2010, 15:07.
                    Regards,
                    Sergey Syreskin

                    Monitored hosts: 2646 / Active items: 23604 / Server performance: 765.74

                    Temporary out of Zabbix business

                    Comment

                    • sire
                      Senior Member
                      • Jul 2010
                      • 210

                      #11
                      Судя по трекеру это дело пофиксили в pre 1.8.5. Спасибо разработчикам!
                      Regards,
                      Sergey Syreskin

                      Monitored hosts: 2646 / Active items: 23604 / Server performance: 765.74

                      Temporary out of Zabbix business

                      Comment

                      • zalex_ua
                        Senior Member
                        Zabbix Certified Trainer
                        Zabbix Certified SpecialistZabbix Certified Professional
                        • Oct 2009
                        • 1286

                        #12
                        гм. интересно, а где именно пофиксили? я что то не заметил.

                        Comment

                        • sire
                          Senior Member
                          • Jul 2010
                          • 210

                          #13
                          Originally posted by zalex_ua
                          гм. интересно, а где именно пофиксили? я что то не заметил.
                          Вот, если я ничего не путаю, https://support.zabbix.com/browse/ZB...s:all-tabpanel
                          Regards,
                          Sergey Syreskin

                          Monitored hosts: 2646 / Active items: 23604 / Server performance: 765.74

                          Temporary out of Zabbix business

                          Comment

                          Working...