Ons spaar tyd, senuwees en man-ure

Ons projekte is gewoonlik streeks, en die kliënte is gewoonlik ministeries. Maar, benewens die openbare sektor, gebruik private organisasies ook ons ​​stelsels. Daar is feitlik geen probleme met hulle nie.

Dus, die hoofprojekte is streeks, en soms is daar probleme daarmee. Byvoorbeeld, met werkverrigting, wanneer daar in streke meer as 20 XNUMX van ons kosbare gebruikers is gedurende die tydperk van die uitrol van nuwe funksionaliteit op produkbedieners. Dit is 'n pyn…

My naam is Ruslan en ek ondersteun die inligtingstelsels van BARS Group en die ontwikkeling van 'n moordenaar-bot vir gewelddadige reeks-DBA's. Hierdie plasing is nie vir die swakkes nie – daar is baie briewe en prentjies.

Ons spaar tyd, senuwees en man-ure

/awr

Sommige van ons toepassings loop op Oracle DBMS. Daar is ook projekte op die PostgreSQL DBMS. Oracle het 'n wonderlike ding - die versameling van statistieke oor die las op die DBBS, wat bestaande probleme uitlig en selfs aanbevelings maak vir uitskakeling - Automatic Workload Repository (AWR). Op 'n stadium (naamlik op die oomblik van pyn), het die ontwikkelaars voortdurend gevra om te versamel AWR verslae vir prestasie-analise. Ons het eerlik na die DBMS-bediener gegaan, verslae versamel, dit na ons geneem en na produksie gestuur vir ontleding. Na die 5de keer het dit irriterend geword... na die 10de het dit irriterend geraak...

Een van my kollegas het eenkeer die idee uitgespreek dat alles wat meer as een keer gedoen word geoutomatiseer moet word. Tot op die oomblik van irritasie, om eerlik te wees, het ek nie daaraan gedink nie en probeer om alles te outomatiseer wat geoutomatiseer kan word, maar dikwels was dit nie in aanvraag nie en was dit meer 'n navorsing eerder as 'n toegepaste aard.

En toe dink ek: "Admins is nie nodig om 'n verslag te genereer nie...". Om 'n verslag in te samel beteken immers om die sql-skrip @$ORACLE_HOME/rdbms/admin/awrrpt.sql uit te voer en die verslag van die bediener na jou plek te neem ... O ja, ons laat nie ontwikkeling vir produksie toe nie.

Toe Google die nodige inligting, het die funksie van die artikel op die toetsbasis geskep, die script en wonderwerk laat loop – die verslag is saamgestel en kan plaaslik gestoor word. Het funksies geskep waar AWR-verslae dikwels nodig was en ontwikkelaars vertel hoe om dit te gebruik.

Omstreeks hierdie tyd, in my vrye tyd, nadat ek met @BotFather gepraat het, het ek 'n Telegram-bot vir myself geskep, net vir die pret. Ek het 'n eenvoudige funksionaliteit daar ingeskroef - wys die huidige tyd, wisselkoerse, weer, het dit geleer om komplimente aan my vrou (toe vriendin) op 'n skedule te stuur. Miskien was die stuur van komplimente destyds die gewildste funksionaliteit van my bot, en my vrou het dit waardeer.

Dus. Ontwikkelaars skryf aan ons in Telegram, ons stuur 'n verslag aan hulle in Telegram ... Wat as hulle nie aan ons skryf nie, maar aan 'n bot? Dit sal immers vir almal beter wees, die verslag sal vinniger ontvang word, en bowenal, omseil ons. Dit is hoe die idee van die eerste gewilde funksionaliteit vir my bot gebore is.

Ek het met implementering begin. Ek het dit, so goed ek kon, in PHP gedoen (ons toepassing self is in PHP, ek is meer vertroud daarmee as in Python). Ek is nie 'n goeie kodeerder nie, so ek sal nie my kode vir jou wys nie :)

Die bot leef op ons korporatiewe netwerk en het toegang tot sekere projekte, insluitend teikendatabasisse. Om nie met parameters in die span of spyskaart te steur nie, het ek hierdie funksionaliteit by die groepklets gevoeg met moniteringkennisgewings. Op hierdie manier weet die bot onmiddellik van watter databasis om die verslag in te samel.

Na ontvangs van 'n opdrag soos /awr N, waar N die aantal volle ure is waarvoor 'n verslag benodig word (by verstek - 1 uur), selfs vir 'n week, as die databasis nie herbegin is nie, begin die bot dadelik werk, versamel die verslag, publiseer dit as 'n webblad en verskaf onmiddellik (amper net daar) 'n skakel na die broodnodige verslag.

Volg die skakel en hier is dit, die AWR-verslag:

Ons spaar tyd, senuwees en man-ure

Soos verwag, het die ontwikkelaars sulke verslaggenerering hanteer, en sommige het ons selfs bedank.

Nadat hulle die gerief van die span waardeer het, wou projekbestuurders van ander streke dieselfde hê, aangesien hulle die meeste van die kliënt ontvang en bekommerd is oor die werkverrigting en beskikbaarheid van stelsels. Ek het die bot by ander kletse gevoeg. Hulle gebruik dit steeds, en ek is bly daaroor.

Later het kollegas van CIT uitgevind hoe ons verslae insamel en wou dit ook doen. Ek het hulle nie by ons geselsies gevoeg nie, ek het 'n aparte klets geskep met die generering van verslae op 'n skedule en op versoek.

/pgBadger

Ons het ook ander toepassings in PHP in samewerking met PostgreSQL. Ek het die versameling van pgBadger-verslae vir diegene in nood geïmplementeer deur dieselfde beginsel te gebruik – in groepkletse. Eers het hulle dit gebruik, maar toe het hulle opgehou. Die funksionaliteit is uitgesny as onnodig.

/plig

Ons departement het nagskofte en het dienooreenkomstig 'n skedule. Dit is in Google Blaaie. Dit is nie altyd gerieflik om 'n skakel te soek, 'n grafiek oop te maak, self te soek nie ... Een van my oud-kollegas het ook met sy Telegram-bot gespeel en dit in die klets van ons departement ingebring kennisgewings oor die aanvang van die diensskof vir departement werknemers. Die bot ontleed die skedule, bepaal die persoon aan diens teen die huidige datum en rapporteer volgens die skedule of op versoek wie vandag aan diens is. Dit het wonderlik en gerieflik uitgekom. Dit is waar, ek het nie regtig van die formaat van die boodskappe gehou nie. Ook vir werknemers van 'n ander departement (byvoorbeeld, BC "Medicine"), is inligting oor diegene wat in ander rigtings aan diens is nie regtig nodig nie, maar jy moet weet wie in "Medicine" aan diens is in geval van probleme. Ek het besluit om die funksionaliteit te "leen", maar verander waarvan ek nie hou nie. Ek het 'n boodskapformaat vir myself en ander gerieflik gemaak en onnodige inligting verwyder.

/tnls

Nadat ek outomatisering met 'n Telegram-bot probeer het, het baie verskillende idees verskyn, maar ek wou streng noodsaaklike dinge doen. Ek het besluit om te lei statistieke oor versoeke. Om toegang tot ons kliënte se projekte te kry, het ons 'n sogenaamde "springbediener" of aanstuurbediener geïmplementeer. Skynprivaatnetwerkverbindings word daarop gelig, dan word toepassingpoorte, databasisse en ander hulpaansendings via ssh na ons plaaslike netwerk gestuur, vir maklike toegang tot die projekte van ons werknemers, sonder probleme met VPN-verbindings. Al wat jy hoef te doen is om 'n VPN-verbinding met ons korporatiewe netwerk op te stel.

