Ne kursejmë kohë, nerva dhe orë pune

Projektet tona janë zakonisht rajonale dhe klientët janë zakonisht ministri. Por, përveç sektorit publik, sistemet tona i përdorin edhe organizatat private. Praktikisht nuk ka probleme me ta.

Pra, projektet kryesore janë rajonale dhe ndonjëherë ka probleme me to. Për shembull, me performancën, kur në rajone ka më shumë se 20 mijë përdorues tanë të çmuar gjatë periudhës së nxjerrjes së funksionalitetit të ri në serverët e produkteve. Është një dhimbje…

Emri im është Ruslan dhe unë mbështes sistemet e informacionit të BARS Group dhe duke zhvilluar një robot vrasës për DBA-të serike të dhunshme. Ky postim nuk është për ata që janë të dobët - ka shumë letra dhe fotografi.

Ne kursejmë kohë, nerva dhe orë pune

/awr

Disa nga aplikacionet tona funksionojnë në Oracle DBMS. Ka edhe projekte në PostgreSQL DBMS. Oracle ka një gjë të mrekullueshme - mbledhjen e statistikave mbi ngarkesën në DBMS, e cila nxjerr në pah problemet ekzistuese dhe madje bën rekomandime për eliminimin - Depoja automatike e ngarkesës së punës (AWR). Në një moment (domethënë në momentin e dhimbjes), zhvilluesit vazhdimisht kërkuan të mblidhnin Raportet AWR për analizën e performancës. Sinqerisht shkuam te serveri DBMS, mblodhëm raporte, i çuam tek ne dhe i dërguam në prodhim për analizë. Pas herës së 5-të u bë e bezdisshme... pas të 10-ës u bë irrituese...

Një nga kolegët e mi shprehu dikur idenë se çdo gjë që bëhet më shumë se një herë duhet të automatizohet. Deri në momentin e acarimit, të them të drejtën, nuk e mendoja dhe u përpoqa të automatizoja gjithçka që mund të automatizohej, por shpesh nuk ishte e kërkuar dhe ishte më shumë një natyrë kërkimore sesa e aplikuar.

Dhe pastaj mendova: "Adminët nuk janë të nevojshëm për të gjeneruar një raport...". Në fund të fundit, të mbledhësh një raport do të thotë të ekzekutosh skriptin sql @$ORACLE_HOME/rdbms/admin/awrrpt.sql dhe ta çosh raportin nga serveri në vendin tënd... Oh po, ne nuk lejojmë zhvillimin për prodhim.

Pastaj kërkova në Google informacionin e nevojshëm, krijova funksionin nga artikulli në bazën e provës, ekzekutova skenarin dhe mrekullinë - raporti u përpilua dhe mund të ruhet në nivel lokal. Krijoi funksione ku shpesh nevojiteshin raportet AWR dhe u tha zhvilluesve se si t'i përdornin ato.

Rreth kësaj kohe, në kohën time të lirë, pasi fola me @BotFather, krijova një bot Telegram për veten time, vetëm për argëtim. Unë vidhos një funksionalitet të thjeshtë atje - tregoj kohën aktuale, kursin e këmbimit, motin, e mësova t'i dërgojë komplimente gruas sime (atëherë të dashurës) në një orar. Ndoshta, në atë kohë, dërgimi i komplimente ishte funksioni më i popullarizuar i robotit tim, dhe gruaja ime e vlerësoi atë.

Kështu që. Zhvilluesit na shkruajnë në Telegram, ne u dërgojmë një raport në Telegram... Po sikur të mos na shkruajnë, por një boti? Në fund të fundit, do të jetë më mirë për të gjithë, raporti do të merret më shpejt, dhe më e rëndësishmja, duke na anashkaluar. Kështu lindi ideja e funksionalitetit të parë popullor për robotin tim.

Fillova zbatimin. E bëra, sa më mirë që munda, në PHP (vetë aplikacioni ynë është në PHP, unë jam më i aftë për të sesa në Python). Unë nuk jam një kodues i mirë, kështu që nuk do t'ju tregoj kodin tim :)

