Metrics ගබඩාව: අපි Graphite+Whisper සිට Graphite+ClickHouse වෙත මාරු වූ ආකාරය

ආයුබෝවන් සියල්ලටම! ඔහුගේ තුළ අවසාන ලිපියයි ක්ෂුද්‍ර සේවා ගෘහ නිර්මාණ ශිල්පය සඳහා මොඩියුලර් අධීක්ෂණ පද්ධතියක් සංවිධානය කිරීම ගැන මම ලිව්වෙමි. කිසිවක් නිශ්චල නොවේ, අපගේ ව්‍යාපෘතිය නිරන්තරයෙන් වර්ධනය වන අතර ගබඩා කරන ලද ප්‍රමිතික සංඛ්‍යාවද එසේමය. අපි ඉහළ බර තත්ව යටතේ Graphite+Whisper සිට Graphite+ClickHouse වෙත සංක්‍රමණය සංවිධානය කළ ආකාරය, එයින් අපේක්ෂාවන් සහ කප්පාදුව යටතේ සංක්‍රමණය වීමේ ප්‍රතිඵල ගැන කියවන්න.

Metrics ගබඩාව: අපි Graphite+Whisper සිට Graphite+ClickHouse වෙත මාරු වූ ආකාරය

Graphite+Whisper හි ප්‍රමිතික ගබඩා කිරීමේ සිට Graphite+ClickHouse දක්වා සංක්‍රමණය අපි සංවිධානය කළේ කෙසේදැයි මම ඔබට පැවසීමට පෙර, එවැනි තීරණයක් ගැනීමට හේතු සහ දිගු කලක් අප සමඟ ජීවත් වූ විස්පර් හි අවාසි පිළිබඳව තොරතුරු ලබා දීමට මම කැමැත්තෙමි.

Graphite+Whisper ගැටළු

1. තැටි උප පද්ධතිය මත අධික බරක්

සංක්‍රමණය වන විට ආසන්න වශයෙන් මිනිත්තුවකට මෙට්‍රික් මිලියන 1.5ක් අප වෙත පැමිණෙමින් තිබුණි. එවැනි ප්රවාහයක් සමඟ, සේවාදායකයන් මත තැටි භාවිතය ~ 30% කි. පොදුවේ ගත් කල, මෙය බෙහෙවින් පිළිගත හැකි විය - සෑම දෙයක්ම ස්ථාවර ලෙස ක්‍රියාත්මක විය, ඉක්මනින් ලියා ඇත, ඉක්මනින් කියවා ඇත ... එක් සංවර්ධන කණ්ඩායමක් නව විශේෂාංගයක් ඉදිරිපත් කර විනාඩියකට මෙට්‍රික් මිලියන 10 ක් අපට යැවීමට පටන් ගන්නා තෙක්. තැටි උප පද්ධතිය තද වූ විට, අපි 100% භාවිතා කළෙමු. ගැටලුව ඉක්මනින් විසඳා ඇත, නමුත් ඉතිරිව පවතී.

2. අනුකරණය සහ අනුකූලතාව නොමැතිකම

බොහෝ දුරට ඉඩ ඇත්තේ, Graphite+Whisper භාවිතා කරන/භාවිතා කරන සෑම කෙනෙකුම මෙන්, දෝෂ ඉවසීම ඇති කිරීම සඳහා අපි එකම ප්‍රමිතික ප්‍රවාහයම Graphite servers කිහිපයකට වත් කළෙමු. තවද මේ සම්බන්ධයෙන් විශේෂ ගැටළු කිසිවක් නොතිබුණි - කිසියම් හේතුවක් නිසා එක් සේවාදායකයක් බිඳ වැටෙන මොහොත දක්වා. සමහර විට අපි වැටුණු සේවාදායකයක් ඉක්මනින් ලබා ගැනීමට සමත් වූ අතර, කාබන්-සී-රිලේ එහි හැඹිලියෙන් ප්‍රමිතික එයට පූරණය කිරීමට සමත් විය, නමුත් සමහර විට එසේ නොවේ. ඊට පස්සේ අපි rsync වලින් පුරවන ලද මෙට්රික් වල සිදුරක් තිබුණා. ක්රියා පටිපාටිය තරමක් දිගු විය. එකම ගැලවීම නම් මෙය සිදු වූයේ ඉතා කලාතුරකිනි. අපි වරින් වර අහඹු ප්‍රමිතික කට්ටලයක් ගෙන ඒවා පොකුරේ අසල්වැසි නෝඩ් වල එකම වර්ගයේ අනෙක් ඒවා සමඟ සංසන්දනය කළෙමු. අවස්ථා වලින් 5% ක් පමණ, අගයන් කිහිපයක් වෙනස් වූ අතර, එය අප එතරම් සතුටට පත් නොවීය.

