Ad Widget

Collapse

Как отключить синхронизацию трендов при выключении службы zabbix_server

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • suhmuh
    Junior Member
    • May 2024
    • 8

    #1

    Как отключить синхронизацию трендов при выключении службы zabbix_server

    После перехода на БД Zabbix (PostgreSQL) на использование TimescaleDB, обнаружили проблему после рестарта контейнера Zabbix Backend. После рестарата сервера, он работает до начала ближайшего часа и на расчетах трендов БД тонет в большом количестве UPDATE-запросов к таблицам trends и trends_uint. Среднее время выполнения одного UPDATE-запроса около 30 секунд.

    Code:
    update trends set num=60,value_min=59.000000044250001,value_avg=133. 93333333060167,value_max=212.00000021553333 where itemid=139209168 and clock=1714215600;
    Опытным путем было выяснено, что UPDATE-зпросы выполняются в следствии того, что при выключении сервера тренды уже были вычислены и синхронизированы, а при расчете в ближайший час существующие тренды нужно обновить. Сама синхронизация трендов очень растягивает процесс выключения контейнера с Zabbix Backend, а UPDATE-запросы очень нагружают БД. Вопрос: зачем нужна синхронизация трендов при выключении службы zabbix_server, ведь в ближайший час все равно тренды расчитаются на основе всех существующих исторических значений за час (справедливо при рестарте сервера)? Если отключить синхронизацию трендов при выключении службы zabbix_server, то тогда отпадет надобность в UPDATE-запросах при расчете трендов в ближайший час. До перехода на TimescaleDB такой проблемы не обнаруживалось.

    Вернули работоспособность Zabbix путем создания новой гипертаблицы без чанков для таблиц trends и trends_uint. Подменили старые таблицы на новые. Дали поработать 2 часа. После чего вернули таблицы обратно и долили эти два часа в большие таблицы. Все заработало из-за отсутствия запросов UPDATE.

    Чанки для гипертаблиц trends и trends_uint разбили с 30 дневных до однодневные. Не помогло. Зависает на тех же UPDATE-запросах в ближайщий расчетный час. Акктуальная таблица трендов за текущий день не сжата.

    Таблица trends
    Code:
                                                   Table "public.trends"
      Column   |       Type       | Collation | Nullable |        Default        | Storage | Stats target | Description
    -----------+------------------+-----------+----------+-----------------------+---------+--------------+-------------
     itemid    | bigint           |           | not null |                       | plain   |              |
     clock     | integer          |           | not null | 0                     | plain   |              |
     num       | integer          |           | not null | 0                     | plain   |              |
     value_min | double precision |           | not null | '0'::double precision | plain   |              |
     value_avg | double precision |           | not null | '0'::double precision | plain   |              |
     value_max | double precision |           | not null | '0'::double precision | plain   |              |
    Indexes:
        "trends_pkey" PRIMARY KEY, btree (itemid, clock)
        "trends_new_clock_idx" btree (clock DESC)
    Triggers:
        ts_insert_blocker BEFORE INSERT ON trends FOR EACH ROW EXECUTE FUNCTION _timescaledb_functions.insert_blocker()
    Child tables: _timescaledb_internal._hyper_18_1156_chunk,
                  _timescaledb_internal._hyper_18_1157_chunk,
                 ....
                  _timescaledb_internal._hyper_18_2822_chunk,
    Таблица trends_uint
    Code:
                                           Table "public.trends_uint"
      Column   |     Type      | Collation | Nullable |   Default    | Storage | Stats target | Description
    -----------+---------------+-----------+----------+--------------+---------+--------------+-------------
     itemid    | bigint        |           | not null |              | plain   |              |
     clock     | integer       |           | not null | 0            | plain   |              |
     num       | integer       |           | not null | 0            | plain   |              |
     value_min | numeric(20,0) |           | not null | '0'::numeric | main    |              |
     value_avg | numeric(20,0) |           | not null | '0'::numeric | main    |              |
     value_max | numeric(20,0) |           | not null | '0'::numeric | main    |              |
    Indexes:
        "trends_uint_pkey" PRIMARY KEY, btree (itemid, clock)
        "trends_uint_2_clock_idx" btree (clock DESC)
    Triggers:
        ts_insert_blocker BEFORE INSERT ON trends_uint FOR EACH ROW EXECUTE FUNCTION _timescaledb_functions.insert_blocker()
    Child tables: _timescaledb_internal._hyper_25_1530_chunk,
                  _timescaledb_internal._hyper_25_1531_chunk,​
                 ...
                 _timescaledb_internal._hyper_25_2839_chunk
    Можно ли как-то отключить синхронизацию трендов при выключении Zabbix Backend?
    Так же есть идея создать триггер Postgresql, который будет перехватывать все операции UPDATE к таблицам trends и trends_uint и отбрасывать их, но мне кажется, что это очередной костыль.

    И вообще должны ли зависать UPDATE-запросы при обновлении таблиц trends и trends_uint? Почему так происходит? Может кто-то что-то знает?
  • Hamardaban
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • May 2019
    • 2713

    #2
    Конечно вопрос более в техподдержку забикса...
    Но если кто-то тут ответит то наверняка спросит версии компонентов и "Требуемое быстродействие сервера, новые значения в секунду" (NVPS)

    Comment

    • Griboed0ff
      Senior Member
      • Sep 2022
      • 153

      #3
      Действительно стало интересно какие размеры имеет база и какие ресурсы вам доступны для базы, ну и nvps. У меня терабайтная база тоже PostgreSQL + TimescaleDB, если я зачем-то стопарил контейнер, то после включения была проблема с базой из-за того, что все прокси начинали усиленно лить все что накопили за время отсутствия включенного контейнера. Сейчас у меня такая проблема неактуальна, так как включил кластер на две машины, если падает или тушу один контейнер, то второй подхватывает и получается без downtime, соответственно без приключений с базой, чтобы там с ней не происходило. Но такие варианты не всем доступны, так как не у всех есть возможность разнести все компоненты системы на разные машины.
      Last edited by Griboed0ff; 17-05-2024, 08:29.

      Comment

      • suhmuh
        Junior Member
        • May 2024
        • 8

        #4
        Это один Zabbix:
        БД - 3726 GB
        Required server performance, new values per second - 12642.66
        CPU - 128
        Mem - 1Tb
        Zabbix Proxy - 30 шт.
        Zabbix находится в кластере.

        Это второй Zabbix:
        БД - 1183 GB
        Required server performance, new values per second - 3116.67
        CPU - 32
        Mem - 64Gb
        Zabbix Proxy - 4 шт.
        Zabbix находится в кластере.

        Прокси конечно же нагружают сервер и его БД. Но такое поведение повторяется и с выключенными проксями. По поводу даунтайма... После деплоя одной из нод даунтайм все равно происходит, т.к. нода может выключаться до 10 минут из-за синхронизации истории и трендов и только после этого Zabbix помечает в БД эту ноду, как недоступную и управление передается на другую ноду. Если убивать процесс сервера не дожидаясь и downtime, то в БД выключенный мастер будет по прежнему активным, пока не пройдет время установленное в Fail-over delay.
        В техподдержку Zabbix написал, но таск так и не заассайнили на кого-нибудь. Может это можно сделать самому? Я не знаю на какую команду (отдел) отправлять этот таск?

        Comment

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

          #5
          Для полноты картины не хватает, всё же, указания версии Zabbix (без чего вопрос просто не имеет смысла), а также ссылки на ZBX (открытый тикет в техподдержке, раз уж вы туда обращались).

          Comment

          • suhmuh
            Junior Member
            • May 2024
            • 8

            #6
            Zabbix server 6.4.14
            Ссылка на тикет в тех поддержку - https://support.zabbix.com/browse/ZBXNEXT-9175.

            Comment

            • suhmuh
              Junior Member
              • May 2024
              • 8

              #7
              Zabbix server 6.4.14
              Ubuntu 20.04.6 LTS
              PostgreSQL 13.14 (Ubuntu 13.14-1.pgdg20.04+1)
              TimescaleDB 2.14.2
              Ссылка на тикет в тех поддержку - https://support.zabbix.com/browse/ZBXNEXT-9175.

              Comment

              • suhmuh
                Junior Member
                • May 2024
                • 8

                #8
                Обновил PostgreSQL на 15ю версию. Не помогло

                Comment

                • suhmuh
                  Junior Member
                  • May 2024
                  • 8

                  #9
                  В общем помогло только уменьшение периода хранения данных в чанкахс одного месяца на один день. Но все равно UPDATE-запросы выполняются по 5-7 секунд. Мне кажется это слишком много. Остается вопрос, как отключить синхонизацию трендов при выключении службы Zabbix Server? Если кто-то знает буду очень благодарен.

                  Comment

                  Working...