HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

E nānā mākou i ka hana ʻana o Zabbix me ka waihona TimescaleDB ma ke ʻano he hope. E hōʻike mākou iā ʻoe pehea e hoʻomaka ai mai ka ʻōpala a pehea e neʻe ai mai PostgreSQL. E hāʻawi pū mākou i nā hoʻokolohua hoʻohālikelike o nā hoʻonohonoho ʻelua.

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

HighLoad++ Siberia 2019. Hale Hōʻikeʻike ʻo Tomsk. Iune 24, 16:00. Theses and hōʻikeʻike. E mālama ʻia ka hālāwai HighLoad++ aʻe ma ʻApelila 6 a me 7, 2020 ma St. Petersburg. Nā kikoʻī a me nā tiketi loulou.

Andrey Gushchin (ma hope aku - AG): - He ʻenehana kākoʻo ʻenehana ZABBIX au (i kapa ʻia ʻo "Zabbix"), he mea hoʻomaʻamaʻa. Ua hana au ma ke kākoʻo ʻenehana no nā makahiki ʻoi aku ma mua o 6 a ua loaʻa iaʻu kahi ʻike pololei me ka hana. I kēia lā, e kamaʻilio wau e pili ana i ka hana a TimescaleDB e hāʻawi ai ke hoʻohālikelike ʻia me PostgreSQL 10 maʻamau.

ʻO nā pilikia ʻoi loa o ka huahana: mai ka hōʻiliʻili ʻikepili a hiki i ka hoʻomaʻemaʻe ʻikepili

I ka hoʻomaka ʻana, aia kekahi mau pilikia hana e kū nei i kēlā me kēia ʻōnaehana nānā. ʻO ka luʻu huahana mua ka hōʻiliʻili a me ka hoʻoili ʻana i ka ʻikepili wikiwiki.

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

Pono ka ʻōnaehana nānā maikaʻi i ka wikiwiki, loaʻa i ka manawa kūpono nā ʻikepili āpau, kaʻina hana e like me ka trigger expressions, ʻo ia hoʻi, kaʻina hana ia e like me kekahi mau loina (ʻokoʻa kēia i nā ʻōnaehana like ʻole) a mālama iā ia i loko o kahi waihona i mea e hoʻohana ai i kēia ʻikepili i ka e hiki mai ana.

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

ʻO ka lua o ka hoʻokō ʻana ʻo ka mālama moʻolelo. E kūʻai pinepine i loko o kahi waihona a loaʻa ka wikiwiki a me ka maʻalahi i kēia mau ana i hōʻiliʻili ʻia i kekahi manawa. ʻO ka mea nui, ʻo ia ka maʻalahi o ka loaʻa ʻana o kēia ʻikepili, hoʻohana iā ia i nā hōʻike, nā kiʻi, nā mea hoʻoulu, i kekahi mau waiwai paepae, no nā makaʻala, etc.

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

ʻO ke kolu o ka hoʻokō ʻana ʻo ka hoʻomaʻemaʻe moʻolelo, ʻo ia hoʻi, ke hiki ʻoe i kahi ʻaʻole pono ʻoe e mālama i nā ana kikoʻī i hōʻiliʻili ʻia ma luna o 5 mau makahiki (ʻo nā mahina a ʻelua paha mahina). Ua holoi ʻia kekahi mau node pūnaewele, a i ʻole kekahi mau pūʻali, ʻaʻole pono nā metric no ka mea ua kahiko lākou a ʻaʻole i hōʻiliʻili hou ʻia. Pono e hoʻomaʻemaʻe ʻia kēia mau mea a pau i ʻole e ulu nui kāu waihona. Ma keʻano laulā, ʻo ka hoʻomaʻemaʻe ʻana i ka mōʻaukala he hoʻāʻo koʻikoʻi no ka mālama ʻana - he hopena ikaika loa ia i ka hana.

Pehea e hoʻoponopono ai i nā pilikia cache?

E kamaʻilio kūikawā wau e pili ana iā Zabbix. Ma Zabbix, hoʻopau ʻia nā kelepona mua a me ka lua me ka hoʻohana ʻana i ka caching.

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

ʻOhi ʻikepili a me ka hana ʻana - Hoʻohana mākou i ka RAM e mālama i kēia ʻikepili āpau. E kūkākūkā hou ʻia kēia mau ʻikepili i kēia manawa.

Aia kekahi ma ka ʻaoʻao waihona waihona no nā koho nui - no nā kiʻi a me nā mea ʻē aʻe.

Hoʻopili ma ka ʻaoʻao o ka kikowaena Zabbix ponoʻī: loaʻa iā mākou ConfigurationCache, ValueCache, HistoryCache, TrendsCache. He aha ia?

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

ʻO ConfigurationCache ka hūnā nui kahi e mālama ai mākou i nā metrics, hosts, data items, triggers; ʻO nā mea a pau āu e pono ai e hoʻoponopono i ka preprocessing, e hōʻiliʻili i ka ʻikepili, kahi e hōʻiliʻili ai nā pūʻali, me ka pinepine. Mālama ʻia kēia mau mea a pau ma ConfigurationCache i ʻole e hele i ka waihona a hana i nā nīnau pono ʻole. Ma hope o ka hoʻomaka ʻana o ke kikowaena, hoʻomaikaʻi mākou i kēia cache (hana iā ia) a hoʻonui iā ia i kēlā me kēia manawa (e pili ana i nā hoʻonohonoho hoʻonohonoho).

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