3. විශාල පා සටහන්

අපි ග්‍රැෆයිට් හි යටිතල පහසුකම් පමණක් නොව, ව්‍යාපාරික ප්‍රමිතික (සහ දැන් කුබර්නෙටස් වෙතින් ද ප්‍රමිතික) ලියන බැවින්, මෙට්‍රික් වල අගයන් කිහිපයක් පමණක් අඩංගු වන තත්වයක් අපට බොහෝ විට ලැබේ, සහ .wsp ගොනුව නිර්මාණය කර ඇත්තේ සියලු රඳවා තබා ගැනීම සැලකිල්ලට ගනිමින් ය. කාලසීමාව, සහ කලින් වෙන් කළ ඉඩ ප්‍රමාණයක් ගනී, එය අපට ~2MB විය. කාලයත් සමඟ සමාන ලිපිගොනු විශාල ප්‍රමාණයක් දිස්වන අතර, ඒවා පිළිබඳ වාර්තා ගොඩනඟන විට, හිස් ලකුණු කියවීමට බොහෝ කාලයක් හා සම්පත් අවශ්‍ය වීම නිසා ගැටලුව තවත් උග්‍ර වේ.

ඉහත විස්තර කර ඇති ගැටළු විවිධ ක්‍රම භාවිතා කිරීම සහ විවිධ ඵලදායිතාවයන් සමඟ කටයුතු කළ හැකි බව මම වහාම සටහන් කිරීමට කැමැත්තෙමි, නමුත් ඔබට වැඩි දත්ත ලැබීමට පටන් ගන්නා තරමට ඒවා නරක අතට හැරේ.

ඉහත සියල්ල තිබීම (පෙර සැලකිල්ලට ගනිමින් ලිපි), මෙන්ම ලැබුණු ප්‍රමිතික සංඛ්‍යාවේ නිරන්තර වැඩි වීමක්, සියලු ප්‍රමිතික තත්පර 30 ක ගබඩා පරතරයකට මාරු කිරීමට ඇති ආශාව. (අවශ්‍ය නම් තත්පර 10 දක්වා), අපි විස්පර් සඳහා හොඳ විකල්පයක් ලෙස Graphite+ClickHouse උත්සාහ කිරීමට තීරණය කළෙමු.

Graphite+ClickHouse. අපේක්ෂාවන්

යාන්ඩෙක්ස් හි පිරිමි ළමයින්ගේ හමුවීම් කිහිපයකටම ගොස් කියවීමෙන් පසු Habré පිළිබඳ ලිපි කිහිපයක්, ප්‍රලේඛනය හරහා ගොස්, ග්‍රැෆයිට් යටතේ ClickHouse බන්ධනය කිරීම සඳහා හොඳ සංරචක සොයා ගැනීමෙන්, අපි පියවර ගැනීමට තීරණය කළෙමු!

මම පහත සඳහන් දේ ලැබීමට කැමතියි:

  • තැටි උප පද්ධති භාවිතය 30% සිට 5% දක්වා අඩු කිරීම;
  • 1TB සිට 100GB දක්වා ඇති ඉඩ ප්‍රමාණය අඩු කරන්න;
  • විනාඩියකට මෙට්‍රික් මිලියන 100ක් සේවාදායකයට ලබා ගැනීමට හැකි වීම;
  • කොටුවෙන් පිටත දත්ත අනුකරණය සහ වැරදි ඉවසීම;
  • වසරක් මෙම ව්‍යාපෘතියේ හිඳගෙන සාධාරණ කාල රාමුවක් තුළ සංක්‍රමණය නොකරන්න;
  • අක්රිය කාලයකින් තොරව මාරු කරන්න.

තරමක් අභිලාෂකාමී, හරිද?

Graphite+ClickHouse. සංරචක

ග්‍රැෆයිට් ප්‍රොටෝකෝලය හරහා දත්ත ලබා ගැනීමට සහ පසුව එය ClickHouse හි සටහන් කිරීමට, මම තෝරා ගත්තෙමි කාබන්-ක්ලික්හවුස් (ගෝලාං).