Bot jeton në rrjetin tonë të korporatës dhe ka qasje në projekte të caktuara, duke përfshirë bazat e të dhënave të synuara. Për të mos u shqetësuar me parametrat në ekip ose me menunë, unë e bashkangjita këtë funksion në bisedën në grup me njoftimet e monitorimit. Në këtë mënyrë roboti e di menjëherë nga cila bazë të dhënash të mbledhë raportin.

Pasi ka marrë një komandë si /awr N, ku N është numri i orëve të plota për të cilat nevojitet një raport (si parazgjedhje - 1 orë), edhe për një javë, nëse baza e të dhënave nuk është rifilluar, roboti fillon menjëherë të punojë, mbledh raportin, e publikon atë si një faqja e internetit dhe menjëherë (pothuajse aty) ofron një lidhje me raportin shumë të nevojshëm.

Ndiqni lidhjen dhe ja ku është, raporti AWR:

Ne kursejmë kohë, nerva dhe orë pune

Siç pritej, zhvilluesit u përballën me gjenerimin e një raporti të tillë, dhe disa madje na falënderuan.

Duke vlerësuar komoditetin e ekipit, menaxherët e projekteve nga rajone të tjera donin të njëjtën gjë, pasi ata marrin më shumë nga klienti dhe janë të shqetësuar për performancën dhe disponueshmërinë e sistemeve. E shtova bot-in në biseda të tjera. Ata ende e përdorin atë, dhe unë jam i kënaqur për këtë.

Më vonë, kolegët nga CIT mësuan se si ne mbledhim raporte dhe donin ta bënin gjithashtu. Unë nuk i shtova ato në bisedat tona, krijova një bisedë të veçantë me gjenerimin e raporteve sipas një orari dhe sipas kërkesës.

/pgBadger

Kemi edhe aplikacione të tjera në PHP në lidhje me PostgreSQL. Kam zbatuar koleksionin e raporteve pgBadger për ata që kanë nevojë duke përdorur të njëjtin parim - në bisedat në grup. Në fillim e përdorën, por më pas e ndaluan. Funksionaliteti u ndërpre si i panevojshëm.

/detyrë

Departamenti ynë ka ndërrime të natës dhe, në përputhje me rrethanat, ka një orar. Është në Fletët e Google. Nuk është gjithmonë e përshtatshme të kërkosh një lidhje, të hapësh një tabelë, të kërkosh veten... Një nga ish-kolegët e mi gjithashtu luajti me botin e tij Telegram dhe e futi atë në bisedën e departamentit tonë njoftime për fillimin e turnit për punonjësit e departamentit. Bot analizon orarin, përcakton personin në detyrë deri në datën aktuale dhe, sipas orarit ose sipas kërkesës, raporton se kush është në detyrë sot. Doli e shkëlqyeshme dhe e përshtatshme. Vërtetë, nuk më pëlqeu shumë formati i mesazheve. Gjithashtu, për punonjësit e një departamenti tjetër (për shembull, BC "Mjekësi"), informacioni për ata që janë në detyrë në drejtime të tjera nuk nevojiten vërtet, por duhet të dini se kush është në detyrë në "Mjekësi" në rast problemesh. Vendosa të "huazoj" funksionalitetin, por të ndryshoj atë që nuk më pëlqeu. Kam bërë një format mesazhi të përshtatshëm për veten dhe të tjerët, duke hequr informacionin e panevojshëm.

/tnls

Pasi provova automatizimin duke përdorur një bot Telegram, u shfaqën shumë ide të ndryshme, por doja të bëja gjëra rreptësisht të nevojshme. Vendosa të drejtoj statistikat mbi kërkesat. Për të hyrë në projektet e klientëve tanë, ne kemi implementuar të ashtuquajturin "jump server" ose server forwarding. Mbi të ngrihen lidhjet VPN, më pas portat e aplikacionit, bazat e të dhënave dhe përcjelljet e tjera ndihmëse përcillen në rrjetin tonë lokal nëpërmjet ssh, për qasje të lehtë në projektet e punonjësve tanë, pa probleme me lidhjet VPN. E tëra çfarë ju duhet të bëni është të vendosni një lidhje VPN me rrjetin tonë të korporatës.

