Как почистить zabbix и помощь программиста?

Как почистить zabbix и помощь программиста? Хостинг

background
Because the historical data of zabbix is too large, it takes up too much disk space, so it needs to clean up the data and free up space.

1. Check the space occupied by the table

SELECT table_name AS "Tables",
round(((data_length + index_length) / 1024 / 1024), 2) "Size in MB"
FROM information_schema.TABLES
WHERE table_schema = 'zabbix'
ORDER BY (data_length + index_length) DESC;

Как почистить zabbix и помощь программиста?

2. Analysis table data
From the larger table above, it mainly focuses on two tables: history unit and history, and stores historical data.
a. view the history uint and history data table structure, and delete the data according to the clock timestamp.

MariaDB [zabbix]> desc history_uint;
+--------+---------------------+------+-----+---------+-------+
| Field  | Type                | Null | Key | Default | Extra |
+--------+---------------------+------+-----+---------+-------+
| itemid | bigint(20) unsigned | NO   | MUL | NULL    |       |
| clock  | int(11)             | NO   |     | 0       |       |
| value  | bigint(20) unsigned | NO   |     | 0       |       |
| ns     | int(11)             | NO   |     | 0       |       |
+--------+---------------------+------+-----+---------+-------+
4 rows in set (0.26 sec)

MariaDB [zabbix]> desc history;
+--------+---------------------+------+-----+---------+-------+
| Field  | Type                | Null | Key | Default | Extra |
+--------+---------------------+------+-----+---------+-------+
| itemid | bigint(20) unsigned | NO   | MUL | NULL    |       |
| clock  | int(11)             | NO   |     | 0       |       |
| value  | double(16,4)        | NO   |     | 0.0000  |       |
| ns     | int(11)             | NO   |     | 0       |       |
+--------+---------------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

MariaDB [zabbix]>

3. Clean up the table data. It is recommended to stop the zabbix server service.
a. take the time stamp 30 days ago

[root@docker ~]# 
[root@docker ~]# date +%s -d "Jun 4, 2019 00:00:00"
1559577600
[root@docker ~]#

b. delete data according to time stamp and optimize

delete from history where clock < 1559577600;
optimize table history

Чаще все­го хва­та­ет дефолт­ных настро­ек, поэто­му како­го-то осо­бен­но­го вни­ма­ния бд я не уделял.

Если вы актив­но исполь­зу­е­те zabbix и внед­ря­е­те его повсе­мест­но во все исполь­зу­е­мые систе­мы, то вы рано или позд­но столк­не­тесь с вопро­сом про­из­во­ди­тель­но­сти систе­мы мони­то­рин­га и раз­ме­ра базы дан­ных zabbix.

Тема про­из­во­ди­тель­но­сти zabbix очень инди­ви­ду­аль­ная. Она напря­мую зави­сит от того, как вы его исполь­зу­е­те, а схе­мы мони­то­рин­га могут быть очень раз­ные. Одно дело мони­то­рить несколь­ко сер­ве­ров, а дру­гое дело нагру­жен­ные сви­чи на 48 пор­тов со съе­мом мет­рик с каж­до­го пор­та раз в 30 секунд.

Что­бы помочь вам разо­брать­ся в этой теме и при­ки­нуть, к чему гото­вить­ся, я поде­люсь с вами сво­им опы­том экс­плу­а­та­ции заб­бик­са, его нагруз­ки, про­из­во­ди­тель­но­сти и обслу­жи­ва­ния базы дан­ных mysql. Рас­ска­жу, как мож­но умень­шить раз­мер базы.

Под неболь­шой струк­ту­рой, упо­мя­ну­той в нача­ле, я под­ра­зу­ме­ваю 50-100 узлов (не сете­вое обо­ру­до­ва­ние с десят­ка­ми пор­тов) сети на мони­то­рин­ге и при­мер­но 2000-4000 актив­ных эле­мен­тов дан­ных, кото­рые запи­сы­ва­ют 20-40 новых зна­че­ний в секун­ду. Под такую сеть вам будет доста­точ­но неболь­шой вир­ту­аль­ной маши­ны с 2 ядра­ми и 4 гб памя­ти. База дан­ных на пре­иму­ще­ствен­но стан­дарт­ных шаб­ло­нах будет рас­ти при­мер­но на 2-4 Гб в год. Даль­ше еще мень­ше, так как будет авто­ма­ти­че­ски очищаться.

