Kubernetes හි පොඩ් ප්‍රමුඛතා Grafana Labs හි අක්‍රිය වීමට හේතු වූ ආකාරය

සටහන. පරිවර්තනය.: Grafana හි නිර්මාතෘවරුන් විසින් පවත්වාගෙන යනු ලබන ක්ලවුඩ් සේවාවෙහි මෑතකාලීනව අක්‍රිය වීමට හේතු වූ තාක්ෂණික විස්තර අපි ඔබේ අවධානයට ඉදිරිපත් කරමු. යටිතල පහසුකම්වල ගුණාත්මක භාවය වැඩි දියුණු කිරීම සඳහා නිර්මාණය කර ඇති නව සහ පෙනෙන පරිදි අතිශයින්ම ප්‍රයෝජනවත් අංගයක්... නිෂ්පාදනයේ යථාර්ථයන් තුළ එහි යෙදුමේ විවිධ සූක්ෂ්මතා සඳහා ඔබ ලබා නොදෙන්නේ නම් හානියක් සිදුවිය හැකි ආකාරය පිළිබඳ මෙය සම්භාව්‍ය උදාහරණයකි. ඔබේ වැරදි වලින් පමණක් නොව ඉගෙන ගැනීමට ඔබට ඉඩ සලසන මෙවැනි ද්‍රව්‍ය දිස්වන විට එය විශිෂ්ටයි. විස්තර ග්‍රැෆනා ලැබ්ස් වෙතින් නිෂ්පාදන උප සභාපතිගේ මෙම පාඨයේ පරිවර්තනයේ ඇත.

Kubernetes හි පොඩ් ප්‍රමුඛතා Grafana Labs හි අක්‍රිය වීමට හේතු වූ ආකාරය

ජූලි 19 සිකුරාදා, Grafana Cloud හි Hosted Prometheus සේවාව ආසන්න වශයෙන් මිනිත්තු 30 ක් ක්‍රියාත්මක වීම නතර විය. ඇනහිටීම නිසා විපතට පත් සියලුම පාරිභෝගිකයන්ගෙන් මම සමාව අයදිමි. අපගේ කාර්යය වන්නේ ඔබට අවශ්‍ය අධීක්ෂණ මෙවලම් සැපයීම වන අතර, ඒවා නොතිබීම ඔබේ ජීවිතය වඩාත් දුෂ්කර කළ හැකි බව අපි තේරුම් ගනිමු. අපි මේ සිද්ධිය ඉතා බරපතළ ලෙස සලකමු. මෙම සටහන සිදු වූ දේ, අප ප්‍රතිචාර දැක්වූ ආකාරය සහ එය නැවත සිදු නොවීමට වග බලා ගැනීමට අප කරන්නේ කුමක්ද යන්න පැහැදිලි කරයි.

මුදලටය

Grafana Cloud Hosted Prometheus සේවාව පදනම් වී ඇත බාහිකය — CNCF ව්‍යාපෘතිය තිරස් අතට පරිමාණය කළ හැකි, ඉහළ මට්ටමක පවතින, බහු-කුලී ප්‍රොමිතියස් සේවාවක් නිර්මාණය කිරීම. Cortex ගෘහ නිර්මාණ ශිල්පය තනි ක්ෂුද්‍ර සේවා සමූහයකින් සමන්විත වන අතර, ඒ සෑම එකක්ම තමන්ගේම කාර්යයක් ඉටු කරයි: අනුකරණය, ගබඩා කිරීම, විමසුම් ආදිය. Cortex ක්‍රියාකාරී සංවර්ධනය වෙමින් පවතින අතර නිරන්තරයෙන් නව විශේෂාංග එකතු කරමින් කාර්ය සාධනය වැඩි දියුණු කරයි. පාරිභෝගිකයින්ට මෙම විශේෂාංගවලින් ප්‍රයෝජන ගත හැකි වන පරිදි අපි නිතිපතා නව Cortex නිකුතු පොකුරු වෙත යොදවන්නෙමු - වාසනාවකට මෙන්, Cortex අක්‍රිය කාලයකින් තොරව යාවත්කාලීන කළ හැක.

