Salvemu u tempu, i nervi è l'ore di l'omu

I nostri prughjetti sò generalmente regiunale, è i clienti sò generalmente ministeri. Ma, in più di u settore publicu, l'urganisazioni private utilizanu ancu i nostri sistemi. Ùn ci sò praticamenti micca prublemi cun elli.

Dunque, i prughjetti principali sò righjunali, è qualchì volta ci sò prublemi cun elli. Per esempiu, cù u rendiment, quandu in e regioni ci sò più di 20k di i nostri preziosi utilizatori durante u periodu di rolling out new functionality nantu à i servitori di produttu. Hè un dolore…

Mi chjamu Ruslan è sustene i sistemi d'infurmazione di BARS Group è sviluppà un bot killer per i DBA seriali viulenti. Stu postu ùn hè micca per i deboli di cori - ci sò parechje lettere è stampi.

Salvemu u tempu, i nervi è l'ore di l'omu

/ awr

Alcune di e nostre applicazioni funzionanu nantu à Oracle DBMS. Ci sò ancu prughjetti nantu à u DBMS PostgreSQL. Oracle hà una cosa maravigliosa - raccoglie statistiche nantu à a carica nantu à u DBMS, chì mette in risaltu i prublemi esistenti è ancu face cunsiglii per l'eliminazione - Automatic Workload Repository (AWR). À un puntu (vale à dì à u mumentu di u dulore), i sviluppatori anu sempre dumandatu à cullà Rapporti AWR per l'analisi di u rendiment. Onestamente andemu à u servitore DBMS, raccolte rapporti, i purtonu à noi è i mandati à a produzzione per l'analisi. Dopu à a 5a volta hè diventatu fastidiosu ... dopu à u 10 hè diventatu irritante ...

Unu di i mo culleghi una volta hà spressu l'idea chì tuttu ciò chì hè fattu più di una volta deve esse automatizatu. Finu à u mumentu di l'irritazione, per esse onestu, ùn aghju micca pensatu è pruvatu d'automatizà tuttu ciò chì puderia esse automatizatu, ma spessu ùn era micca in dumanda è era più di una ricerca più di una natura applicata.

E poi aghju pensatu: "L'amministratore ùn hè micca necessariu per generà un rapportu ...". Dopu tuttu, a cullizzioni di un rapportu significa eseguisce u script sql @$ORACLE_HOME/rdbms/admin/awrrpt.sql è piglià u rapportu da u servitore à u vostru locu ... Oh, sì, ùn permettenu micca u sviluppu per a produzzione.

Allora aghju Googled l'infurmazioni necessarii, criatu a funzione da l'articulu nantu à a basa di teste, curria u script è miraculu - u rapportu hè statu compilatu è pò esse salvatu in u locu. Funzioni create induve i rapporti AWR eranu spessu necessarii è dicenu à i sviluppatori cumu l'utilizanu.

In questu tempu, in u mo tempu liberu, dopu avè parlatu cù @BotFather, aghju creatu un bot Telegram per mè stessu, solu per piacè. Aghju aghjustatu in una funziunalità simplice quì - mostra l'ora attuale, i tassi di scambiu, u clima, l'hà insignatu à mandà cumplimenti à a mo moglia (poi fidanzata) in un schedariu. Forsi, in quellu tempu, l'invià cumplimenti era a funziunalità più populari di u mo bot, è a mo moglia l'hà apprezzatu.

Allora. I sviluppatori ci scrivenu in Telegram, li mandemu un rapportu in Telegram... E si scrivenu micca à noi, ma à un bot? Dopu tuttu, serà megliu per tutti, u rapportu serà ricivutu più veloce, è più impurtante, sguassate. Hè cusì chì hè nata l'idea di a prima funziunalità populari per u mo bot.

Aghju cuminciatu à implementà. Aghju fattu, cum'è pudendu, in PHP (a nostra applicazione stessu hè in PHP, sò più versatu in questu cà in Python). Ùn sò micca un bonu codificatore, dunque ùn vi mustraraghju micca u mo codice :)

U bot vive nantu à a nostra reta corporativa è hà accessu à certi prughjetti, cumprese basa di dati di destinazione. Per ùn disturbà micca i paràmetri in a squadra o cù u menu, aghju attaccatu sta funziunalità à u chat di gruppu cù notificazioni di monitoraghju. In questu modu, u bot sapi immediatamente da quale basa di dati raccoglie u rapportu.

Dopu avè ricevutu un cumandamentu cum'è / awr N, induve N hè u numeru di ore sanu per quale hè necessariu un rapportu (per default - 1 ora), ancu per una settimana, se a basa di dati ùn hè micca stata riavviata, u bot principia immediatamente à travaglià, recullà u rapportu, u publica cum'è un pagina web è immediatamente (quasi ghjustu quì) furnisce un ligame à u rapportu assai necessariu.

Segui u ligame è quì hè, u rapportu AWR:

Salvemu u tempu, i nervi è l'ore di l'omu

Cum'è s'aspittava, i sviluppatori facevanu cun tali generazioni di rapportu, è certi ci anu ancu ringraziatu.

Dopu avè apprezzatu a cunvenzione di a squadra, i prughjetti di prughjetti di altre regioni vulianu u stessu, postu chì ricevenu u più da u cliente è sò preoccupati per u rendiment è a dispunibilità di i sistemi. Aghju aghjustatu u bot à altri chats. L'anu sempre aduprà, è sò cuntentu.

In seguitu, i culleghi di CIT anu scupertu cumu cullemu i rapporti è vulianu fà ancu. Ùn aghju micca aghjustatu à i nostri chats, aghju creatu un chat separatu cù a generazione di rapporti nantu à un schedariu è nantu à dumanda.

/pgBadger

Avemu ancu altre applicazioni in PHP in cunjunzione cù PostgreSQL. Aghju implementatu a cullizzioni di rapporti pgBadger per quelli chì anu bisognu cù u listessu principiu - in chats di gruppu. À u primu l'anu utilizatu, ma dopu si fermanu. A funziunalità hè stata tagliata cum'è inutile.

/ duvere

U nostru dipartimentu hà turni di notte è, per quessa, hà un calendariu. Hè in Google Sheets. Ùn hè micca sempre cunvenutu per circà un ligame, apre un graficu, cercate per sè stessu ... Unu di i mo ex culleghi hà ancu ghjucatu cù u so bot di Telegram è l'hà introduttu in u chat di u nostru dipartimentu. notifiche nantu à l'iniziu di u turnu di travagliu per l'impiegati di u dipartimentu. U bot analizeghja u calendariu, determina a persona in turnu da a data attuale è, secondu u calendariu o nantu à dumanda, informa quale hè in turnu oghje. Hè risultatu grande è convenientu. True, ùn aghju micca veramente piace u furmatu di i missaghji. Inoltre, per l'impiegati di un altru dipartimentu (per esempiu, BC "Medicina"), l'infurmazioni nantu à quelli chì sò in guardia in altre direzzione ùn hè micca veramente necessariu, ma avete bisognu di sapè quale hè di serviziu in "Medicina" in casu di prublemi. Aghju decisu di "prestate" a funziunalità, ma cambià ciò chì ùn mi piace micca. Aghju fattu un furmatu di missaghju cunvene per mè è l'altri, cacciendu l'infurmazioni innecessarii.

/tnls

Dopu avè pruvatu l'automatizazione cù un bot di Telegram, parevanu parechje idee diverse, ma vulia fà cose strettamente necessarie. Aghju decisu di guidà statistiche nantu à e dumande. Per accede à i prughjetti di i nostri clienti, avemu implementatu un cusì chjamatu "servitore di salta" o servitore di spedizione. I cunnessione VPN sò suscitati nantu à questu, dopu i porti di l'applicazioni, e basa di dati è altre trasmissioni ausiliarii sò trasmessi à a nostra reta lucale via ssh, per un accessu faciule à i prughjetti di i nostri impiegati, senza prublemi cù cunnessione VPN. Tuttu ciò chì duvete fà hè di stabilisce una cunnessione VPN à a nostra reta corporativa.