Для мони­то­рин­га такой сети мож­но вооб­ще не выпол­нять ника­ких допол­ни­тель­ных настро­ек. Мони­то­ринг будет вполне нор­маль­но рабо­тать. Если же нагруз­ка нач­нет рас­ти, то пер­вое, с чем вы столк­не­тесь — это с раз­ме­ром и про­из­во­ди­тель­но­стью базы дан­ных. База zabbix будет рас­ти про­пор­ци­о­наль­но под­клю­че­нию к ней хостов. И с этим при­дет­ся что-то делать.

Для реше­ния вопро­са про­из­во­ди­тель­но­сти нуж­но будет дви­гать­ся в двух направлениях:

  1. Очист­ка базы от ненуж­ных данных.
  2. Уве­ли­че­ние про­из­во­ди­тель­но­сти сер­ве­ра mysql.

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

After zabbix monitoring runs for a period of time, it will leave a lot of historical monitoring data, and the zabbix database has been growing; it may cause system performance degradation, and the query speed of viewing historical data room is slow.

The biggest tables in zabbix are history and history uint, and the time in zabbix is recorded by using the time stamp method, so historical data can be deleted according to the time stamp

Читайте также:  Улучшите работу с электронной почтой с помощью почтового клиента Timeweb: просто и интуитивно понятно

Close zabbix and http services

pkill -9 zabbix
service httpd stop

Clean up zabbix historical data

View database catalog file

[root@zabbix-server zabbix]# cd /var/lib/mysql/zabbix/
[root@zabbix-server zabbix]# ls -lh | grep G
total 177G
-rw-r----- 1 mysql mysql 1.7G Dec 24 13:49 events.ibd
-rw-r----- 1 mysql mysql  60G Dec 24 13:49 history.ibd
-rw-r----- 1 mysql mysql 2.4G Dec 24 13:49 history_str.ibd
-rw-r----- 1 mysql mysql  99G Dec 24 13:49 history_uint.ibd
-rw-r----- 1 mysql mysql 4.6G Dec 24 13:02 trends.ibd
-rw-r----- 1 mysql mysql 9.5G Dec 24 13:49 trends_uint.ibd
[root@zabbix-server zabbix]# 
//Generate Unix timestamps. The time is set as February 1, 2018 (tentative is to save the monitoring data after February 18)
[root@zabbix-server zabbix]# date +%s -d "Feb 1, 2018 00:00:00"    #An ID will be generated after executing this command
1517414400            #This is the generated ID
[root@zabbix-server zabbix]#mysql -uroot -p zabbix > /root/mysqlback/zabbix.sql     #mysqlback directory needs to be created
[root@zabbix-server zabbix]# mysql -uroot -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 7
Server version: 5.5.60-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> 

use zabbix;    #Select zabbix database

#Execute sql to view the data size before the specified date:
SELECT table_schema as `Database`,table_name AS `Table`,round(((data_length + index_length) / 1024 / 1024 / 1024), 2) `Size in MB`FROM information_schema.TABLES where CREATE_TIME < '2018-02-01 00:00:00' and table_name='history.ibd';
#Modify the date and the table name of the query as needed (if the result of the query is 0.0, delete one of the three 1024 in the sql and display it in G)
delete from history where clock < 1517414400;
optimize table history;

delete from history_uint where clock < 1517414400;
optimize table history_uint;

delete from trends where clock < 1517414400;
optimize table trends;

delete from trends_uint where clock < 1517414400;
optimize table trends_uint;

Note: the ID in sql is the ID number of Unix timestamp generation, which needs to be changed to the ID number generated by itself

/usr/sbin/zabbix_server -c /etc/zabbix/zabbix_server.conf    #zabbix server
/usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf    #zabbix agent
service httpd start

Use truncate command to clear all monitoring data of zabbix

-------------------------------------------------------
truncate table history;
optimize table history;
------------------------------------------------------- 
truncate table history_str;
optimize table history_str;
-------------------------------------------------------
truncate table history_uint;
optimize table history_uint;
-------------------------------------------------------
truncate table trends;
optimize table trends;
-------------------------------------------------------
truncate table trends_uint; 
optimize table trends_uint; 
-------------------------------------------------------
truncate table events;
optimize table events;
-------------------------------------------------------