Die statistieke van versoeke het getoon dat mense ons dikwels kontak oor die herstel van toegang tot die projek nadat een van die tonnels misluk het (in die geval van netwerkprobleme, byvoorbeeld as gevolg van 'n time-out). In die meeste gevalle is dit genoeg om die verbinding net weer te begin en alles is in orde. Kom ons doen dit self. Hier is die opdrag:
Ons spaar tyd, senuwees en man-ure

Jy “val deur” in die verlangde menu-item, kies jou projek, wag 'n minuut en almal is gelukkig en tevrede...

By die ontvangs van 'n opdrag, met 'n effense beweging van die grepe en bisse, koppel die bot aan die aanstuurbediener, weet vooraf watter aanstuur herbegin moet word, en doen sy werk - herstel die verbinding met die projek. Ek het instruksies geskryf sodat jy self sulke probleme kan oplos. En mense het ons net gekontak as die verskafde hulpmiddel nie werk nie ...

/ecp_to_pem

Verdere statistieke het getoon dat dit dikwels nodig is om om te skakel EDS Crypto Pro in pem-formaat(base64) vir verskeie integrasies, en ons het nogal baie daarvan. Taak: neem 'n houer, kopieer dit na 'n Windows-rekenaar met die P12FromGostCSP-nutsding geïnstalleer (terloops betaal), skakel dit om na pfx, en skakel dan pfx om met OpenSSL (met ondersteuning vir GOST-enkripsie) na pem. Dit is nie baie gerieflik nie, maar jy wil dit met die knip van jou vingers hê.

Google het weer tot die redding gekom. Gevind 'n vriendelike persoon se nut. Ek het dit saamgestel soos geskryf in die README - dit het gewerk. Ek het die bot geleer om met die hulpprogram te werk en het 'n byna onmiddellike omskakeling gekry.
Ons spaar tyd, senuwees en man-ure

Teen die tyd van finale implementering is 'n bevel uitgereik om oor te skakel na 'n nuwe enkripsieformaat - gost-2012. Sover ek onthou, het die hulpprogram op daardie oomblik net met die ou GOST (2001) gewerk, miskien was dit nog 'n soortgelyke hulpmiddel van 'n ander vriendelike persoon, ek onthou nie presies nie.
Na die oorgang na die nuwe GOST, is die funksionaliteit van die bot om sekuriteitsredes verwyder. Het dit in 'n dokhouer geïmplementeer.

Dockerfile, ingeval iemand dit nodig het:

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 omskep, moet jy die oorspronklike houer (gids soos xxx.000) in die /srv/in gids plaas en die voltooide pem na /srv/out neem.

Om te skakel:

 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 'n dag het 'n baie gawe Oracle DBA, met baie ondervinding in DBMS administrasie en ontwikkeling, 'n werk by ons maatskappy gekry. En hy het dadelik probleme ondervind om met ssh aan die DBMS-bedieners te koppel: hy weet nie waar of hoe om te koppel nie, die toegang is nie duidelik beskryf nie, of hy kan nie iets wat hy nodig het vir homself aanstuur nie. Wel, ons help graag, ons het hom vertel hoe om te koppel, en het hom Enterprise Manager aangestuur. Maar dinge het steeds nie uitgewerk met ssh nie. Een van my kollegas het dit eenvoudig verduidelik: 'n rasegte DBA :) Ons het besluit dat as ons iets op die bediener moet aanpas, ons dit self sal doen.

EM crash soms onder swaar vrag, en om dit weer te begin ... moet jy via ssh koppel en deur die terminale herbegin. "Admins is goed hiermee," het ons nuwe kollega besluit. Swaar vragte op die DBMS is nie ongewoon vir ons nie, en versoeke om EM te herbegin is ook algemeen. Dan dieselfde scenario: spanning, irritasie en soeke na 'n oplossing vir die probleem. So in dieselfde groepkletse het die volgende opdragte verskyn: /emstop en /emstart.

Ons spaar tyd, senuwees en man-ure

/doodmaak

As daar sterk mededinging op die databasis is, en dit gebeur soms, is dit nodig om die databasis vinnig af te laai. Die vinnigste manier is om die problematiese proses dood te maak... Om dit te doen, koppel via ssh, maak -9 dood... Die bot sal help!

Ons spaar tyd, senuwees en man-ure

Alexey het die span waardeer en dit 'n liefdevolle naam gegee - "Kilyalka" of 'n geweer.
Eendag, nadat ek gekyk het hoe Alexey probeer en ly, en elke keer vir elk van die prosesse in /kill xxx ingegaan het, het ek besluit om "multi-barrel" by ons geweer te voeg:

Ons spaar tyd, senuwees en man-ure

Dis beter! Alles is vir jou, Alexey, werk net, skat!

Natuurlik was so 'n belangrike span beperk toegang deur user_id - "foolproof". Toe Lesha sien hoe behendig prosesse op die databasisbediener doodmaak, het verskeie mense probeer om 'n opdrag met 'n ewekansige prosesnommer in te voer, maar jy kan nie my slim bot flous nie, hy het dadelik geweier.

/alertlog

Wel, net vir ingeval, ek het die opdrag gemaak:
/alertlog - kry die gespesifiseerde aantal alertlog-lyne
Die bot trek 'n waarskuwingslog en stuur dit na ons diens, soos pastebin, genaamd pyste, en stuur 'n skakel na die plak na die versoekklets.

/tjeks

Volgende het 'n versoek gekom vir monitering van die werklike prestasie van ons toepassing. Tot nou toe het projek tegniese ondersteuning hierdie data met die hand ingesamel. Maak nie saak nie! Ons dapper toetsers het toetsgevalle hiervoor ontwikkel. Die gevolglike toetslogboek is nie baie gerieflik om te lees nie; 'n onervare gebruiker sal lank neem om te verstaan ​​en is nie seker dat hy die nodige inligting sal uitlig nie. En ons doen nie graag met ons hande wat ons nie met ons hande kan doen nie ... 'n Nuwe taak vir die bot!

Ons spaar tyd, senuwees en man-ure

Die /checks-opdrag vertoon 'n eenvoudige en ondubbelsinnige spyskaart; hierdie keer het ons ouens geleer hoe om hierdie opdrag sonder instruksies te gebruik!

Wanneer jy die gewenste item kies, in plaas van 'n spyskaart, verskyn 'n kennisgewing oor die begin van die toets, sodat ongeduldige gebruikers nie ons toets 100500 XNUMX keer laat loop nie:

Ons spaar tyd, senuwees en man-ure

Afhangende van die geselekteerde menu-item, word 'n spesifieke toets vanaf ons netwerk geloods, naamlik vanaf die masjien waar die bot woon (jmeter is daar vooraf gekonfigureer, die nodige toetse is geleë...) of direk vanaf die datasentrum (van 'n voorbereide masjien langs die toepassing), om netwerkverbindings uit te sluit wanneer vertragings getoets word, of tot 'n minimum te verminder.

Nadat die toets voltooi is en die logboek ontvang is, ontleed die bot dit en lewer die resultaat in 'n "menslik-leesbare" vorm:

Ons spaar tyd, senuwees en man-ure

Versameling van statistieke

Die funksionaliteit het aangebreek en belangstellende projekbestuurders het so 'n funksie vir hul streke ontvang. En een deernisvolle projekbestuurder het gesê: "Ek wil tydstatistieke hê!" Iemand van CIT het vir haar gesê dit sal gerieflik wees om dit alles in Zabbix te monitor. Zabbix, so Zabbix...

Ek het gedink dat ek moet voorberei vir die behoefte om die oplossing te herhaal... Ek het die idee in 'n dokhouer gesit. In die houer word jmeter op 'n skedule geloods (een keer elke 10 minute), plaas die log op 'n sekere plek, php ontleed dit en vertoon die nodige data in die vorm van 'n webblad. Zabbix, deur die web.page.get-sleutel te gebruik, ontvang hierdie bladsy, kies gereeld die nodige data vir sekere afhanklike elemente en bou 'n grafiek.

Ons spaar tyd, senuwees en man-ure

Ek dink dit het nie sleg uitgekom nie. Deur die grafiek waar te neem, sien ons eerstens die benaderde spoed van die toepassing, en as pieke op die grafiek bespeur word, weet ons ongeveer waar die "prop" is. Dis eenvoudig. Tot dusver het dit geblyk dat dit net vir een streek in aanvraag is, maar ek is gereed om dit te herhaal vir belangstellendes.

Toepassingsontwikkeling

Statistiek oor soortgelyke take het onlangs aanleiding gegee tot meer idees om werk te vereenvoudig en te vergemaklik. Op sommige projekte, op toepassingsbedieners, is daar 'n behoefte om sleutel Crypto Pro-houers te installeer, daar is baie van hulle, en die digitale handtekening verval mettertyd. Soms kom 2 take per dag aan. Maar ek het dit as onveilig beskou om 'n bot vir hierdie doeleindes te gebruik en het besluit dat ek die funksionaliteit direk in die toepassing sou skep. Natuurlik met magtiging en nagaan van toegangsregte. As jy die nodige voorregte het, sal 'n bykomende kieslys-item beskikbaar wees vir werk met digitale handtekeninge, installering, uitvee, bekyk van inligting, ens. Die funksionaliteit is tans onder ontwikkeling. Soos dit geblyk het, is dit nie baie moeilik nie, jy moet net die bestaande instruksies 'n bietjie lees, na kodevoorbeelde kyk, kollegas wat meer ervare is in ontwikkeling vra, en dit dan doen. Tydens die navorsingsproses het idees na vore gekom om by die aansoek te voeg. Ek sal nie Napoleontiese planne maak nie - daar is ontwikkeling, laat almal omgee vir hul eie sake. Maar hoewel dit interessant is, doen ek dit self.

Planne

Soos ek gesê het, is baie verskillende idees gebore vir die gebruik van ons bot en nie net - in die algemeen, kom ons sê idees vir "outomatiseringspunte", baie van hulle is vergeet, aangesien ek nie tyd gehad het om dit neer te skryf nie. Nou probeer ek alles neerskryf wat by my opkom, en ek beveel aan dat ander dieselfde doen.

Maar Alexey vergeet nie om sy wense te gee nie. Van die jongste:
/kill_sql SQL_ID - maak alle sessies dood met hierdie SQL_ID-versoek
/kill_block - maak die wortelblokkeringsessie dood
/wys_em — wys 'n prentjie van EM prestasie
Hy is 'n slinkse ou, hy wil DBA van sy foon naai =)

Dit is hoe ons werk tot voordeel van die Moederland!

Hoe raak jy jouself van roetine en oninteressante take ontslae?

Ek hoop die lees was interessant, en miskien selfs nuttig vir iemand, en ek het nie tyd gehad om die leser te verveel nie ... Sterkte aan ons almal.

Bron: will.com

Voeg 'n opmerking