Wy besparje tiid, senuwen en man-oeren

Us projekten binne meast regionaal, en de kliïnten binne meastentiids ministearjes. Mar, neist de publike sektor, brûke partikuliere organisaasjes ek ús systemen. Der binne praktysk gjin problemen mei harren.

Dat, de wichtichste projekten binne regionaal, en soms binne d'r problemen mei har. Bygelyks, mei prestaasjes, as d'r yn regio's mear dan 20k fan ús kostbere brûkers binne yn 'e perioade fan it útroljen fan nije funksjonaliteit op produktservers. It is in pine…

Myn namme is Ruslan en ik stypje de ynformaasje systemen fan BARS Group en ûntwikkeljen fan in killer bot foar gewelddiedige serial DBAs. Dizze post is net foar swakkens - d'r binne in protte brieven en foto's.

Wy besparje tiid, senuwen en man-oeren

/awr

Guon fan ús applikaasjes rinne op Oracle DBMS. D'r binne ek projekten op it PostgreSQL DBMS. Oracle hat in prachtich ding - it sammeljen fan statistiken oer de lading op 'e DBMS, dy't besteande problemen markearret en sels oanbefellings makket foar eliminaasje - Automatic Workload Repository (AWR). Op in stuit (nammentlik op it momint fan pine), de ûntwikkelders hieltyd frege om te sammeljen AWR rapporten foar prestaasjes analyze. Wy gongen earlik nei de DBMS-tsjinner, sammele rapporten, namen se nei ús en stjoerde se nei produksje foar analyse. Nei de 5e kear waard it ferfelend... nei de 10e waard it yrritearjend...

Ien fan myn kollega's hat ienris it idee útsprutsen dat alles wat mear as ien kear dien wurdt automatisearre wurde moat. Oant it momint fan yrritaasje, om earlik te wêzen, tocht ik der net oer nei en besocht alles wat automatisearre wurde koe te automatisearjen, mar faak wie it net yn 'e fraach en wie it mear in ûndersyk as in tapaste aard.

En doe tocht ik: "Behearders binne net nedich om in rapport te generearjen ...". Ommers, it sammeljen fan in rapport betsjut it útfieren fan it sql-skript @$ORACLE_HOME/rdbms/admin/awrrpt.sql en it ferslach fan 'e tsjinner nei jo plak nimme ... Oh ja, wy litte ûntwikkeling foar produksje net tastean.

Dêrnei Googlede ik de nedige ynformaasje, makke de funksje fan it artikel oer de testbasis, rûn it skript en wûnder - it rapport is gearstald en kin lokaal bewarre wurde. Funksjes makke wêr't AWR-rapporten faak nedich wiene en ûntwikkelders fertelden hoe't se se moatte brûke.

Om dizze tiid, yn myn frije tiid, nei it praten mei @BotFather, makke ik in Telegram-bot foar mysels, gewoan foar de wille. Ik skroefde dêr in ienfâldige funksjonaliteit yn - lit de hjoeddeistige tiid, wikselkoersen, waar sjen, learde it om kompliminten te stjoeren nei myn frou (doe freondinne) op in skema. Miskien wie it ferstjoeren fan kompliminten destiids de populêrste funksjonaliteit fan myn bot, en myn frou wurdearre it.

Sa. Untwikkelders skriuwe ús yn Telegram, wy stjoere har in rapport yn Telegram ... Wat as se net oan ús skriuwe, mar nei in bot? It sil ommers better wêze foar elkenien, it rapport wurdt rapper ûntfongen, en it wichtichste, om ús hinne. Dit is hoe't it idee fan 'e earste populêre funksjonaliteit foar myn bot waard berne.

Ik begûn ymplemintaasje. Ik die it, sa goed as ik koe, yn PHP (ús applikaasje sels is yn PHP, ik bin der mear yn as yn Python). Ik bin gjin goede kodearder, dus ik sil jo myn koade net sjen litte :)

De bot libbet op ús bedriuwsnetwurk en hat tagong ta bepaalde projekten, ynklusyf doeldatabases. Om net te lestich falle mei parameters yn it team of menu, haw ik dizze funksjonaliteit tafoege oan it groepchat mei monitoaringsnotifikaasjes. Op dizze manier wit de bot fuortendaliks út hokker databank it rapport sammelje moat.

In kommando krigen hawwe lykas /oan N, wêrby't N it oantal folsleine oeren is wêrfoar in rapport nedich is (standert - 1 oere), sels foar in wike, as de databank net opnij opstart is, begjint de bot fuortendaliks te wurkjen, sammelet it rapport, publisearret it as in webside en jout daliks (hast krekt dêr) in keppeling nei it folle nedige rapport.

Folgje de keppeling en hjir is it, it AWR-rapport:

Wy besparje tiid, senuwen en man-oeren