Note: these commands will clear all monitoring data of zabbix, and pay attention to backup the database before operation

truncate is to delete the table and then re create it according to the table structure. Delete is to delete the record data without modifying the table

truncate is faster to delete, but it is not as safe as delete in transaction processing. If the table we executed truncat e is processing a transaction, this command exits and generates an error message

Data Base zabbix db
Тут будет различная инфа связная с базой заббикса. На основе MySQL MariaDB innodb

Обычно упираемся в следующие проблемы это :
1. Все стало тормозит пошли ложные срабатывания триггера сервер завис
2. Большие объемы данных нужно их подчистить
3. Потерянные данные нужно убрать

Больше нагрузка падает на оперативную память и на диск.

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

То что сопоставил я к таблице
Связи означает что таблица сделана для связи других таблиц между собой ключами.

Если не хватает оперативки и быстрые диски можно временно использовать файл подкачки SWAP если его нет

Читайте также:  Рейтинг виртуального хостинга (shared хостинг) 2022 🔝 Топ лучших бесплатных и платных виртуальных хостингов для сайта. | SITEROST

Если не хватает оперативы на какое то время поможет swap, но он работает медленнее и быстрее изнашивает диск.
Для начала, нужно убедиться, что своп ещё не подключен:
swapon -s
Если команда выдала пустой результат или что-то навроде:
Результат:
Filename Type Size Used Priority
— значит, своп, скорее всего отсутствует.

Если в таблице в строке swap стоит 0, значит своп отсутствует

Быстрый способ
Используем fallocate:
fallocate -l 4G /swapfile
Результатом будет пустая строка, это нормально.
В отличие от dd, результат будет получен почти сразу, и я рекомендую именно его

Традиционный, медленный способ
команда
dd if=/dev/sda1 of=/swapfile bs=1G count=6

Синтаксис команды простой:
dd — команда предназначена для того, чтобы что-то куда-то копировать побайтово;
if=/dev/zero — указывает на источник, т.е. на то, откуда копируем, в данном случае из /dev/zero — это специальный файл в UNIX-подобных системах, представляющий собой источник нулевых байтов;
of=/swapfile — указывает путь назначения, куда копируем данные;
bs=1G — количество байт, которые будут записаны за раз. В нашем случае, 1 гигабайт. Обозначения: G — гигабайт, M — мегабайт, K — килобайт, и так далее;
count=4 — сколько блоков размером с bs будет создано, в нашем случае 4.
ошибиться с определением пути для of= (куда сохранять файл), можно повредить данные на диске

Теперь, когда файл создан, проверим результат:
ls -lh /swapfile
Ответ
-rw-r—r— 1 root root 6,0G мар 12 14:42 /swapfile

ограничим права доступа
chmod 600 /swapfile
ls -lh /swapfile
ответ
-rw——- 1 root root 6,0G мар 12 14:42 /swapfile

Теперь нужно сделать из swapfile файл подкачки:
mkswap /swapfile
Ответ
mkswap: /swapfile: warning: wiping old ext4 signature.
Setting up swapspace version 1, size = 6291452 KiB
без метки, UUID=9950de08-0d80-4440-93c8-dbcd8c1b31bf

Подключим его к системе:
swapon /swapfile

Проверка
swapon -s
Ответ
Filename Type Size Used Priority
/swapfile file 6291452 0 -1

Как очистить SWAP в Linux

Вообще, это делается с помощью отключения и включения свопа.
swapoff -a && sleep 3 && swapon -a
не рекомендую прибегать к этому способу, так как swap просто очищается,
а не переносится в ОЗУ, и, в случае наличия данных системных процессов, система может стать недоступна.

Удаление файла подкачки
Чтобы деактивировать и удалить файл подкачки, выполните следующие действия:
Сначала отключите пространство подкачки, набрав:
swapoff -v /swapfile
Затем удалите запись файла подкачки /swapfile swap swap defaults 0 0 из файла /etc/fstab.
Наконец, удалите фактический файл подкачки:
rm /swapfile

Запуск вручную Очистки истории Заббикс
zabbix_server -R housekeeper_execute
или
zabbix_server -c /usr/local/etc/zabbix_server.conf -R housekeeper_execute

