Prihranimo čas, živce in delovne ure

Naši projekti so praviloma regionalni, naročniki pa so praviloma ministrstva. Toda poleg javnega sektorja naše sisteme uporabljajo tudi zasebne organizacije. Z njimi praktično ni težav.

Glavni projekti so torej regionalni in z njimi so včasih težave. Na primer z zmogljivostjo, ko je v regijah več kot 20 naših dragocenih uporabnikov v obdobju uvajanja nove funkcionalnosti na strežnikih izdelkov. To je bolečina…

Moje ime je Ruslan in podpiram informacijske sisteme skupine BARS in razvijanje ubijalskega bota za nasilne serijske upravitelje baze podatkov. Ta objava ni za tiste s slabim srcem - veliko je črk in slik.

Prihranimo čas, živce in delovne ure

/awr

Nekatere naše aplikacije delujejo na Oracle DBMS. Obstajajo tudi projekti na DBMS PostgreSQL. Oracle ima čudovito zadevo – zbiranje statističnih podatkov o obremenitvi DBMS, ki poudarja obstoječe težave in celo daje priporočila za odpravo – Automatic Workload Repository (AWR). Na eni točki (in sicer v trenutku bolečine) so razvijalci nenehno prosili za zbiranje Poročila AWR za analizo delovanja. Pošteno smo šli do strežnika DBMS, zbrali poročila, jih odnesli k nam in jih poslali v proizvodnjo v analizo. Po 5. je postalo moteče ... po 10. je postalo razdražljivo ...

Eden od mojih kolegov je nekoč izrazil idejo, da bi moralo biti vse, kar se naredi večkrat, avtomatizirano. Do trenutka razdraženosti, če sem iskren, o tem nisem razmišljal in sem poskušal avtomatizirati vse, kar se je dalo avtomatizirati, vendar pogosto ni bilo povpraševanja in je bilo bolj raziskovalne kot uporabne narave.

In potem sem pomislil: "Za ustvarjanje poročila skrbniki niso potrebni ...". Navsezadnje zbiranje poročila pomeni izvajanje skripta sql @$ORACLE_HOME/rdbms/admin/awrrpt.sql in prenos poročila s strežnika na vaše mesto ... O ja, ne dovolimo razvoja za proizvodnjo.

Nato sem poguglal ​​potrebne informacije, ustvaril funkcijo iz članka na testni bazi, zagnal skript in čudež - poročilo je bilo sestavljeno in ga je mogoče shraniti lokalno. Ustvaril je funkcije, kjer so bila pogosto potrebna poročila AWR, in povedal razvijalcem, kako jih uporabljati.

Približno v tem času sem v prostem času, po pogovoru z @BotFather, zase ustvaril bota za Telegram, samo za zabavo. Tam sem privil preprosto funkcionalnost - prikaz trenutnega časa, menjalnih tečajev, vremena, ga naučil pošiljati komplimente moji ženi (takrat deklici) po urniku. Morda je bilo v tistem času pošiljanje pohval najbolj priljubljena funkcija mojega bota in moja žena je to cenila.

torej. Razvijalci nam pišejo v Telegram, mi jim pošljemo poročilo v Telegram ... Kaj pa, če ne pišejo nam, ampak botu? Navsezadnje bo tako bolje za vse, poročilo bo prejeto hitreje in kar je najpomembneje, mimo nas. Tako se je rodila ideja o prvi priljubljeni funkcionalnosti za mojega bota.

Začel sem z izvajanjem. Naredil sem, kolikor sem lahko, v PHP-ju (sama naša aplikacija je v PHP-ju, bolj se spoznam nanj kot na Python). Nisem dober koder, zato vam ne bom pokazal svoje kode :)

Bot živi v omrežju našega podjetja in ima dostop do določenih projektov, vključno s ciljnimi zbirkami podatkov. Da se ne bi obremenjeval s parametri v ekipi ali meniju, sem to funkcionalnost dodal v skupinski klepet z obvestili o spremljanju. Na ta način bot takoj ve, iz katere zbirke podatkov naj zbere poročilo.

Ob prejemu ukaza, kot je /awr N, kjer je N število polnih ur, za katere je potrebno poročilo (privzeto - 1 ura), tudi za en teden, če baza ni bila ponovno zagnana, bot takoj začne delovati, zbere poročilo, ga objavi kot spletno stran in takoj (skoraj tam) ponudi povezavo do prepotrebnega poročila.