ClickHouse හි නවතම නිකුතුව, ස්ථාවර අනුවාදය 1.1.54253, කාල ශ්‍රේණි ගබඩා කිරීම සඳහා දත්ත ගබඩාව ලෙස තෝරා ගන්නා ලදී. එය සමඟ වැඩ කිරීමේදී ගැටළු ඇති විය: දෝෂ කන්දක් ලොග් වලට වත් කළ අතර, ඔවුන් සමඟ කළ යුතු දේ සම්පූර්ණයෙන්ම පැහැදිලි නැත. සමඟ සාකච්ඡාවක රෝමන් ලොමොනොසොව් (කාබන්-ක්ලික්හවුස්, ග්‍රැෆයිට්-ක්ලික්හවුස් සහ තවත් බොහෝ දේවල කර්තෘ) පැරණි එක තෝරා ගන්නා ලදී 1.1.54236 නිකුත් කරන්න. දෝෂ අතුරුදහන් විය - සෑම දෙයක්ම පිපිරීමෙන් වැඩ කිරීමට පටන් ගත්තේය.

ClickHouse වෙතින් දත්ත කියවීමට තෝරාගෙන ඇත ග්රැෆයිට්-clickhouse (ගෝලාං). Graphite සඳහා API ලෙස - කාබොනාපි (ගෝලාං). වගු අතර අනුවර්තනය සංවිධානය කිරීමට ClickHouse භාවිතා කරන ලදී සත්වෝද්‍යාන. මාර්ගගත කිරීමේ ප්‍රමිතික සඳහා, අපි අපගේ ආදරණීයයා හැර ගියෙමු කාබන්-සී-රිලේ (ඇ) (පෙර ලිපිය බලන්න).

Graphite+ClickHouse. වගු ව්යුහය

"ග්රැෆයිට්" යනු අපි අධීක්ෂණ වගු සඳහා නිර්මාණය කළ දත්ත සමුදායකි.

“graphite.metrics” - ReplicatedReplacingMergeTree එන්ජිම සහිත වගුව (ප්‍රතිනිර්මාණය කරන ලදී MergeTree වෙනුවට) මෙම වගුව ප්‍රමිතික වල නම් සහ ඒවාට යන මාර්ග ගබඩා කරයි.

CREATE TABLE graphite.metrics ( Date Date, Level UInt32, Path String, Deleted UInt8, Version UInt32 ) ENGINE = ReplicatedReplacingMergeTree('/clickhouse/tables/replicator/graphite.metrics', ‘r1’, Date, (Level, Path), 8192, Version);

“graphite.data” - ReplicatedGraphiteMergeTree එන්ජිම සහිත වගුව (ප්‍රතිවර්තිත GraphiteMergeTree) මෙම වගුව මෙට්රික් අගයන් ගබඩා කරයි.

CREATE TABLE graphite.data ( Path String, Value Float64, Time UInt32, Date Date, Timestamp UInt32 ) ENGINE = ReplicatedGraphiteMergeTree('/clickhouse/tables/replicator/graphite.data', 'r1', Date, (Path, Time), 8192, 'graphite_rollup')

"graphite.date_metrics" යනු ReplicatedReplacingMergeTree එන්ජිම සහිත කොන්දේසි සහිත වගුවකි. මෙම වගුව දිවා කාලයේ හමු වූ සියලු මිනුම්වල නම් සටහන් කරයි. එය නිර්මාණය කිරීමට හේතු කොටසේ විස්තර කර ඇත "ගැටලු" මෙම ලිපිය අවසානයේ.

CREATE MATERIALIZED VIEW graphite.date_metrics ( Path String,  Level UInt32,  Date Date) ENGINE = ReplicatedReplacingMergeTree('/clickhouse/tables/replicator/graphite.date_metrics', 'r1', Date, (Level, Path, Date), 8192) AS SELECT toUInt32(length(splitByChar('.', Path))) AS Level, Date, Path FROM graphite.data

“graphite.data_stat” - ReplicatedAggregatingMergeTree එන්ජිම (ප්‍රතිනිර්මාණය කරන ලද) සමඟ කොන්දේසිය අනුව පුරවන ලද වගුවකි එකතු කිරීම MergeTree) මෙම වගුව කැදලි මට්ටම් 4ක් දක්වා කැඞී එන එන මෙට්‍රික් ගණන වාර්තා කරයි.

