Yuri Bushmelev "Peta rake ing lapangan ngumpulake lan ngirim log" - transkrip laporan

Log minangka bagéyan penting saka sistem, ngijini sampeyan kanggo ngerti sing bisa (utawa ora bisa digunakake) kaya samesthine. Ing arsitektur microservice, nggarap log dadi disiplin kapisah kanggo Olimpiade khusus. Akeh pitakonan sing kudu dirampungake bebarengan:

  • carane nulis log saka aplikasi;
  • ngendi kanggo nulis log;
  • carane ngirim log kanggo panyimpenan lan pangolahan;
  • carane ngolah lan nyimpen log.

Panggunaan teknologi containerization populer saiki nambah wedhi ing ndhuwur rake menyang lapangan pilihan kanggo ngatasi masalah.

Iki minangka transkrip laporan Yuri Bushmelev "Peta rake ing lapangan ngumpulake lan ngirim log".

Sing peduli, mangga ing ngisor kucing.

Jenengku Yuri Bushmelev. Aku kerja ing Lazada. Dina iki aku bakal ngomong babagan carane nggawe log, cara nglumpukake, lan apa sing ditulis ing kana.

Yuri Bushmelev "Peta rake ing lapangan ngumpulake lan ngirim log" - transkrip laporan

Awaké dhéwé saka ngendi? Sapa kita? Lazada minangka pengecer online nomer 1 ing enem negara ing Asia Tenggara. Kabeh negara kasebut disebarake ing antarane pusat data kita. Saiki ana total pusat data 4. Napa iki penting? Amarga sawetara keputusan amarga ana hubungan sing lemah banget ing antarane pusat kasebut. Kita duwe arsitektur microservice. Aku kaget amarga kita wis duwe 80 layanan mikro. Nalika aku miwiti tugas karo log, ana mung 20. Plus ana Piece rada gedhe saka warisan PHP, kang aku uga kudu manggon karo lan sijine munggah karo. Kabeh iki saiki ngasilake luwih saka 6 yuta pesen saben menit kanggo sistem kanthi sakabehe. Sabanjure aku bakal nuduhake carane kita nyoba kanggo manggon karo iki, lan apa iki.

Yuri Bushmelev "Peta rake ing lapangan ngumpulake lan ngirim log" - transkrip laporan

Sampeyan kudu piye wae manggon karo iki 6 yuta pesen. Apa sing kudu kita lakoni karo wong-wong mau? 6 yuta pesen sing sampeyan butuhake:

  • kirim saka app
  • nampa kanggo pangiriman
  • ngirim kanggo analisis lan panyimpenan.
  • kanggo nganalisa
  • nyimpen iku piye wae.

Yuri Bushmelev "Peta rake ing lapangan ngumpulake lan ngirim log" - transkrip laporan

Nalika telung yuta pesen katon, aku katon padha. Amarga kita miwiti mung sawetara sen. Cetha yen log aplikasi ditulis ing kana. Contone, aku ora bisa nyambung menyang database, aku bisa nyambung menyang database nanging aku ora bisa maca apa-apa. Nanging saliyane iki, saben layanan mikro uga nulis log akses. Saben panjalukan sing teka ing layanan mikro dicathet ing log. Yagene kita nindakake iki? Pangembang pengin bisa nglacak. Saben log akses ngandhut kolom traceid, nggunakake antarmuka khusus banjur unwinds kabeh chain lan apik nampilake tilak. Tilak kasebut nuduhake kepiye panjaluk kasebut, lan iki mbantu para pangembang kanthi cepet ngatasi sampah sing ora dingerteni.

Yuri Bushmelev "Peta rake ing lapangan ngumpulake lan ngirim log" - transkrip laporan

Carane manggon karo iki? Saiki aku bakal njlèntrèhaké sedhela lapangan opsi - carane masalah iki umume ditanggulangi. Carane ngatasi masalah ngumpulake, ngirim lan nyimpen log.

Yuri Bushmelev "Peta rake ing lapangan ngumpulake lan ngirim log" - transkrip laporan

Kepiye carane nulis saka aplikasi? Cetha yen ana macem-macem cara. Utamane, ana praktik paling apik, kaya sing dicritakake kanca-kanca modis. Ana rong jinis sekolah lawas, kaya sing dicritakake simbah. Ana cara liyane.

Yuri Bushmelev "Peta rake ing lapangan ngumpulake lan ngirim log" - transkrip laporan

Kahanan karo ngumpulake log kira-kira padha. Ora ana akeh pilihan kanggo ngrampungake bagean tartamtu iki. Wis luwih akeh, nanging durung akeh.

Yuri Bushmelev "Peta rake ing lapangan ngumpulake lan ngirim log" - transkrip laporan

Nanging kanthi pangiriman lan analisis sakteruse, jumlah variasi wiwit njeblug. Aku ora bakal njlèntrèhaké saben opsi saiki. Aku pilihan utama uga dikenal kanggo saben wong sing kasengsem ing topik.