Hoʻokomo ʻia ma Zabbix. ʻOhi ʻikepili

Eia ka nui o ke kii:

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

ʻO nā mea nui i ka papahana kēia mau mea hōʻiliʻili:

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

ʻO kēia nā kaʻina hana hui ponoʻī, nā "pollers" like ʻole i kuleana no nā ʻano hui like ʻole. E hōʻiliʻili lākou i ka ʻikepili ma o ka icmp, ipmi, a me nā protocols like ʻole a hoʻololi i nā mea āpau i ka preprocessing.

PreProcessing HistoryCache

Eia kekahi, inā ua helu mākou i nā mea ʻikepili (ʻike ka poʻe i kamaʻāina iā Zabbix), ʻo ia hoʻi, helu ʻia, aggregation data element, lawe pololei mākou iā lākou mai ValueCache. E haʻi aku au iā ʻoe pehea i hoʻopiha ʻia ma hope. Hoʻohana kēia mau ʻohi a pau i ka ConfigurationCache e loaʻa i kā lākou mau hana a laila e hāʻawi iā lākou i ka preprocessing.

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

Hoʻohana pū ʻo Preprocessing i ka ConfigurationCache e kiʻi i nā ʻanuʻu preprocessing a hana i kēia ʻikepili ma nā ʻano like ʻole. E hoʻomaka ana mai ka mana 4.2, ua hoʻoneʻe mākou iā ia i kahi koho. He mea maʻalahi kēia, no ka mea he hana paʻakikī ka preprocessing iā ia iho. A inā loaʻa iā ʻoe kahi Zabbix nui loa, me ka nui o nā mea ʻikepili a me ke alapine hōʻiliʻili kiʻekiʻe, a laila e maʻalahi kēia i ka hana.

No laila, ma hope o ka hoʻoponopono ʻana i kēia ʻikepili ma kekahi ʻano me ka hoʻohana ʻana i ka preprocessing, mālama mākou iā ia ma HistoryCache i mea e hana hou ai. Hoʻopau kēia i ka hōʻiliʻili ʻikepili. Hele mākou i ke kaʻina hana nui.

Ka hana a ka mea hoʻoponopono mōʻaukala

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

ʻO ke kaʻina hana nui ma Zabbix (no ka mea he hale hoʻolālā monolithic) ʻo ka History syncer. ʻO kēia ke kaʻina hana nui e pili pono ana i ka hana atomika o kēlā me kēia mea ʻikepili, ʻo ia hoʻi, kēlā me kēia waiwai:

  • hiki mai ka waiwai (lawe ia mai HistoryCache);
  • nānā i ka Configuration syncer: inā he mau mea hoʻomaka no ka helu ʻana - helu iā lākou;
    inā loaʻa - hana i nā hanana, hana i ka piʻi ʻana i mea e hana ai i kahi makaʻala, inā pono e like me ka hoʻonohonoho;
  • hoʻopaʻa moʻolelo i nā kumu no ka hoʻoili ʻana ma hope, hoʻohui; inā ʻoe e hōʻuluʻulu i ka hola hope a pēlā aku, hoʻomanaʻo ʻia kēia waiwai e ValueCache i ʻole e hele i ka papa mōʻaukala; No laila, ua hoʻopiha ʻia ka ValueCache me nā ʻikepili kūpono e pono ai e helu i nā mea hoʻoiho, nā mea i helu ʻia, etc.;
  • a laila kākau ʻo History syncer i nā ʻikepili āpau i ka waihona;
  • kākau ka waihona iā lākou i ka disk - ʻo ia kahi e pau ai ke kaʻina hana.

waihona waihona. Ke kāʻei ʻana

Ma ka ʻaoʻao waihona, inā makemake ʻoe e nānā i nā kiʻi a i ʻole kekahi mau hōʻike e pili ana i nā hanana, aia nā ʻano huna. Akā ma kēia hōʻike ʻaʻole wau e kamaʻilio e pili ana iā lākou.

No MySQL aia ʻo Innodb_buffer_pool, a he pūʻulu o nā huna huna ʻē aʻe i hiki ke hoʻonohonoho ʻia.
Akā ʻo kēia nā mea nui:

  • shared_buffers;
  • ka nui_cache_size;
  • puna_kaulike.

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

No nā ʻikepili āpau, ua ʻōlelo wau aia kekahi mau huna e ʻae iā ʻoe e mālama i ka RAM i ka ʻikepili i makemake pinepine ʻia no nā nīnau. Loaʻa iā lākou kā lākou ʻenehana ponoʻī no kēia.

E pili ana i ka hana ʻikepili

No laila, aia kahi hoʻokūkū hoʻokūkū, ʻo ia hoʻi, ʻohi ka server Zabbix i ka ʻikepili a hoʻopaʻa. Ke hoʻomaka hou, heluhelu ia mai ka mōʻaukala e hoʻopiha i ka ValueCache a pēlā aku. Maanei hiki iā ʻoe ke loaʻa nā palapala a me nā hōʻike e hoʻohana ana i ka Zabbix API, i kūkulu ʻia ma kahi kikowaena pūnaewele. Hoʻokomo ʻo Zabbix API i ka waihona a loaʻa i ka ʻikepili kūpono e kiʻi i nā kiʻi, nā hōʻike, a i ʻole kekahi ʻano papa inoa o nā hanana, nā pilikia hou.

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

