Yury Bushmelev "Map o gribin ym maes casglu a dosbarthu boncyffion" - trawsgrifiad o'r adroddiad

Mae logiau yn rhan bwysig o'r system, sy'n eich galluogi i ddeall ei fod yn gweithio (neu nad yw'n gweithio) yn ôl y disgwyl. O dan amodau pensaernïaeth microwasanaeth, mae gweithio gyda boncyffion yn dod yn ddisgyblaeth ar wahân i'r Olympiad Arbennig. Mae yna lawer o faterion y mae angen mynd i’r afael â nhw:

  • sut i ysgrifennu logiau o'r cais;
  • ble i ysgrifennu logiau;
  • sut i ddosbarthu boncyffion i'w storio a'u prosesu;
  • sut i brosesu a storio logiau.

Mae'r defnydd o dechnolegau cynhwysyddion poblogaidd ar hyn o bryd yn ychwanegu tywod ar ben y rhaca ym maes opsiynau datrys problemau.

Yn union am hyn mae trawsgrifiad o adroddiad Yuri Bushmelev "Map o gribin ym maes casglu a dosbarthu boncyffion"

Pwy sy'n gofalu, os gwelwch yn dda o dan y gath.

Fy enw i yw Yuri Bushmelev. Rwy'n gweithio i Lazada. Heddiw, byddaf yn siarad am sut y gwnaethom ein logiau, sut y gwnaethom eu casglu, a'r hyn yr ydym yn ei ysgrifennu yno.

Yury Bushmelev "Map o gribin ym maes casglu a dosbarthu boncyffion" - trawsgrifiad o'r adroddiad

O ble rydyn ni? Pwy ydym ni? Lazada yw'r manwerthwr ar-lein #1 mewn chwe gwlad yn Ne-ddwyrain Asia. Mae'r holl wledydd hyn yn cael eu dosbarthu ymhlith canolfannau data. Bellach mae cyfanswm o 4 canolfan ddata.Pam fod hyn yn bwysig? Oherwydd bod rhai penderfyniadau oherwydd y ffaith bod cysylltiad gwan iawn rhwng y canolfannau. Mae gennym bensaernïaeth microwasanaeth. Cefais fy synnu o weld bod gennym 80 o ficrowasanaethau eisoes. Pan ddechreuais y dasg gyda boncyffion, dim ond 20 ohonynt oedd.Yn ogystal, mae yna ddarn eithaf mawr o etifeddiaeth PHP, y mae'n rhaid i mi hefyd fyw ag ef a goddef. Mae hyn i gyd yn cynhyrchu i ni ar hyn o bryd mwy na 6 miliwn o negeseuon y funud ar gyfer y system gyfan. Ymhellach byddaf yn dangos sut yr ydym yn ceisio byw gyda hyn, a pham.

Yury Bushmelev "Map o gribin ym maes casglu a dosbarthu boncyffion" - trawsgrifiad o'r adroddiad

Mae'n rhaid i chi fyw gyda'r 6 miliwn o negeseuon hyn rywsut. Beth ddylem ni ei wneud â nhw? Angen 6 miliwn o negeseuon:

  • anfon o app
  • derbyn ar gyfer cyflwyno
  • darparu ar gyfer dadansoddi a storio.
  • i ddadansoddi
  • storio rhywsut.

Yury Bushmelev "Map o gribin ym maes casglu a dosbarthu boncyffion" - trawsgrifiad o'r adroddiad

Pan oedd tair miliwn o negeseuon, roedd gen i tua'r un olwg. Achos fe ddechreuon ni gyda rhai ceiniogau. Mae'n amlwg bod logiau cais yn cael eu hysgrifennu yno. Er enghraifft, ni allai gysylltu â'r gronfa ddata, gallai gysylltu â'r gronfa ddata, ond ni allai ddarllen rhywbeth. Ond ar wahân i hyn, mae pob un o'n microwasanaethau hefyd yn ysgrifennu log mynediad. Mae pob cais sy'n cyrraedd y microwasanaeth yn syrthio i'r log. Pam ydym ni'n gwneud hyn? Mae datblygwyr eisiau gallu olrhain. Mae pob log mynediad yn cynnwys y maes traceid, ac yn unol â hynny mae rhyngwyneb arbennig yn dad-ddirwyn y gadwyn gyfan ac yn arddangos yr olrhain yn hyfryd. Mae'r olrhain yn dangos sut aeth y cais, ac mae hyn yn helpu ein datblygwyr i ddelio ag unrhyw sbwriel anhysbys yn gyflymach.

Yury Bushmelev "Map o gribin ym maes casglu a dosbarthu boncyffion" - trawsgrifiad o'r adroddiad

Sut i fyw ag ef? Nawr byddaf yn disgrifio'n fyr y maes opsiynau - sut mae'r broblem hon yn cael ei datrys yn gyffredinol. Sut i ddatrys y broblem o gasglu, trosglwyddo a storio boncyffion.

Yury Bushmelev "Map o gribin ym maes casglu a dosbarthu boncyffion" - trawsgrifiad o'r adroddiad

Sut i ysgrifennu o'r cais? Mae’n amlwg bod yna wahanol ffyrdd. Yn benodol, mae arfer gorau, fel y mae cymrodyr ffasiynol yn ei ddweud wrthym. Mae dau fath o hen ysgol, fel y dywedodd teidiau. Mae yna ffyrdd eraill.

Yury Bushmelev "Map o gribin ym maes casglu a dosbarthu boncyffion" - trawsgrifiad o'r adroddiad

Gyda'r casgliad o foncyffion, mae'r sefyllfa tua'r un peth. Nid oes cymaint o opsiynau ar gyfer datrys y rhan benodol hon. Mae mwy ohonyn nhw, ond dim cymaint eto.

Yury Bushmelev "Map o gribin ym maes casglu a dosbarthu boncyffion" - trawsgrifiad o'r adroddiad

Ond gyda chyflwyniad a dadansoddiad dilynol, mae nifer yr amrywiadau yn dechrau ffrwydro. Ni fyddaf yn disgrifio pob opsiwn yn awr. Rwy'n meddwl bod y prif opsiynau yn hysbys iawn i bawb a oedd â diddordeb yn y pwnc.

Yury Bushmelev "Map o gribin ym maes casglu a dosbarthu boncyffion" - trawsgrifiad o'r adroddiad

Byddaf yn dangos i chi sut y gwnaethom hynny yn Lazada a sut y dechreuodd y cyfan.

Yury Bushmelev "Map o gribin ym maes casglu a dosbarthu boncyffion" - trawsgrifiad o'r adroddiad

Flwyddyn yn ôl, deuthum i Lazada a chael fy anfon at y prosiect log. Yr oedd fel hyn yno. Ysgrifenwyd y log o'r cais i stdout a stderr. Roedd popeth yn cael ei wneud mewn ffordd ffasiynol. Ond yna fe wnaeth y datblygwyr ei daflu allan o'r ffrydiau safonol, ac yna bydd arbenigwyr seilwaith yn ei ddarganfod rywsut. Rhwng arbenigwyr seilwaith a datblygwyr, mae yna hefyd ryddhawyr a ddywedodd: “uh ... wel, gadewch i ni eu lapio mewn ffeil gyda chragen, a dyna ni.” A chan fod hyn i gyd mewn cynhwysydd, fe wnaethon nhw ei lapio'n iawn yn y cynhwysydd ei hun, mapio'r cyfeiriadur y tu mewn a'i roi yno. Rwy'n meddwl ei bod yn eithaf amlwg i bawb beth ddigwyddodd.

Yury Bushmelev "Map o gribin ym maes casglu a dosbarthu boncyffion" - trawsgrifiad o'r adroddiad

Gadewch i ni edrych ychydig ymhellach. Sut y gwnaethom gyflwyno'r cofnodion hyn. Dewisodd rhywun td-asiant, sydd mewn gwirionedd yn rhugl ond ddim yn hollol rugl. Nid wyf yn deall perthynas y ddau brosiect hyn o hyd, ond ymddengys eu bod yn ymwneud â'r un peth. Ac roedd hwn yn rhugl, a ysgrifennwyd yn Ruby, yn darllen ffeiliau log, yn eu dosrannu i JSON gan ddefnyddio rhai ymadroddion rheolaidd. Yna cawsant eu hanfon i Kafka. Ar ben hynny, yn Kafka, roedd gennym ni 4 pwnc ar wahân ar gyfer pob API. Pam 4? Am fod byw, mae llwyfannu, ac am fod stdout a stderr. Mae datblygwyr yn eu cynhyrchu, a rhaid i weithwyr seilwaith eu creu yn Kafka. Ar ben hynny, roedd Kafka yn cael ei reoli gan adran arall. Felly, roedd angen creu tocyn fel eu bod yn creu 4 pwnc yno ar gyfer pob ap. Anghofiodd pawb amdano. Yn gyffredinol, sbwriel a gwastraff ydoedd.

Yury Bushmelev "Map o gribin ym maes casglu a dosbarthu boncyffion" - trawsgrifiad o'r adroddiad

Beth wnaethom ni nesaf ag ef? Fe wnaethon ni ei anfon i kafka. Ymhellach o Kafka, hedfanodd hanner y boncyffion i Logstash. Rhannwyd hanner arall y cofnodion. Hedfanodd rhai i un Graylog, rhai i Graylog arall. O ganlyniad, hedfanodd hyn i gyd i mewn i un clwstwr Elasticsearch. Hynny yw, syrthiodd yr holl lanast yma yn y diwedd yno. Does dim rhaid i chi wneud hynny!

Yury Bushmelev "Map o gribin ym maes casglu a dosbarthu boncyffion" - trawsgrifiad o'r adroddiad

Dyma sut olwg sydd arno o edrych arno oddi uchod. Does dim rhaid i chi wneud hynny! Yma, mae'r meysydd problem yn cael eu marcio ar unwaith â rhifau. Mae mwy ohonyn nhw mewn gwirionedd, ond mae 6 yn rhai problemus iawn, ac mae angen gwneud rhywbeth gyda nhw. Dywedaf amdanynt ar wahân yn awr.

Yury Bushmelev "Map o gribin ym maes casglu a dosbarthu boncyffion" - trawsgrifiad o'r adroddiad

Yma (1,2,3) rydym yn ysgrifennu ffeiliau ac, yn unol â hynny, mae tair cribin yma ar unwaith.

Y cyntaf (1) yw bod angen i ni eu hysgrifennu yn rhywle. Nid yw bob amser yn ddymunol rhoi'r gallu i API ysgrifennu'n uniongyrchol i ffeil. Mae'n ddymunol bod yr API yn cael ei ynysu mewn cynhwysydd, a hyd yn oed yn well, ei fod yn ddarllen-yn-unig. Rwy'n weinyddwr system, felly mae gennyf farn ychydig yn wahanol ar y pethau hyn.

Yr ail bwynt (2,3) yw bod gennym lawer o geisiadau yn dod i'r API. Mae'r API yn ysgrifennu llawer o ddata i ffeil. Mae'r ffeiliau'n tyfu. Mae angen inni eu cylchdroi. Oherwydd fel arall ni fyddwch yn gallu cadw unrhyw ddisgiau yno. Mae eu cylchdroi yn ddrwg oherwydd cânt eu hailgyfeirio trwy'r gragen i gyfeiriadur. Nid oes unrhyw ffordd y gallwn ei gylchdroi. Ni allwch ddweud wrth y cais am ailagor y dolenni. Oherwydd bydd y datblygwyr yn edrych arnoch chi fel ffŵl: “Pa ddisgrifyddion? Rydym yn gyffredinol yn ysgrifennu at stdout. Mae'r fframweithiau yn gwneud copytruncate i logrotate, sydd ond yn gwneud copi o'r ffeil a boncyffion y gwreiddiol. Yn unol â hynny, rhwng y prosesau copïo hyn, mae gofod disg fel arfer yn rhedeg allan.

(4) Roedd gennym ni wahanol fformatau mewn gwahanol APIs. Roeddent ychydig yn wahanol, ond roedd yn rhaid ysgrifennu regexp yn wahanol. Gan fod y cyfan yn cael ei reoli gan Puppet, roedd yna griw mawr o ddosbarthiadau gyda'u chwilod duon eu hunain. Hefyd, gallai td-asiant y rhan fwyaf o'r amser fwyta'r cof, bod yn dwp, gallai gymryd arno ei fod yn gweithio a gwneud dim. Yn allanol, roedd yn amhosibl deall ei fod yn gwneud dim. Ar y gorau, bydd yn cwympo, a bydd rhywun yn ei godi yn ddiweddarach. Yn fwy manwl gywir, bydd rhybudd yn hedfan i mewn, a bydd rhywun yn mynd i'w godi â'u dwylo.

Yury Bushmelev "Map o gribin ym maes casglu a dosbarthu boncyffion" - trawsgrifiad o'r adroddiad

(6) A'r mwyaf o sbwriel a gwastraff - roedd yn elasticsearch. Oherwydd ei fod yn fersiwn hen. Oherwydd nid oedd gennym feistri ymroddedig y pryd hynny. Roedd gennym foncyffion heterogenaidd y gallai eu meysydd orgyffwrdd. Gellid ysgrifennu logiau gwahanol o wahanol gymwysiadau gyda'r un enwau maes, ond ar yr un pryd gallai fod data gwahanol y tu mewn. Hynny yw, daw un log gyda Chyfanrif mewn maes, er enghraifft, lefel. Daw log arall gyda Llinyn yn y maes gwastad. Yn absenoldeb mapio statig, mae peth mor wych yn troi allan. Os, ar ôl cylchdroi mynegai, y cyrhaeddodd neges â llinyn yn gyntaf yn elasticsearch, yna rydym yn byw fel arfer. Ac os cyrhaeddodd yr un cyntaf gyda Chyfanrif, yna mae'r holl negeseuon dilynol a gyrhaeddodd gyda String yn cael eu taflu. Oherwydd nad yw'r math o faes yn cyfateb.

Yury Bushmelev "Map o gribin ym maes casglu a dosbarthu boncyffion" - trawsgrifiad o'r adroddiad

Dechreuon ni ofyn y cwestiynau hyn. Penderfynasom beidio ag edrych am yr euog.

Yury Bushmelev "Map o gribin ym maes casglu a dosbarthu boncyffion" - trawsgrifiad o'r adroddiad

Ond mae angen gwneud rhywbeth! Y peth amlwg yw bod angen inni sefydlu safonau. Roedd gennym rai safonau eisoes. Rhai a ddygasom ychydig yn ddiweddarach. Yn ffodus, roedd fformat log sengl ar gyfer pob API eisoes wedi'i gymeradwyo bryd hynny. Mae wedi'i ysgrifennu'n uniongyrchol i mewn i'r safonau rhyngweithio gwasanaeth. Yn unol â hynny, dylai'r rhai sydd am dderbyn logiau eu hysgrifennu yn y fformat hwn. Os nad yw rhywun yn ysgrifennu logiau yn y fformat hwn, yna nid ydym yn gwarantu unrhyw beth.

Ymhellach, hoffwn gael un safon ar gyfer y dulliau o gofnodi, danfon a chasglu logiau. Mewn gwirionedd, ble i'w hysgrifennu, a sut i'w cyflwyno. Y sefyllfa ddelfrydol yw pan fydd prosiectau'n defnyddio'r un llyfrgell. Mae yna lyfrgell logio ar wahân ar gyfer Go, mae yna lyfrgell ar wahân ar gyfer PHP. Pawb sydd gennym ni, dylai pawb eu defnyddio. Ar hyn o bryd, byddwn yn dweud ein bod yn llwyddo 80 y cant. Ond mae rhai yn parhau i fwyta cacti.

Ac yno (ar y sleid) prin fod y “SLA ar gyfer danfon boncyffion” yn dechrau ymddangos. Nid yw yno eto, ond rydym yn gweithio arno. Oherwydd ei bod yn gyfleus iawn pan fydd infra yn dweud, os byddwch yn ysgrifennu mewn fformat o'r fath ac yn y fath le i le a dim mwy na negeseuon N yr eiliad, yna byddwn yn fwyaf tebygol o'i chyflwyno yno. Mae'n cymryd llawer o gur pen. Os oes CLG, yna mae'n wych!

Yury Bushmelev "Map o gribin ym maes casglu a dosbarthu boncyffion" - trawsgrifiad o'r adroddiad

Sut wnaethon ni ddechrau datrys y broblem? Roedd y prif rake gyda td-agent. Nid oedd yn glir i ble mae ein logiau'n mynd. Ydyn nhw'n cael eu cyflwyno? Ydyn nhw'n mynd? Ble maen nhw beth bynnag? Felly, penderfynwyd disodli td-agent gyda'r eitem gyntaf. Opsiynau ar gyfer beth i'w ddisodli ag ef, amlinellais yn fyr yma.

Rhugl. Yn gyntaf, deuthum ar ei draws mewn swydd flaenorol, ac roedd hefyd yn disgyn yno o bryd i'w gilydd. Yn ail, mae hyn yr un peth, dim ond mewn proffil.

curiad ffeil. Sut roedd yn dda i ni? Mae'r ffaith ei fod yn Go, ac mae gennym ni arbenigedd mawr yn Go. Yn unol â hynny, os rhywbeth, gallem rywsut ei ychwanegu atom ein hunain. Dyna pam na wnaethom ei gymryd. Fel na fyddai hyd yn oed unrhyw demtasiwn i ddechrau ei ailysgrifennu drosoch eich hun.

Yr ateb amlwg ar gyfer y sysadmin yw pob math o syslogs yn y swm hwn (syslog-ng/rsyslog/nxlog).

Neu ysgrifennwch rywbeth eich hun, ond fe wnaethom ei daflu, yn ogystal â churiad ffeil. Os ydych chi'n ysgrifennu rhywbeth, yna mae'n well ysgrifennu rhywbeth defnyddiol ar gyfer busnes. I ddosbarthu logiau, mae'n well cymryd rhywbeth parod.

Felly, roedd y dewis mewn gwirionedd yn dibynnu ar ddewis rhwng syslog-ng a rsyslog. Pwysais tuag at rsyslog yn syml oherwydd bod gennym ddosbarthiadau ar gyfer rsyslog mewn Pyped yn barod, ac ni chefais wahaniaeth amlwg rhyngddynt. Beth yw syslog, beth yw syslog. Ydy, mae rhai dogfennau'n waeth, rhai'n well. Mae'n gwybod fel hyn, ac mae'n ei wneud yn wahanol.

Yury Bushmelev "Map o gribin ym maes casglu a dosbarthu boncyffion" - trawsgrifiad o'r adroddiad

Ac ychydig am rsyslog. Yn gyntaf, mae'n cŵl oherwydd mae ganddo lawer o fodiwlau. Mae ganddo RainerScript y gall pobl ei darllen (iaith cyfluniad modern). Bonws anhygoel yw y gallem efelychu ymddygiad td-agent gyda'i offer safonol, ac nid oes dim wedi newid ar gyfer ceisiadau. Hynny yw, rydym yn newid td-agent i rsyslog, ac nid ydym yn cyffwrdd â phopeth arall eto. Ac ar unwaith rydym yn cael cyflenwad gweithio. Nesaf, mmnormalize yw'r peth cŵl am rsyslog. Mae'n caniatáu ichi ddosrannu logiau, ond nid gyda Grok a regexp. Mae'n gwneud coeden gystrawen haniaethol. Mae'n dosrannu logiau yn yr un ffordd fwy neu lai ag y mae casglwr yn dosrannu cod ffynhonnell. Mae hyn yn caniatáu ichi weithio'n gyflym iawn, bwyta ychydig o CPU, ac, yn gyffredinol, dim ond peth cŵl iawn ydyw. Mae yna griw o fonysau eraill. ni thrigaf arnynt.

Yury Bushmelev "Map o gribin ym maes casglu a dosbarthu boncyffion" - trawsgrifiad o'r adroddiad

Mae gan rsyslog lawer mwy o anfanteision. Maent tua'r un peth â bonysau. Y prif broblemau yw bod angen i chi allu ei goginio, ac mae angen i chi ddewis fersiwn.

Yury Bushmelev "Map o gribin ym maes casglu a dosbarthu boncyffion" - trawsgrifiad o'r adroddiad

Fe benderfynon ni y bydden ni'n ysgrifennu logiau mewn soced unix. Ac nid yn /dev/log, oherwydd mae gennym ni lanast o logiau system, mae cyfnodolyn ar y gweill ar hyn o bryd. Felly gadewch i ni ysgrifennu at soced arferiad. Byddwn yn ei atodi i set o reolau ar wahân. Gadewch i ni beidio ag ymyrryd ag unrhyw beth. Bydd popeth yn dryloyw ac yn ddealladwy. Felly fe wnaethom ni mewn gwirionedd. Mae'r cyfeiriadur gyda'r socedi hyn wedi'i safoni a'i anfon ymlaen i bob cynhwysydd. Gall cynwysyddion weld y soced sydd ei angen arnynt, ei agor ac ysgrifennu ato.

Beth am ffeil? Achos mae pawb wedi darllen erthygl am Badushechka, a geisiodd anfon y ffeil ymlaen i'r docwr, a chanfuwyd bod disgrifydd y ffeil yn newid ar ôl ailgychwyn rsyslog, a bod docker yn colli'r ffeil hon. Mae'n cadw rhywbeth arall ar agor, ond nid yr un soced lle maen nhw'n ysgrifennu. Fe wnaethom benderfynu y byddem yn osgoi'r broblem hon, ac, ar yr un pryd, yn osgoi'r broblem blocio.

Yury Bushmelev "Map o gribin ym maes casglu a dosbarthu boncyffion" - trawsgrifiad o'r adroddiad

Mae Rsyslog yn gwneud y gweithredoedd a nodir ar y sleid ac yn anfon logiau i naill ai ras gyfnewid neu Kafka. Mae Kafka yn dilyn yr hen ffordd. Rayleigh - Ceisiais ddefnyddio rsyslog pur i ddosbarthu boncyffion. Heb Ciw Neges, gan ddefnyddio offer rsyslog safonol. Yn y bôn, mae'n gweithio.

Yury Bushmelev "Map o gribin ym maes casglu a dosbarthu boncyffion" - trawsgrifiad o'r adroddiad

Ond mae yna naws ynglŷn â sut i'w stwffio yn nes ymlaen yn y rhan hon (Logstash/Graylog/ES). Defnyddir y rhan hon (rsyslog-rsyslog) rhwng datacenters. Dyma ddolen tcp cywasgedig, sy'n eich galluogi i arbed lled band ac, yn unol â hynny, rywsut yn cynyddu'r tebygolrwydd y byddwn yn derbyn rhai logiau o ganolfan ddata arall pan fydd y sianel yn llawn. Oherwydd mae gennym Indonesia, lle mae popeth yn ddrwg. Dyna lle mae'r broblem gyson.

Yury Bushmelev "Map o gribin ym maes casglu a dosbarthu boncyffion" - trawsgrifiad o'r adroddiad

Fe wnaethom feddwl am sut yr ydym yn monitro mewn gwirionedd, gyda pha debygolrwydd y bydd y logiau a gofnodwyd gennym o'r cais yn cyrraedd y diben hwnnw? Fe benderfynon ni ddechrau metrigau. Mae gan Rsyslog ei fodiwl casglu ystadegau ei hun, sydd â rhyw fath o gownteri. Er enghraifft, gall ddangos maint y ciw i chi, neu faint o negeseuon a ddaeth i mewn ar gyfer gweithred o'r fath. Gallwch chi gymryd rhywbeth ganddyn nhw eisoes. Hefyd, mae ganddo gownteri personol y gallwch eu ffurfweddu, a bydd yn dangos i chi, er enghraifft, nifer y negeseuon y mae rhai API wedi'u cofnodi. Nesaf, ysgrifennais rsyslog_exporter yn Python, a gwnaethom anfon y cyfan at Prometheus a chynllwynio. Roeddem ni wir eisiau metrigau Graylog, ond hyd yn hyn nid ydym wedi cael amser i'w sefydlu.

Yury Bushmelev "Map o gribin ym maes casglu a dosbarthu boncyffion" - trawsgrifiad o'r adroddiad

Beth yw'r problemau? Cododd y broblem gyda'r ffaith ein bod wedi darganfod (YN SYTH!) bod ein APIs Byw yn ysgrifennu 50k o negeseuon yr eiliad. Dim ond Live API yw hwn heb lwyfannu. A dim ond 12 mil o negeseuon yr eiliad y mae Graylog yn eu dangos i ni. A chododd cwestiwn rhesymol, ble mae'r gweddillion? O hynny daethom i'r casgliad na all Graylog ymdopi. Edrychasom, ac, yn wir, nid oedd Graylog ag Elasticsearch yn meistroli'r llif hwn.

Nesaf, darganfyddiadau eraill rydyn ni wedi'u gwneud ar hyd y ffordd.

Mae ysgrifennau i'r soced wedi'u rhwystro. Sut y digwyddodd? Pan ddefnyddiais rsyslog ar gyfer dosbarthu, ar ryw adeg fe wnaethom dorri'r sianel rhwng y canolfannau data. Cododd y danfoniad mewn un lle, cododd y danfoniad mewn man arall. Mae hyn i gyd wedi dod i lawr i beiriant gydag APIs sy'n ysgrifennu at y soced rsyslog. Roedd ciw. Yna llanwodd y ciw ar gyfer ysgrifennu at y soced unix, sef 128 o becynnau yn ddiofyn. A'r ysgrifen nesaf() yn y blociau cais. Pan edrychon ni ar y llyfrgell rydyn ni'n ei defnyddio mewn cymwysiadau Go, fe'i hysgrifennwyd yno bod ysgrifennu i'r soced yn digwydd yn y modd di-flocio. Roeddem yn siŵr nad oedd dim wedi'i rwystro. Oherwydd ein bod wedi darllen erthygl am Badushechkaa ysgrifennodd amdano. Ond mae eiliad. Yr oedd dolen anfeidrol hefyd o amgylch yr alwad hon, yn yr hon yr oedd ymgais barhaus i wthio neges i'r soced. Wnaethon ni ddim sylwi arno. Roedd yn rhaid i mi ailysgrifennu'r llyfrgell. Ers hynny, mae wedi newid sawl gwaith, ond erbyn hyn rydym wedi cael gwared ar gloeon ym mhob is-system. Felly, gallwch chi atal rsyslog ac ni fydd unrhyw beth yn disgyn.

Mae angen monitro maint y ciwiau, sy'n helpu i beidio â chamu ar y rhaca hwn. Yn gyntaf, gallwn fonitro pan fyddwn yn dechrau colli negeseuon. Yn ail, gallwn fonitro ein bod yn y bôn yn cael problemau gyda chyflenwi.

Ac eiliad annymunol arall - mae ymhelaethu 10 gwaith mewn pensaernïaeth microwasanaeth yn hawdd iawn. Nid oes gennym gymaint o geisiadau yn dod i mewn, ond oherwydd y graff y mae'r negeseuon hyn yn rhedeg ymhellach ar ei hyd, oherwydd y logiau mynediad, rydym mewn gwirionedd yn cynyddu'r llwyth ar y logiau tua deg gwaith. Yn anffodus, nid oedd gennyf amser i gyfrifo’r union niferoedd, ond microwasanaethau yw’r hyn ydynt. Rhaid cadw hyn mewn cof. Mae'n ymddangos mai'r is-system casglu boncyffion sydd wedi'i llwytho fwyaf yn Lazada ar hyn o bryd.

Yury Bushmelev "Map o gribin ym maes casglu a dosbarthu boncyffion" - trawsgrifiad o'r adroddiad

Sut i ddatrys problem chwilio elastig? Os oes angen i chi gael boncyffion yn gyflym mewn un lle, er mwyn peidio â rhedeg ar draws yr holl beiriannau a'u casglu yno, defnyddiwch storfa ffeiliau. Mae hyn yn sicr o weithio. Mae'n cael ei wneud o unrhyw weinydd. Does ond angen i chi lynu disgiau yno a rhoi syslog. Ar ôl hynny, rydych yn sicr o gael yr holl logiau mewn un lle. Yna bydd yn bosibl ffurfweddu elasticsearch, graylog, neu rywbeth arall yn araf. Ond bydd gennych yr holl logiau eisoes, ac, ar ben hynny, gallwch eu storio, cyn belled â bod digon o araeau disg.

Yury Bushmelev "Map o gribin ym maes casglu a dosbarthu boncyffion" - trawsgrifiad o'r adroddiad

Ar adeg fy adroddiad, dechreuodd y cynllun edrych fel hyn. Fe wnaethon ni roi'r gorau i ysgrifennu i'r ffeil bron. Nawr, yn fwyaf tebygol, byddwn yn diffodd y gweddillion. Ar beiriannau lleol sy'n rhedeg yr API, byddwn yn rhoi'r gorau i ysgrifennu at ffeiliau. Yn gyntaf, mae storfa ffeiliau, sy'n gweithio'n dda iawn. Yn ail, mae'r peiriannau hyn yn rhedeg allan o ofod yn gyson, mae angen i chi ei fonitro'n gyson.

Mae'r rhan hon gyda Logstash a Graylog, mae'n codi i'r entrychion. Felly, mae angen i chi gael gwared arno. Mae'n rhaid i chi ddewis un.

Yury Bushmelev "Map o gribin ym maes casglu a dosbarthu boncyffion" - trawsgrifiad o'r adroddiad

Fe benderfynon ni ollwng Logstash a Kibana. Oherwydd mae gennym adran ddiogelwch. Beth yw'r cysylltiad? Y cysylltiad yw nad yw Kibana heb X-Pack a heb Shield yn caniatáu ichi wahaniaethu hawliau mynediad i'r logiau. Felly, cymerasant Graylog. Mae ganddo'r cyfan. Dydw i ddim yn ei hoffi, ond mae'n gweithio. Fe wnaethon ni brynu caledwedd newydd, gosod Graylog ffres yno, a symud pob log gyda fformatau llym i Graylog ar wahân. Rydym wedi datrys y broblem gyda gwahanol fathau o'r un meysydd yn sefydliadol.

Yury Bushmelev "Map o gribin ym maes casglu a dosbarthu boncyffion" - trawsgrifiad o'r adroddiad

Beth yn union sydd wedi'i gynnwys yn y Graylog newydd. Rydym newydd ysgrifennu popeth yn y docwr. Fe wnaethon ni gymryd criw o weinyddion, cyflwyno tri achos Kafka, 7 gweinydd Graylog fersiwn 2.3 (oherwydd roeddwn i eisiau fersiwn Elasticsearch 5). Codwyd hyn i gyd ar gyrchoedd o'r HDD. Gwelsom gyfradd mynegeio o hyd at 100 mil o negeseuon yr eiliad. Gwelsom y ffigur bod 140 terabytes o ddata yr wythnos.

Yury Bushmelev "Map o gribin ym maes casglu a dosbarthu boncyffion" - trawsgrifiad o'r adroddiad

Ac eto rhaca! Mae gennym ddau werthiant ar y gweill. Rydym wedi symud y tu hwnt i 6 miliwn o swyddi. Nid oes gan We Graylog amser i gnoi. Rhywsut mae'n rhaid i chi oroesi eto.

Yury Bushmelev "Map o gribin ym maes casglu a dosbarthu boncyffion" - trawsgrifiad o'r adroddiad

Dyma sut wnaethon ni oroesi. Ychwanegwyd ychydig mwy o weinyddion ac SSDs. Ar hyn o bryd rydyn ni'n byw fel hyn. Nawr rydym eisoes yn cnoi 160k o negeseuon yr eiliad. Nid ydym wedi cyrraedd y terfyn eto, felly nid yw'n glir faint y gallwn ei gael allan ohono'n realistig.

Yury Bushmelev "Map o gribin ym maes casglu a dosbarthu boncyffion" - trawsgrifiad o'r adroddiad

Dyma ein cynlluniau ar gyfer y dyfodol. O'r rhain, mewn gwirionedd, mae'n debyg mai'r pwysicaf yw argaeledd uchel. Nid yw gennym eto. Mae sawl car yn cael eu gosod yr un ffordd, ond hyd yn hyn mae popeth yn mynd trwy un car. Mae angen treulio amser i sefydlu methiant rhyngddynt.

Casglu metrigau o Graylog.

Gwnewch derfyn cyfradd fel bod gennym un API gwallgof nad yw'n lladd lled band a phopeth arall.

Ac yn olaf, llofnodwch ryw fath o CLG gyda datblygwyr fel y gallwn wasanaethu cymaint â hynny. Os byddwch yn ysgrifennu mwy, yna mae'n ddrwg gennyf.

Ac ysgrifennu dogfennaeth.

Yury Bushmelev "Map o gribin ym maes casglu a dosbarthu boncyffion" - trawsgrifiad o'r adroddiad

Yn gryno, canlyniadau popeth yr ydym wedi'i brofi. Yn gyntaf, y safonau. Yn ail, syslog yw cacen. Yn drydydd, mae rsyslog yn gweithio'n union fel y mae wedi'i ysgrifennu ar y sleid. A gadewch i ni gyrraedd y cwestiynau.

cwestiynau.

Cwestiwn: Pam wnaethon nhw benderfynu peidio â chymryd ... (curiad ffeil?)

Ateb: Angen ysgrifennu i ffeil. Doeddwn i wir ddim eisiau. Pan fydd eich API yn ysgrifennu miloedd o negeseuon yr eiliad, hyd yn oed os ydych chi'n cylchdroi unwaith yr awr, nid yw hyn yn opsiwn o hyd. Gallwch chi ysgrifennu i bibell. Gofynnodd y datblygwyr i mi: “Beth fydd yn digwydd os bydd y broses yr ydym yn ysgrifennu ynddi yn disgyn i lawr”? Doeddwn i ddim yn dod o hyd i beth i'w ateb, a dywedodd: "Wel, iawn, gadewch i ni beidio â gwneud hynny."

Cwestiwn: Pam na wnewch chi ysgrifennu logiau i HDFS yn unig?

AtebA: Dyma'r cam nesaf. Fe wnaethon ni feddwl amdano ar y dechrau, ond gan nad oes adnoddau i ddelio ag ef ar hyn o bryd, mae'n dibynnu ar ein datrysiad hirdymor.

Cwestiwn: Byddai fformat colofn yn fwy addas.

Ateb: deallaf. Rydyn ni'n "dros" gyda'r ddwy law.

Cwestiwn: Rydych chi'n ysgrifennu at rsyslog. Mae TCP a CDU ar gael yno. Ond os CDU, yna sut ydych chi'n gwarantu cyflawni?

AtebA: Mae dau bwynt. Yn gyntaf, dywedaf wrth bawb ar unwaith nad ydym yn gwarantu danfon logiau. Oherwydd pan ddaw’r datblygwyr a dweud: “Gadewch i ni ddechrau ysgrifennu data ariannol yno, a byddwch yn ei roi yn rhywle i ni rhag ofn y bydd rhywbeth yn digwydd,” rydym yn eu hateb, “Gwych! Gadewch i ni ddechrau blocio ar ysgrifennu at y soced, a'i wneud mewn trafodion, fel eich bod yn sicr o'i roi yn y soced i ni a gwneud yn siŵr ein bod yn ei dderbyn o'r ochr arall. Ac ar hyn o bryd, mae pawb yn dod yn ddiangen ar unwaith. Ac os na, pa gwestiynau sydd gennym ni? Os nad ydych am warantu ysgrifennu at y soced, yna pam y byddem yn gwarantu danfoniad? Rydym yn gwneud yr ymdrech orau. Rydyn ni wir yn ceisio cyflawni cymaint â phosibl a gorau posibl, ond nid ydym yn rhoi gwarant 100%. Felly, nid oes angen ichi ysgrifennu data ariannol yno. Mae cronfeydd data trafodion ar gyfer hyn.

Cwestiwn: Pan fydd yr API yn cynhyrchu rhywfaint o neges i'r log ac yn trosglwyddo rheolaeth i ficrowasanaethau, a ydych chi wedi dod ar draws y broblem bod negeseuon o wahanol ficrowasanaethau yn cyrraedd y drefn anghywir? Oherwydd hyn, mae dryswch yn codi.

AtebA: Mae'n arferol eu bod yn dod mewn trefn wahanol. Mae'n rhaid i chi fod yn barod ar gyfer hyn. Oherwydd nad yw unrhyw gyflenwad rhwydwaith yn gwarantu archeb i chi, neu mae angen i chi wario adnoddau arbennig ar hyn. Os byddwn yn cymryd storfeydd ffeil, yna mae pob API yn arbed logiau i'w ffeil ei hun. Yn hytrach, mae rsyslog yn eu dadelfennu i gyfeiriaduron yno. Mae gan bob API ei logiau ei hun yno, lle gallwch chi fynd i edrych, ac yna gallwch chi eu cymharu gan ddefnyddio'r stamp amser yn y log hwn. Os ydynt yn mynd i edrych yn Graylog, yna byddant yn cael eu didoli yn ôl stamp amser. Bydd popeth yn iawn yno.

Cwestiwn: Gall stamp amser amrywio fesul milieiliad.

Ateb: Mae'r stamp amser yn cael ei gynhyrchu gan yr API ei hun. Dyma, mewn gwirionedd, yr holl bwynt. Mae gennym ni NTP. Mae'r API yn cynhyrchu stamp amser sydd eisoes yn y neges ei hun. Nid yw'n cael ei ychwanegu gan rsyslog.

Cwestiwn: Nid yw'r rhyngweithio rhwng canolfannau data yn glir iawn. O fewn fframwaith y ganolfan ddata, mae'n amlwg sut y casglwyd a phroseswyd y logiau. Sut mae'r rhyngweithio rhwng canolfannau data? Neu a yw pob canolfan ddata yn byw ei bywyd ei hun?

Ateb: bron. Mae gennym bob gwlad mewn un ganolfan ddata. Nid oes gennym ar hyn o bryd ymledu, fel bod un wlad yn cael ei rhoi mewn gwahanol ganolfannau data. Felly, nid oes angen eu cyfuno. Y tu mewn i bob canolfan mae Ras Gyfnewid Logiau. Gweinydd Rsyslog yw hwn. Mewn gwirionedd, dau beiriant rheoli. Maent yn cael eu sefydlu yr un ffordd. Ond am y tro, mae traffig yn mynd trwy un ohonyn nhw. Mae hi'n logio popeth yn agregau. Mae ganddo giw disg rhag ofn. Mae hi'n pwyso'r logiau ac yn eu hanfon i'r ganolfan ddata ganolog (Singapore), lle maent eisoes wedi'u gwenwyno yn Graylog. Ac mae gan bob canolfan ddata ei storfa ffeiliau ei hun. Rhag ofn inni golli cysylltiad, mae gennym yr holl logiau yno. Byddant yn aros yno. Byddant yn cael eu storio yno.

Cwestiwn: A ydych chi'n cael logiau oddi yno yn ystod sefyllfaoedd annormal?

Ateb: Gallwch chi fynd yno (i'r storfa ffeiliau) ac edrych.

Cwestiwn: Sut ydych chi'n monitro nad ydych chi'n colli logiau?

Ateb: Yr ydym mewn gwirionedd yn eu colli, ac yr ydym yn ei fonitro. Dechreuwyd monitro fis yn ôl. Mae gan y llyfrgell y mae'r Go APIs yn ei defnyddio fetrigau. Mae hi'n gallu cyfri sawl gwaith y methodd ysgrifennu i'r soced. Yno ar hyn o bryd mae hewristig dyrys. Mae byffer yno. Mae'n ceisio ysgrifennu neges ohono i soced. Os bydd y byffer yn gorlifo, mae'n dechrau eu gollwng. Ac mae'n cyfrif faint mae'n eu gollwng. Os bydd y cownteri yn dechrau gorlifo yno, byddwn yn gwybod amdano. Maen nhw nawr hefyd yn dod at prometheus, a gallwch chi weld y graffiau yn Grafana. Gallwch chi osod rhybuddion. Ond nid yw'n glir eto at bwy i'w hanfon.

Cwestiwn: Mewn elasticsearch, rydych chi'n storio boncyffion â diswyddiad. Sawl copi sydd gennych chi?

Ateb: Un replica.

Cwestiwn: Ai dim ond un llinell ydyw?

Ateb: Dyma'r meistr a'r replica. Mae'r data'n cael ei storio'n ddyblyg.

Cwestiwn: A wnaethoch chi newid maint y byffer rsyslog rywsut?

Ateb: Rydyn ni'n ysgrifennu datagramau i soced unix arferol. Mae hyn ar unwaith yn gosod cyfyngiad o 128 kilobeit arnom. Ni allwn ysgrifennu mwy i mewn iddo. Rydym wedi ysgrifennu hyn i mewn i'r safon. Pwy sydd eisiau mynd i storio, maen nhw'n ysgrifennu 128 kilobytes. Llyfrgelloedd, ar ben hynny, torri i ffwrdd, ac yn rhoi baner bod y neges yn cael ei dorri i ffwrdd. Mae gennym faes arbennig yn safon y neges ei hun, sy'n dangos a gafodd ei dorri i ffwrdd wrth recordio ai peidio. Felly mae gennym gyfle i olrhain y foment hon.

Cwestiwn: Ydych chi'n ysgrifennu JSON wedi torri?

Ateb: Bydd JSON wedi torri yn cael ei daflu naill ai yn ystod y ras gyfnewid oherwydd bod y pecyn yn rhy fawr. Neu bydd Graylog yn cael ei ollwng, oherwydd ni fydd yn gallu dosrannu JSON. Ond mae yna naws yma y mae angen eu trwsio, ac maen nhw'n gysylltiedig yn bennaf â rsyslog. Rwyf eisoes wedi llenwi ambell rifyn yno, y mae angen gweithio arnynt o hyd.

Cwestiwn: Pam Kafka? Ydych chi wedi rhoi cynnig ar RabbitMQ? Nid yw Graylog yn adio o dan y fath lwythi?

Ateb: Nid yw'n gweithio allan gyda Graylog. Ac mae Graylog yn cymryd siâp. Mae'n wirioneddol broblemus iddo. Mae e'n fath o beth. Ac, mewn gwirionedd, nid oes ei angen. Byddai'n well gen i ysgrifennu o rsyslog yn uniongyrchol i elasticsearch ac yna gwylio Kibana. Ond mae angen i ni setlo'r mater gyda'r swyddogion diogelwch. Mae hwn yn amrywiad posibl ar ein datblygiad pan fyddwn yn taflu Graylog allan ac yn defnyddio Kibana. Ni fydd Logstash yn gwneud synnwyr. Achos gallaf wneud yr un peth gyda rsyslog. Ac mae ganddo fodiwl i ysgrifennu i elasticsearch. Gyda Graylog rydym yn ceisio byw rhywsut. Fe wnaethon ni hyd yn oed ei addasu ychydig. Ond mae lle i wella o hyd.

Am Kafka. Dyna fel y digwyddodd yn hanesyddol. Pan gyrhaeddais, roedd yno eisoes, ac roedd logiau eisoes yn cael eu hysgrifennu ato. Rydym newydd godi ein clwstwr a symud logiau i mewn iddo. Rydyn ni'n ei reoli, rydyn ni'n gwybod sut mae'n teimlo. O ran RabbitMQ... rydym yn cael trafferth gyda RabbitMQ. Ac mae RabbitMQ yn datblygu i ni. Mae gennym ni wrth gynhyrchu, ac roedd problemau ag ef. Yn awr, cyn y gwerthiant, byddai'n cael ei siamaneiddio, a byddai'n dechrau gweithio'n normal. Ond cyn hynny, nid oeddwn yn barod i'w ryddhau i gynhyrchu. Mae un peth arall. Gall Graylog ddarllen fersiwn AMQP 0.9 a gall rsyslog ysgrifennu fersiwn AMQP 1.0. Ac nid oes un ateb a all wneud y ddau yn y canol. Mae un neu'r llall. Felly am y tro dim ond Kafka. Ond mae yna hefyd arlliwiau. Oherwydd gall omkafka o'r fersiwn o rsyslog a ddefnyddiwn golli'r byffer neges gyfan a gipiodd o rsyslog. Cyn belled â'n bod ni'n goddef hynny.

Cwestiwn: Ydych chi'n defnyddio Kafka oherwydd eich bod wedi ei gael? Heb ei ddefnyddio at unrhyw ddiben arall?

Ateb: Kafka, a ddefnyddiwyd gan y tîm Gwyddor Data. Mae hwn yn brosiect cwbl ar wahân, na allaf, yn anffodus, ddweud dim byd amdano. Dwi ddim yn gwybod. Cafodd ei rhedeg gan y tîm Gwyddor Data. Pan ddechreuodd y logiau, fe benderfynon nhw ei ddefnyddio, er mwyn peidio â rhoi rhai eu hunain. Nawr rydym wedi diweddaru Graylog, ac rydym wedi colli cydnawsedd, oherwydd mae hen fersiwn o Kafka. Roedd yn rhaid i ni wneud ein rhai ein hunain. Ar yr un pryd, cawsom wared ar y pedwar pwnc hyn ar gyfer pob API. Fe wnaethon ni un top llydan i bawb yn fyw, un top llydan llydan ar gyfer pob llwyfan ac rydyn ni'n saethu popeth yno. Mae llwydlog yn cribinio hyn i gyd yn gyfochrog.

Cwestiwn: Pam mae angen y siamaniaeth hon gyda socedi? Ydych chi wedi ceisio defnyddio'r gyrrwr log syslog ar gyfer cynwysyddion.

Ateb: Ar yr adeg y gofynasom y cwestiwn hwn, yr oedd gennym berthynas dyner â'r docwr. Roedd yn docker 1.0 neu 0.9. Roedd Docker ei hun yn rhyfedd. Yn ail, os ydych chi hefyd yn gwthio logiau i mewn iddo ... mae gen i amheuaeth heb ei wirio ei fod yn pasio'r holl logiau trwyddo'i hun, trwy'r daemon docwr. Os oes gennym un API yn mynd yn wallgof, yna bydd gweddill yr APIs yn dod i'r ffaith na allant anfon stdout a stderr. Nid wyf yn gwybod i ble y bydd hyn yn arwain. Mae gennyf amheuaeth ar lefel y teimlad nad oes angen defnyddio gyrrwr y docker syslog yn y lle hwn. Mae gan ein hadran brofi swyddogaethol ei chlwstwr Graylog ei hun gyda logiau. Maen nhw'n defnyddio gyrwyr log docwyr ac mae popeth i'w weld yn iawn yno. Ond ysgrifennant GELF at Graylog ar unwaith. Ar hyn o bryd pan ddechreuon ni hyn i gyd, roedd ei angen arnom i weithio. Efallai yn ddiweddarach, pan ddaw rhywun a dweud ei fod wedi bod yn gweithio fel arfer ers can mlynedd, byddwn yn ceisio.

Cwestiwn: Rydych yn cyflwyno rhwng canolfannau data gan ddefnyddio rsyslog. Beth am fynd ar Kafka?

Ateb: Rydyn ni'n gwneud hyn, a dyma fel y mae mewn gwirionedd. Am ddau reswm. Os yw'r sianel yn gwbl farw, yna ni fydd ein holl foncyffion, hyd yn oed mewn ffurf gywasgedig, yn dringo drwyddi. Ac mae kafka yn caniatáu iddynt golli yn y broses. Yn y modd hwn, rydyn ni'n cael gwared ar lynu'r boncyffion hyn. Dim ond yn yr achos hwn yr ydym yn defnyddio Kafka yn uniongyrchol. Os oes gennym sianel dda ac eisiau ei rhyddhau, yna rydym yn defnyddio eu rsyslog. Ond mewn gwirionedd, gallwch chi ei sefydlu fel ei fod yn gollwng yr hyn na chafodd drwodd. Ar hyn o bryd rydym yn defnyddio dosbarthu rsyslog yn uniongyrchol yn rhywle, yn rhywle Kafka.

Ffynhonnell: hab.com

Ychwanegu sylw