Statistikat e kërkesave kanë treguar se shpesh, pasi një prej tuneleve dështon (në rastin e problemeve të rrjetit, për shkak të një afati kohor, për shembull), njerëzit na kontaktojnë për rivendosjen e aksesit në projekt. Në shumicën e rasteve, mjafton vetëm rinisja e lidhjes dhe gjithçka është në rregull. Le ta bëjmë vetë. Këtu është komanda:
Ne kursejmë kohë, nerva dhe orë pune

Ju "dënoni" në artikullin e dëshiruar të menusë, zgjidhni projektin tuaj, prisni një minutë dhe të gjithë janë të lumtur dhe të kënaqur...

Me marrjen e një komande, me një lëvizje të lehtë të byteve dhe biteve, boti lidhet me serverin e përcjelljes, duke ditur paraprakisht se cili përcjellje duhet të rifillohet dhe kryen punën e tij - rikthen lidhjen me projektin. Unë shkrova udhëzime që të mund t'i zgjidhni vetë çështje të tilla. Dhe njerëzit na kontaktuan vetëm nëse mjeti i ofruar nuk funksiononte...

/ecp_to_pem

Statistikat e mëtejshme treguan se shpesh është e nevojshme të konvertohet EDS Crypto Pro në formatin pem(Baza64) për integrime të ndryshme, dhe ne kemi mjaft prej tyre. Detyra: merrni një kontejner, kopjoni atë në një kompjuter Windows me programin P12FromGostCSP të instaluar (me pagesë, meqë ra fjala), konvertojeni në pfx dhe më pas konvertoni pfx duke përdorur OpenSSL (me mbështetje për enkriptimin GOST) në pem. Nuk është shumë i përshtatshëm, por ju e dëshironi atë sa të kërcejnë gishtat.

Google ka ardhur përsëri në shpëtim. Gjetur dobia e një personi të sjellshëm. E mblodha siç është shkruar në README - funksionoi. E mësova robotin të punonte me programin dhe mora një konvertim pothuajse të menjëhershëm.
Ne kursejmë kohë, nerva dhe orë pune

Deri në kohën e zbatimit përfundimtar, u dha një urdhër për të kaluar në një format të ri të kriptimit - gost-2012. Me sa mbaj mend, shërbimi në atë moment funksiononte vetëm me GOST-in e vjetër (2001), ndoshta ishte një mjet tjetër i ngjashëm nga një person tjetër i sjellshëm, nuk e mbaj mend saktësisht.
Pas kalimit në GOST-in e ri, funksionaliteti i robotit u hoq për arsye sigurie. E zbatoi atë në një kontejner docker.

Dockerfile, në rast se dikush ka nevojë për të:

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

Për të konvertuar, ju duhet të vendosni kontejnerin origjinal (direktoria si xxx.000) në drejtorinë /srv/in dhe ta çoni pem-in e përfunduar në /srv/out.

Për të kthyer:

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

Një ditë, një Oracle DBA shumë e lezetshme, me shumë përvojë në administrimin dhe zhvillimin e DBMS, mori një punë në kompaninë tonë. Dhe ai menjëherë pati probleme me lidhjen me serverët DBMS me ssh: ai nuk e di se ku ose si të lidhet, qasja nuk përshkruhet qartë ose nuk mund t'i përcjellë vetes diçka që i nevojitet. Epo, ne jemi të lumtur të ndihmojmë, i thamë se si të lidhet dhe ia përcollëm Menaxher i Ndërmarrjes. Por gjërat ende nuk funksionuan me ssh. Një nga kolegët e mi e shpjegoi thjesht: një DBA e racës së pastër :) Vendosëm që nëse duhet të rregullojmë diçka në server, do ta bëjmë vetë.