ʻO Grafana kekahi mea hoʻonā kaulana loa, kahi e hoʻohana ai kā mākou mea hoʻohana. Hiki iā ia ke komo pololei ma o ka Zabbix API a ma o ka waihona. Hoʻokumu pū ia i kahi hoʻokūkū no ka loaʻa ʻana o ka ʻikepili: pono ka hoʻoponopono ʻana i ka ʻikepili i ʻoi aku ka maikaʻi o ka hāʻawi ʻana i nā hopena a me ka hoʻāʻo.

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

Hoʻomaʻemaʻe i ka mōʻaukala. Loaʻa iā Zabbix ke kahu hale

ʻO ke kolu o ke kelepona i hoʻohana ʻia ma Zabbix e hoʻomaʻemaʻe i ka mōʻaukala me ka hoʻohana ʻana iā Housekeeper. Hoʻopili ʻo Housekeeper i nā hoʻonohonoho āpau, ʻo ia hoʻi, hōʻike kā mākou mau mea ʻikepili i ka lōʻihi o ka mālama ʻana (i nā lā), pehea ka lōʻihi o ka mālama ʻana i nā ʻano, a me ka dynamics o nā loli.

ʻAʻole wau i kamaʻilio e pili ana i TrendCache, ka mea a mākou e helu ai ma ka lele: hiki mai ka ʻikepili, hōʻuluʻulu mākou ia no hoʻokahi hola (ʻo ka hapa nui kēia mau helu no ka hola hope), ʻo ka awelika / ka liʻiliʻi a hoʻopaʻa mākou iā ia i hoʻokahi hola i ka papa ʻaina o nā hoʻololi ("Trends") . Hoʻomaka a hoʻopau ʻo "Housekeeper" i ka ʻikepili mai ka waihona me ka hoʻohana ʻana i nā koho maʻamau, ʻaʻole pono mau.

Pehea e maopopo ai he pono ole? Hiki iā ʻoe ke ʻike i kēia kiʻi ma nā kiʻi hana o nā kaʻina hana kūloko.

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

Paʻa mau kāu moʻolelo syncr (kiʻi ʻulaʻula). A ʻo ka pakuhi "ʻulaʻula" e hele ana ma luna. He "Housekeeper" kēia e hoʻomaka a kali i ka waihona e holoi i nā lālani a pau āna i kuhikuhi ai.

E lawe kāua i kekahi mea ID: pono ʻoe e holoi i ka 5 tausani hope loa; ʻoiaʻiʻo, ma nā kuhikuhi. Akā ʻo ka mea maʻamau, ʻoi aku ka nui o ka waihona - heluhelu mau ka waihona mai ka disk a hoʻokomo i loko o ka huna huna, a he hana pipiʻi loa kēia no ka waihona. Ma muli o kona nui, hiki i kēia ke alakaʻi i kekahi mau pilikia hana.

Hiki iā ʻoe ke hoʻopau i ka Housekeeper ma kahi ala maʻalahi - loaʻa iā mākou kahi kikowaena pūnaewele maʻamau. Nā hoʻonohonoho ma ka Administration general (nā hoʻonohonoho no "Housekeeper") hoʻopau mākou i ka mālama hale kūloko no ka mōʻaukala kūloko a me nā ʻano. No laila, ʻaʻole mālama ʻo Housekeeper i kēia:

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

He aha kāu e hana ai ma hope? Ua hoʻopau ʻoe, ua pae i kāu mau pakuhi... He aha nā pilikia hou aʻe e hiki mai ana ma kēia hihia? He aha ke kōkua?

Māhele (ʻāpana)

ʻO ka maʻamau, hoʻonohonoho ʻia kēia ma kahi ʻano ʻokoʻa ma kēlā me kēia waihona pili pili aʻu i helu ai. Loaʻa iā MySQL kāna ʻenehana ponoʻī. Akā ma ke ʻano holoʻokoʻa like loa lākou i ka wā e hiki mai ana i PostgreSQL 10 a me MySQL. ʻOiaʻiʻo, nui nā ʻokoʻa kūloko i ke ʻano o ka hoʻokō ʻana a me ke ʻano o ka hopena o ka hana. Akā ma ka laulā, ʻo ka hana ʻana i kahi ʻāpana hou e alakaʻi pinepine ai i kekahi mau pilikia.

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

Ma muli o kāu hoʻonohonoho (pehea ka nui o ka ʻikepili āu e hana ai i ka lā hoʻokahi), hoʻonohonoho lākou i ka liʻiliʻi loa - ʻo ia ka 1 lā / pūʻulu, a no nā "trends", nā dinamika o nā loli - 1 mahina / pūʻulu hou. Hiki ke loli kēia inā he hoʻonohonoho nui loa kāu.

E ʻōlelo koke mākou e pili ana i ka nui o ka hoʻonohonoho: a hiki i 5 tausani mau waiwai hou i kēlā me kēia kekona (i kapa ʻia ʻo nvps) - e manaʻo ʻia kēia he "hoʻonohonoho" liʻiliʻi. Awelika - mai 5 a 25 tausani mau waiwai i kekona. ʻO nā mea a pau ma luna nei he mea nui a nui loa e pono ai ka hoʻonohonoho pono ʻana o ka waihona.