CREATE MATERIALIZED VIEW graphite.data_stat ( Date Date,  Prefix String,  Timestamp UInt32,  Count AggregateFunction(count)) ENGINE = ReplicatedAggregatingMergeTree('/clickhouse/tables/replicator/graphite.data_stat', 'r1', Date, (Timestamp, Prefix), 8192) AS SELECT toStartOfMonth(now()) AS Date, replaceRegexpOne(Path, '^([^.]+.[^.]+.[^.]+).*$', '1') AS Prefix, toUInt32(toStartOfMinute(toDateTime(Timestamp))) AS Timestamp, countState() AS Count FROM graphite.data  GROUP BY Timestamp, Prefix

Graphite+ClickHouse. සංරචක අන්තර්ක්රියා රූප සටහන

Metrics ගබඩාව: අපි Graphite+Whisper සිට Graphite+ClickHouse වෙත මාරු වූ ආකාරය

Graphite+ClickHouse. දත්ත සංක්රමණය

මෙම ව්‍යාපෘතියේ අපේක්ෂාවෙන් අපට මතක ඇති පරිදි, ClickHouse වෙත සංක්‍රමණය අක්‍රිය වේලාවන් නොමැතිව විය යුතුය; ඒ අනුව, අපට කෙසේ හෝ අපගේ පරිශීලකයින් සඳහා හැකි තරම් විනිවිද පෙනෙන ලෙස අපගේ සම්පූර්ණ අධීක්ෂණ පද්ධතිය නව ගබඩාව වෙත මාරු කිරීමට සිදු විය.
අපි ඒක කළේ මෙහෙමයි.

  • ClickHouse වගු අනුකරණයට සහභාගී වන එක් සේවාදායකයක කාබන්-ක්ලික්හවුස් වෙත අතිරේක ප්‍රමිතික ප්‍රවාහයක් යැවීමට රීතියක් කාබන්-සී-රිලේ වෙත එක් කර ඇත.

  • අපි python හි කුඩා ස්ක්‍රිප්ට් එකක් ලියා, එය විස්පර්-ඩම්ප් පුස්තකාලය භාවිතයෙන්, අපගේ ගබඩාවෙන් සියලුම .wsp ගොනු කියවා මෙම දත්ත නූල් 24 කින් ඉහත විස්තර කර ඇති කාබන්-ක්ලික්හවුස් වෙත යවන ලදී. කාබන්-ක්ලික්හවුස් හි පිළිගත් මෙට්‍රික් අගයන් සංඛ්‍යාව මිනිත්තුවකට මිලියන 125 දක්වා ළඟා වූ අතර ClickHouse දහඩිය බිඳ දැමුවේ නැත.

  • පවතින උපකරණ පුවරු වල භාවිතා වන කාර්යයන් නිදොස් කිරීම සඳහා අපි වෙනම DataSource එකක් Grafana තුළ නිර්මාණය කළෙමු. අපි භාවිතා කරන ලද කාර්යයන් ලැයිස්තුවක් අපි හඳුනා ගත්තෙමු, නමුත් ඒවා කාබන්ඩයොක්සියෙහි ක්රියාත්මක කර නැත. අපි මෙම කාර්යයන් එකතු කර කාබොනාපි හි කතුවරුන් වෙත PR යවා ඇත (ඔවුන්ට විශේෂ ස්තුතිය).

  • සමතුලිත සැකසුම් තුළ කියවීමේ භාරය මාරු කිරීම සඳහා, අපි graphite-api (Graphite+Whisper සඳහා API අතුරුමුහුණත) සිට carbonapi වෙත අන්ත ලක්ෂ්‍ය වෙනස් කළෙමු.

Graphite+ClickHouse. ප්රතිපල

  • තැටි උප පද්ධති භාවිතය 30% සිට 1% දක්වා අඩු කිරීම;

    Metrics ගබඩාව: අපි Graphite+Whisper සිට Graphite+ClickHouse වෙත මාරු වූ ආකාරය

  • 1 TB සිට 300 GB දක්වා අල්ලාගෙන සිටින ඉඩ ප්රමාණය අඩු කිරීම;
  • අපට විනාඩියකට මෙට්‍රික් මිලියන 125 ක් සේවාදායකයට ලබා ගැනීමේ හැකියාව ඇත (සංක්‍රමණය වන අවස්ථාවේ දී ඉහළ යයි);
  • සියලුම ප්‍රමිතික තත්පර තිස් දෙවන ගබඩා පරතරයකට මාරු කර ඇත;
  • ලැබුණු දත්ත පිටපත් කිරීම සහ වැරදි ඉවසීම;
  • අක්රිය කාලයකින් තොරව මාරු විය;
  • සෑම දෙයක්ම සම්පූර්ණ කිරීමට සති 7 ක් පමණ ගත විය.

