LINUX.ORG.RU
решено ФорумAdmin

Zabbix 2.0.5 с бэкендом Oracle DB.

 , ,


0

1

Здравствуйте, уважаемые гуру.

Существует довольно большая инсталляция zabbix, в котором мониторится около 700 хостов.

Большинство 600 хостов из которых имеют версию zabbix_agent 2.0.4. Оставшиеся 100 хостов имеют старую версию 1.8.XX.

Все мониторилось несколько месяцев без сбоев, но в пятницу было проведено обновление агентов на оставшихся 100 серверах.

После чего в субботу к вечеру выросла очередь (25к), притом, что poller'ы спокойно обрабатывали до этого все запросы и очередь до этого момента была около 40 штук.

Проблема заключается в том, что на БД появляется уйма блокировок на UPDATE таблицы ITEMS, которые обрабатываются ооочень медленно.

Долго игрался с количестом db syncher'ов, poller'ов и даже отключил housekeep'инг.

Кто-нибудь сталкивался с подобным? В чем может быть проблема?

В логах нет ошибок.

Конфиг сервера:

cat /usr/local/zabbix/etc/zabbix_server.conf | egrep -v "^$|^#"
...
ListenPort=10051
LogFile=/tmp/zabbix_server.log
LogFileSize=32
PidFile=/tmp/zabbix_server.pid
LogFileSize=40
DBHost=zabbixserver
DBName=zabbix
DBUser=zabbix
DBPassword=password
DBPort=1521
StartPollers=64
StartPollersUnreachable=64
StartTrappers=64
StartPingers=10
StartDiscoverers=1
ListenIP=10.1.0.1
HousekeepingFrequency=2
MaxHousekeeperDelete=2000
DisableHousekeeping=1
CacheSize=256M
StartDBSyncers=8
HistoryCacheSize=512M
TrendCacheSize=256M
HistoryTextCacheSize=512M
AlertScriptsPath=${datadir}/zabbix/alertscripts
FpingLocation=/usr/sbin/fping

Заранее спасибо.



Последнее исправление: dbzer0 (всего исправлений: 1)

было подобное. база вставала из-за update items. вылечилось переводом типов большинства items со строкового на числовой.

Chumka ★★★
()
Ответ на: комментарий от Chumka

Chumka, спасибо за ответ. Да, я тоже заметил, что в запросах к числовым полям подставлялись ".

Возможно дело как раз в этом. Наверное, тогда лучше сразу создать функциональный индекс.

dbzer0
() автор топика
Ответ на: комментарий от blind_oracle

Да, все строго по документации, все апдейты были выполнены. На версии 2.0.x она работала около полугода, т.е. это проблема точно не касается переноса.

dbzer0
() автор топика

Все оказалось хуже.

Проблема заключается в том, что zabbix хранит инкрементальные счетчики в таблице IDS. При возникновении массовых проблем, начинают создаваться записи в таблицу EVENTS, при этом происходит блокировка строки в IDS (TABLENAME=«events»), что создает большую очередь, поскольку каждая запись в events должна увеличить счетчик NEXTID на 1.

Чтобы избежать подобного поведения было решено вынести этот счетчик в «select eventid_sequence.nextval from dual» о чем и просим DBA'шников (эта методика была подсмотренна в патче Frenk'а еще для zabbix 1.8.6).

ВАЖНО Внесение этих обновлений сообщество zabbix планирует к версии 2.2. За основу будет принят этот подход. При переходе на zabbix 2.2, перед обновлением, важно не забыть увеличить счетчик в таблице IDS с TABLENAME=«events» на значение из «select eventidsequence.nextval from dual».

Изменения в коде Изменен файл zabbix-2.0.5/src/libs/zbxdbhigh/db.c. После строки 1539 вставлена процедура, организующая логику получения id из eventid_sequence:

zbx_uint64_t    DBget_seq_maxid(const char *tablename)
{
    zbx_uint64_t    ret;
    DB_RESULT   result;
    DB_ROW  row;
    result = DBselect("select eventid_sequence.nextval from dual");
    row = DBfetch(result);
    ZBX_STR2UINT64(ret,row[0]);
    //zabbix_log(LOG_LEVEL_INFORMATION,"********  GETTING SEQ MAX ID:%d ************",ret);
    DBfree_result(result);
    return  ret;
}

Изменен файл zabbix-2.0.5/src/zabbixserver/events.c. В 28 строку вставлен прототип функции DBgetseq_maxid().

zbx_uint64_t    DBget_seq_maxid(const char *tablename);

Закомментированы строки 124, 125:

//if (0 == event.eventid)
    //event.eventid = DBget_maxid("events");

И после них вставлена строка:

event.eventid = DBget_seq_maxid("events");
dbzer0
() автор топика
Ответ на: комментарий от dbzer0

После этих изменений очередь ушла и zabbix стал работать стабильно.

Итог: если вы мониторите кучу серверов и используете бэкенд OracleDB OCI, то рано или поздно Вы столкнетесь с этой проблемой, а версия zabbix 2.2.0 будет ох как не скоро.

dbzer0
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.