EM ndonjëherë rrëzohet nën ngarkesë të madhe, dhe për ta rifilluar atë ... duhet të lidheni përmes ssh dhe të rinisni përmes terminalit. "Adminët janë të mirë në këtë," vendosi kolegu ynë i ri. Ngarkesat e rënda në DBMS nuk janë të rralla për ne dhe kërkesat për të rifilluar EM janë gjithashtu të zakonshme. Pastaj i njëjti skenar: tension, acarim dhe kërkim për një zgjidhje për problemin. Pra, në të njëjtat biseda në grup u shfaqën komandat e mëposhtme: /emstop dhe /emstart.

Ne kursejmë kohë, nerva dhe orë pune

/vrasë

Nëse ka konkurrencë të fortë në bazën e të dhënave, dhe kjo ndonjëherë ndodh, është e nevojshme të shkarkohet shpejt baza e të dhënave. Mënyra më e shpejtë është të vrasësh procesin problematik... Për ta bërë këtë, lidhuni përmes ssh, vrasni -9... Bot do t'ju ndihmojë!

Ne kursejmë kohë, nerva dhe orë pune

Alexey e vlerësoi ekipin dhe i dha një emër të dashur - "Kilialka" ose një armë.
Një ditë, pasi pashë se si Alexey u përpoq dhe vuajti, duke hyrë në / kill xxx çdo herë për secilin nga proceset, vendosa të shtoja "shumë tytë" në armën tonë:

Ne kursejmë kohë, nerva dhe orë pune

Kjo eshte më mirë! Gjithçka është për ju, Alexey, vetëm punoni, i dashur!

Natyrisht, një ekip kaq i rëndësishëm ishte i kufizuar akses nga user_id - "i pagabueshëm". Duke parë se si Lesha vret me shkathtësi proceset në serverin e bazës së të dhënave, disa njerëz u përpoqën të futnin një komandë me një numër të rastësishëm procesi, por ju nuk mund ta mashtroni robotin tim të zgjuar, ai menjëherë refuzoi.

/alertlog

Epo, për çdo rast, bëra komandën:
/alertlog <numri i rreshtave> — merrni numrin e specifikuar të linjave alertlog
Bot tërheq një ditar alarmi dhe e dërgon në shërbimin tonë, si pastebin, i quajtur pyste, dhe dërgon një lidhje në paste në bisedën e kërkesës.

/çeqe

Më pas erdhi një kërkesë për monitorimi i performancës reale të aplikacionit tonë. Deri më tani, mbështetja teknike e projektit i mblodhi këto të dhëna manualisht. S'ka rëndësi! Testuesit tanë të guximshëm kanë zhvilluar raste testimi për këtë. Regjistri i testimit që rezulton nuk është shumë i përshtatshëm për t'u lexuar; një përdoruesi të papërvojë do t'i duhet shumë kohë për ta kuptuar dhe nuk është i sigurt se do të nxjerrë në pah informacionin e nevojshëm. Dhe ne nuk na pëlqen të bëjmë me duart tona atë që nuk mund ta bëjmë me duart tona... Një detyrë e re për botin!

Ne kursejmë kohë, nerva dhe orë pune

Komanda /checks shfaq një menu të thjeshtë dhe të paqartë; këtë herë djemtë tanë mësuan se si ta përdorin këtë komandë pa udhëzime!

Kur zgjidhni artikullin e dëshiruar, në vend të një menuje, shfaqet një njoftim për fillimin e testit, në mënyrë që përdoruesit e paduruar të mos e kryejnë testin tonë 100500 herë:

Ne kursejmë kohë, nerva dhe orë pune

Në varësi të artikullit të zgjedhur të menysë, një test specifik lëshohet nga rrjeti ynë, përkatësisht nga makina ku jeton roboti (jmetri është i parakonfiguruar atje, janë vendosur testet e nevojshme...) ose direkt nga qendra e të dhënave (nga një makinë e përgatitur pranë aplikacionit), për të përjashtuar lidhjet e rrjetit gjatë testimit të vonesave, ose për t'i reduktuar ato në minimum.

Pas përfundimit të testit dhe marrjes së regjistrit, roboti e analizon atë dhe prodhon rezultatin në një formë "të lexueshme nga njeriu":

Ne kursejmë kohë, nerva dhe orë pune