බාධාවකින් තොරව යාවත්කාලීන කිරීම් සඳහා, යාවත්කාලීන ක්‍රියාවලියේදී Ingester Cortex සේවාවට අමතර Ingester අනුරුවක් අවශ්‍ය වේ. (සටහන. පරිවර්තනය.: ඉන්ජෙස්ටර් - බාහිකයේ මූලික අංගය. එහි කාර්යය වන්නේ නිරන්තර සාම්පල ප්‍රවාහයක් එකතු කිරීම, ඒවා Prometheus කුට්ටි වලට කාණ්ඩ කිරීම සහ DynamoDB, BigTable හෝ Cassandra වැනි දත්ත ගබඩාවක ගබඩා කිරීමයි.) මෙය පැරණි Ingesters හට වත්මන් දත්ත නව Ingesters වෙත යොමු කිරීමට ඉඩ සලසයි. Ingesters සම්පත් ඉල්ලා සිටින බව සඳහන් කිරීම වටී. ඒවා ක්‍රියාත්මක වීමට නම්, ඔබට cores 4ක් සහ පොඩ් එකකට 15 GB මතකයක් තිබිය යුතුය, i.e. අපගේ Kubernetes පොකුරු සම්බන්ධයෙන් මූලික යන්ත්‍රයේ සැකසුම් බලය සහ මතකයෙන් 25%. සාමාන්‍යයෙන්, අපට සාමාන්‍යයෙන් මධ්‍ය 4 සහ 15 GB මතකයට වඩා භාවිතයට නොගත් සම්පත් රාශියක් පොකුරේ ඇත, එබැවින් අපට වැඩිදියුණු කිරීමේදී මෙම අතිරේක ආග්‍රහණ පහසුවෙන් කරකැවිය හැක.

කෙසේ වෙතත්, බොහෝ විට සිදුවන්නේ සාමාන්‍ය ක්‍රියාකාරිත්වය අතරතුර කිසිදු යන්ත්‍රයක මෙම භාවිතයට නොගත් සම්පත් වලින් 25% ක් නොමැති වීමයි. ඔව්, අපි උත්සාහ කරන්නේවත් නැහැ: CPU සහ මතකය වෙනත් ක්‍රියාවලීන් සඳහා සැමවිටම ප්‍රයෝජනවත් වේ. මෙම ගැටළුව විසඳීම සඳහා, අපි භාවිතා කිරීමට තීරණය කළා Kubernetes Pod ප්‍රමුඛතා. අදහස වන්නේ Ingesters හට අනෙකුත් (ස්ථිතික) ක්ෂුද්‍ර සේවාවලට වඩා ඉහළ ප්‍රමුඛතාවයක් ලබා දීමයි. අපට අමතර (N+1) ඉන්ජෙස්ටරයක් ​​ධාවනය කිරීමට අවශ්‍ය වූ විට, අපි වෙනත් කුඩා කරල් තාවකාලිකව විස්ථාපනය කරමු. මෙම කරල් වෙනත් යන්ත්‍රවල නිදහස් සම්පත් වෙත මාරු කරනු ලබන අතර, අතිරේක ඉන්ජෙස්ටරයක් ​​ක්‍රියාත්මක කිරීමට ප්‍රමාණවත් තරම් විශාල “කුහරයක්” ඉතිරි වේ.

ජූලි 18, බ්‍රහස්පතින්දා, අපි අපගේ පොකුරු සඳහා නව ප්‍රමුඛතා මට්ටම් හතරක් ඉදිරිපත් කළෙමු: විවේචනාත්මක, ඉහළ, සාමාන්‍යය и අඩුයි. සතියක පමණ කාලයක් සේවාලාභී ගමනාගමනය නොමැති අභ්‍යන්තර පොකුරක් මත ඒවා පරීක්‍ෂා කරන ලදී. පෙරනිමියෙන්, නිශ්චිත ප්‍රමුඛතාවයක් නොමැති කරල් ලැබී ඇත සාමාන්‍යය ප්‍රමුඛතාවය, පන්තිය සමඟ Ingesters සඳහා සකසා ඇත ඉහළ ප්රමුඛත්වය. විවේචනාත්මක අධීක්ෂණය සඳහා වෙන් කර ඇත (Prometheus, Alertmanager, node-exporter, kube-state-metrics, etc.). අපගේ වින්‍යාසය විවෘතයි, ඔබට PR නැරඹිය හැක මෙහි.

කඩා වැටීම

ජූලි 19 සිකුරාදා, එක් ඉංජිනේරුවෙකු විශාල සේවාදායකයෙකු සඳහා නව කැපවූ Cortex පොකුරක් දියත් කළේය. මෙම පොකුර සඳහා වන වින්‍යාසය තුළ නව පොඩ් ප්‍රමුඛතා ඇතුළත් නොවීය, එබැවින් සියලුම නව කරල් සඳහා පෙරනිමි ප්‍රමුඛතාවයක් ලබා දී ඇත - සාමාන්‍යය.

