Denbora, nerbioak eta gizon-orduak aurrezten ditugu

Gure proiektuak eskualdekoak izan ohi dira, eta bezeroak ministerioak izan ohi dira. Baina, sektore publikoaz gain, erakunde pribatuek ere erabiltzen dituzte gure sistemak. Haiekin ia ez dago arazorik.

Beraz, proiektu nagusiak eskualdekoak dira, eta batzuetan arazoak izaten dira haiekin. Adibidez, errendimenduarekin, eskualdeetan gure erabiltzaile preziatuetatik 20k baino gehiago daudenean produktuen zerbitzarietan funtzionalitate berriak zabaltzeko garaian. Mina da…

Nire izena Ruslan da eta BARS Group-en informazio-sistemak onartzen ditut eta killer bot bat garatzea serieko DBA bortitzarako. Mezu hau ez da bihotz ahulenentzat - gutun eta irudi asko daude.

Denbora, nerbioak eta gizon-orduak aurrezten ditugu

/awr

Gure aplikazioetako batzuk Oracle DBMSn exekutatzen dira. PostgreSQL DBMS-en proiektuak ere badaude. Oracle-k gauza zoragarria du - DBMSko kargari buruzko estatistikak biltzea, dauden arazoak nabarmentzen dituena eta ezabatzeko gomendioak ere egiten dituena - Automatikoa Lan-kargaren biltegia (AWR). Une batean (minaren unean hain zuzen), garatzaileek etengabe biltzeko eskatu zuten AWR txostenak errendimendua aztertzeko. Zintzotasunez DBMS zerbitzarira joan ginen, txostenak bildu, gurera eraman eta ekoizpenera bidali genituen aztertzeko. 5. aldiaren ondoren gogaikarria bihurtu zen... 10.aren ostean haserretu egin zen...

Nire lankide batek behin baino gehiagotan egiten den guztia automatizatu behar dela adierazi zuen behin. Narritadura unera arte, egia esateko, ez nuen horretan pentsatu eta automatizatu zitekeen guztia automatizatzen saiatu nintzen, baina askotan ez zen eskatzen eta izaera aplikatua baino ikerketa bat zen.

Eta orduan pentsatu nuen: "Administratzaileak ez dira behar txosten bat sortzeko...". Azken finean, txosten bat biltzeak @$ORACLE_HOME/rdbms/admin/awrrpt.sql sql scripta exekutatzea eta txostena zerbitzaritik zure lekura eramatea esan nahi du... Bai, ez dugu ekoizpenerako garapena onartzen.

Ondoren, beharrezko informazioa Google bilatu nuen, proba oinarriko artikulutik funtzioa sortu nuen, gidoia eta miraria exekutatu nuen - txostena bildu zen eta lokalean gorde daiteke. AWR txostenak askotan behar ziren funtzioak sortu eta garatzaileei nola erabili behar zituzten esan zien.

Garai honetan, nire aisialdian, @BotFather-ekin hitz egin ondoren, Telegram bot bat sortu nuen niretzat, ondo pasatzeko. Funtzionalitate sinple bat izorratu nuen bertan: uneko ordua, truke-tasak, eguraldia erakutsi, nire emazteari (orduan neska-lagunari) goraipamenak bidaltzen irakatsi nion ordutegi batean. Beharbada, garai hartan, piropoak bidaltzea zen nire botaren funtzionalitaterik ezagunena, eta nire emazteak eskertu zuen.

Beraz. Garatzaileek Telegramen idazten digute, txosten bat bidaltzen diegu Telegramen... Eta ez guri idazten badigute, bot bati baizik? Azken finean, guztiontzat hobea izango da, txostena azkarrago jasoko da, eta garrantzitsuena, guri saihestuz. Horrela sortu zen nire bot-erako lehen funtzionalitate ezagunaren ideia.

Inplementazioari ekin nion. Ahal nuen moduan egin nuen PHPn (gure aplikazioa bera PHPn dago, Python-en baino gehiago nago). Ez naiz kodetzaile ona, beraz, ez dizut nire kodea erakutsiko :)

