Sutaupome laiko, nervų ir darbo valandų

Mūsų projektai dažniausiai būna regioniniai, o užsakovai – ministerijos. Tačiau, be viešojo sektoriaus, mūsų sistemomis naudojasi ir privačios organizacijos. Su jais problemų praktiškai nėra.

Taigi pagrindiniai projektai yra regioniniai, su jais kartais kyla problemų. Pavyzdžiui, dėl našumo, kai regionuose yra daugiau nei 20 XNUMX mūsų vertingų vartotojų per naujų funkcijų diegimo produktų serveriuose laikotarpį. Tai skausmas…

Mano vardas Ruslanas, palaikau BARS grupės informacines sistemas ir kuriant žudikų robotą smurtiniams serijiniams DBA. Šis įrašas nėra skirtas silpnaširdžiams – yra daug laiškų ir paveikslėlių.

Sutaupome laiko, nervų ir darbo valandų

/awr

Kai kurios mūsų programos veikia Oracle DBVS. Taip pat yra PostgreSQL DBVS projektų. „Oracle“ turi nuostabų dalyką – renka statistiką apie DBVS apkrovą, kuri išryškina esamas problemas ir netgi pateikia rekomendacijas dėl jų pašalinimo – Automatic Workload Repository (AWR). Vienu metu (būtent skausmo momentu) kūrėjai nuolat prašė surinkti AWR ataskaitos našumo analizei. Sąžiningai nuėjome į DBVS serverį, surinkome ataskaitas, nunešėme jas mums ir išsiuntėme į gamybą analizei. Po 5 karto pasidarė nemalonu... po 10-o jau erzino...

Vienas mano kolega kartą išsakė mintį, kad viskas, kas daroma ne vieną kartą, turi būti automatizuota. Iki susierzinimo momento, tiesą pasakius, apie tai negalvojau ir bandžiau automatizuoti viską, kas gali būti automatizuota, tačiau dažnai tai nebuvo paklausa ir buvo daugiau tyrimo, o ne taikomojo pobūdžio.

Ir tada pagalvojau: „Ataskaitai generuoti nereikia administratorių...“. Juk rinkti ataskaitą reiškia paleisti sql scenarijų @$ORACLE_HOME/rdbms/admin/awrrpt.sql ir nunešti ataskaitą iš serverio į savo vietą... O taip, mes neleidžiame kurti gamybai.

Tada aš „Google“ paieškojau reikiamos informacijos, sukūriau funkciją iš straipsnio testų bazėje, paleidau scenarijų ir stebuklas - ataskaita buvo sudaryta ir gali būti išsaugota vietoje. Sukūrė funkcijas, kuriose dažnai prireikdavo AWR ataskaitų, ir pasakydavo kūrėjams, kaip jomis naudotis.

Maždaug tuo metu, laisvalaikiu, po pokalbio su @BotFather, aš sukūriau sau „Telegram“ robotą tiesiog savo malonumui. Įsukau ten paprastą funkcionalumą – rodyk dabartinį laiką, valiutų kursus, orus, išmokiau pagal grafiką siųsti komplimentus mano žmonai (tuometinei draugei). Galbūt tuo metu komplimentų siuntimas buvo pati populiariausia mano boto funkcija, ir mano žmona tai įvertino.

Taigi. Kūrėjai mums rašo „Telegram“, mes jiems „Telegram“ siunčiame ataskaitą... O jeigu jie parašys ne mums, o botui? Juk taip bus visiems geriau, pranešimas bus gautas greičiau, o svarbiausia – aplenkiant mus. Taip gimė pirmosios populiarios mano boto funkcijos idėja.

Pradėjau įgyvendinti. Aš tai padariau, kiek galėjau, PHP (pati mūsų programa yra PHP, aš ją labiau išmanau nei Python). Nesu geras programuotojas, todėl savo kodo nerodysiu :)

Botas gyvena mūsų įmonės tinkle ir turi prieigą prie tam tikrų projektų, įskaitant tikslines duomenų bazes. Kad nesivarginčiau su parametrais komandoje ar meniu, šią funkciją įtraukiau į grupinį pokalbį su stebėjimo pranešimais. Tokiu būdu robotas iš karto žino, iš kurios duomenų bazės reikia rinkti ataskaitą.

Gavęs komandą kaip /awr N, kur N yra pilnų valandų skaičius, už kurias reikalinga ataskaita (pagal numatytuosius nustatymus - 1 val.), net per savaitę, jei duomenų bazė nebuvo paleista iš naujo, botas iškart pradeda dirbti, surenka ataskaitą, paskelbia ją kaip tinklalapį ir iš karto (beveik čia pat) pateikia nuorodą į taip reikalingą ataskaitą.

Sekite nuorodą ir štai AWR ataskaita:

Sutaupome laiko, nervų ir darbo valandų

Kaip ir tikėtasi, kūrėjai susidorojo su tokiu ataskaitų generavimu, o kai kurie net padėkojo.

Įvertinę komandos patogumą, to norėjo ir kitų regionų projektų vadovai, kurie iš kliento gauna daugiausiai ir nerimauja dėl sistemų veikimo bei prieinamumo. Pridėjau robotą prie kitų pokalbių. Jie vis dar juo naudojasi, ir aš tuo džiaugiuosi.

Vėliau kolegos iš CIT sužinojo, kaip mes renkame ataskaitas, ir taip pat norėjo tai padaryti. Aš jų nepridėjau prie mūsų pokalbių, sukūriau atskirą pokalbį su ataskaitų generavimu pagal tvarkaraštį ir paprašius.

/pgBadger

Taip pat turime kitų PHP programų kartu su PostgreSQL. PgBadger ataskaitų rinkimą tiems, kuriems jos reikia, įgyvendinau tuo pačiu principu – grupiniuose pokalbiuose. Iš pradžių naudojosi, bet paskui sustojo. Funkcionalumas buvo iškirptas kaip nereikalingas.

/pareiga

Mūsų skyriuje yra naktinės pamainos ir atitinkamai tvarkaraštis. Jis yra „Google“ skaičiuoklėse. Ne visada patogu ieškoti nuorodos, atsidaryti diagramą, ieškoti savęs... Vienas mano buvęs kolega taip pat žaidė su savo „Telegram“ botu ir įtraukė jį į mūsų skyriaus pokalbį pranešimai apie skyriaus darbuotojų budėjimo pamainos pradžią. Botas analizuoja tvarkaraštį, nustato budintį asmenį pagal esamą datą ir pagal grafiką arba paprašius praneša, kas šiandien budi. Tai pasirodė puiku ir patogu. Tiesa, man nelabai patiko žinučių formatas. Taip pat kito skyriaus (pvz., BC „Medicina“) darbuotojams informacija apie budinčius kitomis kryptimis tikrai nereikalinga, tačiau reikia žinoti, kas budi „Medicinoje“, iškilus problemoms. Nusprendžiau „pasiskolinti“ funkcionalumą, bet pakeisti tai, kas man nepatiko. Padariau sau ir kitiems patogų žinutės formatą, pašalinau nereikalingą informaciją.

/tnls

Išbandžius automatizavimą naudojant „Telegram“ botą, atsirado daug įvairių idėjų, tačiau norėjau atlikti griežtai būtinus dalykus. Nusprendžiau vadovauti prašymų statistika. Norėdami pasiekti savo klientų projektus, įdiegėme vadinamąjį „jump server“ arba persiuntimo serverį. Jame iškeliami VPN ryšiai, tada taikomųjų programų prievadai, duomenų bazės ir kiti pagalbiniai persiuntimai per ssh persiunčiami į mūsų vietinį tinklą, kad būtų lengva prieiti prie mūsų darbuotojų projektų, be problemų su VPN ryšiais. Viskas, ką jums reikia padaryti, tai nustatyti VPN ryšį su mūsų įmonės tinklu.

Užklausų statistika parodė, kad dažnai sugedus vienam iš tunelių (pvz., dėl tinklo problemų, dėl skirtojo laiko), žmonės kreipiasi į mus dėl prieigos prie projekto atkūrimo. Daugeliu atvejų pakanka tik iš naujo paleisti ryšį ir viskas gerai. Padarykime tai patys. Štai komanda:
Sutaupome laiko, nervų ir darbo valandų

„Patenki“ į norimą meniu punktą, išsirenki savo projektą, palauki minutę ir visi laimingi bei patenkinti...

Gavęs komandą, šiek tiek judėdamas baitais ir bitais, botas prisijungia prie persiuntimo serverio, iš anksto žinodamas, kurį persiuntimą reikia paleisti iš naujo, ir atlieka savo darbą – atkuria ryšį su projektu. Aš parašiau instrukcijas, kad galėtumėte patys išspręsti tokias problemas. O žmonės į mus kreipdavosi tik tuo atveju, jei nesuveikė pateikta priemonė...

/ecp_to_pem

Tolesnė statistika parodė, kad dažnai reikia konvertuoti EDS Crypto Pro PEM formatu(Pagrindas64) įvairioms integracijoms, o jų turime nemažai. Užduotis: paimkite konteinerį, nukopijuokite jį į Windows kompiuterį su įdiegta programa P12FromGostCSP (beje, mokama), konvertuokite į pfx ir tada konvertuokite pfx naudodami OpenSSL (su GOST šifravimu) į pem. Tai nėra labai patogu, bet to norisi vos spustelėjus pirštus.