Yuri Bushmelev "Peta rake ing lapangan ngumpulake lan ngirim log" - transkrip laporan

Aku bakal nuduhake sampeyan carane kita nindakake ing Lazada, lan carane kabeh iku bener diwiwiti.

Yuri Bushmelev "Peta rake ing lapangan ngumpulake lan ngirim log" - transkrip laporan

Setaun kepungkur aku teka ing Lazada lan dikirim menyang proyek babagan log. Iku kaya iki. Log aplikasi ditulis kanggo stdout lan stderr. Kabeh ditindakake kanthi cara sing modis. Nanging banjur para pangembang mbuwang metu saka aliran standar, banjur piye wae spesialis infrastruktur bakal ngerti. Antarane spesialis infrastruktur lan pangembang, uga ana sing ngeculake sing ujar: "eh ... oke, ayo bungkus file nganggo cangkang, lan mung." Lan wiwit kabeh iki ana ing wadhah, padha kebungkus langsung ing wadhah dhewe, peta katalog nang lan sijine ing kono. Aku iku cantik ketok kanggo everyone apa teka saka iku.

Yuri Bushmelev "Peta rake ing lapangan ngumpulake lan ngirim log" - transkrip laporan

Ayo katon luwih dhisik kanggo saiki. Kepiye carane ngirim log kasebut? Ana sing milih td-agen, sing bener-bener lancar, nanging ora lancar. Aku isih ora ngerti hubungan antarane loro proyèk iki, nanging padha koyone bab padha. Lan iki fluentd, ditulis ing Ruby, maca file log, parsed menyang JSON nggunakake sawetara jenis reguler. Banjur aku dikirim menyang Kafka. Kajaba iku, ing Kafka kita duwe 4 topik sing kapisah kanggo saben API. Kenapa 4? Amarga ana urip, ana pementasan, lan amarga ana stdout lan stderr. Pangembang nggawe, lan pangembang infrastruktur kudu nggawe ing Kafka. Kajaba iku, Kafka dikontrol dening departemen liyane. Mulane, kudu nggawe tiket supaya bisa nggawe 4 topik kanggo saben api. Kabeh padha lali. Umume, ana sampah lan keributan.

Yuri Bushmelev "Peta rake ing lapangan ngumpulake lan ngirim log" - transkrip laporan

Apa sing ditindakake sabanjure karo iki? Kita ngirim menyang Kafka. Banjur setengah saka log saka Kafka mabur menyang Logstash. Setengah liyane saka log dipérang. Sawetara mabur menyang siji Graylog, sawetara menyang Graylog liyane. Akibaté, kabeh iki dadi siji klompok Elasticsearch. Tegese, kabeh kekacoan iki rampung ing kono. Aja ngono!

Yuri Bushmelev "Peta rake ing lapangan ngumpulake lan ngirim log" - transkrip laporan

Iki sing katon yen sampeyan ndeleng saka ndhuwur. Aja ngono! Kene wilayah masalah langsung ditandhani karo nomer. Ana luwih akeh, nanging 6 pancen masalah sing kudu ditindakake. Aku bakal pitutur marang kowe bab mau dhewe saiki.

Yuri Bushmelev "Peta rake ing lapangan ngumpulake lan ngirim log" - transkrip laporan

Ing kene (1,2,3) kita nulis file lan, kanthi mangkono, ana telung rakes ing kene bebarengan.

Kapisan (1) yaiku kita kudu nulis ing ngendi wae. Iku ora tansah dadi seng di pengeni kanggo menehi API kemampuan kanggo nulis langsung menyang file. Apike yen API diisolasi ing wadhah, utawa luwih apik, mung diwaca. Aku administrator sistem, dadi aku duwe tampilan rada alternatif bab iki.

Titik kapindho (2,3) yaiku akeh panjaluk sing teka ing API. API nulis akeh data menyang file. File-file saya tambah akeh. Kita kudu muter wong-wong mau. Amarga yen ora, sampeyan ora bakal bisa nyimpen ing sembarang disk ana. Puteran iku ala amarga digawe kanthi ngarahake liwat cangkang menyang direktori. Ora ana cara sing bisa kita revisi. Sampeyan ora bisa ngandhani aplikasi kanggo mbukak maneh gagang. Amarga pangembang bakal ndeleng sampeyan kaya wong bodho: "Deskriptor apa? Umume kita nulis menyang stdout. Pangembang infrastruktur nggawe copytruncate kanggo logrotate, sing mung nggawe salinan file lan nyalin sing asli. Mulane, ing antarane proses nyalin iki, ruang disk biasane entek.

(4) Kita duwe macem-macem format ing macem-macem API. Padha rada beda, nanging regexp kudu ditulis beda. Wiwit kabeh iki dikendhaleni dening Wayang, ana akeh kelas sing duwe kecoak dhewe. Plus, paling wektu td-agen bisa mangan memori, dadi bodho, iku mung bisa ndalang sing apa lan nindakake apa-apa. Saka njaba ora bisa dingerteni yen dheweke ora nindakake apa-apa. Paling apik, dheweke bakal tiba lan ana sing bakal njupuk dheweke mengko. Luwih tepat, tandha bakal teka, lan ana sing bakal ngangkat tangane.