Ma nā hoʻonohonoho nui loa, ʻaʻole kūpono ka lā 1. Ua ʻike wau i nā ʻāpana ma MySQL o 40 gigabytes i kēlā me kēia lā (a ʻoi aku paha). He nui loa kēia o ka ʻikepili, hiki ke alakaʻi i kekahi mau pilikia. Pono e hoemi.

No ke aha ʻoe e pono ai i ka ʻāpana?

ʻO ka mea i hāʻawi ʻia e Partitioning, manaʻo wau ua ʻike nā mea a pau, ʻo ia ka papa ʻaina. ʻO ka manawa pinepine he mau faila kaʻawale kēia ma ka disk a me nā noi span. Koho ʻo ia i hoʻokahi ʻāpana ʻoi aku ka maikaʻi inā he ʻāpana ia o ka ʻāpana maʻamau.

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

No Zabbix, ʻo ia hoʻi, hoʻohana ʻia ia e ka laulā, ma ka laulā, ʻo ia hoʻi, hoʻohana mākou i kahi timestamp (kahi helu maʻamau, manawa mai ka hoʻomaka ʻana o ka wā). Hoʻomaopopo ʻoe i ka hoʻomaka ʻana o ka lā/hopena o ka lā, a ʻo ia ka ʻāpana. No laila, inā e noi ana ʻoe i ka ʻikepili i ʻelua mau lā, ʻoi aku ka wikiwiki o nā mea a pau mai ka waihona, no ka mea pono ʻoe e hoʻouka i hoʻokahi faila i loko o ka cache a hoʻihoʻi iā ia (ma mua o ka papaʻaina nui).

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

Nui nō hoʻi nā ʻikepili i hoʻokomo i ka hoʻokomo (hoʻokomo ʻia i loko o ka pākaukau keiki hoʻokahi). Ke ʻōlelo nei au i ka abstract no kēia manawa, akā hiki nō hoʻi kēia. Kōkua pinepine ka hoʻokaʻawale ʻana.

Elasticsearch no NoSQL

I kēia manawa, ma 3.4, ua hoʻokō mākou i kahi hopena NoSQL. Hoʻohui i ka hiki ke kākau ma Elasticsearch. Hiki iā ʻoe ke kākau i kekahi mau ʻano: koho ʻoe - e kākau i nā helu a i ʻole kekahi mau hōʻailona; loaʻa iā mākou nā kikokikona kaula, hiki iā ʻoe ke kākau i nā lāʻau i Elasticsearch... No laila, e komo pū ka ʻaoʻao pūnaewele iā Elasticsearch. Hana maikaʻi kēia i kekahi mau hihia, akā i kēia manawa hiki ke hoʻohana.

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

TimescaleDB. Nā papa kuhikuhi

No 4.4.2 ua hoʻolohe mākou i kekahi mea e like me TimescaleDB. He aha ia? He hoʻonui kēia no PostgreSQL, ʻo ia hoʻi, loaʻa iā ia kahi kikowaena PostgreSQL maoli. Hoʻohui, hiki i kēia hoʻonui iā ʻoe ke hana ʻoi aku ka maikaʻi me ka ʻikepili timeseries a loaʻa i ka partitioning maʻalahi. He aha kona ʻano:

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

He hypertable kēia - aia kekahi manaʻo ma Timescale. He hypertable kēia āu i hana ai, a loaʻa nā ʻāpana. ʻO nā ʻāpana he mau ʻāpana, he papaʻaina keiki kēia, inā ʻaʻole au i kuhihewa. He pono maoli.

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

TimescaleDB a me PostgreSQL

E like me ka hōʻoiaʻiʻo ʻana o nā mea hana TimescaleDB, hoʻohana lākou i kahi algorithm ʻoi aku ka pololei no ka hoʻoponopono ʻana i nā nīnau, ʻo ia hoʻi nā mea hoʻokomo, e hiki ai iā lākou ke loaʻa i ka hana mau me ka nui o ka hoʻokomo ʻana i ka dataset. ʻO ia hoʻi, ma hope o 200 miliona mau lālani o Postgres, hoʻomaka ka mea maʻamau i ka sag nui a lilo i ka hana maoli i ka ʻole, ʻoiai ʻo Timescale e ʻae iā ʻoe e hoʻokomo i nā mea hoʻokomo e like me ka hiki me ka nui o ka ʻikepili.

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

Pehea e hoʻokomo ai iā TimescaleDB? He maʻalahi!

Aia i loko o ka palapala, ua wehewehe ʻia - hiki iā ʻoe ke hoʻouka iā ia mai nā pūʻolo no kekahi ... Aia ma luna o nā pūʻulu Postgres mana. Hiki ke hōʻuluʻulu lima. Ua pono ia'u e houluulu no ka waihona.

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

Ma Zabbix, hoʻoikaika mākou i ka Extention. Manaʻo wau ʻo ka poʻe i hoʻohana i ka Extention ma Postgres ... Hoʻōla wale ʻoe i ka Extention, hana ia no ka waihona Zabbix āu e hoʻohana nei.

A ʻo ka hana hope loa ...

TimescaleDB. Ka neʻe ʻana o nā papa mōʻaukala

Pono ʻoe e hana i kahi hypertable. Aia kahi hana kūikawā no kēia - E hana i ka hypertable. I loko o ia mea, ʻo ka pākaukau mua ka papa e pono ai i kēia waihona (no ka mea e pono ai ʻoe e hana i kahi hypertable).

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