Bota gure sare korporatiboan bizi da eta proiektu jakin batzuetarako sarbidea du, helburu datu-baseetara barne. Taldeko edo menuko parametroekin ez kezkatzeko, funtzionalitate hau gehitu dut taldeko txatean jarraipen jakinarazpenekin. Horrela bot-ak berehala daki zein datu-basetatik bildu txostena.

Bezalako komando bat jasota /awr N, non N txosten bat behar den ordu osoko kopurua den (lehenespenez - 1 ordu), nahiz eta astebetez, datu-basea berrabiarazi ez bada, bot-a berehala hasten da lanean, txostena biltzen du, gisa argitaratzen du. web orrialdea eta berehala (ia bertan) behar den txostenerako esteka eskaintzen du.

Jarraitu esteka eta hemen dago, AWRren txostena:

Denbora, nerbioak eta gizon-orduak aurrezten ditugu

Espero zen bezala, garatzaileek txostenak sortzeari aurre egin zioten, eta batzuek eskerrak eman zizkiguten.

Taldearen erosotasuna baloratu ostean, beste eskualde batzuetako proiektu-zuzendariek gauza bera nahi zuten, bezeroarengandik gehien jasotzen dutelako eta sistemen errendimendu eta erabilgarritasunarekin kezkatuta daudelako. Bota beste txatetan gehitu dut. Oraindik erabiltzen dute, eta pozten naiz.

Gero, CITeko lankideek txostenak nola biltzen ditugun jakin zuten eta hori ere egin nahi izan zuten. Ez nituen gure txatetan gehitu, txat bat sortu nuen ordutegi batean eta eskaeran txostenak sortzearekin.

/pgBadger

PHPn beste aplikazio batzuk ere baditugu PostgreSQLrekin batera. pgBadger txostenen bilduma inplementatu nuen beharra dutenentzat printzipio bera erabiliz - taldeko txatetan. Hasieran erabiltzen zuten, baina gero gelditu egin ziren. Funtzionalitatea beharrezkoa ez zelako moztu zen.

/betebeharra

Gure sailak gaueko txandak ditu eta, horren arabera, ordutegia du. Google Sheets-en dago. Ez da beti komenigarria esteka bat bilatzea, grafiko bat irekitzea, zeure burua bilatzea... Nire lankide ohi batek ere bere Telegram botarekin jolastu zuen eta gure saileko txatean sartu zuen. saileko langileen lan-txanda hasteari buruzko jakinarazpenak. Botak egutegia aztertzen du, guardiako pertsona uneko dataren arabera zehazten du eta, ordutegiaren arabera edo hala eskatuta, gaur egun nor den zerbitzua ematen du. Handia eta erosoa atera zen. Egia da, ez zait asko gustatu mezuen formatua. Gainera, beste sail bateko langileentzat (adibidez, BC "Medicine"), beste norabide batzuetan lanean ari direnei buruzko informazioa ez da benetan beharrezkoa, baina jakin behar duzu nor dagoen "Medikuntza"-n arazoak izanez gero. Funtzionalitatea "mailegatzea" erabaki nuen, baina gustatzen ez zitzaidana aldatzea. Niretzako eta besteentzako mezu formatu erosoa egin nuen, beharrezkoa ez den informazioa kenduz.

/tnls

Telegram bot bat erabiliz automatizazioa probatu ondoren, ideia ezberdin asko agertu ziren, baina beharrezko gauzak egin nahi nituen. Burutzea erabaki nuen eskaeren estatistikak. Gure bezeroen proiektuetara sartzeko, β€œjump server” edo birbidaltze zerbitzaria deritzon bat ezarri dugu. Bertan VPN konexioak planteatzen dira, gero aplikazio-portuak, datu-baseak eta beste birbidaltze laguntzaileak gure sare lokalera birbidaltzen dira ssh bidez, gure langileen proiektuetara erraz sartzeko, VPN konexioekin arazorik gabe. Egin behar duzun guztia gure sare korporatiborako VPN konexioa konfiguratzea da.

Eskaeren estatistikek erakutsi dute askotan, tuneletako batek huts egin ondoren (sare-arazoen kasuan, denbora-muga baten ondorioz, adibidez), jendea gurekin harremanetan jartzen dela proiekturako sarbidea berreskuratzeko. Kasu gehienetan, nahikoa da konexioa berrabiaraztea eta dena ondo dago. Egin dezagun zuk zeuk. Hona hemen komandoa:
Denbora, nerbioak eta gizon-orduak aurrezten ditugu

Nahi duzun menu-elementuan "erortzen" zara, hautatu zure proiektua, itxaron minutu bat eta denak pozik eta pozik daude...

Komando bat jasotzean, byte eta biten mugimendu apur batekin, bot-a birbidaltze-zerbitzariarekin konektatzen da, aldez aurretik zein birbidaltze berrabiarazi behar den jakinda, eta bere lana egiten du: proiekturako konexioa berrezartzen du. Argibideak idatzi ditut zuk zeuk konpondu ahal izateko. Eta jendea gurekin harremanetan jarri zen emandako tresnak funtzionatzen ez bazuen...

/ecp_to_pem

Estatistika gehiagok erakutsi zuten askotan bihurtzea beharrezkoa dela EDS Crypto Pro pem formatuan(64) hainbat integraziotarako, eta asko ditugu. Zeregin: hartu edukiontzi bat, kopiatu Windows ordenagailu batera P12FromGostCSP utilitatea instalatuta (ordaindua, bide batez), bihurtu pfx-ra eta, ondoren, bihurtu pfx OpenSSL erabiliz (GOST enkriptatzea onartzen duena) pem-era. Ez da oso erosoa, baina atzamarren kolpe batean nahi duzu.

Google berriro erreskatatzera etorri da. Aurkituta pertsona atsegin baten erabilgarritasuna. README-n idatzitako moduan muntatu nuen - funtzionatu zuen. Botari erabilgarritasunarekin lan egiten irakatsi nion eta ia berehalako bihurketa lortu nuen.
Denbora, nerbioak eta gizon-orduak aurrezten ditugu

Azken inplementazioan, enkriptazio formatu berri batera aldatzeko agindua eman zen - gost-2012. Gogoratzen dudanez, momentu horretan erabilgarritasunak GOST zaharrarekin (2001) bakarrik funtzionatu zuen, agian beste pertsona atsegin baten antzeko beste erabilgarritasun bat izan zen, ez dut zehazki gogoratzen.
GOST berrira igaro ondoren, bot-aren funtzionaltasuna kendu egin zen segurtasun arrazoiengatik. Docker edukiontzi batean inplementatu da.

Dockerfile, norbaitek behar badu:

FROM ubuntu:16.04                                                                                                                                                                        
RUN apt update && apt -y install git sudo wget unzip gcc g++ make &&                        
   cd /srv/ && git clone https://github.com/kov-serg/get-cpcert.git &&                     
   cd get-cpcert && chmod +x *.sh && ./prepare.sh && ./build.sh &&                         
   mkdir -p /srv/{in,out} &&                                                               
   echo '#!/bin/bash' > /srv/getpem.sh &&                                                  
   echo 'cd /srv/get-cpcert' >> /srv/getpem.sh &&                                          
   echo './get-cpcert /srv/in/$CONT.000 $PASS > /srv/out/$CONT.pem' >> /srv/getpem.sh &&   
   chmod +x /srv/getpem.sh                                                                  ENTRYPOINT /srv/getpem.sh

Bihurtzeko, jatorrizko edukiontzia (xxx.000 bezalako direktorioa) jarri behar duzu /srv/in direktorioa, eta amaitutako pem /srv/out-era eraman behar duzu.

Bihurtzeko:

 docker run -t -i -e CONT='<имя Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ(Π±Π΅Π· ".000")>' -e PASS='<ΠΏΠ°Ρ€ΠΎΠ»ΡŒ для ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°>' -v /srv/in:/srv/in -v /srv/out:/srv/out --name ecptopem <адрСс нашСго рСпозитория>/med/ecptopem:latest 

/emstop eta /emstart

Egun batean, Oracle DBA oso politak, DBMS administrazioan eta garapenean esperientzia handia zuena, lan bat lortu zuen gure enpresan. Eta berehala arazoak izan zituen DBMS zerbitzarietara ssh bidez konektatzeko: ez daki non edo nola konektatu, sarbidea ez dago argi deskribatuta, edo ezin du bere buruari behar duen zerbait birbidali. Beno, pozik gaude laguntzen, nola konektatu esan genion eta Enterprise Manager birbidali genion. Baina gauzak oraindik ez ziren funtzionatu ssh-rekin. Nire lankide batek sinpleki azaldu zuen: arraza garbiko DBA :) Zerbitzarian zerbait moldatu behar badugu geuk egingo dugula erabaki genuen.