Yuri Bushmelev "Peta rake ing lapangan ngumpulake lan ngirim log" - transkrip laporan

(6) Lan sampah lan sampah sing paling akeh yaiku elasticsearch. Amarga iku versi lawas. Amarga kita ora duwe master khusus nalika iku. Kita duwe log heterogen sing lapangan bisa tumpang tindih. Log sing beda saka aplikasi sing beda bisa ditulis nganggo jeneng lapangan sing padha, nanging bisa uga ana data sing beda ing njero. Yaiku, siji log dilengkapi Integer ing lapangan, contone, level. Log liyane dilengkapi String ing lapangan level. Yen ora ana pemetaan statis, iki pancen apik banget. Yen, sawise muter indeks ing elasticsearch, pesen karo senar teka pisanan, banjur kita urip normal. Nanging yen sing pisanan teka saka Integer, kabeh pesen sabanjure sing teka saka String bakal dibuwang. Amarga jinis lapangan ora cocog.

Yuri Bushmelev "Peta rake ing lapangan ngumpulake lan ngirim log" - transkrip laporan

Kita miwiti takon pitakonan iki. Kita mutusake supaya ora golek sing disalahake.

Yuri Bushmelev "Peta rake ing lapangan ngumpulake lan ngirim log" - transkrip laporan

Nanging ana sing kudu ditindakake! Sing jelas yaiku kita kudu netepake standar. Kita wis duwe sawetara standar. Kita miwiti sawetara sethitik mengko. Untunge, format log siji kanggo kabeh API wis disetujoni nalika iku. Iki ditulis langsung menyang standar kanggo interaksi antarane layanan. Mulane, sing pengin nampa log kudu nulis ing format iki. Yen ana wong sing ora nulis log ing format iki, mula kita ora njamin apa-apa.

Sabanjure, aku pengin nggawe standar terpadu kanggo cara ngrekam, ngirim lan ngumpulake log. Bener, ngendi kanggo nulis, lan carane ngirim. Kahanan sing cocog yaiku nalika proyek nggunakake perpustakaan sing padha. Ana perpustakaan logging kapisah kanggo Go, lan perpustakaan kapisah kanggo PHP. Saben uwong kudu nggunakake. Ing wayahe, aku bakal ngomong yen kita 80 persen sukses ing iki. Nanging sawetara wong terus mangan kaktus.

Lan ing kana (ing geser) "SLA kanggo pangiriman log" meh ora katon. Iku durung ana, nanging kita lagi nggarap. Amarga iku trep banget nalika prasarana ngandika yen sampeyan nulis ing format kuwi lan kuwi panggonan lan ora luwih saka N pesen per detik, banjur kita bakal paling kamungkinan ngirim menyang panggonan kuwi lan kuwi. Iki ngilangi akeh ngelu. Yen ana SLA, iki pancen apik tenan!

Yuri Bushmelev "Peta rake ing lapangan ngumpulake lan ngirim log" - transkrip laporan

Kepiye carane kita miwiti ngatasi masalah kasebut? Masalah utama yaiku td-agen. Ora jelas menyang endi log kita. Apa padha dikirim? Apa padha arep? Ana ngendi wae? Mulane, titik pisanan diputusake kanggo ngganti td-agen. Aku wis sedhela mbatesi opsi kanggo apa kanggo ngganti karo kene.

Fluentd. Kaping pisanan, aku nemoni dheweke ing proyek sadurunge, lan dheweke uga tiba ing kono. Sareh, iki bab sing padha, mung ing profil.

Filebeat. Kepiye carane trep kanggo kita? Amarga iku ing Go, lan kita duwe akeh keahlian ing Go. Mulane, yen ana kedadeyan, kita bisa nambah kanggo awake dhewe. Mulane kita ora njupuk. Supaya ora ana godaan kanggo miwiti nulis maneh dhewe.

Solusi sing jelas kanggo administrator sistem yaiku kabeh jinis syslogs ing jumlah iki (syslog-ng/rsyslog/nxlog).

Utawa nulis soko dhewe, nanging kita dibuwak iki, uga filebeat. Yen sampeyan nulis apa-apa, luwih becik nulis sing migunani kanggo bisnis. Kanggo ngirim log, luwih becik njupuk barang sing wis siap.

Mulane, pilihan bener teka menyang pilihan antarane syslog-ng lan rsyslog. Aku leaned menyang rsyslog mung amarga kita wis duwe kelas kanggo rsyslog ing Wayang, lan aku ora nemokake prabédan ketok antarane wong-wong mau. Apa syslog, apa syslog. Ya, sawetara duwe dokumentasi sing luwih elek, sawetara luwih apik. Sing siji bisa nindakake kanthi cara iki, lan sing liyane bisa nindakake kanthi cara sing beda.