Lykas ferwachte, de ûntwikkelders omgean mei sa'n rapport generaasje, en guon sels betanke ús.

Nei it gemak fan it team wurdearre, woene projektmanagers út oare regio's itselde, om't se it measte fan 'e klant krije en har soargen meitsje oer de prestaasjes en beskikberens fan systemen. Ik haw de bot tafoege oan oare petearen. Se brûke it noch, en ik bin der bliid oer.

Letter kamen kollega's fan CIT te witten hoe't wy rapporten sammelje en woene dat ek dwaan. Ik haw se net tafoege oan ús petearen, ik makke in apart petear mei it generearjen fan rapporten op in skema en op oanfraach.

/pgBadger

Wy hawwe ek oare applikaasjes yn PHP yn kombinaasje mei PostgreSQL. Ik ymplementearre de kolleksje fan pgBadger-rapporten foar dyjingen yn need mei itselde prinsipe - yn groepchats. Earst brûkten se it, mar doe hâlde se op. De funksjonaliteit waard ôfsnien as net nedich.

/plicht

Us ôfdieling hat nachttsjinsten en hat dêrtroch in skema. It is yn Google Sheets. It is net altyd handich om in keppeling te sykjen, in kaart te iepenjen, josels te sykjen ... Ien fan myn eardere kollega's spile ek mei syn Telegram-bot en yntrodusearre it yn it petear fan ús ôfdieling notifikaasjes oer it begjin fan de plicht shift foar ôfdieling meiwurkers. De bot parseart it skema, bepaalt de tsjinstplichtige op de aktuele datum en meldt neffens it skema of op oanfraach wa't hjoeddedei yn tsjinst is. It draaide geweldich en handich. Wier, ik fûn it formaat fan 'e berjochten net echt leuk. Ek foar meiwurkers fan in oare ôfdieling (bygelyks, BC "Geneeskunde") ynformaasje oer dyjingen op plicht yn oare rjochtings is net echt nedich, mar jo moatte witte wa't is op plicht yn "Geneeskunde" yn gefal fan problemen. Ik besleat om de funksjonaliteit te "lienen", mar feroarje wat ik net leuk. Ik makke in berjochtformaat handich foar mysels en oaren, ferwiderje ûnnedige ynformaasje.

/tnls

Nei it útprobearjen fan automatisearring mei in Telegram-bot, ferskynden in protte ferskillende ideeën, mar ik woe strikt needsaaklike dingen dwaan. Ik besleat om te lieden statistiken oer fersiken. Om tagong te krijen ta de projekten fan ús klanten, hawwe wy in saneamde "springserver" of trochstjoerserver ynfierd. VPN-ferbiningen wurde derop ferhege, dan wurde applikaasjepoarten, databases en oare auxiliary forwardings trochstjoerd nei ús lokale netwurk fia ssh, foar maklike tagong ta de projekten fan ús meiwurkers, sûnder problemen mei VPN-ferbiningen. Alles wat jo hoege te dwaan is in VPN-ferbining ynstelle mei ús bedriuwsnetwurk.