ʻO ke kahua kahi e hana ai, a me chunk_time_interval (ʻo ia ka wā o nā ʻāpana (pono e hoʻohana ʻia) 86 i hoʻokahi lā.

ʻĀpana Migrate_data: Inā ʻoe e hoʻokomo i ka ʻoiaʻiʻo, a laila e neʻe kēia i nā ʻikepili āpau i kēia manawa i nā ʻāpana i hana mua ʻia.

Ua hoʻohana au i ka migrate_data iaʻu iho - pono ia i ka manawa kūpono, ma muli o ka nui o kāu waihona. Ua loaʻa iaʻu ma kahi terabyte - ʻoi aku ma mua o hoʻokahi hola e hana ai. I kekahi mau hihia, i ka wā o ka hoʻāʻo ʻana, ua holoi au i ka ʻikepili mōʻaukala no ka kikokikona (history_text) a me ke kaula (history_str) i ʻole e hoʻoili iā lākou - ʻaʻole hoihoi loa iaʻu.

A hana mākou i ka hōʻano hope loa i kā mākou db_extention: hoʻokomo mākou i ka timescaledb i mea e hoʻomaopopo ai ka waihona a me kā mākou Zabbix aia kahi db_extention. Hoʻolaʻa ʻo ia a hoʻohana i ka syntax kūpono a me nā nīnau i ka waihona, me ka hoʻohana ʻana i kēlā mau "ʻano" e pono ai no TimescaleDB.

Hoʻonohonoho kikowaena

Ua hoʻohana au i ʻelua mau kikowaena. ʻO ka mea kikowaena mua he mīkini liʻiliʻi liʻiliʻi, 20 kaʻina hana, 16 gigabytes o RAM. Ua hoʻonohonoho au i ka Postgres 10.8 ma luna:

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

ʻO ka ʻōnaehana hana ʻo Debian, ʻo ka ʻōnaehana faila he xfs. Hana wau i nā hoʻonohonoho liʻiliʻi e hoʻohana i kēia waihona kikoʻī, hoʻemi i ka mea a Zabbix e hoʻohana ai. Ma ka mīkini hoʻokahi aia kahi kikowaena Zabbix, PostgreSQL a me nā mea lawe ukana.

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

Ua hoʻohana au i 50 mau mea hana e hoʻohana ana i LoadableModule e hoʻopuka koke i nā hopena like ʻole. ʻO lākou ka mea nāna i hoʻokumu i nā kaula, nā helu, a pēlā aku. Ua hoʻopiha au i ka waihona me ka nui o ka ʻikepili. I ka hoʻomaka ʻana, loaʻa i ka hoʻonohonoho ʻana he 5 tausani mau mea ʻikepili no kēlā me kēia host, a ma kahi o kēlā me kēia mea ʻikepili i loaʻa kahi hoʻoiho - i mea e lilo ai kēia i hoʻonohonoho maoli. I kekahi manawa pono ʻoe i ʻoi aku ma mua o hoʻokahi hoʻoiho e hoʻohana ai.

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

Ua hoʻoponopono au i ka wā hoʻohou a me ka ukana ponoʻī ma o ka hoʻohana ʻana i nā mea hana 50 (hoʻohui hou aku), akā me ka hoʻohana ʻana i nā mea ʻikepili ikaika a hoʻemi i ka wā hoʻonui i 4 kekona.

Hoao hana. PostgreSQL: 36 tausani NVPs

ʻO ka hoʻomaka mua, ʻo ka hoʻonohonoho mua i loaʻa iaʻu ma ka PostreSQL 10 maʻemaʻe ma kēia hāmeʻa (35 tausani mau waiwai i kekona). Ma keʻano laulā, e like me kāu e ʻike ai ma ka pale, ʻo ka hoʻokomo ʻana i ka ʻikepili e lawe i nā hapa o ke kekona - maikaʻi a wikiwiki nā mea āpau, SSD drives (200 gigabytes). ʻO ka mea wale nō ʻo 20 GB e hoʻopiha wikiwiki.

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

Nui nā kiʻi like ʻole i ka wā e hiki mai ana. ʻO kēia kahi dashboard hana maʻamau o ka server Zabbix.

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

ʻO ka pakuhi mua ka helu o nā waiwai i kekona (uliuli, hema hema), 35 tausani waiwai i kēia hihia. ʻO kēia (luna waena) ka hoʻouka ʻana i nā kaʻina hana, a ʻo kēia (luna ʻākau) ka hoʻouka ʻana i nā kaʻina hana i loko: nā moʻolelo syncers a me ka hale mālama hale, kahi e holo nei (waena lalo) no kekahi manawa lōʻihi.

Hōʻike kēia pakuhi (waena waena) i ka hoʻohana ʻana i ka ValueCache - ʻehia ka nui o ka ValueCache i paʻi no nā mea hoʻomaka (he mau kaukani waiwai no ke kekona). ʻO kekahi pakuhi koʻikoʻi ʻo ka hā (hema hema), e hōʻike ana i ka hoʻohana ʻana iā HistoryCache, aʻu i kamaʻilio ai, ʻo ia ka pale ma mua o ka hoʻokomo ʻana i ka waihona.

Hoao hana. PostgreSQL: 50 tausani NVPs

A laila, hoʻonui au i ka ukana i 50 tausani mau waiwai i kēlā me kēia kekona ma ka lako like. Ke hoʻouka ʻia e Housekeeper, 10 tausani mau waiwai i hoʻopaʻa ʻia i 2-3 kekona me ka helu ʻana. He aha, ʻoiaʻiʻo, i hōʻike ʻia ma ke kiʻi kiʻi aʻe:

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

Ke hoʻomaka nei ka "Housekeeper" e hoʻopilikia i ka hana, akā ma ka laulā, ʻo ka ukana ma luna o ka mōʻaukala-sinker trappers aia nō i ka pae o 60% (ʻekolu pakuhi, luna ʻākau). Hoʻomaka ʻo HistoryCache e hoʻopiha i ka wā e holo ana ʻo Housekeeper (hema hema). Ma kahi o ka hapalua gigabyte, 20% piha.

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

Hoao hana. PostgreSQL: 80 tausani NVPs

A laila hoʻonui au i 80 tausani mau waiwai i kekona:

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

Ma kahi o 400 tausani mau mea ʻikepili, 280 tausani trigger. ʻO ka mea hoʻokomo, e like me kāu e ʻike ai, ma ke ʻano o ka ukana o nā mea kanu mōʻaukala (he 30 o lākou) ua kiʻekiʻe loa. A laila ua hoʻonui au i nā ʻāpana like ʻole: nā mea hoʻoheheʻe mōʻaukala, cache... Ma kēia hāmeʻa, hoʻomaka ka hoʻouka ʻana o nā mea hoʻoiho mōʻaukala i ka nui loa, kokoke "ma ka papa" - no laila, hele ʻo HistoryCache i kahi ukana kiʻekiʻe loa:

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

I kēia manawa a pau ua nānā au i nā ʻōnaehana ʻōnaehana āpau (pehea e hoʻohana ʻia ai ka processor, RAM) a ʻike i ka nui o ka hoʻohana ʻana i ka disk - ua loaʻa iaʻu ka mana kiʻekiʻe o kēia disk ma kēia hāmeʻa, ma kēia mīkini virtual. Ua hoʻomaka ʻo "Postgres" e hoʻolei i ka ʻikepili me ka ikaika, a ʻaʻohe manawa o ka disk e kākau, heluhelu ...

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

Ua lawe au i kahi kikowaena ʻē aʻe i loaʻa i nā kaʻina hana 48 a me 128 gigabytes o RAM:

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

Ua "hoʻokani" au iā ia - hoʻokomo i ka History Syncer (60 mau ʻāpana) a loaʻa i ka hana ʻae ʻia. ʻO kaʻoiaʻiʻo,ʻaʻole mākou "ma ka papa," akāʻo kēia paha ka palena o ka huahana, kahi e pono ai ke hana i kekahi mea e pili ana.

Hoao hana. TimescaleDB: 80 tausani NVP

ʻO kaʻu hana nui ka hoʻohana ʻana iā TimescaleDB. Hōʻike kēlā me kēia pakuhi i kahi luʻu:

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

ʻO kēia mau hemahema ka neʻe ʻana o ka ʻikepili. Ma hope o kēlā, i ka server Zabbix, ua hoʻololi nui ka hoʻouka ʻana o ka ʻikepili o ka mōʻaukala, e like me kāu e ʻike ai. Hāʻawi ia iā ʻoe e hoʻokomo i ka ʻikepili kokoke i 3 mau manawa wikiwiki a hoʻohana i ka HistoryCache liʻiliʻi - no laila, e loaʻa iā ʻoe ka ʻikepili i ka manawa. Eia hou, 80 tausani mau waiwai i kēlā me kēia kekona he kiʻekiʻe kiʻekiʻe (ʻoiaʻiʻo, ʻaʻole no Yandex). ʻO ka holoʻokoʻa he hoʻonohonoho nui kēia, me hoʻokahi kikowaena.

ʻO ka ho'āʻo hana PostgreSQL: 120 tausani NVPs

A laila, ua hoʻonui au i ka waiwai o ka helu o nā mea ʻikepili i ka hapalua miliona a loaʻa iaʻu kahi waiwai helu o 125 tausani i kēlā me kēia kekona:

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

A loaʻa iaʻu kēia mau pakuhi:

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

Ma ke kumu, he hoʻonohonoho hana kēia, hiki ke hana no ka manawa lōʻihi. Akā, no ka mea he 1,5 terabyte disk wale nō kaʻu, ua hoʻohana au ia mea i nā lā ʻelua. ʻO ka mea nui loa i ka manawa like ua hana ʻia nā ʻāpana hou ma TimescaleDB, a ʻaʻole i ʻike ʻia kēia no ka hana, ʻaʻole hiki ke ʻōlelo ʻia e pili ana i MySQL.

ʻO ka maʻamau, hana ʻia nā ʻāpana i ka pō, no ka mea maʻamau kēia e poloka i ka hoʻokomo ʻana a hana pū me nā papa a hiki ke alakaʻi i ka hōʻino o ka lawelawe. I kēia hihia ʻaʻole kēia ka hihia! ʻO ka hana nui ka hoʻāʻo ʻana i nā mana o TimescaleDB. ʻO ka hopena ka helu penei: 120 tausani mau waiwai i kekona.

Aia kekahi mau laʻana ma ke kaiāulu:

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

Ua hoʻohuli ke kanaka i ka TimescaleDB a ua hāʻule ka ukana ma ka hoʻohana ʻana i ka io.weight ma ka papa hana; a ua emi pū ka hoʻohana ʻana i nā mea kaʻina hana kūloko ma muli o ke komo ʻana o TimescaleDB. Eia kekahi, he mau pancake disks maʻamau kēia, ʻo ia hoʻi, he mīkini virtual maʻamau ma nā disks maʻamau (ʻaʻole SSD)!

No kekahi mau hoʻonohonoho liʻiliʻi i kaupalena ʻia e ka hana disk, ʻo TimescaleDB, i koʻu manaʻo, he hopena maikaʻi loa. E ʻae iā ʻoe e hoʻomau i ka hana ma mua o ka neʻe ʻana i ka ʻenehana wikiwiki no ka waihona.

Ke kono nei au iā ʻoukou a pau i kā mākou mau hanana: Conference in Moscow, Summit in Riga. E hoʻohana i kā mākou kahawai - Telegram, forum, IRC. Inā he mau nīnau kāu, e hele mai i kā mākou pākaukau, hiki iā mākou ke kamaʻilio e pili ana i nā mea āpau.

Nīnau a ka lehulehu

Nīnau mai ka lehulehu (ma hope aku - A): - Inā maʻalahi ka hoʻonohonoho ʻana o TimescaleDB, a hāʻawi ia i ka hoʻoikaika ʻana i ka hana, a laila pono paha e hoʻohana ʻia kēia ma ke ʻano he hana maikaʻi loa no ka hoʻonohonoho ʻana iā Zabbix me Postgres? A aia kekahi mau pitfalls a me nā hemahema o kēia hoʻonā, a ma hope paha, inā ua hoʻoholo wau e hana iā Zabbix noʻu iho, hiki iaʻu ke lawe maʻalahi iā Postgres, e hoʻokomo i ka Timescale ma laila koke, hoʻohana a ʻaʻole noʻonoʻo i kekahi pilikia?

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

AG: - ʻAe, e ʻōlelo wau he ʻōlelo maikaʻi kēia: e hoʻohana koke iā Postgres me ka hoʻonui ʻo TimescaleDB. E like me kaʻu i ʻōlelo ai, he nui nā loiloi maikaʻi, ʻoiai ʻo kēia "hiʻohiʻona" he hoʻokolohua. Akā, hōʻike maoli nā hoʻokolohua he hopena maikaʻi loa kēia (me TimescaleDB) a manaʻo wau e ulu aʻe! Ke nānā nei mākou i ke ʻano o ka ulu ʻana o kēia hoʻonui a e hana i nā loli e like me ka mea e pono ai.

ʻOiai i ka wā o ka hoʻomohala ʻana, ua hilinaʻi mākou i kekahi o kā lākou "hiʻohiʻona" kaulana: hiki ke hana me nā ʻāpana ʻokoʻa iki. Akā, ua ʻoki lākou i ka hoʻokuʻu ʻana aʻe, a pono mākou e hoʻōki i ka hilinaʻi ʻana i kēia code. Manaʻo wau e hoʻohana i kēia hoʻonā i nā hoʻonohonoho he nui. Inā hoʻohana ʻoe i MySQL... No nā hoʻonohonoho maʻamau, hana maikaʻi kekahi hopena.

A: - Ma nā kiʻi hope loa mai ke kaiāulu, aia kahi pakuhi me "Housekeeper":

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

Ua hoʻomau ʻo ia i kāna hana. He aha ka hana a Housekeeper me TimescaleDB?

AG: - I kēia manawa ʻaʻole hiki iaʻu ke ʻōlelo maopopo - e nānā wau i ke code a haʻi iā ʻoe i nā kikoʻī hou aku. Hoʻohana ia i nā nīnau TimescaleDB ʻaʻole e holoi i nā ʻāpana, akā e hoʻohui pū iā lākou. ʻAʻole wau mākaukau e pane i kēia nīnau loea. E ʻike hou aku mākou ma ke kū i kēia lā a i ʻole ʻapōpō.

A: - He nīnau like kaʻu - e pili ana i ka hana o ka hana holoi ma Timescale.
A (pane mai ka lehulehu): - Ke hoʻopau ʻoe i ka ʻikepili mai kahi papaʻaina, inā ʻoe e hana ma o ka holoi ʻana, a laila pono ʻoe e hele i ka papa - holoi, hoʻomaʻemaʻe, māka i nā mea āpau no ka wā e hiki mai ana. I ka Timescale, no ka mea he mau ʻāpana kāu, hiki iā ʻoe ke hāʻule. ʻO ka ʻōlelo koʻikoʻi, haʻi wale ʻoe i ka faila i loko o ka ʻikepili nui: "Delete!"

Hoʻomaopopo wale ʻo Timescale ʻaʻole i loaʻa kēlā ʻāpana. A no ka mea ua hoʻohui ʻia i loko o ka mea hoʻolālā nīnau, hoʻohana ʻo ia i nā makau e hopu i kāu mau kūlana ma ke koho a i ʻole nā ​​​​hana ʻē aʻe a maopopo koke ʻaʻole e noho hou ana kēia puʻupuʻu - "ʻAʻole au e hele hou i laila!" (ʻaʻole loaʻa ka ʻikepili). ʻo ia wale nō! ʻO ia hoʻi, hoʻololi ʻia kahi papa ʻaina e ka holoi ʻana i ka faila binary, no laila ua wikiwiki.

A: - Ua hoʻopā mua mākou i ke kumuhana o ka non-SQL. I koʻu hoʻomaopopo ʻana, ʻaʻole pono ʻo Zabbix e hoʻololi i ka ʻikepili, a ʻo kēia mau mea āpau e like me kahi log. Hiki paha ke hoʻohana i nā ʻikepili kūikawā ʻaʻole hiki ke hoʻololi i kā lākou ʻikepili, akā i ka manawa like e mālama, hōʻiliʻili, a puʻunaue i ka wikiwiki loa - Clickhouse, no ka laʻana, kahi mea Kafka-like?.. ʻO Kafka kekahi log! Hiki paha ke hoʻohui iā lākou?

AG: - Hiki ke hoʻokuʻu ʻia. Loaʻa iā mākou kekahi "ʻano" mai ka mana 3.4: hiki iā ʻoe ke kākau i nā faila mōʻaukala, nā hanana, nā mea ʻē aʻe a pau i nā faila; a laila e hoʻouna aku i kekahi waihona ʻē aʻe me ka hoʻohana ʻana i kekahi mea lima. ʻOiaʻiʻo, nui ka poʻe e hana hou a kākau pololei i ka waihona. Ma ka lele, kākau nā moʻolelo i kēia mau mea a pau i nā faila, hoʻololi i kēia mau faila, a pēlā aku, a hiki iā ʻoe ke hoʻololi i kēia i Clickhouse. ʻAʻole hiki iaʻu ke ʻōlelo e pili ana i nā hoʻolālā, akā e hoʻomau ʻia ke kākoʻo hou aku no nā hoʻonā NoSQL (e like me Clickhouse).

A: - Ma keʻano laulā, hiki iāʻoe ke hoʻopau loa i nā postgres?

AG: - ʻOiaʻiʻo, ʻo ka mea paʻakikī loa ma Zabbix nā papa mōʻaukala, ka mea e hana ai i nā pilikia nui a me nā hanana. I kēia hihia, inā ʻaʻole ʻoe e mālama i nā hanana no ka manawa lōʻihi a mālama i ka mōʻaukala me nā hiʻohiʻona i kekahi mālama wikiwiki ʻē aʻe, a laila ma ka laulā, manaʻo wau, ʻaʻohe pilikia.

A: - Hiki iā ʻoe ke hoʻohālikelike i ka wikiwiki o nā mea āpau inā hoʻololi ʻoe i Clickhouse, no ka laʻana?

AG: - ʻAʻole au i hoʻāʻo. Manaʻo wau e hiki ke hoʻokō maʻalahi ʻia nā helu like, no ka mea aia ʻo Clickhouse i kāna kikowaena ponoʻī, akā ʻaʻole hiki iaʻu ke ʻōlelo maopopo. ʻOi aku ka maikaʻi e hoʻāʻo. Aia nā mea a pau i ka hoʻonohonoho: ʻehia ka nui o kāu mau pūʻali, a pēlā aku. ʻO ka hoʻokomo ʻana kekahi mea, akā pono ʻoe e kiʻi i kēia ʻikepili - Grafana a i ʻole kekahi mea ʻē aʻe.

A: - No laila ke kamaʻilio nei mākou e pili ana i kahi hakakā like, ʻaʻole e pili ana i ka pōmaikaʻi nui o kēia mau ʻikepili wikiwiki?

AG: - Manaʻo wau i ka wā e hoʻohui ai mākou, e nui aʻe nā hoʻokolohua pololei.

A: – Ma hea i hele ai ka RRD kahiko? He aha kāu i hoʻololi ai i nā ʻikepili SQL? I ka wā mua, ua hōʻiliʻili ʻia nā ana a pau ma RRD.

AG: - Loaʻa iā Zabbix RRD, aia paha i kahi mana kahiko loa. Loaʻa mau nā waihona SQL - kahi ala maʻamau. ʻO ke ala maʻamau ʻo MySQL, PostgreSQL (ua lōʻihi loa lākou). ʻAʻole loa mākou i hoʻohana i kahi kikowaena maʻamau no nā ʻikepili SQL a me RRD.

HighLoad ++, Andrey Gushchin (Zabbix): hana kiʻekiʻe a me ka hoʻokaʻawale ʻana

Kekahi mau hoʻolaha 🙂

Mahalo no kou noho pū ʻana me mākou. Makemake ʻoe i kā mākou ʻatikala? Makemake ʻoe e ʻike i nā mea hoihoi hou aʻe? E kākoʻo iā mākou ma ke kau ʻana i kahi kauoha a i ʻole ka ʻōlelo ʻana i nā hoaaloha, cloud VPS no nā mea hoʻomohala mai $4.99, he analogue kū hoʻokahi o nā kikowaena hoʻokomo-level, i hana ʻia e mākou no ʻoe: ʻO ka ʻoiaʻiʻo holoʻokoʻa e pili ana iā VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps mai $ 19 a pehea e kaʻana like ai i kahi kikowaena? (loaʻa me RAID1 a me RAID10, a hiki i 24 cores a hiki i 40GB DDR4).

ʻO Dell R730xd 2 mau manawa maʻalahi ma Equinix Tier IV kikowaena data ma Amsterdam? Eia wale nō 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV mai $199 ma Netherlands! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - mai $99! Heluhelu e pili ana Pehea e kūkulu ai i ka ʻoihana ʻoihana. papa me ka hoʻohana 'ana o Dell R730xd E5-2650 v4 kikowaena waiwai 9000 euros no ka peni?

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka