Šetríme čas, nervy a človekohodiny

Naše projekty sú zvyčajne regionálne a klientmi sú zvyčajne ministerstvá. Ale okrem verejného sektora využívajú naše systémy aj súkromné ​​organizácie. Neexistujú s nimi prakticky žiadne problémy.

Hlavné projekty sú teda regionálne a niekedy sú s nimi problémy. Napríklad s výkonom, keď je v regiónoch viac ako 20 XNUMX našich vzácnych používateľov počas obdobia zavádzania nových funkcií na produktové servery. Je to bolesť…

Volám sa Ruslan a podporujem informačné systémy BARS Group a vývoj vražedného bota pre násilné sériové DBA. Tento príspevok nie je pre slabé povahy - je tam veľa písmen a obrázkov.

Šetríme čas, nervy a človekohodiny

/awr

Niektoré z našich aplikácií bežia na Oracle DBMS. Existujú aj projekty na PostgreSQL DBMS. Oracle má skvelú vec - zbieranie štatistík o zaťažení DBMS, ktoré upozorňuje na existujúce problémy a dokonca dáva odporúčania na odstránenie - Automatic Workload Repository (AWR). V jednom bode (konkrétne v momente bolesti) vývojári neustále žiadali zbierať AWR správy pre analýzu výkonnosti. Poctivo sme chodili na server DBMS, zbierali reporty, odnášali k nám a posielali do výroby na analýzu. Po 5-tom to začalo byť otravné...po desiatom to začalo byť dráždivé...

Jeden môj kolega raz vyslovil myšlienku, že všetko, čo sa robí viackrát, by sa malo automatizovať. Aby som bol úprimný, až do momentu podráždenia som o tom nepremýšľal a snažil som sa automatizovať všetko, čo sa automatizovať dalo, ale často to nebolo žiadané a išlo skôr o výskum ako o aplikovaný charakter.

A potom ma napadlo: „Na vytvorenie prehľadu nie sú potrební správcovia...“. Koniec koncov, zhromaždenie správy znamená spustenie skriptu SQL @$ORACLE_HOME/rdbms/admin/awrrpt.sql a prenesenie správy zo servera na vaše miesto... Áno, vývoj pre produkciu nepovoľujeme.

Potom som si vygooglil potrebné informácie, vytvoril funkciu z článku na testovacej báze, spustil skript a zázrak – zostava bola zostavená a dá sa lokálne uložiť. Vytvorené funkcie, kde boli často potrebné správy AWR, a povedali vývojárom, ako ich používať.

Približne v tomto čase, vo svojom voľnom čase, po rozhovore s @BotFather som si pre seba vytvoril telegramového robota, len tak pre zábavu. Nakrútil som tam jednoduchú funkcionalitu – ukázať aktuálny čas, výmenné kurzy, počasie, naučil som to posielať komplimenty manželke (vtedy priateľke) podľa plánu. Možno v tom čase bolo posielanie komplimentov najobľúbenejšou funkciou môjho robota a moja žena to ocenila.

Takže. Vývojári nám napíšu do Telegramu, my im pošleme správu do Telegramu... Čo ak napíšu nie nám, ale botom? Bude to predsa pre všetkých lepšie, hlásenie dostane rýchlejšie a hlavne nás obíde. Takto sa zrodila myšlienka prvej populárnej funkcie pre môjho robota.

Začal som s realizáciou. Urobil som to najlepšie, ako som vedel, v PHP (samotná naša aplikácia je v PHP, vyznám sa v ňom viac ako v Pythone). Nie som dobrý kóder, takže vám svoj kód neukážem :)

Robot žije v našej podnikovej sieti a má prístup k určitým projektom vrátane cieľových databáz. Aby som sa neobťažoval s parametrami v tíme alebo s menu, pripojil som túto funkcionalitu ku skupinovému chatu s monitorovacími upozorneniami. Týmto spôsobom bot okamžite vie, z ktorej databázy má zhromaždiť správu.

Po prijatí príkazu ako /awr N, kde N je počet celých hodín, počas ktorých je potrebná správa (štandardne - 1 hodina), a to aj na týždeň, ak sa databáza nereštartuje, robot okamžite začne pracovať, zhromaždí správu, zverejní ju ako a okamžite (takmer priamo tam) poskytuje odkaz na veľmi potrebnú správu.

Kliknite na odkaz a tu je správa AWR:

Šetríme čas, nervy a človekohodiny

Ako sa dalo očakávať, vývojári si s takýmto generovaním správ poradili a niektorí nám dokonca poďakovali.

Projektoví manažéri z iných regiónov, ktorí ocenili pohodlie tímu, chceli to isté, pretože dostávajú od zákazníka najviac a obávajú sa o výkon a dostupnosť systémov. Pridal som robota do iných chatov. Stále to používajú a som tomu rád.

Neskôr sa kolegovia z CIT dozvedeli, ako zbierame reporty a chceli to urobiť tiež. Nepridával som ich do našich chatov, vytvoril som samostatný chat s generovaním reportov podľa plánu a na požiadanie.

/pgBadger

Máme aj ďalšie aplikácie v PHP v spojení s PostgreSQL. Implementoval som zber správ pgBadger pre tých, ktorí to potrebujú, pomocou rovnakého princípu - v skupinových chatoch. Najprv to používali, ale potom prestali. Funkcionalita bola vystrihnutá ako nepotrebná.

/povinnosť

Naše oddelenie má nočné zmeny a podľa toho má aj rozvrh. Nachádza sa v Tabuľkách Google. Nie vždy je vhodné hľadať odkaz, otvárať graf, hľadať seba... Jeden z mojich bývalých kolegov sa tiež pohral so svojím telegramovým robotom a uviedol ho do chatu nášho oddelenia oznámenia o začatí pracovnej zmeny pre zamestnancov oddelenia. Robot analyzuje rozvrh, určí osobu v službe podľa aktuálneho dátumu a podľa rozvrhu alebo na požiadanie nahlási, kto je dnes v službe. Ukázalo sa to skvelé a pohodlné. Je pravda, že sa mi nepáčil formát správ. Tiež pre zamestnancov iného oddelenia (napríklad BC „Medicine“) nie sú informácie o tých, ktorí sú v službe v iných smeroch, skutočne potrebné, ale v prípade problémov potrebujete vedieť, kto má službu v „Medicine“. Rozhodol som sa „požičať“ funkčnosť, ale zmeniť to, čo sa mi nepáčilo. Vytvoril som formát správy, ktorý bude vyhovovať sebe aj ostatným, odstránil som nepotrebné informácie.

/tnls

Po vyskúšaní automatizácie pomocou telegramového robota sa objavilo veľa rôznych nápadov, ale ja som chcel robiť nevyhnutne potrebné veci. Rozhodol som sa viesť štatistiky žiadostí. Pre prístup k projektom našich zákazníkov sme implementovali takzvaný „skokový server“ alebo presmerovací server. Na ňom sú nadviazané VPN pripojenia, následne sú aplikačné porty, databázy a ďalšie pomocné forwardy presmerované do našej lokálnej siete cez ssh, pre jednoduchý prístup k projektom našich zamestnancov, bez problémov s VPN pripojeniami. Všetko, čo musíte urobiť, je nastaviť VPN pripojenie k našej firemnej sieti.

Štatistika požiadaviek ukázala, že často po zlyhaní jedného z tunelov (v prípade problémov so sieťou, napríklad z dôvodu časového limitu), sú ľudia kontaktovaní ohľadom obnovenia prístupu k projektu. Vo väčšine prípadov stačí len reštartovať pripojenie a všetko je v poriadku. Urobme to sami. Tu je príkaz:
Šetríme čas, nervy a človekohodiny

„Prepadnete“ do požadovanej položky menu, vyberiete si svoj projekt, počkáte minútu a všetci sú šťastní a spokojní...

Po prijatí príkazu s miernym pohybom bajtov a bitov sa robot pripojí k serveru preposielania, pričom vopred vie, ktoré preposielanie je potrebné reštartovať, a vykoná svoju prácu - obnoví spojenie s projektom. Napísal som pokyny, aby ste takéto problémy mohli vyriešiť sami. A ľudia nás kontaktovali iba v prípade, že poskytnutý nástroj nefungoval...

/ecp_to_pem

Ďalšie štatistiky ukázali, že často je potrebné konvertovať EDS Crypto Pro vo formáte pem(Base64) pre rôzne integrácie a máme ich pomerne veľa. Úloha: vezmite kontajner, skopírujte ho do počítača so systémom Windows s nainštalovaným obslužným programom P12FromGostCSP (mimochodom plateným), skonvertujte ho na pfx a potom konvertujte pfx pomocou OpenSSL (s podporou šifrovania GOST) na pem. Nie je to veľmi pohodlné, ale chcete to lusknutím prstov.

Google opäť prišiel na pomoc. Nájdené užitočnosť nejakého milého človeka. Zostavil som to tak, ako je napísané v README - fungovalo to. Naučil som robota pracovať s nástrojom a dostal som takmer okamžitú konverziu.
Šetríme čas, nervy a človekohodiny

V čase konečnej implementácie bol vydaný príkaz na prechod na nový formát šifrovania - gost-2012. Pokiaľ si pamätám, nástroj v tom okamihu fungoval iba so starým GOST (2001), možno to bol ďalší podobný nástroj od inej milej osoby, presne si nepamätám.
Po prechode na nový GOST bola funkčnosť robota z bezpečnostných dôvodov odstránená. Implementované v kontajneri dokovacieho zariadenia.

Dockerfile, ak by ho niekto potreboval:

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

Na konverziu musíte umiestniť pôvodný kontajner (adresár ako xxx.000) do adresára /srv/in a hotový pem preniesť do /srv/out.

Konvertovať:

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

Jedného dňa sa v našej spoločnosti zamestnal skvelý Oracle DBA s mnohými skúsenosťami s administráciou a vývojom DBMS. A okamžite mal problémy s pripojením k serverom DBMS pomocou ssh: nevie, kde a ako sa pripojiť, prístup nie je jasne popísaný alebo nemôže preposlať niečo, čo potrebuje. No, radi vám pomôžeme, povedali sme mu, ako sa pripojiť, a poslali mu Enterprise Manager. Ale veci stále nefungovali s ssh. Jeden z mojich kolegov to vysvetlil jednoducho: čistokrvný DBA :) Rozhodli sme sa, že ak potrebujeme niečo vyladiť na serveri, urobíme to sami.

EM občas pri veľkom zaťažení spadne a na jeho reštart... sa treba pripojiť cez ssh a reštartovať cez terminál. „Správcovia sú v tom dobrí,“ rozhodol sa náš nový kolega. Veľké zaťaženie DBMS u nás nie je nič neobvyklé a bežné sú aj požiadavky na reštart EM. Potom rovnaký scenár: napätie, podráždenie a hľadanie riešenia problému. Takže v rovnakých skupinových rozhovoroch sa objavili nasledujúce príkazy: /emstop a /emstart.

Šetríme čas, nervy a človekohodiny

/zabiť

Ak je na databáze silná konkurencia, a to sa občas stáva, je potrebné rýchlo vyložiť databázu. Najrýchlejší spôsob je zabiť problematický proces... Ak to chcete urobiť, pripojte sa cez ssh, zabite -9... Robot pomôže!

Šetríme čas, nervy a človekohodiny

Alexey ocenil tím a dal mu láskyplné meno - "Kilyalka" alebo zbraň.
Jedného dňa, po tom, čo som videl, ako sa Alexey snažil a trpel, zadávaním /kill xxx zakaždým pre každý z procesov, som sa rozhodol pridať do našej zbrane „multi-barrel“:

Šetríme čas, nervy a človekohodiny

To je lepšie! Všetko je pre teba, Alexey, len pracuj, drahý!

Prirodzene, taký dôležitý tím bol obmedzený prístup podľa user_id – „zabezpečený“. Keď Lesha videl, ako Lesha obratne zabíja procesy na databázovom serveri, niekoľko ľudí sa pokúsilo zadať príkaz s náhodným číslom procesu, ale môjho inteligentného robota nemôžete oklamať, okamžite odmietol.

/alertlog

No, pre každý prípad som urobil príkaz:
/alertlog <počet riadkov> — získajte zadaný počet riadkov protokolu výstrah
Robot stiahne protokol výstrah a odošle ho našej službe, ako je pastebin, nazývaný pyste, a odošle odkaz na prilepenie do chatu so žiadosťou.

/kontroluje

Ďalej prišla žiadosť o sledovanie skutočného výkonu našej aplikácie. Doteraz technická podpora projektu zbierala tieto údaje manuálne. Nevadí! Naši statoční testeri na to vyvinuli testovacie prípady. Výsledný testovací protokol nie je veľmi pohodlný na čítanie, neskúsenému používateľovi bude trvať dlho, kým pochopí a nie je si istý, či zvýrazní potrebné informácie. A my neradi robíme rukami to, čo nemôžeme robiť rukami... Nová úloha pre robota!

Šetríme čas, nervy a človekohodiny

Príkaz /checks zobrazuje jednoduché a jednoznačné menu, tentoraz sa naši chlapci naučili tento príkaz používať bez návodu!

Keď vyberiete požadovanú položku, namiesto ponuky sa zobrazí upozornenie na začiatok testu, aby netrpezliví používatelia nespustili náš test 100500 XNUMX krát:

Šetríme čas, nervy a človekohodiny

V závislosti od vybranej položky menu sa konkrétny test spustí z našej siete, a to zo stroja, v ktorom bot žije (je tam predkonfigurovaný jmeter, nachádzajú sa potrebné testy...) alebo priamo z dátového centra (z pripravený stroj vedľa aplikácie), aby ste pri testovaní oneskorení vylúčili sieťové pripojenia alebo ich obmedzili na minimum.

Po dokončení testu a prijatí protokolu ho robot analyzuje a vytvorí výsledok v „človeku čitateľnej“ forme:

Šetríme čas, nervy a človekohodiny

Zbierka metrík

Funkcionalita dorazila a zainteresovaní projektoví manažéri dostali takúto funkciu pre svoje regióny. A jeden súcitný projektový manažér povedal: "Chcem mať časové štatistiky!" Niekto z CIT jej povedal, že by bolo vhodné toto všetko sledovať v Zabbixe. Zabbix, takže Zabbix...

Myslel som si, že sa potrebujem pripraviť na potrebu replikovať riešenie... Vložil som nápad do kontajnera. V kontajneri sa jmeter spustí podľa plánu (raz za 10 minút), vloží log na určité miesto, php ho analyzuje a zobrazí potrebné údaje vo forme webovej stránky. Zabbix pomocou kľúča web.page.get získa túto stránku, pravidelne vyberá potrebné údaje pre určité závislé prvky a zostavuje graf.

Šetríme čas, nervy a človekohodiny

Myslím, že to nedopadlo zle. Pozorovaním grafu najskôr vidíme približnú rýchlosť aplikácie a ak sú na grafe zaznamenané vrcholy, vieme, kde približne je „zástrčka“. Je to jednoduché. Zatiaľ sa ukázalo, že je žiadaný len pre jeden región, ale záujemcom som pripravený ho replikovať.

Vývoj aplikácií

Štatistiky o podobných úlohách nedávno podnietili vznik ďalších nápadov na zjednodušenie a uľahčenie práce. Na niektorých projektoch, na aplikačných serveroch, je potrebné nainštalovať kľúčové kontajnery Crypto Pro, je ich veľa a digitálny podpis časom vyprší. Niekedy prídu 2 úlohy za deň. Považoval som však za nebezpečné používať na tieto účely bota a rozhodol som sa, že funkcionalitu vytvorím priamo v aplikácii. Samozrejme s autorizáciou a kontrolou prístupových práv. Ak máte potrebné privilégiá, bude k dispozícii ďalšia položka ponuky pre prácu s digitálnymi podpismi, inštaláciu, mazanie, prezeranie informácií atď. Funkcionalita je momentálne vo vývoji. Ako sa ukázalo, nie je to veľmi ťažké, stačí si trochu prečítať existujúce pokyny, pozrieť sa na príklady kódu, opýtať sa kolegov skúsenejších vo vývoji a potom to urobiť. Počas výskumného procesu sa objavili nápady na doplnenie aplikácie. Nebudem robiť napoleonské plány - existuje vývoj, každý nech sa stará o svoje veci. Ale aj keď je to zaujímavé, robím to sám.

Plány

Ako som povedal, zrodilo sa veľa rôznych nápadov na používanie nášho robota a nielen - povedzme vo všeobecnosti nápady na „automatizačné body“, na mnohé z nich sa zabudlo, pretože som ich nemal čas zapísať. Teraz sa snažím zapisovať všetko, čo ma napadne, a odporúčam, aby to urobili aj ostatní.

Ale Alexey nezabudol dať svoje želania. Z najnovších:
/kill_sql SQL_ID — ukončite všetky relácie s touto požiadavkou SQL_ID
/kill_block - zabiť reláciu blokovania koreňového adresára
/show_em — zobraziť obrázok výkonu EM
Je to prefíkaný chlap, chce si šiť DBA z telefónu =)

Takto pracujeme v prospech vlasti!

Ako sa zbavujete rutinných a nezaujímavých úloh?

Dúfam, že čítanie bolo zaujímavé a možno niekomu aj užitočné a nestihla som čitateľa nudiť... Veľa šťastia nám všetkým.

Zdroj: hab.com

Pridať komentár