„Google“ vėl atėjo į pagalbą. Rasta kažkokio malonaus žmogaus naudingumas. Surinkiau taip, kaip parašyta README – pavyko. Išmokiau robotą dirbti su programa ir beveik akimirksniu konvertavau.
Sutaupome laiko, nervų ir darbo valandų

Iki galutinio įgyvendinimo buvo išduotas įsakymas pereiti prie naujo šifravimo formato - gost-2012. Kiek pamenu, komunalinė programa tuo metu veikė tik su senu GOST (2001), galbūt tai buvo dar vienas panašus įrankis iš kito malonaus žmogaus, tiksliai nepamenu.
Perėjus prie naujojo GOST, boto funkcionalumas buvo pašalintas saugumo sumetimais. Įdiegė jį doko konteineryje.

Dockerfile, jei kam jo prireiktų:

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

Norėdami konvertuoti, turite įdėti pradinį konteinerį (katalogas, pvz., xxx.000) į /srv/in katalogą, o baigtą pem perkelti į /srv/out.

Konvertuoti:

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

Vieną dieną mūsų įmonėje įsidarbino labai šaunus Oracle DBA, turintis didelę DBVS administravimo ir kūrimo patirtį. Ir jam iš karto kilo problemų prisijungiant prie DBMS serverių su ssh: nežino, kur ir kaip prisijungti, prieiga nėra aiškiai aprašyta arba jis negali sau persiųsti kažko, ko reikia. Na, mes mielai padedame, pasakėme, kaip prisijungti, ir persiuntėme jam įmonės vadovą. Bet viskas vis tiek nepavyko su ssh. Viena mano kolegė paaiškino paprastai: grynakraujis DBA :) Nusprendėme, kad jei reikės ką nors pataisyti serveryje, tai padarysime patys.

EM kartais sugenda esant didelei apkrovai, o norint paleisti iš naujo... reikia prisijungti per ssh ir per terminalą paleisti iš naujo. „Adminams tai sekasi“, – nusprendė naujasis kolega. Didelės DBVS apkrovos mums nėra neįprastos, o prašymai iš naujo paleisti EM taip pat yra dažni. Tada tas pats scenarijus: įtampa, susierzinimas ir problemos sprendimo ieškojimas. Taigi tuose pačiuose grupiniuose pokalbiuose pasirodė šios komandos: /emstop ir /emstart.

Sutaupome laiko, nervų ir darbo valandų

/nužudyti

Jei duomenų bazėje yra didelė konkurencija ir taip kartais nutinka, būtina greitai iškrauti duomenų bazę. Greičiausias būdas yra užmušti probleminį procesą... Norėdami tai padaryti, prisijunkite per ssh, nužudykite -9... Botas padės!

Sutaupome laiko, nervų ir darbo valandų

Aleksejus įvertino komandą ir suteikė jai meilų vardą - "Kilyalka" arba ginklą.
Vieną dieną, pažiūrėjęs, kaip Aleksejus bandė ir kentėjo, kiekvieną kartą įvesdamas /kill xxx kiekvienam procesui, nusprendžiau mūsų ginklą pridėti „daugiavamzdžiu“:

Sutaupome laiko, nervų ir darbo valandų

Taip geriau! Viskas tau, Aleksejau, tik dirbk, brangusis!

Natūralu, kad tokia svarbi komanda buvo ribota prieiga pagal user_id - „neapsaugota“. Pamatę, kaip Lesha mikliai žudo procesus duomenų bazės serveryje, keli žmonės bandė įvesti komandą su atsitiktiniu proceso numeriu, bet jūs negalite apgauti mano išmaniojo roboto, jis iškart atsisakė.

/alertlog

Na, tik tuo atveju, aš padariau komandą:
/alertlog <eilučių skaičius> — gauti nurodytą įspėjimų žurnalo eilučių skaičių
Botas ištraukia alertlogą ir siunčia jį į mūsų paslaugą, pvz., pastebin, vadinamą pyste, ir siunčia nuorodą į pastą į užklausos pokalbį.

/patikrina

Toliau atėjo prašymas stebėti tikrąjį mūsų programos veikimą. Iki šiol projekto techninė pagalba šiuos duomenis rinko rankiniu būdu. Nesvarbu! Mūsų drąsūs bandytojai tam sukūrė bandomuosius atvejus. Gautą bandymo žurnalą nėra labai patogu skaityti, nepatyręs vartotojas ilgai supras ir nėra tikras, kad paryškins reikiamą informaciją. Ir mes nemėgstame daryti rankomis to, ko negalime padaryti... Nauja užduotis botui!

Sutaupome laiko, nervų ir darbo valandų

Komanda /checks rodo paprastą ir nedviprasmišką meniu; šį kartą mūsų vaikinai išmoko naudoti šią komandą be instrukcijų!