Пример свернутых таблиц выстроенных по алфавиту для версии 4.2
Сохранённая страница как zabbixbdA-Z это id 1

— Дамп данных таблицы `pma__table_coords`

— Дамп данных таблицы `pma__table_coords`

Схему связи можно просмотреть скачав исходный архив zabbix_4.2.8.orig.tar.gz
Смотрим zabbix_4.2.8.orig.tar\zabbix_4.2.8.orig\zabbix-4.2.8\database\mysql\schema.sql

Очистка и уменьшение mysql базы zabbix

Нач­нем с очист­ки базы дан­ных zabbix от ненуж­ных дан­ных. Рас­смот­рим по пунк­там в той после­до­ва­тель­но­сти, в кото­рой это нуж­но делать.

  1. Пер­вым делом надо вни­ма­тель­но про­смот­реть все исполь­зу­е­мые шаб­ло­ны и отклю­чить там все, что вам не нуж­но. Напри­мер, если вам не нужен мони­то­ринг сете­вых соеди­не­ний windows, обя­за­тель­но отклю­чи­те авто­об­на­ру­же­ние сете­вых интер­фей­сов. Оно само по себе нахо­дит десят­ки вир­ту­аль­ных соеди­не­ний, кото­рые воз­вра­ща­ют нули при опро­се и не пред­став­ля­ют ника­кой цен­но­сти. Тем не менее, все эти дан­ные соби­ра­ют­ся и хра­нят­ся, созда­вая лиш­нюю нагруз­ку. Если же вам нужен мони­то­ринг сети в windows, зай­ди­те в  каж­дый хост и отклю­чи­те рука­ми лиш­ние адап­те­ры, кото­рые будут най­де­ны. Этим вы суще­ствен­но умень­ши­те нагруз­ку. По мое­му опы­ту, в стан­дарт­ных шаб­ло­нах windows мони­то­ринг всех сете­вых интер­фей­сов дает при­мер­но 2/3 всей нагруз­ки этих шаблонов.
  2. Отре­дак­ти­руй­те в исполь­зу­е­мых стан­дарт­ных шаб­ло­нах вре­мя опро­са и хра­не­ния дан­ных. Воз­мож­но вам не нуж­на та часто­та опро­са и вре­мя хра­не­ния, кото­рые зада­ны. Там доста­точ­но боль­шие интер­ва­лы хра­не­ния. Чаще все­го их мож­но умень­шить. В целом, не забы­вай­те в сво­их шаб­ло­нах ста­вить адек­ват­ные реаль­ной необ­хо­ди­мо­сти пара­мет­ры. Не нуж­но хра­нить года­ми инфор­ма­цию, кото­рая теря­ет акту­аль­ность уже через неделю.
  3. После отклю­че­ния лиш­них эле­мен­тов в шаб­ло­нах, нуж­но очи­стить базу дан­ных от зна­че­ний неак­тив­ных ите­мов. По-умол­ча­нию, они там оста­ют­ся. Мож­но их очи­стить через web интер­фейс, но это пло­хая идея, так как неудоб­но и очень дол­го. Чаще все­го попыт­ки очи­стить 50-100 эле­мен­тов за раз будут сопро­вож­дать­ся ошиб­ка­ми тай­мау­та или зави­са­ни­ем web интер­фей­са. Далее рас­ска­жу, как это сде­лать эффективнее.
Читайте также:  Оптимизируйте общение с помощью групповых уведомлений Zabbix Telegram

Дан­ны­ми запро­са­ми мож­но при­ки­нуть, сколь­ко дан­ных будет очищено:

Если запро­сы нор­маль­но отра­ба­ты­ва­ют и воз­вра­ща­ют счет­чик дан­ных, кото­рые будут уда­ле­ны, даль­ше може­те их уда­лять из базы сле­ду­ю­щи­ми sql запросами.

Дан­ны­ми запро­са­ми вы очи­сти­те базу дан­ных zabbix от зна­че­ний неак­тив­ных эле­мен­тов дан­ных. Но реаль­но раз­мер базы дан­ных у вас не умень­шит­ся, пото­му что в дефолт­ной настрой­ке базы дан­ных исполь­зу­ет­ся фор­мат innodb. Все дан­ные хра­нят­ся в фай­ле ibdata1, кото­рый авто­ма­ти­че­ски не очи­ща­ет­ся после уда­ле­ния дан­ных из базы.

