Mēs ietaupām laiku, nervus un darba stundas

Mūsu projekti parasti ir reģionāli, un klienti parasti ir ministrijas. Taču papildus publiskajam sektoram mūsu sistēmas izmanto arī privātās organizācijas. Ar tiem praktiski nav nekādu problēmu.

Tātad galvenie projekti ir reÄ£ionāli, un dažkārt ar tiem rodas problēmas. Piemēram, ar veiktspēju, kad reÄ£ionos ir vairāk nekā 20 XNUMX mÅ«su vērtÄ«go lietotāju laikā, kad produktu serveros tiek ieviesta jauna funkcionalitāte. Tās ir sāpesā€¦

Mani sauc Ruslans un es atbalstu BARS Grupas informācijas sistēmas un slepkavas robota izstrāde vardarbīgiem seriālajiem DBA. Šis ieraksts nav paredzēts vājprātīgajiem - tajā ir daudz vēstuļu un attēlu.

Mēs ietaupām laiku, nervus un darba stundas

/awr

Dažas no mÅ«su lietojumprogrammām darbojas Oracle DBVS. Ir arÄ« projekti PostgreSQL DBVS. Oracle ir brÄ«niŔķīga lieta - statistikas apkopoÅ”ana par DBVS slodzi, kas izceļ esoŔās problēmas un pat sniedz ieteikumus to novērÅ”anai - Automatic Workload Repository (AWR). Vienā brÄ«dÄ« (proti, sāpju brÄ«dÄ«) izstrādātāji pastāvÄ«gi lÅ«dza savākt AWR pārskati veiktspējas analÄ«zei. Mēs godÄ«gi devāmies uz DBVS serveri, savācām atskaites, aizvedām tās pie mums un nosÅ«tÄ«jām uz ražoÅ”anu analÄ«zei. Pēc 5. reizes kļuva kaitinoÅ”i... pēc 10. kļuva kaitinoÅ”i...

Viens no maniem kolēģiem savulaik izteica domu, ka visu, kas tiek darÄ«ts vairāk nekā vienu reizi, vajadzētu automatizēt. LÄ«dz aizkaitinājuma brÄ«dim, godÄ«gi sakot, es par to nedomāju un mēģināju automatizēt visu, ko varēja automatizēt, bet bieži vien tas nebija pieprasÄ«ts un bija vairāk pētniecisks, nevis lietiŔķs raksturs.

Un tad es domāju: ā€œAtskaites Ä£enerÄ“Å”anai nav nepiecieÅ”ami administratori...ā€. Galu galā atskaites apkopoÅ”ana nozÄ«mē sql skripta izpildi @$ORACLE_HOME/rdbms/admin/awrrpt.sql un atskaites nogādāŔanu no servera uz savu vietu... Ak, jā, mēs neļaujam izstrādi ražoÅ”anai.

Tad pameklēju googlē nepiecieÅ”amo informāciju, izveidoju funkciju no raksta testu bāzē, paskrēju skriptu un brÄ«nums - atskaite sastādÄ«ta un lokāli saglabājama. Izveidoja funkcijas, kurās bieži bija nepiecieÅ”ami AWR ziņojumi, un stāstÄ«ja izstrādātājiem, kā tās izmantot.

Ap Å”o laiku, manā brÄ«vajā laikā, pēc sarunas ar @BotFather, es savam priekam izveidoju Telegram robotu. Es tur ieskrÅ«vēju vienkārÅ”u funkcionalitāti - rāda paÅ”reizējo laiku, valÅ«tas kursus, laikapstākļus, iemācÄ«ju tai pēc grafika sÅ«tÄ«t komplimentus manai sievai (toreiz draudzenei). Iespējams, tajā laikā komplimentu sÅ«tÄ«Å”ana bija vispopulārākā mana robota funkcionalitāte, un mana sieva to novērtēja.

Tātad. Izstrādātāji raksta mums Telegramā, mēs viņiem Telegramā nosūtām atskaiti... Ja viņi raksta nevis mums, bet botam? Galu galā, tā būs visiem labāk, ziņojums tiks saņemts ātrāk, un galvenais, apejot mūs. Tā radās ideja par pirmo populāro mana robota funkcionalitāti.

Es sāku ievieÅ”anu. Es to izdarÄ«ju, cik vien labi varēju, PHP (pats mÅ«su lietojumprogramma ir PHP, es to pārzinu vairāk nekā Python). Es neesmu labs kodētājs, tāpēc savu kodu nerādÄ«Å”u :)

Bots darbojas mÅ«su korporatÄ«vajā tÄ«klā, un tam ir piekļuve noteiktiem projektiem, tostarp mērÄ·a datu bāzēm. Lai netraucētu ar parametriem komandā vai ar izvēlni, es Å”o funkcionalitāti pievienoju grupas čatam ar uzraudzÄ«bas paziņojumiem. Tādā veidā robots uzreiz zina, no kuras datu bāzes vākt ziņojumu.

Saņēmusi tādu komandu kā /awr N, kur N ir pilno stundu skaits, par kurām nepiecieÅ”ama atskaite (pēc noklusējuma - 1 stunda), pat uz nedēļu, ja datu bāze nav restartēta, bots nekavējoties sāk strādāt, apkopo atskaiti, publicē to kā tÄ«mekļa lapu un uzreiz (gandrÄ«z turpat) sniedz saiti uz tik ļoti nepiecieÅ”amo ziņojumu.

Sekojiet saitei, un Å”eit tas ir, AWR ziņojums:

Mēs ietaupām laiku, nervus un darba stundas

Kā gaidÄ«ts, izstrādātāji tika galā ar Ŕādu ziņojumu Ä£enerÄ“Å”anu, un daži pat mums pateicās.

Novērtējot komandas ērtÄ«bas, to vēlējās arÄ« projektu vadÄ«tāji no citiem reÄ£ioniem, kas no klienta saņem visvairāk un ir nobažījuÅ”ies par sistēmu veiktspēju un pieejamÄ«bu. Es pievienoju robotu citām tērzÄ“Å”anas sarunām. Viņi to joprojām izmanto, un es par to priecājos.

Vēlāk kolēģi no CIT uzzināja, kā mēs apkopojam atskaites, un arÄ« gribēja to darÄ«t. Es tos nepievienoju mÅ«su tērzÄ“Å”anai, es izveidoju atseviŔķu tērzÄ“Å”anu ar pārskatu Ä£enerÄ“Å”anu pēc grafika un pēc pieprasÄ«juma.

/pgBadger

Mums ir arÄ« citas PHP lietojumprogrammas saistÄ«bā ar PostgreSQL. Es ieviesu pgBadger atskaiÅ”u vākÅ”anu tiem, kam tas ir nepiecieÅ”ams, izmantojot to paÅ”u principu - grupu čatos. Sākumā viņi to izmantoja, bet pēc tam pārtrauca. Funkcionalitāte tika izgriezta kā nevajadzÄ«ga.

/nodoklis

MÅ«su nodaļā ir nakts maiņas un attiecÄ«gi arÄ« grafiks. Tas ir Google izklājlapās. Ne vienmēr ir ērti meklēt saiti, atvērt diagrammu, meklēt sevi... Viens no maniem bijuÅ”ajiem kolēģiem arÄ« spēlējās ar savu Telegram botu un ieviesa to mÅ«su nodaļas čatā paziņojumi par nodaļas darbinieku dežūru maiņas sākumu. Bots analizē grafiku, nosaka dežūrēju lÄ«dz paÅ”reizējam datumam un saskaņā ar grafiku vai pēc pieprasÄ«juma ziņo, kurÅ” Å”odien dežurē. Tas izrādÄ«jās lieliski un ērti. Tiesa, man Ä«sti nepatika ziņojumu formāts. ArÄ« citas nodaļas darbiniekiem (piemēram, BK ā€œMedicÄ«naā€) informācija par citos virzienos dežurējoÅ”ajiem Ä«sti nav nepiecieÅ”ama, taču ir jāzina, kas dežurē ā€œMedicÄ«nāā€ problēmu gadÄ«jumā. Es nolēmu ā€œaizņemtiesā€ funkcionalitāti, bet mainÄ«t to, kas man nepatika. Izveidoju sev un citiem ērtu ziņas formātu, noņemot nevajadzÄ«gu informāciju.

/tnls

Pēc automatizācijas izmēģināŔanas, izmantojot Telegram robotu, radās daudz dažādu ideju, bet es gribēju darÄ«t absolÅ«ti nepiecieÅ”amās lietas. Es nolēmu vadÄ«t statistika par pieprasÄ«jumiem. Lai piekļūtu mÅ«su klientu projektiem, esam ieviesuÅ”i tā saukto ā€œjump serveriā€ jeb pāradresācijas serveri. Tajā tiek izveidoti VPN savienojumi, pēc tam lietojumprogrammu porti, datu bāzes un citi papildu pārsÅ«tÄ«jumi tiek pārsÅ«tÄ«ti uz mÅ«su lokālo tÄ«klu caur ssh, lai ērti piekļūtu mÅ«su darbinieku projektiem, bez problēmām ar VPN savienojumiem. Viss, kas jums jādara, ir izveidot VPN savienojumu ar mÅ«su korporatÄ«vo tÄ«klu.

PieprasÄ«jumu statistika liecina, ka bieži vien pēc kāda no tuneļiem atteices (tÄ«kla problēmu gadÄ«jumā, piemēram, taimauta dēļ), cilvēki sazinās ar mums par piekļuves atjaunoÅ”anu projektam. Vairumā gadÄ«jumu pietiek tikai ar savienojuma restartÄ“Å”anu, un viss ir kārtÄ«bā. DarÄ«sim to paÅ”i. Å eit ir komanda:
Mēs ietaupām laiku, nervus un darba stundas

Jūs "iekrītat" vēlamajā izvēlnes vienībā, atlasāt savu projektu, pagaidiet minūti un visi ir laimīgi un apmierināti...

Saņemot komandu, ar nelielu baitu un bitu kustÄ«bu, bots pieslēdzas pāradresācijas serverim, iepriekÅ” zinot, kura pārsÅ«tÄ«Å”ana ir jārestartē, un veic savu darbu - atjauno savienojumu ar projektu. Es uzrakstÄ«ju norādÄ«jumus, lai jÅ«s pats varētu atrisināt Ŕādas problēmas. Un cilvēki ar mums sazinājās tikai tad, ja nodroÅ”inātais rÄ«ks nedarbojās...

/ecp_to_pem

Papildu statistika liecina, ka bieži vien ir nepiecieÅ”ams konvertēt EDS Crypto Pro PEM formātā(Bāze64) dažādām integrācijām, un to mums ir diezgan daudz. Uzdevums: paņemiet konteineru, kopējiet to Windows datorā, kurā ir instalēta utilÄ«ta P12FromGostCSP (starp citu, par to ir jāmaksā), konvertējiet to uz pfx un pēc tam konvertējiet pfx, izmantojot OpenSSL (ar atbalstu GOST Å”ifrÄ“Å”anai), uz PEM. Tas nav Ä«paÅ”i ērti, bet jÅ«s vēlaties, lai tas bÅ«tu uzreiz ar pirkstu.

Google atkal ir nācis palīgā. Atrasts kāda laipna cilvēka lietderība. Es to samontēju, kā rakstīts README - tas strādāja. Es iemācīju robotam strādāt ar utilītu un ieguvu gandrīz tūlītēju konversiju.
Mēs ietaupām laiku, nervus un darba stundas

LÄ«dz galÄ«gās ievieÅ”anas brÄ«dim tika izdots rÄ«kojums pāriet uz jaunu Å”ifrÄ“Å”anas formātu - gost-2012. Cik atceros, utilÄ«ta tajā brÄ«dÄ« darbojās tikai ar veco GOST (2001), iespējams, tā bija vēl viena lÄ«dzÄ«ga utilÄ«ta no cita laipna cilvēka, precÄ«zi neatceros.
Pēc pārejas uz jauno GOST robota funkcionalitāte droŔības apsvērumu dēļ tika noņemta. To ieviesa doka konteinerā.

Dockerfile, ja kādam tas ir nepiecieŔams:

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

Lai konvertētu, oriģinālais konteiners (piemēram, xxx.000) ir jāievieto direktorijā /srv/in un gatavā PEM ir jāievieto uz /srv/out.

Lai konvertētu:

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

Kādu dienu mÅ«su uzņēmumā iekārtojās darbā ļoti forÅ”s Oracle DBA ar lielu pieredzi DBVS administrÄ“Å”anā un izstrādē. Un viņam uzreiz radās problēmas ar ssh savienojumu ar DBMS serveriem: viņŔ nezina, kur un kā izveidot savienojumu, piekļuve nav skaidri aprakstÄ«ta vai arÄ« viņŔ nevar pārsÅ«tÄ«t kaut ko sev nepiecieÅ”amo. Mēs esam priecÄ«gi palÄ«dzēt, mēs viņam pastāstÄ«jām, kā izveidot savienojumu, un pārsÅ«tÄ«jām uzņēmuma vadÄ«tāju. Bet lietas joprojām neizdevās ar ssh. Viens no maniem kolēģiem to paskaidroja vienkārÅ”i: tÄ«rŔķirnes DBA :) Nolēmām, ka, ja vajadzēs kaut ko pielabot serverÄ«, darÄ«sim to paÅ”i.

EM dažreiz avarē lielas slodzes laikā, un, lai to restartētu... ir nepiecieÅ”ams izveidot savienojumu caur ssh un restartēt caur termināli. "Admini ir labi Å”ajā jomā," nolēma mÅ«su jaunais kolēģis. Smagas slodzes uz DBVS mums nav nekas neparasts, un bieži ir arÄ« pieprasÄ«jumi restartēt EM. Tad tas pats scenārijs: spriedze, aizkaitinājums un problēmas risinājuma meklējumi. Tātad tajā paŔā grupas tērzÄ“Å”anā parādÄ«jās Ŕādas komandas: /emstop un /emstart.

Mēs ietaupām laiku, nervus un darba stundas

/nogalināt

Ja datu bāzē ir spēcÄ«ga konkurence un tā dažreiz notiek, ir nepiecieÅ”ams ātri izlādēt datu bāzi. Ātrākais veids ir nogalināt problemātisko procesu... Lai to izdarÄ«tu, pieslēdzies caur ssh, nogalina -9... Bots palÄ«dzēs!

Mēs ietaupām laiku, nervus un darba stundas

Aleksejs novērtēja komandu un deva tai mīļu vārdu - "Kilyalka" vai ieroci.
Kādu dienu pēc tam, kad noskatÄ«jos, kā Aleksejs mēģināja un cieta, katru reizi ievadot /kill xxx katram procesam, es nolēmu mÅ«su ierocim pievienot ā€œmulti-barrelā€:

Mēs ietaupām laiku, nervus un darba stundas

Tā ir labāk! Viss ir priekŔ tevis, Aleksej, tikai strādā, dārgais!

Protams, tik svarÄ«ga komanda bija ierobežota piekļuve ar user_id ā€” ā€œnepārspējamsā€. Redzot, kā Lesha veikli nogalina procesus datu bāzes serverÄ«, vairāki cilvēki mēģināja ievadÄ«t komandu ar nejauÅ”u procesa numuru, taču jÅ«s nevarat apmānÄ«t manu viedo botu, viņŔ nekavējoties atteicās.

/alertlog

Nu, katram gadījumam es izteicu komandu:
/alertlog ā€” iegÅ«t norādÄ«to brÄ«dinājumu žurnāla rindu skaitu
Bots izvelk brÄ«dinājumu žurnālu un nosÅ«ta to mÅ«su pakalpojumam, piemēram, pastebin, ko sauc par pyste, un nosÅ«ta saiti uz pastas uz pieprasÄ«juma tērzÄ“Å”anu.

/pārbaudes

Tālāk sekoja pieprasÄ«jums uzraudzÄ«t mÅ«su lietojumprogrammas reālo veiktspēju. LÄ«dz Å”im projekta tehniskais atbalsts apkopoja Å”os datus manuāli. Vienalga! MÅ«su drosmÄ«gie testētāji Å”im nolÅ«kam ir izstrādājuÅ”i testa piemērus. IegÅ«tais testa žurnāls nav Ä«paÅ”i ērti lasāms, nepieredzējuÅ”am lietotājam bÅ«s nepiecieÅ”ams ilgs laiks, lai to saprastu, un viņŔ nav pārliecināts, ka viņŔ izcels nepiecieÅ”amo informāciju. Un mums nepatÄ«k ar savām rokām darÄ«t to, ko nevaram ar rokām... Jauns uzdevums botam!

Mēs ietaupām laiku, nervus un darba stundas

Komanda /checks parāda vienkārÅ”u un nepārprotamu izvēlni; Å”oreiz mÅ«su puiÅ”i iemācÄ«jās izmantot Å”o komandu bez instrukcijām!

Izvēloties vajadzÄ«go vienumu, izvēlnes vietā tiek parādÄ«ts paziņojums par testa sākumu, lai nepacietÄ«gie lietotāji mÅ«su testu neizpildÄ«tu 100500 XNUMX reizes:

Mēs ietaupām laiku, nervus un darba stundas

AtkarÄ«bā no izvēlētā izvēlnes vienuma tiek palaists konkrēts tests no mÅ«su tÄ«kla, proti, no maŔīnas, kurā dzÄ«vo bots (tur ir iepriekÅ” konfigurēts jmeter, atrodas nepiecieÅ”amie testi...) vai tieÅ”i no datu centra (no a. sagatavotu maŔīnu blakus aplikācijai), lai, pārbaudot aizkaves, izslēgtu tÄ«kla savienojumus vai samazinātu tos lÄ«dz minimumam.

Pēc testa pabeigÅ”anas un žurnāla saņemÅ”anas robots to parsē un izveido rezultātu ā€œcilvēkam lasāmāā€ formā:

Mēs ietaupām laiku, nervus un darba stundas

Metrikas kolekcija

Funkcionalitāte ir ienākusi, un ieinteresētie projektu vadÄ«tāji ir saņēmuÅ”i Ŕādu funkciju saviem reÄ£ioniem. Un viens lÄ«dzjÅ«tÄ«gs projektu vadÄ«tājs teica: "Es gribu iegÅ«t laika statistiku!" Kāds no CIT viņai teica, ka to visu bÅ«tu ērti uzraudzÄ«t Zabbix. Zabbix, tātad Zabbix...

Izdomāju, ka jāsagatavojas nepiecieÅ”amÄ«bai atkārtot risinājumu... Ieliku ideju dokera konteinerā. Konteinerā jmeter tiek palaists pēc grafika (reizi 10 minÅ«tēs), ievieto žurnālu noteiktā vietā, php to parsē un parāda nepiecieÅ”amos datus tÄ«mekļa lapas veidā. Zabbix, izmantojot atslēgu web.page.get, saņem Å”o lapu, regulāri atlasa nepiecieÅ”amos datus noteiktiem atkarÄ«giem elementiem un izveido grafiku.

Mēs ietaupām laiku, nervus un darba stundas

Es domāju, ka tas izrādÄ«jās ne slikti. Vērojot grafiku, mēs, pirmkārt, redzam aptuveno lietojumprogrammas ātrumu, un, ja grafikā tiek konstatēti maksimumi, mēs aptuveni zinām, kur atrodas ā€œspraudnisā€. Tas ir vienkārÅ”i. Pagaidām tā izrādÄ«jusies pieprasÄ«ta tikai vienam reÄ£ionam, taču esmu gatavs interesentiem to pavairot.

Lietojumprogrammu izstrāde

Statistika par lÄ«dzÄ«giem uzdevumiem pēdējā laikā ir radÄ«jusi vairāk ideju darba vienkārÅ”oÅ”anai un atviegloÅ”anai. Dažos projektos lietojumprogrammu serveros ir jāinstalē galvenie Crypto Pro konteineri, to ir daudz, un laika gaitā ciparparaksts beidzas. Dažreiz dienā pienāk 2 uzdevumi. Bet es uzskatÄ«ju, ka Å”iem nolÅ«kiem izmantot botu nav droÅ”i, un nolēmu, ka es izveidoÅ”u funkcionalitāti tieÅ”i lietojumprogrammā. Protams, ar autorizāciju un piekļuves tiesÄ«bu pārbaudi. Ja jums ir nepiecieÅ”amās privilēģijas, bÅ«s pieejams papildu izvēlnes punkts darbam ar ciparparakstiem, instalÄ“Å”anai, dzÄ“Å”anai, informācijas apskatei utt. Å obrÄ«d tiek izstrādāta funkcionalitāte. Kā izrādÄ«jās, tas nav Ä«paÅ”i grÅ«ti, tikai nedaudz jāizlasa esoŔās instrukcijas, jāaplÅ«ko kodu piemēri, jāpajautā izstrādē pieredzējuŔākiem kolēģiem un tad tas jādara. PētÄ«juma gaitā radās idejas, ko papildināt pieteikumā. Es netaisÄ«Å”u Napoleona plānus - ir attÄ«stÄ«ba, lai katrs domā par savām lietām. Bet, kamēr tas ir interesanti, es to daru pats.

Plāni

Kā jau teicu, mÅ«su bota izmantoÅ”anai dzima daudz dažādu ideju un ne tikai - kopumā, teiksim, idejas "automatizācijas punktiem", daudzas no tām tika aizmirstas, jo man nebija laika tās pierakstÄ«t. Tagad mēģinu pierakstÄ«t visu, kas ienāk prātā, un iesaku to darÄ«t arÄ« citiem.

Bet Aleksejs neaizmirst izteikt savas vēlmes. No jaunākajiem:
/kill_sql SQL_ID ā€” iznÄ«cināt visas sesijas ar Å”o SQL_ID pieprasÄ«jumu
/kill_block - nogalināt saknes bloÄ·Ä“Å”anas sesiju
/show_em ā€” parādÄ«t EM snieguma attēlu
ViņŔ ir viltÄ«gs puisis, viņŔ vēlas Ŕūt DBA no sava telefona =)

Tā mēs strādājam Tēvzemes labā!

Kā atbrīvoties no rutīnas un neinteresantiem uzdevumiem?

Ceru, ka lasīŔana izrādījās interesanta un varbūt kādam pat noderīga, un man nebija laika lasītāju garlaikot... Lai mums visiem veicas.

Avots: www.habr.com

Pievieno komentāru