Yuri Bushmelev "Peta rake ing lapangan ngumpulake lan ngirim log" - transkrip laporan

Lan sethitik babagan rsyslog. Kaping pisanan, kelangan amarga akeh modul. Wis RainerScript sing bisa diwaca manungsa (basa konfigurasi modern). Iku bonus apik tenan sing kita bisa niru prilaku td-agen nggunakake alat standar, lan ora diganti kanggo aplikasi. Sing, kita ngganti td-agen kanggo rsyslog, lan ninggalake kabeh liyane piyambak kanggo saiki. Lan kita langsung nampa pangiriman kerja. Sabanjure, mmnormalize minangka perkara sing apik tenan ing rsyslog. Iku ngijini sampeyan kanggo parse log, nanging ora nggunakake Grok lan regexp. Iku nggawe wit sintaksis abstrak. Iku parses log kanthi cara sing padha karo compiler parses sumber. Iki ngidini sampeyan bisa cepet banget, ngonsumsi CPU sethithik, lan, umume, iku pancen keren. Ana akeh bonus liyane. Aku ora bakal mikir babagan dheweke.

Yuri Bushmelev "Peta rake ing lapangan ngumpulake lan ngirim log" - transkrip laporan

rsyslog duwe akeh cacat liyane. Padha bab bonus. Masalah utama yaiku sampeyan kudu ngerti carane masak, lan sampeyan kudu milih versi.

Yuri Bushmelev "Peta rake ing lapangan ngumpulake lan ngirim log" - transkrip laporan

Kita mutusake yen kita bakal nulis log menyang soket unix. Lan ora ing / dev / log, amarga ana kekacoan log sistem, journald ana ing pipa iki. Dadi ayo nulis menyang soket khusus. Kita bakal masang menyang ruleset kapisah. Ayo ora ngganggu apa-apa. Kabeh bakal transparan lan bisa dingerteni. Semono uga sing ditindakake. Direktori karo soket iki standar lan diterusake menyang kabeh kontaner. Wadhah bisa ndeleng soket sing dibutuhake, mbukak lan nulis.

Apa ora file? Amarga kabeh wong maca artikel bab Badushechka, sing nyoba nerusake file menyang docker, lan ditemokake yen sawise miwiti maneh rsyslog, deskriptor file diganti, lan docker ilang file iki. Iku tetep soko liyane mbukak, nanging ora soket ngendi padha nulis. Kita mutusake yen bakal ngatasi masalah iki, lan ing wektu sing padha, kita bakal ngatasi masalah pamblokiran.

Yuri Bushmelev "Peta rake ing lapangan ngumpulake lan ngirim log" - transkrip laporan

Rsyslog nindakake tumindak sing dituduhake ing slide lan ngirim log menyang relay utawa Kafka. Kafka ngetutake cara lawas. Relay - Aku nyoba nggunakake rsyslog murni kanggo ngirim log. Tanpa Antrian Pesen, nggunakake alat rsyslog standar. Sejatine, kerjane.

Yuri Bushmelev "Peta rake ing lapangan ngumpulake lan ngirim log" - transkrip laporan

Nanging ana nuansa carane push menyang bagean iki (Logstash / Graylog / ES). Bagian iki (rsyslog-rsyslog) digunakake ing antarane pusat data. Iki minangka tautan tcp sing dikompres, sing ngidini kita ngirit bandwidth lan, kanthi mangkono, bisa nambah kemungkinan kita bakal nampa sawetara log saka pusat data liyane nalika saluran kasebut macet. Amarga kita duwe Indonesia, sing kabeh ala. Iki ngendi masalah pancet dumunung.

Yuri Bushmelev "Peta rake ing lapangan ngumpulake lan ngirim log" - transkrip laporan

Kita mikir babagan carane bisa ngawasi kepiye manawa log sing direkam saka aplikasi bakal tekan pungkasan? Kita mutusake nggawe metrik. rsyslog wis modul koleksi statistik dhewe, kang ngandhut sawetara jenis counters. Contone, bisa nuduhake ukuran antrian, utawa jumlah pesen sing wis teka ing tumindak kasebut. Sampeyan wis bisa njupuk soko saka wong-wong mau. Plus, wis counters adat sing bisa diatur, lan bakal nuduhake sampeyan, contone, nomer pesen sing sawetara API direkam. Sabanjure, aku nulis rsyslog_exporter ing Python, lan kita ngirim kabeh menyang Prometheus lan nggawe grafik. Kita pancene pengin metrik Graylog, nanging durung duwe wektu kanggo nyetel.

Yuri Bushmelev "Peta rake ing lapangan ngumpulake lan ngirim log" - transkrip laporan