Kai pasirenkate norimą elementą, vietoj meniu pasirodo pranešimas apie testo pradžią, kad nekantrūs vartotojai neatliktų mūsų testo 100500 XNUMX kartų:

Sutaupome laiko, nervų ir darbo valandų

Priklausomai nuo pasirinkto meniu elemento, konkretus testas paleidžiamas iš mūsų tinklo, būtent iš mašinos, kurioje gyvena botas (ten iš anksto sukonfigūruotas jmeter, yra reikalingi testai...) arba tiesiai iš duomenų centro (iš a. paruoštą mašiną šalia programos), kad būtų neįtraukti tinklo ryšiai tikrinant vėlavimus arba juos sumažinti iki minimumo.

Baigęs testą ir gavęs žurnalą, robotas jį išanalizuoja ir pateikia rezultatą „žmogui skaitoma“ forma:

Sutaupome laiko, nervų ir darbo valandų

Metrikos rinkinys

Funkcionalumas atsirado ir suinteresuoti projektų vadovai gavo tokią funkciją savo regionams. Ir vienas užjaučiantis projektų vadovas pasakė: „Noriu turėti laiko statistiką! Kažkas iš CIT jai pasakė, kad būtų patogu visa tai stebėti Zabbix. Zabbix, taigi Zabbix...

Pagalvojau, kad reikia pasiruošti, kad reikės atkartoti sprendimą... Sudėjau idėją į dokerio konteinerį. Talpykloje jmeter paleidžiamas pagal tvarkaraštį (kartą per 10 minučių), įdeda žurnalą į tam tikrą vietą, php jį išanalizuoja ir pateikia reikiamus duomenis tinklalapio pavidalu. Zabbix, naudodamas web.page.get raktą, gauna šį puslapį, reguliariai parenka reikiamus duomenis tam tikriems priklausomiems elementams ir sukuria grafiką.

Sutaupome laiko, nervų ir darbo valandų

Manau, kad pasirodė neblogai. Stebėdami grafiką, pirmiausia matome apytikslį programos greitį, o jei grafike aptinkami smailės, apytiksliai žinome, kur yra „kištukas“. Tai paprasta. Kol kas jis pasirodė paklausus tik vienam regionui, bet esu pasiruošęs jį pakartoti besidomintiems.

Programų kūrimas

Panašių užduočių statistika pastaruoju metu sukėlė daugiau idėjų, kaip supaprastinti ir palengvinti darbą. Kai kuriuose projektuose, programų serveriuose, reikia įdiegti pagrindinius Crypto Pro konteinerius, jų yra daug, o skaitmeninis parašas laikui bėgant baigiasi. Kartais ateina 2 užduotys per dieną. Bet aš maniau, kad šiems tikslams naudoti robotą nesaugu ir nusprendžiau, kad funkcionalumą sukursiu tiesiogiai programoje. Žinoma, su autorizacija ir prieigos teisių patikrinimu. Jei turite reikiamas teises, bus galimas papildomas meniu elementas, skirtas darbui su skaitmeniniais parašais, diegimui, trynimui, informacijos peržiūrai ir pan. Šiuo metu funkcionalumas kuriamas. Kaip paaiškėjo, tai nėra labai sunku, tereikia šiek tiek perskaityti esamas instrukcijas, pažvelgti į kodų pavyzdžius, paklausti kolegų, labiau patyrusių kuriant, ir tada tai padaryti. Tyrimo proceso metu atsirado idėjų, kurias galima papildyti paraiška. Napoleono planų nekursiu – vystymasis vyksta, tegul kiekvienas užsiima savo reikalais. Bet kol įdomu, aš tai darau pats.

Planai

Kaip sakiau, mūsų boto naudojimui gimė daug įvairių idėjų ir ne tik - apskritai, tarkime, „automatizavimo taškų“ idėjos, daugelis jų buvo pamirštos, nes neturėjau laiko jų užrašyti. Dabar stengiuosi užsirašyti viską, kas šauna į galvą, ir kitiems rekomenduoju tą padaryti.

Tačiau Aleksejus nepamiršta pateikti savo norų. Iš naujausių:
/kill_sql SQL_ID — užmušti visas sesijas su šia SQL_ID užklausa
/kill_block - užmuškite šaknies blokavimo seansą
/show_em — parodyti EM pasirodymo nuotrauką
Jis yra gudrus vaikinas, jis nori pasiūti DBA iš savo telefono =)

Taip mes dirbame Tėvynės labui!

Kaip atsikratyti įprastų ir neįdomių užduočių?

Tikiuosi, kad skaitymas pasirodė įdomus, o gal net kažkam naudingas, ir aš nespėjau nuobodžiauti skaitytojui... Sėkmės mums visiems.

Šaltinis: www.habr.com

Добавить комментарий