L'statìstiche di e dumande hà dimustratu chì spessu, dopu chì unu di i tunel fallenu (in u casu di prublemi di rete, per un timeout, per esempiu), a ghjente hè cuntattata per restaurà l'accessu à u prugettu. In a maiò parte di i casi, basta à ripiglià a cunnessione è tuttu hè bè. Facemu da sè stessu. Eccu u cumandamentu:
Salvemu u tempu, i nervi è l'ore di l'omu

"Caduta" in l'elementu di menu desideratu, selezziunate u vostru prughjettu, aspettate un minutu è tutti sò felici è soddisfatti ...

Dopu avè ricivutu un cumandamentu, cù un ligeru muvimentu di i byte è i bits, u bot si cunnetta à u servitore di rinviu, sapendu in anticipu quale trasmissioni deve esse riavviatu, è face u so travagliu - restaurà a cunnessione à u prugettu. Aghju scrittu struzzioni per chì pudete risolve tali prublemi sè stessu. È a ghjente ci hà cuntattatu solu s'ellu ùn hà micca travagliatu u strumentu furnitu ...

/ecp_to_pem

Ulteriori statistiche dimustranu chì hè spessu necessariu di cunvertisce EDS Crypto Pro in formatu pem(Basa 64) per diverse integrazioni, è avemu assai di elli. Task: pigliate un cuntinuu, copiallu in un computer Windows cù l'utilità P12FromGostCSP installata (pagatu, per via), cunvertisce in pfx, è poi cunvertisce pfx cù OpenSSL (cù supportu per a criptografia GOST) in pem. Ùn hè micca assai cunvenutu, ma u vulete à u snap di i vostri ditte.

Google hè ghjuntu in salvezza di novu. Truvatu utilità di una persona gentile. L'aghju assemblatu cum'è scrittu in u README - hà travagliatu. Aghju insignatu u bot à travaglià cù l'utilità è hà avutu una cunversione quasi immediata.
Salvemu u tempu, i nervi è l'ore di l'omu

À u mumentu di l'implementazione finale, un ordine hè statu emessu per cambià à un novu formatu di criptografia - gost-2012. Quantu mi ricordu, l'utilità in quellu mumentu hà travagliatu solu cù u vechju GOST (2001), forsi era un altru utilità simili da una altra persona gentile, ùn ricordu micca esattamente.
Dopu a transizione à u novu GOST, a funziunalità di u bot hè stata eliminata per ragioni di sicurità. Implementatu in un containeru docker.

Dockerfile, in casu chì qualchissia hà bisognu:

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

Per cunvertisce, avete bisognu di mette u cuntinuu uriginale (directory cum'è xxx.000) in u cartulare /srv/in, è pigliate u pem finitu à /srv/out.

Per cunvertisce:

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

Un ghjornu, un Oracle DBA assai cool, cù assai sperienza in l'amministrazione è u sviluppu di DBMS, hà avutu un travagliu in a nostra cumpagnia. È hà avutu subitu prublemi à cunnette cù i servitori DBMS cù ssh: ùn sapi micca induve o cumu per cunnette, l'accessu ùn hè micca chjaramente descrittu, o ùn pò micca trasmette qualcosa chì hà bisognu à ellu stessu. Ebbè, simu felici d'aiutà, li avemu dettu cumu si cunnetta, è l'avemu trasmessu à u Manager di l'impresa. Ma e cose ùn anu micca travagliatu cù ssh. Unu di i mo culleghi l'hà spiegatu simplicemente: un DBA di razza pura :) Avemu decisu chì s'ellu ci vole à aghjustà qualcosa in u servitore, a faremu noi stessi.