Graphite+ClickHouse. ගැටලු

අපේ නඩුවේදී, සමහර උගුල් තිබුණා. සංක්‍රමණයෙන් පසු අපට හමු වූයේ මෙයයි.

  1. ClickHouse සෑම විටම පියාසර කිරීමේදී වින්‍යාස නැවත කියවන්නේ නැත; සමහර විට එය නැවත ආරම්භ කිරීමට අවශ්‍ය වේ. උදාහරණයක් ලෙස, ClickHouse වින්‍යාසය තුළ සත්වෝද්‍යාන පාලක පොකුරේ විස්තරය සම්බන්ධයෙන්, clickhouse-server නැවත පණ ගන්වන තෙක් එය භාවිතා නොකළේය.
  2. විශාල ClickHouse ඉල්ලීම් සිදු නොවීය, එබැවින් graphite-clickhouse හි අපගේ ClickHouse සම්බන්ධතා තන්තුව මෙලෙස දිස්වේ:
    url = "http://localhost:8123/?max_query_size=268435456&max_ast_elements=1000000"
  3. ClickHouse බොහෝ විට ස්ථාවර නිකුතු වල නව අනුවාද නිකුත් කරයි; ඒවායේ විස්මයන් අඩංගු විය හැක: ප්‍රවේශම් වන්න.
  4. kubernetes හි ගතිකව නිර්මාණය කරන ලද බහාලුම් කෙටි සහ අහඹු ආයු කාලයක් සහිත මෙට්‍රික් විශාල සංඛ්‍යාවක් යවයි. එවැනි ප්රමිතික සඳහා බොහෝ කරුණු නොමැති අතර, අවකාශය සමඟ ගැටළු නොමැත. නමුත් විමසුම් ගොඩනඟන විට, ClickHouse විසින් 'මිතික' වගුවෙන් මෙම ප්‍රමිතික විශාල ප්‍රමාණයක් ලබා ගනී. අවස්ථා 90% කදී, කවුළුවෙන් ඔබ්බට (පැය 24) ඔවුන් පිළිබඳ දත්ත නොමැත. නමුත් 'දත්ත' වගුවේ මෙම දත්ත සෙවීමට කාලය වැය වන අතර අවසානයේ කල් ඉකුත්වීමක් දක්වා දිව යයි. මෙම ගැටළුව විසඳීම සඳහා, අපි දිවා කාලයේ හමු වූ මිනුම් පිළිබඳ තොරතුරු සමඟ වෙනම දර්ශනයක් පවත්වා ගැනීමට පටන් ගත්තෙමු. මේ අනුව, ගතිකව නිර්මාණය කරන ලද බහාලුම් සඳහා වාර්තා (ප්‍රස්ථාර) තැනීමේදී, අපි විමසන්නේ දී ඇති කවුළුවක් තුළ හමු වූ ප්‍රමිතික පමණක් වන අතර, ඒවා පිළිබඳ වාර්තා ගොඩනැගීම සැලකිය යුතු ලෙස වේගවත් කළ මුළු කාලය සඳහා නොවේ. ඉහත විස්තර කර ඇති විසඳුම සඳහා, මම එකතු කළා මිනිරන්-ක්ලික්හවුස් (දෙබලක), දිනය_මිතික වගුව සමඟ වැඩ කිරීම ක්‍රියාත්මක කිරීම ඇතුළත් වේ.

Graphite+ClickHouse. ටැග්

1.1.0 අනුවාදය සමඟ ග්‍රැෆයිට් නිල විය ආධාරක ටැග්. තවද අපි ග්‍රැෆයිට්+ක්ලික්හවුස් ස්ටැක් තුළ මෙම මුලපිරීම සඳහා සහය දැක්වීමට කුමක් කළ යුතුද සහ කෙසේද යන්න පිළිබඳව ක්‍රියාකාරීව සිතමින් සිටිමු.

Graphite+ClickHouse. විෂමතා අනාවරකය

ඉහත විස්තර කර ඇති යටිතල පහසුකම් මත පදනම්ව, අපි විෂමතා අනාවරකයක මූලාකෘතියක් ක්රියාත්මක කර ඇති අතර එය ක්රියා කරයි! නමුත් ඔහු ගැන වැඩි විස්තර ඊළඟ ලිපියෙන්.

දායක වන්න, ඉහළ ඊතලය ඔබා සතුටු වන්න!

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න