Apa masalahe? Masalah muncul nalika kita nemokake (DUGA!) manawa Live API kita nulis 50k pesen per detik. Iki mung Live API tanpa pementasan. Lan Graylog nuduhake kita mung 12 ewu pesen per detik. Lan ana pitakonan sing cukup: ngendi sisa-sisa? Saka ngendi kita nyimpulake yen Graylog ora bisa ngatasi. Kita nyawang, lan, pancen, Graylog lan Elasticsearch ora bisa nangani aliran iki.

Sabanjure, panemuan liyane sing ditindakake ing dalan.

Nulis menyang soket diblokir. Kepriye kedadeyane? Nalika aku nggunakake rsyslog kanggo pangiriman, ing sawetara titik saluran antarane pusat data rusak. Pangiriman mandheg ing sak panggonan, kiriman mandheg ing papan liya. Kabeh iki wis tekan mesin karo API sing nulis menyang soket rsyslog. Ing kana ana antrian. Banjur antrian kanggo nulis menyang soket unix, sing minangka standar yaiku 128 paket, diisi. Lan nulis sabanjuré () ing aplikasi diblokir. Nalika kita ndeleng perpustakaan sing digunakake ing aplikasi Go, ana tulisan sing nulis menyang soket ana ing mode non-blocking. Kita yakin manawa ora ana sing diblokir. Amarga kita maca artikel bab Badushechkasing nulis bab iku. Nanging ana wayahe. Ana uga daur ulang tanpa wates watara telpon iki, kang ana usaha pancet kanggo push pesen menyang soket. Kita ora nggatekake dheweke. Aku kudu nulis ulang perpustakaan. Wiwit iku wis diganti kaping pirang-pirang, nanging saiki kita wis nyisihaken saka pamblokiran ing kabeh subsistem. Mulane, sampeyan bisa mungkasi rsyslog, lan ora bakal nabrak.

Perlu kanggo ngawasi ukuran antrian, sing mbantu supaya ora mlaku ing rake iki. Pisanan, kita bisa ngawasi nalika kita wiwit ilang pesen. Kapindho, kita bisa ngawasi manawa ana masalah karo pangiriman.

Lan wayahe ora nyenengake - amplifikasi kaping 10 ing arsitektur microservice gampang banget. Kita ora duwe akeh panjalukan sing mlebu, nanging amarga grafik sing dikirim pesen kasebut luwih akeh, amarga log akses, kita bener nambah beban log kira-kira kaping sepuluh. Sayange, aku ora duwe wektu kanggo ngetung nomer pas, nanging microservices iku apa. Iki kudu dieling-eling. Pranyata saiki subsistem koleksi log paling akeh dimuat ing Lazada.

Yuri Bushmelev "Peta rake ing lapangan ngumpulake lan ngirim log" - transkrip laporan

Kepiye cara ngatasi masalah elasticsearch? Yen sampeyan kudu cepet njaluk log ing sak panggonan, supaya dadi ora kanggo mbukak watara kanggo kabeh mesin lan ngumpulake ing kono, nggunakake panyimpenan file. Iki dijamin bisa. Bisa ditindakake saka server apa wae. Sampeyan mung kudu nempel disk ing kana lan nginstal syslog. Sawise iki, sampeyan dijamin duwe kabeh log ing sak panggonan. Banjur sampeyan bisa kanthi alon ngatur elasticsearch, graylog, lan liya-liyane. Nanging sampeyan wis duwe kabeh log, lan, liyane, sampeyan bisa nyimpen minangka adoh minangka ana cukup susunan disk.

Yuri Bushmelev "Peta rake ing lapangan ngumpulake lan ngirim log" - transkrip laporan

Ing wektu laporan, skema wiwit katon kaya iki. Kita meh mandheg nulis menyang file kasebut. Saiki, paling kamungkinan, kita bakal mateni liyane. Ing mesin lokal sing nganggo API, kita bakal mandheg nulis menyang file. Kaping pisanan, ana panyimpenan file, sing dianggo kanthi apik. Kapindho, mesin-mesin iki terus-terusan kehabisan papan, kudu terus dipantau.

Iki bagean karo Logstash lan Graylog, iku pancene njupuk mati. Mula, kita kudu nyingkirake. Sampeyan kudu milih siji bab.

Yuri Bushmelev "Peta rake ing lapangan ngumpulake lan ngirim log" - transkrip laporan

Kita mutusake kanggo mbuwang Logstash lan Kibana. Amarga kita duwe departemen keamanan. sambungan apa? Sambungan kasebut yaiku Kibana tanpa X-Pack lan tanpa Shield ora ngidini sampeyan mbedakake hak akses menyang log. Mulane kita njupuk Graylog. Wis kabeh. Aku ora seneng, nanging bisa. We tuku hardware anyar, diinstal Graylog seger ana lan ditransfer kabeh log karo format ketat kanggo Graylog kapisah. Kita ngrampungake masalah kasebut kanthi macem-macem jinis lapangan sing padha kanthi organisasi.

Yuri Bushmelev "Peta rake ing lapangan ngumpulake lan ngirim log" - transkrip laporan