De statistiken fan oanfragen hawwe sjen litten dat faak, nei't ien fan 'e tunnels mislearret (yn't gefal fan netwurkproblemen, bygelyks troch in time-out), minsken kontakt mei ús opnimme oer it werstellen fan tagong ta it projekt. Yn 'e measte gefallen is it gewoan opnij starte fan' e ferbining genôch en alles is goed. Litte wy it sels dwaan. Hjir is it kommando:
Wy besparje tiid, senuwen en man-oeren

Jo "falle troch" yn it winske menu-item, selektearje jo projekt, wachtsje in minút en elkenien is bliid en tefreden ...

By it ûntfangen fan in kommando, mei in lichte beweging fan 'e bytes en bits, makket de bot ferbining mei de trochstjoerserver, wite fan tefoaren hokker trochstjoering opnij starte moat, en docht syn wurk - herstelt de ferbining mei it projekt. Ik haw ynstruksjes skreaun sadat jo sokke problemen sels kinne oplosse. En minsken kontakten ús allinich as it levere ark net wurke ...

/ecp_to_pem

Fierdere statistiken lieten sjen dat it faak nedich is om te konvertearjen EDS Crypto Pro yn pem-formaat(Basis64) foar ferskate yntegraasjes, en wy hawwe nochal in protte fan harren. Taak: nim in kontener, kopiearje it nei in Windows-kompjûter mei it P12FromGostCSP-hulpprogramma ynstalleare (betelle, trouwens), konvertearje it nei pfx, en konvertearje dan pfx mei OpenSSL (mei stipe foar GOST-fersifering) nei pem. It is net heul handich, mar jo wolle it op 'e snap fan jo fingers.

Google is wer ta de rêding kommen. Fûn it nut fan in soarte persoan. Ik haw it gearstald lykas skreaun yn 'e README - it wurke. Ik learde de bot om te wurkjen mei it nut en krige in hast direkte konverzje.
Wy besparje tiid, senuwen en man-oeren

Tsjin 'e tiid fan' e definitive ymplemintaasje waard in opdracht útjûn om te wikseljen nei in nij fersiferingsformaat - gost-2012. Foar safier't ik my herinner, wurke it nut op dat stuit allinich mei de âlde GOST (2001), miskien wie it in oar ferlykber nut fan in oare soarte persoan, ik wit it net krekt.
Nei de oergong nei de nije GOST waard de funksjonaliteit fan 'e bot fuortsmiten om feiligens redenen. Implementearre it yn in docker container.

Dockerfile, as immen it nedich is:

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

Om te konvertearjen, moatte jo de orizjinele kontener (map lykas xxx.000) pleatse yn 'e /srv/in map, en nim de klear pem nei /srv/out.

Bekeare:

 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 en /emstart

Op in dei krige in heul coole Oracle DBA, mei in protte ûnderfining yn DBMS-administraasje en -ûntwikkeling, in baan by ús bedriuw. En hy hie fuortdaliks muoite om te ferbinen mei de DBMS-tsjinners mei ssh: hy wit net wêr't en hoe't er ferbine moat, de tagong is net dúdlik beskreaun, of hy kin iets dat er nedich is net nei himsels trochstjoere. No, wy binne bliid om te helpen, wy fertelden him hoe te ferbinen, en trochstjoerd him Enterprise Manager. Mar dingen slagge noch net mei ssh. Ien fan myn kollega's hat it gewoan útlein: in suvere DBA :) Wy besletten dat as wy wat op 'e tsjinner moatte oanpasse, wy it sels dogge.

EM crasht soms ûnder swiere lading, en om it opnij te begjinnen ... jo moatte ferbine fia ssh en opnij starte fia de terminal. "Behearders binne hjir goed yn," besleat ús nije kollega. Swiere lêst op 'e DBMS binne net ûngewoan foar ús, en fersiken om EM opnij te starten binne ek gewoan. Dan itselde senario: spanning, yrritaasje en sykjen nei in oplossing foar it probleem. Dat yn deselde groepchats ferskynden de folgjende kommando's: /emstop en /emstart.

Wy besparje tiid, senuwen en man-oeren

/fermoardzje

As d'r sterke konkurrinsje is op 'e databank, en dit bart soms, is it nedich om de databank fluch te lossen. De fluchste manier is om it problematyske proses te deadzjen ... Om dit te dwaan, ferbine fia ssh, deadzje -9 ... De bot sil helpe!

Wy besparje tiid, senuwen en man-oeren

Alexey wurdearre it team en joech it in leaflike namme - "Kilyalka" of in gewear.
Op in dei, nei't ik sjoen hie hoe't Alexey besocht en lijde, elke kear yn /kill xxx ynfierde foar elk fan 'e prosessen, besleat ik "multi-barrel" ta te foegjen oan ús gewear:

Wy besparje tiid, senuwen en man-oeren

Dat is better! Alles is foar jo, Alexey, gewoan wurkje, leave!

Fansels wie sa'n wichtich team beheind tagong troch user_id - "foolproof". Sjoch hoe't Lesha deftly deadet prosessen op de databank tsjinner, ferskate minsken besocht te fieren in kommando mei in willekeurich proses nûmer, mar do kinst net gek myn smart bot, hy wegere fuortendaliks.

/alertlog

No, foar it gefal, ik makke it kommando:
/alertlog <oantal rigels> - krije it opjûne oantal alertlog rigels
De bot lûkt in warskôgingslog en stjoert it nei ús tsjinst, lykas pastebin, neamd pyste, en stjoert in keppeling nei de plakke nei it fersykchat.

/kontrôles

Dêrnei kaam in fersyk foar tafersjoch op de echte prestaasjes fan ús applikaasje. Oant no ta hat projekt technyske stipe dizze gegevens mei de hân sammele. Jout neat! Us dappere testers hawwe hjir testgefallen foar ûntwikkele. It resultearjende testlog is net heul handich om te lêzen; in sûnder ûnderfining brûker sil in lange tiid duorje om te begripen en is net wis dat hy de nedige ynformaasje sil markearje. En wy dogge net graach mei ús hannen wat wy net mei ús hannen dwaan kinne ... In nije taak foar de bot!

Wy besparje tiid, senuwen en man-oeren

It kommando / checks toant in ienfâldich en unambiguous menu; dizze kear learden ús jonges hoe't se dit kommando brûke kinne sûnder ynstruksjes!

As jo ​​​​it winske item selektearje, ynstee fan in menu, ferskynt in notifikaasje oer it begjin fan 'e test, sadat ûngeduldige brûkers ús test net 100500 kear útfiere:

Wy besparje tiid, senuwen en man-oeren

Ofhinklik fan it selektearre menu-item wurdt in spesifike test lansearre fanút ús netwurk, nammentlik fanút de masine dêr't de bot wennet (jmeter is dêr foarkonfigurearre, de nedige tests sitte...) of direkt fanút it datasintrum (fan in taret masine neist de applikaasje), om netwurkferbiningen út te sluten by it testen fan fertragingen, of ferminderje se ta in minimum.

Nei it foltôgjen fan de test en it ûntfangen fan it log, parseart de bot it en produsearret it resultaat yn in "minsklike lêsbere" foarm:

Wy besparje tiid, senuwen en man-oeren

Metrics kolleksje

De funksjonaliteit is oankaam en ynteressearre projektmanagers hawwe sa'n funksje krigen foar har regio. En in meilibjende projektmanager sei: "Ik wol tiidstatistiken hawwe!" Immen fan CIT fertelde har dat it handich wêze soe om dit alles yn Zabbix te kontrolearjen. Zabbix, dus Zabbix...

Ik tocht dat ik my tariede moast op de needsaak om de oplossing te replikearjen ... Ik sette it idee yn in dockerkontener. Yn 'e kontener wurdt jmeter lansearre op in skema (ien kear elke 10 minuten), set it log op in bepaald plak, php parses it en toant de nedige gegevens yn' e foarm fan in webside. Zabbix, mei help fan de web.page.get kaai, ûntfangt dizze side, selekteart geregeld de nedige gegevens foar bepaalde ôfhinklike eleminten en bout in grafyk.

Wy besparje tiid, senuwen en man-oeren

Ik tink dat it net min is wurden. Troch de grafyk te observearjen, sjogge wy earst de ûngefear snelheid fan 'e applikaasje, en as peaks wurde ûntdutsen op' e grafyk, witte wy sawat wêr't de "plug" is. It is ienfâldich. Oant no hat bliken dien dat it mar yn fraach is foar ien regio, mar ik bin ree om it te replikearjen foar belangstellenden.

Applikaasjeûntwikkeling

Statistiken oer ferlykbere taken hawwe koartlyn oanlieding jûn ta mear ideeën foar it ferienfâldigjen en fasilitearjen fan wurk. Op guon projekten, op applikaasje-tsjinners, is d'r in needsaak om wichtige Crypto Pro-konteners te ynstallearjen, d'r binne in protte fan har, en de digitale hantekening ferrint oer de tiid. Soms komme 2 taken deis. Mar ik achte it ûnfeilich om in bot foar dizze doelen te brûken en besleat dat ik de funksjonaliteit direkt yn 'e applikaasje soe meitsje. Natuerlik mei autorisaasje en kontrôle tagongsrjochten. As jo ​​de nedige privileezjes hawwe, sil in ekstra menu-item beskikber wêze foar wurkjen mei digitale hantekeningen, ynstallaasje, wiskjen, besjen fan ynformaasje, ensfh. De funksjonaliteit is op it stuit yn ûntwikkeling. As it die bliken, is dit net heul lestich, jo moatte gewoan de besteande ynstruksjes in bytsje lêze, sjoch nei koadefoarbylden, freegje kollega's mei mear ûnderfining yn ûntwikkeling, en doch it dan. Tidens it ûndersyksproses ûntstiene ideeën om ta te foegjen oan 'e applikaasje. Ik sil gjin Napoleontyske plannen meitsje - d'r is ûntwikkeling, lit elkenien har eigen bedriuw tinke. Mar wylst it nijsgjirrich is, doch ik it sels.

Plannen

Lykas ik sei, binne in protte ferskillende ideeën berne foar it brûken fan ús bot en net allinich - yn 't algemien, litte wy sizze, ideeën foar "automatisearringspunten", in protte fan har binne fergetten, om't ik gjin tiid hie om se op te skriuwen. No besykje ik alles op te skriuwen wat yn 't sin komt, en ik advisearje dat oaren itselde dogge.

Mar Alexey ferjit net om syn winsken te jaan. Fan de lêste:
/kill_sql SQL_ID - deadzje alle sesjes mei dit SQL_ID-fersyk
/kill_block - deadzje de root-blokkearjende sesje
/show_em - lit in ôfbylding sjen fan EM-prestaasjes
Hy is in slûchslimme keardel, hy wol DBA fan syn telefoan naaie =)

Dit is hoe't wy wurkje foar it foardiel fan it heitelân!

Hoe ferwiderje jo fan routine en net ynteressante taken?

Ik hoopje dat it lêzen wie nijsgjirrich, en miskien sels nuttich foar immen, en ik hie gjin tiid om te ferfelen de lêzer ... Good luck foar ús allegearre.

Boarne: www.habr.com

Add a comment