EM certe volte crashes sottu una carica pesante, è per riavvia ... avete bisognu di cunnette via ssh è riavvia da u terminal. "L'amministratori sò bè ​​​​in questu", hà decisu u nostru novu cullegu. I carichi pesanti nantu à u DBMS ùn sò micca pocu cumuni per noi, è e dumande di riavvia EM sò ancu cumuni. Allora u stessu scenariu: tensione, irritazione è ricerca di una suluzione à u prublema. Allora in u listessu gruppu di chats apparsu i seguenti cumandamenti: /emstop è /emstart.

Salvemu u tempu, i nervi è l'ore di l'omu

/ tumbà

Se ci hè una forte cumpetizione nantu à a basa di dati, è questu qualchì volta succede, hè necessariu di scaricà rapidamente a basa di dati. U modu più veloce hè di tumbà u prucessu problematicu ... Per fà questu, cunnette via ssh, kill -9 ... U bot aiuterà!

Salvemu u tempu, i nervi è l'ore di l'omu

Alexey hà apprezzatu a squadra è hà datu un nome affettuosu - "Kilyalka" o una pistola.
Un ghjornu, dopu avè vistu cumu Alexey hà pruvatu è soffrenu, entra in /kill xxx ogni volta per ognunu di i prucessi, aghju decisu di aghjunghje "multi-barrel" à a nostra pistola:

Salvemu u tempu, i nervi è l'ore di l'omu

Hè megliu ! Tuttu hè per voi, Alexey, solu travaglià, caru!

Naturalmente, una squadra cusì impurtante era limitata accessu da user_id - "foolproof". Videndu cumu Lesha deftly ammazza i prucessi nantu à u servitore di basa di dati, parechje persone anu pruvatu à inserisce un cumandamentu cù un numeru di prucessu aleatoriu, ma ùn pudete micca ingannà u mo smart bot, hà ricusatu immediatamente.

/alertlog

Ebbè, in casu, aghju fattu u cumandimu:
/alertlog <numeru di linii> - uttene u numeru specificatu di linee di alertlog
U bot tira un alertlog è u manda à u nostru serviziu, cum'è pastebin, chjamatu pyste, è manda un ligame à a pasta à u chat di dumanda.

/ cuntrolli

Dopu hè stata una dumanda per monitoring u veru rendimentu di a nostra applicazione. Finu à avà, u supportu tecnicu di u prugettu hà recullatu queste dati manualmente. Pocu importa! I nostri valenti testatori anu sviluppatu casi di teste per questu. U logu di teste resultanti ùn hè micca assai cunvene à leghje; un utilizatore inespertu duverà assai tempu per capiscenu è ùn hè micca sicuru d'evidenzià l'infurmazioni necessarii. È ùn ci piace micca fà cù e nostre mani ciò chì ùn pudemu micca fà cù e nostre mani... Un novu compitu per u bot!

Salvemu u tempu, i nervi è l'ore di l'omu

U cumandamentu /checks mostra un menu simplice è senza ambiguità; sta volta i nostri ragazzi anu amparatu cumu utilizà stu cumandamentu senza struzzioni!

Quandu selezziunate l'elementu desideratu, invece di un menu, appare una notificazione annantu à l'iniziu di a prova, per chì l'utilizatori impazienti ùn eseguite micca a nostra prova 100500 XNUMX volte:

Salvemu u tempu, i nervi è l'ore di l'omu

Sicondu l'elementu di menu sceltu, una prova specifica hè lanciata da a nostra reta, vale à dì da a macchina induve u bot campa (jmeter hè pre-configuratu quì, i testi necessarii sò situati...) o direttamente da u centru di dati (da un centru di dati). macchina preparata accantu à l'appiecazione), in modu di escludiri e cunnessione di a rete durante a prova di ritardu, o di riduce à u minimu.

Dopu avè finitu a prova è ricivutu u logu, u bot l'analiza è pruduce u risultatu in una forma "leggibile per l'omu":