Sledite povezavi in ​​tukaj je poročilo AWR:

Prihranimo čas, živce in delovne ure

Po pričakovanjih so se razvijalci spopadli s takšno generacijo poročil in nekateri so se nam celo zahvalili.

Enako so si želeli vodje projektov iz drugih regij, ki so cenili priročnost ekipe, saj od stranke dobijo največ in jih skrbi zmogljivost in razpoložljivost sistemov. Bota sem dodal drugim klepetom. Še vedno ga uporabljajo in vesel sem tega.

Kasneje so kolegi iz CIT-a izvedeli, kako zbiramo poročila in so to tudi želeli narediti. Nisem jih dodal v naše klepete, ustvaril sem ločen klepet z ustvarjanjem poročil po urniku in na zahtevo.

/pgJazbec

Imamo tudi druge aplikacije v PHP v povezavi s PostgreSQL. Zbiranje poročil pgBadger za tiste v stiski sem implementiral po istem principu – v skupinskih klepetih. Sprva so ga uporabljali, potem pa nehali. Funkcionalnost je bila izrezana kot nepotrebna.

/dolžnost

Naš oddelek ima nočne izmene in temu primerno tudi urnik. Je v Google Preglednicah. Ni vedno priročno iskati povezavo, odpreti grafikon, se poiskati ... Eden od mojih nekdanjih sodelavcev se je tudi poigral s svojim Telegram botom in ga vnesel v klepet našega oddelka obvestila o začetku dežurstva za zaposlene na oddelku. Bot razčleni urnik, določi dežurnega do trenutnega datuma in po urniku ali na zahtevo sporoči, kdo je danes dežuren. Izkazalo se je odlično in priročno. Res je, oblika sporočil mi ni bila ravno všeč. Tudi za zaposlene v drugem oddelku (na primer BC "Medicina") informacije o dežurnih v drugih smereh res niso potrebne, vendar morate vedeti, kdo je dežuren v "Medicini" v primeru težav. Odločil sem se, da si bom »izposodil« funkcionalnost, a spremenil tisto, kar mi ni bilo všeč. Naredil sem obliko sporočila, primerno zase in za druge, in odstranil nepotrebne informacije.

/tnls

Po preizkusu avtomatizacije z botom Telegram se je pojavilo veliko različnih idej, vendar sem želel narediti nujno potrebne stvari. Odločil sem se za vodenje statistika zahtevkov. Za dostop do projektov naših strank smo implementirali tako imenovani "jump server" ali posredovalni strežnik. Na njem se dvignejo VPN povezave, nato pa se vrata aplikacij, baze podatkov in druga pomožna posredovanja posredujejo v naše lokalno omrežje preko ssh, za enostaven dostop do projektov naših zaposlenih, brez težav z VPN povezavami. Vse kar morate storiti je, da vzpostavite povezavo VPN z našim poslovnim omrežjem.

Statistika zahtevkov je pokazala, da se ljudje pogosto po odpovedi enega od predorov (v primeru težav z omrežjem, na primer zaradi časovne omejitve) obrnejo na nas, da bi obnovili dostop do projekta. V večini primerov je dovolj le ponovni zagon povezave in vse je v redu. Naredimo sami. Tukaj je ukaz:
Prihranimo čas, živce in delovne ure

“Padeš” v želeno točko menija, izbereš svoj projekt, počakaš minuto in vsi srečni in zadovoljni...

Po prejemu ukaza se bot z rahlim premikom bajtov in bitov poveže s strežnikom za posredovanje, pri čemer vnaprej ve, katero posredovanje je treba znova zagnati, in opravi svoje delo – obnovi povezavo s projektom. Napisal sem navodila, da lahko takšne težave rešite sami. In ljudje so se obrnili na nas le, če ponujeno orodje ni delovalo ...

/ecp_to_pem

Nadaljnja statistika je pokazala, da se je pogosto treba pretvarjati EDS Crypto Pro v formatu pem(Baza64) za različne integracije in jih imamo kar veliko. Naloga: vzemite vsebnik, ga kopirajte v računalnik z operacijskim sistemom Windows z nameščenim pripomočkom P12FromGostCSP (mimogrede plačan), ga pretvorite v pfx in nato pretvorite pfx z uporabo OpenSSL (s podporo za šifriranje GOST) v pem. Ni zelo priročno, vendar želite, da ga tlesknete s prsti.