Apa persis kalebu ing Graylog anyar. Kita mung nulis kabeh menyang docker. We njupuk Bunch saka server, mbalek metu telung kasus Kafka, 7 server Graylog versi 2.3 (amarga kita pengin Elasticsearch versi 5). Kabeh iki dijupuk sak gropyokan saka HDD. Kita weruh tingkat indeksasi nganti 100 ewu pesen per detik. Kita weruh angka sing 140 terabyte data saben minggu.

Yuri Bushmelev "Peta rake ing lapangan ngumpulake lan ngirim log" - transkrip laporan

Lan maneh rake! We duwe loro dodolan teka munggah. Kita pindhah ngluwihi 6 yuta pesen. Graylog ora duwe wektu kanggo ngunyah. Piye wae kita kudu slamet maneh.

Yuri Bushmelev "Peta rake ing lapangan ngumpulake lan ngirim log" - transkrip laporan

Iki carane kita slamet. Kita nambah sawetara server lan SSD liyane. Ing wayahe kita urip kanthi cara iki. Saiki kita wis ngunyah 160k pesen per detik. Kita durung nggayuh watesan, mula ora jelas kepiye kita bisa metu saka iki.

Yuri Bushmelev "Peta rake ing lapangan ngumpulake lan ngirim log" - transkrip laporan

Iki minangka rencana kanggo masa depan. Saka jumlah kasebut, sing paling penting yaiku kasedhiyan dhuwur. Kita durung duwe. Sawetara mobil dikonfigurasi kanthi cara sing padha, nanging nganti saiki kabeh wis liwat siji mobil. Perlu wektu kanggo nyetel failover ing antarane.

Nglumpukake metrik saka Graylog.

Nggawe watesan tarif supaya kita duwe API gila sing ora mateni bandwidth lan liya-liyane.

Lan pungkasanipun, mlebu sawetara jenis SLA karo pangembang supaya kita bisa ngawula akeh. Yen sampeyan nulis luwih akeh, aku njaluk ngapura.

Lan nulis dokumentasi.

Yuri Bushmelev "Peta rake ing lapangan ngumpulake lan ngirim log" - transkrip laporan

Sedhela, asil kabeh sing kita alami. First, standar. Kapindho, syslog yaiku kue. Katelu, rsyslog dianggo persis kaya sing ditulis ing slide. Lan ayo pindhah menyang pitakonan.

Pitakonan.

Pitakonan sampeyan: Kowe kok mutusake ora njupuk... (filebeat?)

Nuwun: Kita kudu nulis menyang file. Aku pancene ora pengin. Nalika API sampeyan nulis ewonan pesen per detik, sanajan sampeyan muter sepisan saben jam, iki ora dadi pilihan. Sampeyan bisa nulis ing pipa. Sing pangembang takon marang aku: "Apa sing bakal kelakon yen proses sing kita tulis kanggo nabrak?" Aku mung ora nemokake apa sing kudu dijawab, lan kandha: "Inggih, ok, ayo ora nglakoni."

Pitakonan sampeyan: Apa sampeyan ora nulis log menyang HDFS?

Nuwun: Iki tataran sabanjure. Kita mikir babagan iki ing wiwitan, nanging amarga saiki ora ana sumber daya kanggo nindakake iki, mula ana ing solusi jangka panjang.

Pitakonan sampeyan: Format kolom bakal luwih cocok.

Nuwun: Kula ngertos. We are kanggo karo tangan loro.

Pitakonan sampeyan: Sampeyan nulis kanggo rsyslog. Ing kana sampeyan bisa nggunakake TCP lan UDP. Nanging yen UDP, banjur kepiye sampeyan njamin pangiriman?

Nuwun: Ana rong titik. Kaping pisanan, aku langsung ngandhani kabeh wong yen kita ora njamin pangiriman log. Amarga nalika pangembang teka lan ngandika: "Ayo dadi miwiti nulis data financial ana, lan sampeyan bakal sijine iku nang endi wae kanggo kita ing kasus soko kedaden,"Kita njawab wong, "Great! Ayo miwiti mblokir ing nulis menyang soket, lan nindakake iki ing transaksi, supaya sampeyan dijamin sijine ing soket kanggo kita lan priksa manawa kita nampa saka sisih liyane. Lan ing wektu iki, kabeh wong langsung ora butuh maneh. Yen ora perlu, banjur pitakonan apa sing kudu ditakoni? Yen sampeyan ora pengin njamin nulis menyang soket, banjur kenapa kita kudu njamin pangiriman? Kita nindakake usaha sing paling apik. Kita pancene nyoba kanggo ngirim okehe lan ing cara sing paling apik, nanging kita ora menehi 100% njamin. Mulane, ora perlu nulis data finansial ing kana. Ana database karo transaksi kanggo iki.

Pitakonan sampeyan: Nalika API ngasilake sawetara pesen ing log lan nransfer kontrol kanggo microservices, sampeyan wis nemokke masalah sing pesen saka microservices beda teka ing urutan salah? Iki nyebabake kebingungan.