Mbledhja e metrikës

Funksionaliteti ka ardhur dhe menaxherët e interesuar të projektit kanë marrë një funksion të tillë për rajonet e tyre. Dhe një Menaxher i dhembshur i Projektit tha: "Dua të kem statistika të kohës!" Dikush nga CIT i tha asaj se do të ishte e përshtatshme për të monitoruar të gjitha këto në Zabbix. Zabbix, pra Zabbix...

Mendova se duhej të përgatitesha për nevojën për të përsëritur zgjidhjen... E vendosa idenë në një kontejner docker. Në kontejner, jmeter lëshohet në një orar (një herë në 10 minuta), e vendos regjistrin në një vend të caktuar, php e analizon atë dhe shfaq të dhënat e nevojshme në formën e një faqe në internet. Zabbix, duke përdorur tastin web.page.get, merr këtë faqe, zgjedh rregullisht të dhënat e nevojshme për disa elementë të varur dhe ndërton një grafik.

Ne kursejmë kohë, nerva dhe orë pune

Unë mendoj se nuk doli keq. Duke vëzhguar grafikun, së pari shohim shpejtësinë e përafërt të aplikacionit dhe nëse në grafik zbulohen maja, ne e dimë afërsisht se ku është "priza". Është e thjeshtë. Deri tani ka rezultuar të jetë e kërkuar vetëm për një rajon, por jam gati ta përsëris për të interesuarit.

Zhvillimi i aplikacionit

Statistikat për detyra të ngjashme kanë dhënë kohët e fundit më shumë ide për thjeshtimin dhe lehtësimin e punës. Në disa projekte, në serverët e aplikacioneve, ekziston nevoja për të instaluar kontejnerët kryesorë Crypto Pro, ka shumë prej tyre dhe nënshkrimi dixhital skadon me kalimin e kohës. Ndonjëherë vijnë 2 detyra në ditë. Por e konsiderova të pasigurt përdorimin e një boti për këto qëllime dhe vendosa që do ta krijoja funksionalitetin direkt në aplikacion. Natyrisht me autorizim dhe kontroll të të drejtave të aksesit. Nëse keni privilegjet e nevojshme, do të jetë i disponueshëm një artikull shtesë i menysë për të punuar me nënshkrimet dixhitale, instalimin, fshirjen, shikimin e informacionit, etj. Funksionaliteti është aktualisht në zhvillim e sipër. Siç doli, kjo nuk është shumë e vështirë, thjesht duhet të lexoni pak udhëzimet ekzistuese, të shikoni shembuj kodesh, të pyesni kolegët më me përvojë në zhvillim dhe më pas ta bëni atë. Gjatë procesit të kërkimit, dolën ide për t'i shtuar aplikacionit. Unë nuk do të bëj plane Napoleonike - ka zhvillim, le të kujdeset secili për biznesin e vet. Por ndërsa është interesante, po e bëj vetë.

Planet

Siç thashë, lindën shumë ide të ndryshme për përdorimin e botit tonë dhe jo vetëm - në përgjithësi, le të themi, idetë për "pikat e automatizimit", shumë prej tyre u harruan, pasi nuk kisha kohë t'i shkruaja. Tani përpiqem të shkruaj gjithçka që më vjen në mendje dhe rekomandoj që të tjerët të bëjnë të njëjtën gjë.

Por Alexey nuk harron të japë dëshirat e tij. Nga më të fundit:
/kill_sql SQL_ID — vrisni të gjitha seancat me këtë kërkesë SQL_ID
/kill_block - vras ​​seancën e bllokimit të rrënjës
/show_em — tregoni një fotografi të performancës së EM
Ai është një djalë dinak, ai dëshiron të qepë DBA nga telefoni i tij =)

Kështu punojmë për të mirën e Atdheut!

Si të shpëtoni nga detyrat rutinë dhe jo interesante?

Shpresoj se leximi doli interesant, e ndoshta edhe i dobishëm për dikë, dhe nuk pata kohë ta mërzisja lexuesin... Suksese të gjithëve.

Burimi: www.habr.com

Shto një koment