Google je znova priskočil na pomoč. Najdeno uporabnost neke prijazne osebe. Sestavil sem ga, kot je zapisano v README - delovalo je. Bota sem naučil delati s pripomočkom in dobil skoraj takojšnjo pretvorbo.
Prihranimo čas, živce in delovne ure

Do končne izvedbe je bilo izdano naročilo za prehod na novo šifrirno obliko - gost-2012. Kolikor se spomnim, je pripomoček v tistem trenutku deloval samo s starim GOST (2001), morda je bil drug podoben pripomoček druge prijazne osebe, ne spomnim se natančno.
Po prehodu na novi GOST je bila funkcionalnost bota odstranjena iz varnostnih razlogov. Implementirano v vsebniku dockerja.

Dockerfile, če ga kdo potrebuje:

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

Za pretvorbo morate prvotni vsebnik (imenik, kot je xxx.000) postaviti v imenik /srv/in in končni pem odnesti v /srv/out.

Spreobrniti:

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

Nekega dne se je v našem podjetju zaposlil zelo kul Oracle DBA, z veliko izkušnjami v administraciji in razvoju DBMS. In takoj je imel težave pri povezovanju s strežniki DBMS s ssh: ne ve, kje in kako se povezati, dostop ni jasno opisan ali pa ne more posredovati nečesa, kar potrebuje sam. No, z veseljem pomagamo, povedali smo mu, kako naj se poveže, in mu posredovali Enterprise Manager. Toda stvari s ssh še vedno niso delovale. Eden od mojih kolegov je preprosto razložil: čistokrvni DBA :) Odločili smo se, da če bomo morali kaj na strežniku popravljati, bomo to naredili sami.

EM se včasih sesuje pod veliko obremenitvijo in za ponovni zagon... se moraš povezati preko ssh in znova zagnati preko terminala. "Administratorji so dobri v tem," je odločil naš novi sodelavec. Močne obremenitve DBMS pri nas niso redkost, pogoste so tudi zahteve po ponovnem zagonu EM. Nato isti scenarij: napetost, razdraženost in iskanje rešitve problema. Tako so se v istih skupinskih klepetih pojavili naslednji ukazi: /emstop in /emstart.

Prihranimo čas, živce in delovne ure

/ubiti

Če je na bazi močna konkurenca, kar se včasih zgodi, je treba bazo podatkov hitro razbremeniti. Najhitrejši način je, da ubijete problematičen proces... Če želite to narediti, se povežite preko ssh, ubijte -9... Bot vam bo pomagal!

Prihranimo čas, živce in delovne ure

Alexey je cenil ekipo in ji dal ljubkovalno ime - "Kilyalka" ali pištolo.
Nekega dne, ko sem opazoval, kako se je Alexey trudil in trpel, ko je vsakič vnesel /kill xxx za vsakega od procesov, sem se odločil, da naši pištoli dodam »večcevno«:

Prihranimo čas, živce in delovne ure

To je bolje! Vse je zate, Aleksej, samo delaj, draga!

Seveda je bila tako pomembna ekipa omejena dostop z user_id - "zaščiten". Ko je videl, kako Lesha spretno ubija procese na strežniku baze podatkov, je več ljudi poskušalo vnesti ukaz z naključno številko procesa, vendar mojega pametnega bota ne morete prevarati, takoj je zavrnil.

/alertlog

No, za vsak slučaj sem naredil ukaz:
/alertlog <število vrstic> — pridobi podano število vrstic dnevnika opozoril
Bot potegne alertlog in ga pošlje naši storitvi, kot je pastebin, imenovani pyste, in pošlje povezavo do paste v klepet z zahtevami.

/preveri

Sledila je prošnja za spremljanje dejanske učinkovitosti naše aplikacije. Do sedaj je tehnična podpora projekta te podatke zbirala ročno. Ni pomembno! Naši pogumni preizkuševalci so za to razvili testne primere. Nastali preskusni dnevnik ni zelo priročen za branje; neizkušeni uporabnik bo potreboval veliko časa za razumevanje in ni prepričan, da bo poudaril potrebne informacije. In ne maramo delati z rokami, česar ne zmoremo z rokami ... Nova naloga za bota!

Prihranimo čas, živce in delovne ure