Kubernetes පොකුරට නව Cortex පොකුර සඳහා ප්‍රමාණවත් සම්පත් නොතිබූ අතර, පවතින නිෂ්පාදන Cortex පොකුර යාවත්කාලීන කර නොතිබුණි (Ingesters නොමැතිව ඉතිරි විය. ඉහළ ප්රමුඛත්වය). පෙරනිමියෙන් නව පොකුරේ ඇතුල් කරන්නන් සතුව තිබූ බැවින් සාමාන්‍යය ප්‍රමුඛතාවය, සහ නිෂ්පාදනයේ පවතින කරල් කිසිසේත්ම ප්‍රමුඛතාවයකින් තොරව ක්‍රියා කළ අතර, නව පොකුරේ ඉන්ජෙස්ටර් දැනට පවතින කෝටෙක්ස් නිෂ්පාදන පොකුරෙන් ඉන්ජෙස්ටර් ප්‍රතිස්ථාපනය කළේය.

නිෂ්පාදන පොකුරේ ඉවත් කරන ලද ඉන්ජෙස්ටරය සඳහා ReplicaSet විසින් ඉවත් කරන ලද පොඩ් හඳුනාගෙන නිශ්චිත පිටපත් සංඛ්‍යාව පවත්වා ගැනීම සඳහා නව එකක් නිර්මාණය කරන ලදී. නව පොඩ් එක පෙරනිමියෙන් පවරන ලදී සාමාන්‍යය ප්රමුඛත්වය, සහ නිෂ්පාදනයේ තවත් "පැරණි" Ingester එහි සම්පත් අහිමි විය. එහි ප්‍රතිඵලය විය හිම කුණාටු ක්රියාවලිය, එය Cortex නිෂ්පාදන පොකුරු සඳහා Ingester වෙතින් සියලුම කරල් විස්ථාපනය කිරීමට හේතු විය.

ඉන්ජෙස්ටර් ප්‍රකාශිත වන අතර පෙර පැය 12 සඳහා දත්ත ගබඩා කරයි. දිගුකාලීන ගබඩා කිරීමට ලිවීමට පෙර ඒවා වඩාත් කාර්යක්ෂමව සම්පීඩනය කිරීමට මෙය අපට ඉඩ සලසයි. මෙය සාක්ෂාත් කර ගැනීම සඳහා, Cortex Distributed Hash Table (DHT) භාවිතයෙන් ශ්‍රේණි හරහා දත්ත කැබලි කරන අතර Dynamo-පන්නයේ ගණපූර්ණ අනුකූලතාව භාවිතයෙන් එක් එක් ශ්‍රේණි තුන ඉන්ජෙස්ටර් හරහා ප්‍රතිවර්තනය කරයි. Cortex අක්‍රීය කර ඇති Ingesters වෙත දත්ත ලියන්නේ නැත. මේ අනුව, Ingesters විශාල සංඛ්යාවක් DHT හැර ගිය විට, Cortex හට ඇතුළත් කිරීම් වල ප්රමාණවත් අනුකරණයක් ලබා දිය නොහැකි අතර, ඒවා කඩා වැටේ.

හඳුනා ගැනීම සහ පිළියම් කිරීම

"දෝෂ අයවැය" මත පදනම් වූ නව Prometheus දැනුම්දීම් (දෝෂ-අයවැය මත පදනම් වූ — විස්තර ඉදිරි ලිපියක දිස්වනු ඇත) වසා දැමීම ආරම්භ වී මිනිත්තු 4 කට පසුව අනතුරු ඇඟවීම ආරම්භ විය. මීළඟ මිනිත්තු පහක පමණ කාලය තුළ, අපි රෝග විනිශ්චය කිහිපයක් ක්‍රියාත්මක කර නව සහ පවතින නිෂ්පාදන පොකුරු දෙකටම සත්කාරකත්වය සැපයීම සඳහා යටින් පවතින Kubernetes පොකුර පරිමාණය කළෙමු.

තවත් මිනිත්තු පහකට පසු, පැරණි ඉන්ජෙස්ටර් ඔවුන්ගේ දත්ත සාර්ථකව ලියා ඇත, නව ඒවා ආරම්භ වූ අතර, Cortex පොකුරු නැවත ලබා ගත හැකි විය.

තවත් විනාඩි 10ක් Cortex ඉදිරිපිට පිහිටා ඇති සත්‍යාපන ප්‍රතිලෝම ප්‍රොක්සි මගින් මතකයෙන් බැහැර (OOM) දෝෂ හඳුනාගෙන නිවැරදි කිරීමට වැය කරන ලදී. QPS හි දස ගුණයකින් වැඩි වීම නිසා OOM දෝෂ ඇති විය (සේවාදායකයාගේ Prometheus සේවාදායකයන්ගේ අධික ආක්‍රමණශීලී ඉල්ලීම් හේතුවෙන් අපි විශ්වාස කරමු).