EM batzuetan karga handian huts egiten du, eta berrabiarazteko... ssh bidez konektatu eta terminalaren bidez berrabiarazi behar duzu. "Administratzaileak onak dira horretan", erabaki zuen gure lankide berriak. DBMSn karga astunak ez dira arraroak guretzat, eta EM berrabiarazteko eskaerak ere ohikoak dira. Gero eszenatoki bera: tentsioa, sumindura eta arazoari irtenbidea bilatzea. Beraz, talde-txat berean komando hauek agertu ziren: /emstop eta /emstart.

Denbora, nerbioak eta gizon-orduak aurrezten ditugu

/hil

Datu-basean lehia handia badago, eta hori batzuetan gertatzen bada, beharrezkoa da datu-basea azkar deskargatzea. Modurik azkarrena prozesu problematikoa akabatzea da... Horretarako, ssh bidez konektatu, kill -9... Botak lagunduko du!

Denbora, nerbioak eta gizon-orduak aurrezten ditugu

Alexeyk taldea estimatzen zuen eta izen maitagarria eman zion - "Kilyalka" edo pistola bat.
Egun batean, Alexeyk nola saiatu eta sufritzen zuen ikusi ondoren, prozesu bakoitzean /hiltzen xxx sartuta, gure pistolari "kanoi anitzeko" gehitzea erabaki nuen:

Denbora, nerbioak eta gizon-orduak aurrezten ditugu

Hori hobeto! Dena zuretzat da, Alexey, lan egin besterik ez, maitea!

Berez, hain talde garrantzitsu bat mugatua zen user_id-en sarbidea - "foolproof". Lesha-k datu-basearen zerbitzarian prozesuak nola trebeki hiltzen dituen ikusita, hainbat pertsona ausazko prozesu-zenbaki batekin komando bat sartzen saiatu ziren, baina ezin duzu nire bot adimenduna engainatu, berehala ukatu zuen.

/alertlog

Bada, badaezpada, komandoa egin nuen:
/alertlog β€” lortu zehaztutako alerta-lerroen kopurua
Bot-ak alerta-erregistro bat ateratzen du eta gure zerbitzura bidaltzen du, pastebin bezala, pyste izenekoa, eta itsatsirako esteka bat bidaltzen du eskaera-txat-era.

/txekeak

Ondoren, eskaera bat etorri zen gure aplikazioaren benetako errendimendua kontrolatzea. Orain arte, proiektuaren laguntza teknikoak eskuz biltzen zituen datu horiek. Berdin dio! Gure probalari ausartak proba kasuak garatu dituzte horretarako. Ondorioz, probaren erregistroa ez da irakurtzeko oso erosoa; esperientziarik gabeko erabiltzaile batek denbora luzea beharko du ulertzeko eta ez dago ziur beharrezko informazioa nabarmenduko duenik. Eta ez zaigu gustatzen eskuekin egitea eskuekin egin ezin duguna... Lan berri bat botarentzat!

Denbora, nerbioak eta gizon-orduak aurrezten ditugu

/checks komandoak menu sinple eta anbiguoa erakusten du; oraingoan gure mutilek komando hau argibiderik gabe nola erabiltzen ikasi zuten!

Nahi duzun elementua hautatzen duzunean, menu baten ordez, probaren hasierari buruzko jakinarazpena agertzen da, pazientziarik gabeko erabiltzaileek gure proba 100500 aldiz exekutatu ez dezaten:

Denbora, nerbioak eta gizon-orduak aurrezten ditugu

Aukeratutako menu-elementuaren arabera, proba zehatz bat abiarazten da gure saretik, hots, bot-a bizi den makinatik (jmeter bertan aurrez konfiguratuta dago, beharrezko probak kokatzen dira...) edo zuzenean datu-zentrotik (batetik). aplikazioaren ondoan prestatutako makina), atzerapenak probatzean sare-konexioak baztertzeko edo gutxienera murrizteko.

Proba amaitu eta erregistroa jaso ondoren, bot-ak analizatzen du eta emaitza "gizakientzako irakur daitekeen" forman sortzen du:

Denbora, nerbioak eta gizon-orduak aurrezten ditugu

Metrikoen bilduma

Funtzionalitatea iritsi da eta proiektuaren kudeatzaile interesatuek halako funtzio bat jaso dute beren eskualdeetarako. Eta proiektu-zuzendari errukitsu batek esan zuen: "Denboraren estatistikak izan nahi ditut!" CITeko norbaitek esan zion komenigarria izango zela hori guztia Zabbixen jarraipena egitea. Zabbix, beraz, Zabbix...

Uste nuen irtenbidea errepikatzeko beharra prestatu behar nuela... Docker edukiontzi batean sartu nuen ideia. Edukiontzian, jmeter programazio batean abiarazten da (10 minuturo behin), erregistroa leku jakin batean jartzen du, php-k analizatzen du eta beharrezko datuak bistaratzen ditu web orri baten moduan. Zabbix-ek, web.page.get gakoa erabiliz, orrialde hau jasotzen du, aldian-aldian menpeko elementu batzuentzat beharrezko datuak hautatzen ditu eta grafiko bat eraikitzen du.

Denbora, nerbioak eta gizon-orduak aurrezten ditugu

Uste dut ez dela gaizki atera. Grafikoa behatuz, lehenik eta behin, aplikazioaren gutxi gorabeherako abiadura ikusiko dugu, eta grafikoan gailurrak antzematen badira, gutxi gorabehera, badakigu non dagoen β€œentxufea”. Sinplea da. Orain arte eskualde bakarreko eskaria izan da, baina prest nago interesa dutenentzat errepikatzeko.

Aplikazioen garapena

Antzeko zereginei buruzko estatistikek lana errazteko eta errazteko ideia gehiago sortu dituzte azkenaldian. Proiektu batzuetan, aplikazio zerbitzarietan, Crypto Pro edukiontzi gakoak instalatu beharra dago, horietako asko daude eta sinadura digitala denborarekin iraungitzen da. Batzuetan 2 zeregin iristen dira egunean. Baina helburu horietarako bot bat erabiltzea segurutzat jo nuen eta funtzionalitatea zuzenean aplikazioan sortuko nuela erabaki nuen. Noski, baimenarekin eta sarbide-eskubideak egiaztatuz. Beharrezko pribilegioak badituzu, menu-elementu gehigarri bat eskuragarri egongo da sinadura digitalekin lan egiteko, instalatzeko, ezabatzeko, informazioa ikusteko, etab. Funtzionalitatea garatzen ari da. Kontuan izan denez, hau ez da oso zaila, lehendik dauden argibideak apur bat irakurri behar dituzu, kode-adibideak begiratu, garapenean esperientzia duten lankideei galdetu eta gero egin. Ikerketa prozesuan zehar, aplikazioari gehitzeko ideiak sortu ziren. Ez dut plan napoleonikorik egingo - garapena dago, bakoitzak bere kontua kontuan izan dezala. Baina interesgarria den arren, nik neuk egiten ari naiz.

Planak

Esan bezala, gure bot-a erabiltzeko hainbat ideia sortu ziren eta ez bakarrik - orokorrean, demagun, "automatizazio puntuetarako" ideiak, horietako asko ahaztu egin ziren, ez bainuen idazteko astirik izan. Orain saiatzen naiz bururatzen zaidan guztia idazten, eta besteei ere gauza bera egitea gomendatzen diet.

Baina Alexeyk ez du ahazten bere nahiak emateaz. Azkenetik:
/kill_sql SQL_ID β€” hil saio guztiak SQL_ID eskaera honekin
/hil_blokea - erro blokeatzeko saioa akabatu
/erakutsi_em β€” erakutsi EM errendimenduaren argazki bat
Mutil maltzurra da, telefonotik DBA josi nahi du =)

Honela egiten dugu lan Aberriaren mesedetan!

Nola kentzen zara errutinazko eta interesik gabeko zereginetatik?

Espero dut irakurketa interesgarria izatea, eta agian norbaitentzat ere baliagarria izatea, eta irakurlea aspertzeko astirik ez izan dut... Zorte on guztioi.

Iturria: www.habr.com

Gehitu iruzkin berria