Ukaz /checks prikaže preprost in nedvoumen meni, tokrat so se naši fantje naučili uporabljati ta ukaz brez navodil!

Ko izberete želeni element, se namesto menija prikaže obvestilo o začetku testa, da nestrpni uporabniki našega testa ne poženejo 100500-krat:

Prihranimo čas, živce in delovne ure

Odvisno od izbrane menijske postavke se določen test zažene iz našega omrežja, in sicer iz stroja, kjer se nahaja bot (tam je prednastavljen jmeter, nahajajo se potrebni testi ...) ali neposredno iz podatkovnega centra (iz pripravljen stroj poleg aplikacije), da izključite omrežne povezave pri testiranju zakasnitev ali jih zmanjšate na minimum.

Po opravljenem preizkusu in prejemu dnevnika ga bot razčleni in ustvari rezultat v »človeško berljivi« obliki:

Prihranimo čas, živce in delovne ure

Zbirka meritev

Funkcionalnost je prispela in zainteresirani vodje projektov so prejeli takšno funkcijo za svoje regije. En sočutni vodja projekta je rekel: "Želim imeti statistiko časa!" Nekdo iz CIT ji je rekel, da bi bilo priročno vse to spremljati v Zabbixu. Zabbix, torej Zabbix...

Mislil sem, da se moram pripraviti na potrebo po posnemanju rešitve ... Idejo sem dal v docker vsebnik. V vsebniku se jmeter zažene po urniku (enkrat na 10 minut), postavi dnevnik na določeno mesto, php ga razčleni in prikaže potrebne podatke v obliki spletne strani. Zabbix s ključem web.page.get prejme to stran, redno izbira potrebne podatke za določene odvisne elemente in gradi graf.

Prihranimo čas, živce in delovne ure

Mislim, da se ni izkazalo slabo. Z opazovanjem grafa najprej vidimo približno hitrost aplikacije in če so na grafu zaznani vrhovi, približno vemo, kje je »čep«. Enostavno je. Zaenkrat se je izkazalo, da je povpraševanje samo v eni regiji, vendar sem ga pripravljen ponoviti za tiste, ki jih zanima.

Razvoj aplikacij

Statistični podatki o podobnih opravilih v zadnjem času porajajo več idej za poenostavitev in olajšanje dela. Pri nekaterih projektih, na aplikacijskih strežnikih, je treba namestiti vsebnike ključev Crypto Pro, teh je veliko, digitalni podpis pa čez čas poteče. Včasih prideta 2 nalogi na dan. Vendar se mi je zdela nevarna uporaba bota za te namene in sem se odločil, da bom funkcionalnost ustvaril neposredno v aplikaciji. Seveda z avtorizacijo in preverjanjem pravic dostopa. Če imate potrebne privilegije, bo na voljo dodatna menijska postavka za delo z digitalnimi podpisi, namestitev, brisanje, ogled informacij itd. Funkcionalnost je trenutno v razvoju. Kot se je izkazalo, to ni zelo težko, le malo morate prebrati obstoječa navodila, pogledati primere kode, vprašati kolege, ki so bolj izkušeni v razvoju, in nato to storiti. Med raziskovalnim procesom so se pojavile ideje za dodajanje v aplikacijo. Ne bom delal napoleonskih načrtov - razvoj je, vsak naj se ukvarja s svojim poslom. A čeprav je zanimivo, to počnem sam.

Načrti

Kot sem rekel, se je rodilo veliko različnih idej za uporabo našega bota in ne samo - na splošno, recimo, ideje za "avtomatske točke", mnoge od njih so bile pozabljene, ker jih nisem imel časa zapisati. Zdaj poskušam zapisati vse, kar mi pade na pamet, in priporočam, da to storijo tudi drugi.

Toda Alexey ne pozabi povedati svojih želja. Iz najnovejšega:
/kill_sql SQL_ID — uniči vse seje s to zahtevo SQL_ID
/kill_block - uniči sejo blokiranja root
/show_em — pokažite sliko delovanja EM
On je zvit tip, hoče šivati ​​DBA iz svojega telefona =)

Tako delamo v korist domovine!

Kako se znebite rutinskih in nezanimivih opravil?

Upam, da se je branje izkazalo za zanimivo in morda celo koristno za koga, in nisem imel časa dolgočasiti bralca ... Vso srečo vsem nam.

Vir: www.habr.com

Dodaj komentar