ප්රතිවිපාක

සම්පූර්ණ අක්‍රීය කාලය මිනිත්තු 26 කි. දත්ත නැති වී නැත. Ingesters විසින් මතකයේ ඇති සියලුම දත්ත දිගු කාලීන ගබඩාවට සාර්ථකව පූරණය කර ඇත. වසා දැමීමේදී, සේවාදායක Prometheus සේවාදායකයන් මකා දමන ලදී (දුරස්ථ) භාවිතා කරන පටිගත කිරීම් නව API remote_write WAL මත පදනම්ව (කර්තෘ කැලම් ස්ටියන් Grafana Labs වෙතින්) සහ බිඳවැටීමෙන් පසු අසාර්ථක ලිවීම් නැවත නැවතත් සිදු කරන ලදී.

Kubernetes හි පොඩ් ප්‍රමුඛතා Grafana Labs හි අක්‍රිය වීමට හේතු වූ ආකාරය
නිෂ්පාදන පොකුරු ලිවීමේ මෙහෙයුම්

සොයා ගැනීම්

මෙම සිදුවීමෙන් පාඩම් ඉගෙන ගෙන එය නැවත ඇති නොවීමට අවශ්‍ය පියවර ගැනීම වැදගත්ය.

ආපසු හැරී බැලීමේදී, අපි පෙරනිමිය සකසා නොතිබිය යුතුය සාමාන්‍යය නිෂ්පාදනයේ සියලුම ආග්‍රහකයන්ට ලැබෙන තුරු ප්‍රමුඛත්වය ඉහළ ප්රමුඛතාවයක්. ඊට අමතරව, ඔවුන් කල්තියා රැකබලා ගැනීම අවශ්ය විය ඉහළ ප්රමුඛත්වය. දැන් සියල්ල නිවැරදියි. Kubernetes හි පොඩ් ප්‍රමුඛතා භාවිතා කිරීම සලකා බැලීමේදී අපගේ අත්දැකීම් අනෙකුත් ආයතනවලට උපකාර වනු ඇතැයි අපි බලාපොරොත්තු වෙමු.

පොකුරට ගෝලීය වින්‍යාසයන් ඇති ඕනෑම අමතර වස්තු යෙදවීම මත අපි අතිරේක පාලන මට්ටමක් එක් කරන්නෙමු. මෙතැන් සිට, එවැනි වෙනස්කම් තක්සේරු කරනු ලැබේ bоගොඩක් මිනිස්සු. මීට අමතරව, බිඳවැටීමට හේතු වූ වෙනස් කිරීම වෙනම ව්‍යාපෘති ලේඛනයක් සඳහා ඉතා කුඩා යැයි සැලකේ - එය සාකච්ඡා කළේ GitHub ගැටලුවක පමණි. මෙතැන් සිට, වින්‍යාසය සඳහා එවැනි සියලු වෙනස්කම් සුදුසු ව්‍යාපෘති ලියකියවිලි සමඟ ඇත.

අවසාන වශයෙන්, අප දුටු OOM අධි බර පැටවීම වැළැක්වීම සඳහා සත්‍යාපන ප්‍රතිලෝම ප්‍රොක්සියේ ප්‍රමාණය වෙනස් කිරීම අපි ස්වයංක්‍රීය කරන්නෙමු, අනාගතයේදී සමාන ගැටළු වළක්වා ගැනීම සඳහා පසුබැසීමට සහ පරිමාණයට අදාළ Prometheus පෙරනිමි සැකසුම් සමාලෝචනය කරන්නෙමු.

අසාර්ථකත්වය ද යම් ධනාත්මක ප්රතිවිපාක ඇති විය: අවශ්ය සම්පත් ලැබුණු පසු, අමතර මැදිහත් වීමකින් තොරව Cortex ස්වයංක්රීයව ප්රකෘතිමත් විය. අපිත් එක්ක වැඩ කරලා වටිනා අත්දැකීමක් ලැබුවා ග්‍රෆානා ලොකි - අපගේ නව ලොග් එකතු කිරීමේ පද්ධතිය - අසාර්ථක වූ විට සහ පසුව සියලුම ඉන්ජෙස්ටර් නිසි ලෙස හැසිරෙන බව සහතික කිරීමට උපකාරී විය.

පරිවර්තකගෙන් PS

අපගේ බ්ලොග් අඩවියේ ද කියවන්න:

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

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