Säästame aega, närve ja töötunde

Meie projektid on tavaliselt piirkondlikud ja tellijateks ministeeriumid. Kuid lisaks avalikule sektorile kasutavad meie süsteeme ka eraorganisatsioonid. Nendega probleeme praktiliselt pole.

Niisiis on peamised projektid piirkondlikud ja mõnikord on nendega probleeme. Näiteks jõudlusega, kui piirkondades on tooteserverites uute funktsioonide juurutamise perioodil rohkem kui 20 XNUMX meie väärtuslikku kasutajat. See on valu…

Minu nimi on Ruslan ja toetan BARS Grupi infosüsteeme ja tapjaroti väljatöötamine vägivaldsete DBA-de jaoks. See postitus pole nõrganärvilistele - seal on palju kirju ja pilte.

Säästame aega, närve ja töötunde

/awr

Mõned meie rakendused töötavad Oracle DBMS-is. Projekte on ka PostgreSQL DBMS-is. Oracle'il on suurepärane asi - DBMS-i koormuse kohta statistika kogumine, mis tõstab esile olemasolevad probleemid ja annab isegi soovitusi nende kõrvaldamiseks - automaatne töökoormuse hoidla (AWR). Ühel hetkel (nimelt valu hetkel) palusid arendajad pidevalt koguda AWR aruanded jõudluse analüüsiks. Läksime ausalt DBMS-i serverisse, kogusime aruanded, viisime need meile ja saatsime analüüsimiseks tootmisse. Peale 5ndat korda läks tüütuks... peale 10ndat läks ärritavaks...

Üks mu kolleeg väljendas kunagi mõtet, et kõik, mida tehakse rohkem kui üks kord, tuleks automatiseerida. Kuni ärrituse hetkeni, ausalt öeldes, ei mõelnud ma sellele ja püüdsin automatiseerida kõike, mida oli võimalik automatiseerida, kuid sageli polnud see nõutud ja oli pigem uurimistöö kui rakenduslik iseloom.

Ja siis ma mõtlesin: "Aruande loomiseks pole administraatoreid vaja...". Aruande kogumine tähendab ju sql-skripti @$ORACLE_HOME/rdbms/admin/awrrpt.sql käivitamist ja aruande serverist enda juurde viimist... Oh jah, me ei luba tootmiseks arendamist.

Seejärel guugeldasin vajaliku info, lõin testibaasis olevast artiklist funktsiooni, käivitasin skripti ja ime - aruanne oli koostatud ja saab lokaalselt salvestada. Lõi funktsioonid, kus AWR-i aruandeid sageli vaja oli, ja rääkis arendajatele, kuidas neid kasutada.

Umbes sel ajal, vabal ajal, pärast vestlust @BotFatheriga, lõin enda jaoks nalja pärast Telegrami roboti. Kruvisin sinna sisse lihtsa funktsionaalsuse - näitan praegust kellaaega, vahetuskursse, ilma, õpetasin seda graafiku alusel oma naisele (tollasele sõbrannale) komplimente saatma. Võib-olla oli sel ajal minu roboti kõige populaarsem funktsioon komplimentide saatmine ja mu naine hindas seda.

Niisiis. Arendajad kirjutavad meile Telegramis, meie saadame neile Telegramis raporti... Mis siis, kui nad ei kirjuta mitte meile, vaid robotile? Nii on ju kõigil parem, aruanne saab kiiremini kätte ja mis kõige tähtsam, meist mööda minnes. Nii sündis minu roboti esimese populaarse funktsiooni idee.

Alustasin rakendamist. Tegin seda nii hästi kui suutsin PHP-s (meie rakendus ise on PHP-s, olen sellega rohkem kursis kui Pythonis). Ma ei ole hea kodeerija, seega ma ei näita teile oma koodi :)

Bot elab meie ettevõtte võrgus ja tal on juurdepääs teatud projektidele, sealhulgas sihtandmebaasidele. Et mitte jännata meeskonnas või menüüs olevate parameetritega, lisasin selle funktsionaalsuse grupivestlusesse koos jälgimismärguannetega. Nii teab bot kohe, millisest andmebaasist aruannet koguda.

Olles saanud käsu nagu /awr N, kus N on täistundide arv, mille kohta on vaja aruannet (vaikimisi - 1 tund), isegi nädala jooksul, kui andmebaasi pole taaskäivitatud, hakkab bot kohe tööle, kogub aruande, avaldab selle veebilehele ja annab kohe (peaaegu sealsamas) lingi väga vajalikule aruandele.