Salvemu u tempu, i nervi è l'ore di l'omu

Cullizzioni di metrica

A funziunalità hè ghjunta è i gestori di prughjetti interessati anu ricevutu una tale funzione per e so regioni. È un Manager di Prughjettu cumpassione hà dettu: "Vogliu avè statistiche di u tempu!" Qualchissia da CIT li hà dettu chì saria cunvene per monitorà tuttu questu in Zabbix. Zabbix, dunque Zabbix...

Pensu chì avia bisognu di preparà per a necessità di riplicà a suluzione... Aghju messu l'idea in un containeru docker. In u cuntinuu, jmeter hè lanciatu nantu à un schedariu (una volta ogni 10 minuti), mette u logu in un certu locu, php analizà è mostra i dati necessarii in forma di una pagina web. Zabbix, utilizendu a chjave web.page.get, riceve sta pagina, selezziunate regularmente i dati necessarii per certi elementi dipendente è custruisce un graficu.

Salvemu u tempu, i nervi è l'ore di l'omu

Pensu chì ùn hè micca fattu male. Osservendu u graficu, prima, vedemu a velocità apprussimativa di l'applicazione, è se i picchi sò rilevati nantu à u graficu, sapemu circa induve hè u "plug". Hè simplice. Finu a ora, hè stata a dumanda solu per una regione, ma sò prontu à riplicà per quelli chì sò interessati.

Sviluppu di l'applicazioni

E statistiche nantu à i travaglii simili anu da pocu tempu nascenu più idee per simplificà è facilità u travagliu. In certi prughjetti, nantu à i servitori di l'applicazioni, ci hè bisognu di stallà cuntenituri chjave Crypto Pro, ci sò assai di elli, è a firma digitale caduta cù u tempu. Calchì volta 2 compiti arrivanu un ghjornu. Ma aghju cunsideratu micca sicuru d'utilizà un bot per questi scopi è decisu chì aghju da creà a funziunalità direttamente in l'applicazione. Naturalmente cù l'autorizazione è cuntrollà i diritti d'accessu. Se tenete i privilegi necessarii, un menu supplementu serà dispunibule per travaglià cù firma digitale, installazione, eliminazione, visualizazione di l'infurmazioni, etc. A funziunalità hè attualmente in sviluppu. Cum'è hè risultatu, questu ùn hè micca assai difficiule, basta à leghje l'istruzzioni esistenti un pocu, fighjate esempi di codice, dumandate à i culleghi più sperimentati in u sviluppu, è poi fate. Duranti u prucessu di ricerca, emergenu idee per aghjunghje à l'applicazione. Ùn aghju micca fà i piani napoleonichi - ci hè u sviluppu, chì ognunu mente u so propiu affari. Ma mentre hè interessante, l'aghju fattu per mè stessu.

Piani

Comu dissi, sò nati parechje idee diffirenti per l'usu di u nostru bot è micca solu - in generale, dicemu, idee per "punti d'automatizazione", assai di elli sò stati scurdati, postu chì ùn aghju micca u tempu di scrive. Avà pruvatu à scrive tuttu ciò chì vene in mente, è ricumandemu chì l'altri facenu u listessu.

Ma Alexey ùn si scurdate di dà i so desideri. Da l'ultime:
/kill_sql SQL_ID - tumbà tutte e sessione cù questa dumanda SQL_ID
/kill_block - tumbà a sessione di bloccu di a radica
/ mostra_em - mostra una figura di u rendiment EM
Hè un tippu astutu, vole cuciri DBA da u so telefunu =)

Hè cusì chì travagliammu per u benefiziu di a Patria !

Cumu sbarazzà di i travaglii di rutina è senza interessu?

Spergu chì a lettura sia stata interessante, è forse ancu utile à qualcunu, è ùn aghju micca avutu u tempu d'annullassi u lettore... Bona furtuna à tutti noi.

Source: www.habr.com

Add a comment