Nuwun: Biasane tekane beda-beda. Sampeyan kudu disiapake kanggo iki. Amarga sembarang pangiriman jaringan ora njamin supaya, utawa sampeyan kudu nglampahi sumber daya khusus iki. Yen kita njupuk panyimpenan file, saben API nyimpen log menyang file dhewe. Utawa, ana rsyslog ngurutake menyang direktori. Saben API wis log dhewe, ngendi sampeyan bisa pindhah lan katon, banjur sampeyan bisa mbandhingaké nggunakake timestamp ing log iki. Yen padha golek ing Graylog, banjur diurutake miturut timestamp. Kabeh bakal apik ing kono.

Pitakonan sampeyan: Stempel wektu bisa beda-beda miturut milidetik.

Nuwun: Timestamp digawe dening API dhewe. Iki, ing kasunyatan, kabeh titik. Kita duwe NTP. API ngasilake timestamp ing pesen kasebut dhewe. rsyslog ora nambah.

Pitakonan sampeyan: Interaksi antarane pusat data ora cetha banget. Ing pusat data, jelas carane log diklumpukake lan diproses. Kepiye interaksi antarane pusat data? Utawa saben pusat data urip dhewe?

Nuwun: Meh. Ing negara kita, saben negara dumunung ing siji pusat data. Ing wayahe, kita ora duwe panyebaran supaya siji negara dumunung ing pusat data beda. Mulane, ora perlu kanggo gabungke. Saben tengah wis Log Relay nang. Iki minangka server Rsyslog. Bener loro mesin manajemen. Padha duwe sikap sing padha. Nanging saiki, lalu lintas mung ngliwati salah sijine. Iku aggregates kabeh log. Dheweke duwe antrian disk mung ing kasus. Ngundhuh log lan dikirim menyang pusat data tengah (Singapore), banjur dikirim menyang Graylog. Lan saben pusat data duwe panyimpenan file dhewe. Ing kasus sambungan kita ilang, kita duwe kabeh log ana. Padha bakal tetep ana. Padha bakal disimpen ing kono.

Pitakonan sampeyan: Yen ana kahanan sing ora normal, apa sampeyan nampa log saka kono?

Nuwun: Sampeyan bisa pindhah ana (menyang panyimpenan file) lan katon.

Pitakonan sampeyan: Carane sampeyan ngawasi yen sampeyan ora kelangan log?

Nuwun: Kita bener-bener ilang, lan kita ngawasi. Pemantauan diluncurake sasi kepungkur. Pustaka sing digunakake Go API nduweni metrik. Dheweke bisa ngitung kaping pirang-pirang dheweke ora bisa nulis menyang soket. Saiki ana heuristik sing pinter ing kana. Ana buffer ing kono. Iku nyoba kanggo nulis pesen saka iku menyang soket. Yen buffer overflows, iku wiwit nyelehake mau. Lan dheweke ngetung pira sing dicelupake. Yen meter wiwit kebanjiran ing kana, kita bakal ngerti. Dheweke saiki uga teka ing prometheus, lan sampeyan bisa ndeleng grafik ing Grafana. Sampeyan bisa nyetel tandha. Nanging durung jelas marang sapa sing arep dikirim.

Pitakonan sampeyan: Ing elasticsearch sampeyan nyimpen log kanthi redundansi. Pira replika sing sampeyan duwe?

Nuwun: Siji baris.

Pitakonan sampeyan: Iki mung siji baris?

Nuwun: Iki master lan replika. Data disimpen ing rong salinan.

Pitakonan sampeyan: Apa sampeyan nyetel ukuran buffer rsyslog piye wae?

Nuwun: Kita nulis datagram menyang soket unix khusus. Iki langsung ngetrapake watesan 128 kilobyte kanggo kita. Kita ora bisa nulis luwih akeh. Kita wis nulis iki menyang standar. Sing pengin mlebu panyimpenan nulis 128 kilobyte. Perpustakaan, malih, dipotong, lan gendéra dipasang sing pesen kasebut dipotong. Standar kita kanggo pesen kasebut dhewe duwe lapangan khusus sing nuduhake manawa pesen kasebut dipotong nalika ngrekam utawa ora. Dadi kita duwe kesempatan kanggo nglacak wektu iki uga.

Pitakonan: Apa sampeyan nulis JSON sing rusak?

Nuwun: JSON sing rusak bakal dibuwang sajrone relay amarga paket kasebut gedhe banget. Utawa Graylog bakal dibuwang amarga ora bisa ngurai JSON. Nanging ana nuansa sing kudu didandani, lan biasane diikat karo rsyslog. Aku wis ngisi sawetara masalah ing kana, sing isih kudu digarap.

Pitakonan: Kenapa Kafka? Apa sampeyan wis nyoba RabbitMQ? Apa Graylog gagal ing beban kasebut?