Адми­ни­стри­ро­вать такую базу неудоб­но. Нуж­но как мини­мум настро­ить хра­не­ние каж­дой таб­ли­цы в отдель­ном фай­ле. Этим мы далее и зай­мем­ся, а заод­но обно­вим сер­вер базы дан­ных до све­жей вер­сии mariadb и реаль­но очи­стим базу, умень­шив ее размер.

Обновление и настройка сервера mysql

В дан­ном при­ме­ре я исполь­зую сер­вер CentOS 7. Из стан­дарт­ных репо­зи­то­ри­ев уста­нав­ли­ва­ет­ся доста­точ­но ста­рая вер­сия MariaDB 5.5. Для нача­ла обно­вим ее до послед­ней ста­биль­ной на момент напи­са­ния ста­тьи вер­сии 10.2. Перед этим сде­ла­ем пол­ный бэкап базы дан­ных zabbix, пред­ва­ри­тель­но оста­но­вив сервер.

Теперь уда­лим с сер­ве­ра mysql все базы дан­ных, кро­ме системных.

# mysql -uroot -ppassword

Уда­ля­ем ста­рые фай­лы базы zabbix.

Начи­на­ем обнов­лять сер­вер. Добав­ля­ем репо­зи­то­рий MariaDB в систе­му. Для это­го созда­ем файл /etc/yum.repos.d/mariadb.repo сле­ду­ю­ще­го содержания:

Далее пред­ла­гаю свой вари­ант кон­фи­га для mysql сер­ве­ра. Поло­жи­те его в дирек­то­рию /etc/my.cnf.d.

# cat /etc/my.cnf.d/zabbix.cnf

Сра­зу пре­ду­пре­ждаю, что уни­вер­саль­ных настро­ек для mariadb не суще­ству­ет. Я не боль­шой спе­ци­а­лист по тон­кой настрой­ке mysql и деталь­но не вни­кал в опти­ми­за­цию рабо­ты с zabbix. И тем более не тести­ро­вал про­из­во­ди­тель­ность с раз­ны­ми пара­мет­ра­ми. Дан­ный при­мер это набор реко­мен­да­ций, полу­чен­ных из раз­ных источ­ни­ков. Я сам исполь­зую этот кон­фиг и каких-то наре­ка­ний к нему у меня нет, поэто­му делюсь с вами. Воз­мож­но, тут есть что-то, что совер­шен­но не под­хо­дит и надо поме­нять. Если вы уви­ди­те такое, про­шу поде­лить­ся информацией.

Будет вооб­ще здо­ро­во, если кто-то пред­ло­жит свой более опти­маль­ный кон­фиг для zabbix. Хотя я пони­маю, что настрой­ки будут силь­но зави­сеть от пара­мет­ров сер­ве­ра (память и cpu в основ­ном). Их нуж­но под­би­рать в каж­дом кон­крет­ном слу­чае. В ситу­а­ции со стан­дарт­ной уста­нов­кой zabbix, когда про­блем с про­из­во­ди­тель­но­стью нет, мне не хочет­ся этим заниматься.

Запус­ка­ем сер­вер mariadb.

Если сер­вер не стар­ту­ет, а в логе /var/log/messages ошибка:

И сно­ва запус­кай­те mariadb. Про­ве­рить ста­тус запус­ка мож­но командой:

# systemctl status mariadb

Сер­вер запу­стил­ся. Есть пару заме­ча­ний, мы их поз­же испра­вим. Теперь вос­ста­нав­ли­ва­ем базу дан­ных zabbix из выгрузки.

Запус­ка­ем ути­ли­ту mysql_upgrade для гене­ра­ции новой базы performance_schema.

Запус­ка­ем сер­вер zabbix.

Про­ве­ря­ем рабо­ту. По идее, все долж­но быть в поряд­ке. Теперь база дан­ных zabbix хра­нит­ся в дирек­то­рии /var/lib/mysql/zabbix. Она умень­ши­лась в раз­ме­ре, и каж­дая таб­ли­ца хра­нит­ся в отдель­ном файле.

Оцените статью
Хостинги