Järgige linki ja siin see on, AWR-i aruanne:

Säästame aega, närve ja töötunde

Nagu oodatud, said arendajad sellise aruannete genereerimisega hakkama ja mõned isegi tänasid meid.

Hinnanud meeskonna mugavust, soovisid sama ka teiste piirkondade projektijuhid, kes saavad kliendilt kõige rohkem ning on mures süsteemide toimivuse ja saadavuse pärast. Lisasin roboti teistesse vestlustesse. Nad kasutavad seda siiani ja mul on selle üle hea meel.

Hiljem said kolleegid CIT-st teada, kuidas me aruandeid kogume, ja tahtsid ka seda teha. Ma ei lisanud neid meie vestlustesse, vaid lõin eraldi vestluse aruannete genereerimiseks ajakava alusel ja nõudmisel.

/pgBadger

Meil on ka muid PHP-rakendusi koos PostgreSQL-iga. Rakendasin pgBadgeri aruannete kogumise abivajajatele samal põhimõttel – grupivestlustes. Alguses kasutasid nad seda, kuid siis lõpetasid. Funktsionaalsus lõigati välja kui mittevajalik.

/kohustus

Meie osakonnas on öövahetused ja vastavalt ka graafik. See on Google'i arvutustabelites. Alati pole mugav otsida linki, avada diagrammi, otsida ennast... Üks mu endine kolleeg mängis ka oma Telegrami robotiga ja tutvustas seda meie osakonna vestluses teated osakonna töötajate töövahetuse alguse kohta. Bot parsib graafikut, määrab jooksva kuupäeva järgi valves oleva isiku ja vastavalt graafikule või nõudmisel annab teada, kes täna valves on. See osutus suurepäraseks ja mugavaks. Tõsi, mulle ei meeldinud sõnumite vorming. Samuti ei ole teise osakonna (näiteks BC “Meditsiin”) töötajatel tegelikult vaja infot muul suunal valvesolijate kohta, vaid peab teadma, kes “Meditsiinis” on probleemide korral valves. Otsustasin funktsiooni "laenata", kuid muuta seda, mis mulle ei meeldinud. Muutsin endale ja teistele mugavaks sõnumivormingu, eemaldades ebavajaliku info.

/tnls

Pärast automaatika proovimist Telegrami roboti abil tekkis palju erinevaid ideid, kuid tahtsin teha rangelt vajalikke asju. Otsustasin juhtida taotluste statistika. Oma klientide projektidele juurdepääsuks oleme juurutanud nn hüppeserveri ehk edasisuunamisserveri. Sellel luuakse VPN-ühendused, seejärel edastatakse rakenduste pordid, andmebaasid ja muud abiedastused ssh-i kaudu meie kohalikku võrku, et meie töötajate projektidele oleks lihtne pääseda, ilma VPN-ühendustega probleeme tekitamata. Kõik, mida pead tegema, on seadistada VPN-ühendus meie ettevõtte võrguga.

Päringute statistika on näidanud, et sageli pöörduvad inimesed pärast ühe tunneli tõrkumist (võrguprobleemide korral näiteks ajalõpu tõttu) meie poole projektile juurdepääsu taastamiseks. Enamasti piisab ühenduse taaskäivitamisest ja kõik on korras. Teeme seda ise. Siin on käsk:
Säästame aega, närve ja töötunde

"Kukud" soovitud menüüpunkti, valite oma projekti, ootate hetke ja kõik on õnnelikud ja rahul...

Käsu saamisel loob bot baitide ja bittide kerge liikumisega ühenduse edasisuunamisserveriga, teades ette, milline edastamine tuleb uuesti käivitada, ja teeb oma töö ära – taastab ühenduse projektiga. Kirjutasin juhised, et saaksite selliseid probleeme ise lahendada. Ja inimesed võtsid meiega ühendust ainult siis, kui pakutud tööriist ei töötanud...

/ecp_to_pem

Täiendav statistika näitas, et sageli on vaja teisendada EDS Crypto Pro PEM-vormingus(Alus64) erinevate integratsioonide jaoks ja meil on neid päris palju. Ülesanne: võtke konteiner, kopeerige see Windowsi arvutisse, kuhu on installitud utiliit P12FromGostCSP (muide tasuline), teisendage see pfx-iks ja seejärel teisendage pfx OpenSSL-i (GOST-krüptimise toega) abil pemiks. See pole eriti mugav, kuid soovite seda ühe sõrmenipsuga.