Nuwun: Iku ora bisa kanggo kita karo Graylog. Lan Graylog njupuk wangun kanggo kita. Dheweke pancen masalah. Dheweke pancen aneh. Lan, nyatane, ora perlu. Aku luwih seneng nulis saka rsyslog langsung menyang elasticsearch banjur deleng Kibana. Nanging kita kudu ngrampungake masalah karo pengawal keamanan. Iki minangka pilihan sing bisa ditindakake nalika kita mbuwang Graylog lan nggunakake Kibana. Ora ana gunane nggunakake Logstash. Amarga aku bisa nindakake perkara sing padha karo rsyslog. Lan duwe modul kanggo nulis menyang elasticsearch. Kita nyoba kanggo manggon piye wae karo Graylog. Kita malah nyetel munggah sethitik. Nanging isih ana papan kanggo dandan.

Babagan Kafka. Iki kedadeyan kanthi sejarah. Nalika aku teka, iku wis ana, lan log wis ditulis kanggo. Kita mung ngunggahake kluster lan mindhah log menyang. Kita minangka manajemen, kita ngerti kepiye perasaane. Minangka kanggo RabbitMQ ... ora bisa digunakake kanggo kita karo RabbitMQ. Lan RabbitMQ dadi wujud kanggo kita. We duwe ing produksi, lan ana masalah karo. Saiki, sadurunge adol, dheweke bakal narik kawigaten, lan dheweke bakal kerja kanthi normal. Nanging sadurunge aku durung siap kanggo nerbitaké menyang produksi. Ana siji titik maneh. Graylog bisa maca versi AMQP 0.9, lan rsyslog bisa nulis versi AMQP 1.0. Lan ora ana solusi siji ing tengah sing bisa nindakake loro-lorone. Iku salah siji utawa liyane. Mulane, ing wayahe mung Kafka. Nanging uga nduweni nuansa dhewe. Amarga omkafka saka versi rsyslog sing digunakake bisa ilang kabeh buffer pesen sing raked metu saka rsyslog. Kanggo saiki kita sijine munggah karo.

Pitakonan: Apa sampeyan nggunakake Kafka amarga sampeyan wis duwe? Ora digunakake maneh kanggo maksud apa wae?

Nuwun: Kafka, yaiku, digunakake dening tim Ilmu Data. Iki minangka proyek sing kapisah, sayangé, aku ora bisa ngomong apa-apa. Aku ora ngerti. Iki dikelola dening tim Ilmu Data. Nalika log digawe, kita mutusake kanggo nggunakake supaya ora nginstal dhewe. Saiki kita wis nganyari Graylog, lan kita wis ilang kompatibilitas amarga wis versi lawas saka Kafka. Kita kudu miwiti dhewe. Ing wektu sing padha, kita nyingkirake papat topik iki kanggo saben API. We digawe siji topik sudhut kanggo kabeh urip, siji topik sudhut sudhut kanggo kabeh pementasan lan mung sijine kabeh ana. Graylog scrapes kabeh iki metu ing podo karo.

Pitakonan: Kenging menapa kedahipun dukun menika kanthi soket? Apa sampeyan wis nyoba nggunakake driver log syslog kanggo wadhah?

Nuwun: Nalika kita takon pitakonan iki, hubungan kita karo docker tegang. Iku docker 1.0 utawa 0.9. Docker dhewe aneh. Sareh, yen sampeyan uga push log menyang ... Aku duwe anggepan unverified sing liwat kabeh log liwat dhewe, liwat daemon docker. Yen siji API dadi edan, banjur liyane saka API macet ing kasunyatan sing padha ora bisa ngirim stdout lan stderr. Aku ora ngerti ngendi iki bakal mimpin. Aku duwe anggepan ing tingkat koyo sing ora perlu nggunakake driver syslog Docker ing panggonan iki. Departemen testing fungsi kita duwe kluster Graylog dhewe karo log. Dheweke nggunakake driver log Docker lan kabeh katon apik. Nanging dheweke langsung nulis GELF menyang Graylog. Ing wektu nalika kita miwiti kabeh iki, kita mung perlu kanggo bisa. Mbok menawa mengko, yen ana wong teka lan ujar manawa wis satus taun kerjane, kita bakal nyoba.

Pitakonan: Sampeyan nindakake pangiriman antarane pusat data nggunakake rsyslog. Apa ora Kafka?

Nuwun: Kita nindakake loro-lorone. Kanggo rong alasan. Yen saluran rampung mati, kabeh log kita, sanajan ing wangun kompres, ora bakal nyusup. Lan Kafka ngidini sampeyan ilang ing proses kasebut. Iki carane kita njaluk nyisihaken saka log iki macet. Kita mung nggunakake Kafka langsung ing kasus iki. Yen kita duwe saluran sing apik lan pengin mbebasake, mula kita nggunakake rsyslog. Nanging nyatane, sampeyan bisa ngatur supaya bisa ngeculake apa sing ora cocog. Ing wayahe, kita mung nggunakake pangiriman rsyslog langsung nang endi wae, lan Kafka nang endi wae.

Source: www.habr.com

Add a comment