Google on taas appi tulnud. Leitud mõne lahke inimese kasulikkus. Panin selle kokku nii, nagu README-s kirjas - see töötas. Õpetasin roboti utiliidiga töötama ja sain peaaegu kohese teisenduse.
Säästame aega, närve ja töötunde

Lõpliku rakendamise ajaks anti välja korraldus minna üle uuele krüpteerimisvormingule - gost-2012. Minu mäletamist mööda töötas utiliit tol hetkel ainult vana GOST-iga (2001), võib-olla oli see veel üks sarnane utiliit teiselt lahkelt inimeselt, ma täpselt ei mäleta.
Pärast üleminekut uuele GOST-ile eemaldati turvakaalutlustel roboti funktsionaalsus. Teostas selle dokkimiskonteineris.

Dockerfile, juhuks kui kellelgi seda vaja läheb:

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

Teisendamiseks peate asetama algse konteineri (kataloog nagu xxx.000) kataloogi /srv/in ja viima valmis pemi kausta /srv/out.

Teisendada:

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

Ühel päeval sai meie ettevõttesse tööle väga lahe Oracle DBA, kellel on palju kogemusi DBMS-i halduse ja arendamise vallas. Ja tal tekkis kohe raskusi ssh-ga DBMS-i serveritega ühenduse loomisega: ta ei tea, kuhu või kuidas ühendust luua, ligipääs pole selgelt kirjeldatud või ta ei saa midagi vajalikku endale edastada. Aitame hea meelega, rääkisime talle, kuidas ühendust luua, ja edastasime talle ettevõttejuhi. Aga ssh-ga asjad ikka ei klappinud. Üks mu kolleeg selgitas seda lihtsalt: tõupuhas DBA :) Otsustasime, et kui on vaja midagi serveris näpistada, siis teeme seda ise.

EM jookseb vahel suure koormuse all kokku ja selle taaskäivitamiseks... pead ssh kaudu ühenduse looma ja terminali kaudu restart. "Administraatorid on selles head," otsustas meie uus kolleeg. DBMS-i rasked koormused pole meie jaoks haruldased, samuti on tavalised taotlused EM-i taaskäivitamiseks. Siis sama stsenaarium: pinge, ärritus ja probleemile lahenduse otsimine. Nii et samas grupivestluses ilmusid järgmised käsud: /emstop ja /emstart.

Säästame aega, närve ja töötunde

/tappa

Kui andmebaasis on tugev konkurents ja seda mõnikord juhtub, on vaja andmebaas kiiresti maha laadida. Kiireim viis on probleemne protsess tappa... Selleks loo ssh kaudu ühendus, kill -9... Aitab bot!

Säästame aega, närve ja töötunde

Aleksei hindas meeskonda ja pani sellele südamliku nime - "Kilyalka" või relv.
Ühel päeval, pärast seda, kui olin jälginud, kuidas Aleksei proovis ja kannatas, sisestades iga protsessi jaoks iga kord /kill xxx, otsustasin lisada meie relvale "mitmetoru":

Säästame aega, närve ja töötunde

See on parem! Kõik on sinu jaoks, Aleksei, lihtsalt tööta, kallis!

Loomulikult oli nii oluline meeskond piiratud juurdepääs kasutaja_id abil - "lollikindel". Nähes, kuidas Lesha osavalt andmebaasiserveris protsesse tapab, üritasid mitmed inimesed sisestada juhusliku protsessinumbriga käsku, kuid te ei saa mu nutikat robotit petta, keeldus ta kohe.

/alertlog

Noh, igaks juhuks andsin käsu:
/alertlog — hankige määratud arv hoiatuslogi ridu
Bot tõmbab hoiatuslogi ja saadab selle meie teenusesse, nagu pastebin, mida nimetatakse pyste, ja saadab kleebi lingi taotluse vestlusesse.

/kontrollib

Järgmiseks tuli palve jälgida meie rakenduse tegelikku jõudlust. Seni kogus projekti tehniline tugi neid andmeid käsitsi. Vahet pole! Meie vaprad testijad on selle jaoks välja töötanud testjuhtumid. Saadud testilogi pole eriti mugav lugeda, kogenematul kasutajal kulub selle mõistmiseks kaua aega ja ta pole kindel, kas ta vajaliku teabe esile tõstab. Ja meile ei meeldi teha oma kätega seda, mida me kätega teha ei saa... Uus ülesanne robotile!

Säästame aega, närve ja töötunde

Käsk /checks kuvab lihtsa ja üheselt mõistetava menüü; seekord õppisid meie poisid, kuidas seda käsku ilma juhisteta kasutada!

Kui valite soovitud üksuse, kuvatakse menüü asemel teade testi alguse kohta, et kannatamatud kasutajad ei teeks meie testi 100500 XNUMX korda:

Säästame aega, närve ja töötunde

Olenevalt valitud menüüpunktist käivitatakse konkreetne test meie võrgust, nimelt masinast, kus bot elab (seal on jmeter eelseadistatud, vajalikud testid asuvad...) või otse andmekeskusest (a. ettevalmistatud masin rakenduse kõrval), et välistada võrguühendused viivituste testimisel või vähendada neid miinimumini.

Pärast testi lõpetamist ja logi vastuvõtmist analüüsib bot selle ja esitab tulemuse "inimloetaval" kujul:

Säästame aega, närve ja töötunde

Mõõdikute kogumine

Funktsionaalsus on saabunud ja huvitatud projektijuhid on saanud sellise funktsiooni oma piirkondade jaoks. Ja üks kaastundlik projektijuht ütles: "Ma tahan ajastatistikat!" Keegi CITist ütles talle, et seda kõike oleks mugav Zabbixis jälgida. Zabbix, nii Zabbix...

Arvasin, et pean valmistuma lahenduse kordamise vajaduseks... Panin idee dokkimiskonteinerisse. Konteineris käivitatakse jmeter graafiku alusel (üks kord iga 10 minuti järel), paneb logi kindlasse kohta, php parsib selle ja kuvab vajalikud andmed veebilehe kujul. Zabbix, kasutades võtit web.page.get, võtab selle lehe vastu, valib regulaarselt teatud sõltuvate elementide jaoks vajalikud andmed ja koostab graafiku.

Säästame aega, närve ja töötunde

Ma arvan, et see ei tulnud paha. Graafikut jälgides näeme esiteks rakenduse ligikaudset kiirust ja kui graafikul tuvastatakse piigid, siis teame ligikaudselt, kus asub “pistik”. See on lihtne. Seni on see osutunud nõudlikuks vaid ühe piirkonna jaoks, kuid olen valmis seda huvilistele kordama.

Rakenduste arendamine

Sarnaste ülesannete statistika on viimasel ajal andnud rohkem ideid töö lihtsustamiseks ja hõlbustamiseks. Mõne projekti puhul on rakendusserverites vaja installida võtmetähtsusega Crypto Pro konteinerid, neid on palju ja digitaalallkiri aegub aja jooksul. Mõnikord saabub 2 ülesannet päevas. Kuid pidasin roboti kasutamist nendel eesmärkidel ebaturvaliseks ja otsustasin, et loon funktsioonid otse rakenduses. Loomulikult autoriseerimise ja juurdepääsuõiguste kontrollimisega. Vajalike õiguste olemasolul on saadaval täiendav menüükäsk digiallkirjadega töötamiseks, installimiseks, kustutamiseks, teabe vaatamiseks jne. Funktsionaalsus on hetkel väljatöötamisel. Nagu selgus, pole see kuigi keeruline, tuleb lihtsalt olemasolevaid juhiseid veidi lugeda, vaadata koodinäiteid, küsida arenduses kogenumatelt kolleegidelt ja siis ära teha. Uurimisprotsessi käigus tekkis ideid, mida taotlust täiendada. Ma ei tee Napoleoni plaane - areng toimub, las igaüks tegeleb oma asjadega. Aga kuigi see on huvitav, teen seda ise.

Plaanid

Nagu ma ütlesin, sündis meie boti kasutamiseks palju erinevaid ideid ja mitte ainult - üldiselt, ütleme "automaatikapunktide" ideed, paljud neist unustati, kuna mul polnud aega neid üles kirjutada. Nüüd püüan kõik kirja panna, mis pähe tuleb ja soovitan seda ka teistel teha.

Kuid Aleksei ei unusta oma soove avaldada. Viimasest:
/kill_sql SQL_ID — lõpetage kõik seansid selle SQL_ID päringuga
/kill_block - tapa juurte blokeerimise seanss
/show_em — näita pilti EMi esinemisest
Ta on kaval tüüp, ta tahab oma telefonist DBA-d õmmelda =)

Nii me töötame isamaa heaks!

Kuidas vabanete rutiinsetest ja ebahuvitavatest ülesannetest?

Loodan, et lugemine osutus huvitavaks ja võib-olla kellelegi isegi kasulikuks ning mul ei olnud aega lugejat tüüdata... Edu meile kõigile.

Allikas: www.habr.com

Lisa kommentaar