Mir spueren Zäit, Nerven a Mannstonnen

Eis Projete si meeschtens regional, an d'Clientë si meeschtens Ministèren. Mee nieft dem ëffentleche Secteur notzen och privat Organisatiounen eis Systemer. Et gi praktesch keng Probleemer mat hinnen.

Also, sinn d'Haaptprojete regional, an heiansdo ginn et Problemer mat hinnen. Zum Beispill, mat Leeschtung, wann a Regiounen et méi wéi 20k vun eise wäertvoll Benotzer während der Period vun Rolling nei Funktionalitéit op Produit Serveren sinn. Et ass e Péng ...

Mäin Numm ass Ruslan an ech ënnerstëtzen d'Informatiounssystemer vun der BARS Group an entwéckelen engem Killer Bot fir gewaltsam Serien DBAs. Dëse Post ass net fir liichtschwaache vun Häerz - et gi vill Bréiwer a Biller.

Mir spueren Zäit, Nerven a Mannstonnen

/awer

E puer vun eisen Uwendungen lafen op Oracle DBMS. Et ginn och Projeten op der PostgreSQL DBMS. Oracle huet eng wonnerbar Saach - Statistike sammelen iwwer d'Laascht op der DBMS, déi existéierend Probleemer beliicht a souguer Empfehlungen fir d'Eliminatioun mécht - Automatic Workload Repository (AWR). Op ee Punkt (nämlech am Moment vun Péng), d'Entwéckler ëmmer gefrot ze sammelen AWR Rapporte fir Leeschtung Analyse. Mir sinn éierlech op den DBMS-Server gaang, Berichter gesammelt, si bei eis geholl an an d'Produktioun fir Analyse geschéckt. No der 5. Kéier gouf et nervös... no der 10. gouf et irritéiert...

Ee vu menge Kollegen huet eng Kéier d'Iddi ausgedréckt, datt alles wat méi wéi eemol gemaach gëtt, soll automatiséiert ginn. Bis zum Moment vun der Irritation, fir éierlech ze sinn, hunn ech net dru geduecht a probéiert alles ze automatiséieren wat automatiséiert ka ginn, awer dacks war et net gefuerdert a war méi eng Fuerschung wéi eng applizéiert Natur.

An dunn hunn ech geduecht: "Admins sinn net néideg fir e Bericht ze generéieren ...". No allem, e Bericht sammelen heescht d'Sql-Skript ausféieren @$ORACLE_HOME/rdbms/admin/awrrpt.sql an de Bericht vum Server op Är Plaz huelen ... Oh jo, mir erlaben d'Entwécklung net fir d'Produktioun.

Dunn hunn ech déi néideg Informatioun gegoogelt, d'Funktioun aus dem Artikel op der Testbasis erstallt, d'Skript a Wonner ausgefouert - de Bericht gouf zesummegesat a kann lokal gespäichert ginn. Erstellt Funktiounen wou AWR Berichter dacks gebraucht goufen an d'Entwéckler gesot hunn wéi se se benotzen.

Ëm dës Zäit, a menger Fräizäit, nodeems ech mam @BotFather geschwat hunn, hunn ech en Telegram Bot fir mech erstallt, just fir Spaass. Ech hunn do eng einfach Funktionalitéit geschrauft - déi aktuell Zäit weisen, Austauschsätz, Wieder, geléiert et Komplimenter un meng Fra (deemools Frëndin) op engem Zäitplang ze schécken. Vläicht, zu där Zäit, Komplimenter schécken war déi populärste Funktionalitéit vu mengem Bot, a meng Fra huet et appréciéiert.

Also. D'Entwéckler schreiwen eis am Telegram, mir schécken hinnen e Bericht am Telegram ... Wat wann se net un eis schreiwen, mee un e Bot? Ëmmerhin gëtt et besser fir jiddereen, de Rapport gëtt méi séier kritt, an virun allem, Contournement eis. Dëst ass wéi d'Iddi vun der éischter populärer Funktionalitéit fir mäi Bot gebuer gouf.

Ech ugefaang Ëmsetzung. Ech hunn et gemaach, sou gutt wéi ech konnt, am PHP (eis Applikatioun selwer ass am PHP, ech si méi beherrscht wéi am Python). Ech sinn net e gudde Coder, also weisen ech Iech mäi Code net :)

De Bot lieft op eisem Firmennetz an huet Zougang zu bestëmmte Projeten, dorënner Zildatenbanken. Fir net mat Parameteren am Team oder am Menü ze stéieren, hunn ech dës Funktionalitéit an de Gruppchat mat Iwwerwaachungsnotifikatiounen bäigefüügt. Sou weess de Bot direkt aus wéi enger Datebank de Bericht soll sammelen.

Nodeems Dir e Kommando kritt wéi /eng N, wou N d'Zuel vu voller Stonnen ass, fir déi e Bericht gebraucht gëtt (par défaut - 1 Stonn), och fir eng Woch, wann d'Datebank net nei gestart gouf, fänkt de Bot direkt un ze schaffen, sammelt de Bericht, publizéiert en als Websäit an direkt (bal direkt do) gëtt e Link op de vill-noutwendeg Rapport.

Follegt de Link an hei ass et, den AWR Bericht:

Mir spueren Zäit, Nerven a Mannstonnen

Wéi erwaart hunn d'Entwéckler mat esou Berichterstellung gekëmmert, an e puer hunn eis souguer Merci gesot.

Nodeems d'Bequemlechkeet vum Team geschätzt gouf, wollten d'Projetmanager aus anere Regiounen datselwecht, well se am meeschte vum Client kréien a sech Suergen iwwer d'Leeschtung an d'Disponibilitéit vun de Systemer hunn. Ech hunn de Bot an aner Chats bäigefüügt. Si benotzen et nach, an ech frou doriwwer.

Méi spéit hunn d'Kollegen vum CIT gewuer wéi mir Berichter sammelen a wollten dat och maachen. Ech hunn se net an eis Chats bäigefüügt, ech hunn e separaten Chat mat der Generatioun vu Berichter op engem Zäitplang an op Ufro erstallt.

/pgBadger

Mir hunn och aner Uwendungen am PHP a Verbindung mat PostgreSQL. Ech hunn d'Sammlung vu pgBadger Berichter fir déi an Nout ëmgesat mam selwechte Prinzip - a Gruppechats. Am Ufank hunn se et benotzt, awer dunn hunn se opgehalen. D'Funktionalitéit gouf als onnéideg ausgeschnidden.

/pflicht

Eis Departement huet Nuetsschichten an huet deementspriechend en Zäitplang. Et ass a Google Sheets. Et ass net ëmmer bequem fir e Link ze sichen, en Diagramm opzemaachen, selwer ze kucken ... Ee vu menge fréiere Kollegen huet och mat sengem Telegram Bot gespillt an en an den Chat vun eisem Departement agefouert Notifikatiounen iwwert den Ufank vun der Flicht Verréckelung fir Departement Mataarbechter. De Bot parséiert den Zäitplang, bestëmmt d'Persoun op der Pflicht vum aktuellen Datum an, laut dem Zäitplang oder op Ufro, bericht wien haut am Pflicht ass. Et huet sech super a praktesch erausgestallt. Richteg, ech hunn d'Format vun de Messagen net wierklech gär. Och fir Mataarbechter vun enger anerer Departement (zum Beispill, BC "Medezin") Informatiounen iwwert déi an aner Richtungen Pflicht ass net wierklech néideg, mä Dir musst wëssen, wien op Pflicht an "Medezin" am Fall vun Problemer ass. Ech hu beschloss, d'Funktionalitéit ze "léinen", awer änneren wat ech net gär hunn. Ech hunn e Message Format bequem fir mech an anerer gemaach, onnéideg Informatioun ewechzehuelen.

/tnls

Nodeems ech d'Automatisatioun mat engem Telegram Bot probéiert hunn, sinn vill verschidden Iddien opgetaucht, awer ech wollt strikt néideg Saache maachen. Ech hu beschloss ze féieren Statistiken iwwer Ufroen. Fir Zougang zu de Projete vun eise Clienten ze kréien, hu mir e sougenannte "Sprangserver" oder Forwarding Server implementéiert. VPN-Verbindunge ginn drop eropgesat, duerno ginn d'Applikatiouns Ports, Datenbanken an aner Hilfs-Forwards op eise lokalen Netzwierk iwwer ssh weidergeleet, fir einfach Zougang zu de Projete vun eise Mataarbechter, ouni Probleemer mat VPN-Verbindungen. Alles wat Dir maache musst ass eng VPN Verbindung mat eisem Firmennetz opzestellen.

D'Statistike vun den Ufroen hu gewisen datt dacks, nodeems ee vun den Tunnelen klappt (am Fall vun Netzwierkproblemer, zum Beispill wéinst engem Timeout), d'Leit eis kontaktéiere fir den Zougang zum Projet ze restauréieren. An deene meeschte Fäll ass just d'Verbindung nei unzefänken genuch an alles ass gutt. Loosst eis et selwer maachen. Hei ass de Kommando:
Mir spueren Zäit, Nerven a Mannstonnen

Dir "fällt duerch" an de gewënschten Menüpunkt, wielt Äre Projet, waart eng Minutt a jiddereen ass frou an zefridden ...

Beim Empfang vun engem Kommando, mat enger liicht Beweegung vun de Bytes a Bits, verbënnt de Bot mam Forwarding Server, weess am Viraus wéi eng Forwarding muss nei gestart ginn, a mécht seng Aarbecht - restauréiert d'Verbindung mam Projet. Ech hunn Instruktioune geschriwwen fir datt Dir esou Themen selwer léise kënnt. An d'Leit hunn eis just kontaktéiert wann dat geliwwert Tool net funktionnéiert ...

/ecp_to_pem

Weider Statistike weisen datt et dacks néideg ass ze konvertéieren EDS Crypto Pro am Pem Format(Basis 64) fir verschidden Integratiounen, a mir hunn zimmlech vill vun hinnen. Aufgab: Huelt e Container, kopéiert et op e Windows Computer mat dem P12FromGostCSP Utility installéiert (bezuelt, iwwregens), konvertéiert et op pfx, an konvertéiert dann pfx mat OpenSSL (mat Ënnerstëtzung fir GOST Verschlësselung) op Pem. Et ass net ganz bequem, awer Dir wëllt et beim Schnëtt vun Äre Fangeren.

Google ass erëm an d'Rettung komm. fonnt eng léif Persoun d'Utility. Ech hunn et zesummegesat wéi an der README geschriwwen - et huet geschafft. Ech hunn de Bot geléiert mat dem Utility ze schaffen a krut eng bal direkt Konversioun.
Mir spueren Zäit, Nerven a Mannstonnen

Mat der Zäit vun der definitiver Ëmsetzung gouf en Uerder ausgestallt fir op en neit Verschlësselungsformat ze wiesselen - gost-2012. Souwäit ech mech erënneren, huet d'Utility dee Moment nëmme mat der aler GOST (2001) geschafft, vläicht war et en aneren ähnlechen Utility vun enger anerer Aart Persoun, ech erënnere mech net genau.
Nom Iwwergank zum neie GOST gouf d'Funktionalitéit vum Bot aus Sécherheetsgrënn geläscht. Ëmgesat et an engem Docker Container.

Dockerfile, am Fall wou iergendeen et brauch:

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

Fir ze konvertéieren, musst Dir den ursprénglechen Container (Verzeechnes wéi xxx.000) am /srv/in Verzeechnes setzen, an de fäerdege Pem op /srv/out huelen.

Fir ze konvertéieren:

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

Enges Daags huet e ganz coolen Oracle DBA, mat vill Erfahrung an der DBMS Administratioun an Entwécklung, eng Aarbecht bei eiser Firma kritt. An hien hat direkt Probleemer mat den DBMS-Server mat ssh ze verbannen: hie weess net wou a wéi hie konnektéiert, den Zougang ass net kloer beschriwwen, oder hien kann net eppes weiderbréngen wat hien selwer brauch. Gutt, mir si frou ze hëllefen, mir hunn him gesot wéi een sech konnektéiert, an huet him Enterprise Manager weiderginn. Awer Saachen hunn nach ëmmer net mat ssh geklappt. Ee vu menge Kollegen huet et einfach erkläert: e purebred DBA :) Mir hunn decidéiert datt wa mir eppes um Server musse tweaken, mir maachen et selwer.

EM klappt heiansdo ënner schwéier Laascht, a fir se nei ze starten ... musst Dir iwwer ssh konnektéieren an duerch den Terminal nei starten. "D'Administrateuren si gutt an dësem," huet eisen neie Kolleg decidéiert. Heavy Lasten op der DBMS sinn net ongewéinlech fir eis, an Ufroe fir EM nei ze starten sinn och heefeg. Dann dee selwechte Szenario: Spannung, Reizung a Sich no enger Léisung fir de Problem. Also an de selwechte Gruppechats sinn déi folgend Kommandoen opgetaucht: /emstop an /emstart.

Mir spueren Zäit, Nerven a Mannstonnen

/ ëmbréngen

Wann et eng staark Konkurrenz op der Datebank ass, an dat geschitt heiansdo, ass et néideg fir d'Datebank séier ze entlaaschten. De schnellsten Wee ass de problematesche Prozess ëmzebréngen ... Fir dëst ze maachen, verbënnt iwwer ssh, kill -9 ... De Bot hëlleft!

Mir spueren Zäit, Nerven a Mannstonnen

Den Alexey huet d'Team appréciéiert an et e léiwen Numm ginn - "Kilyalka" oder eng Pistoul.
Enges Daags, nodeems ech nogekuckt hunn wéi den Alexey probéiert a gelidden huet, an /kill xxx all Kéier fir jiddereng vun de Prozesser aginn, hunn ech beschloss "Multi-Fass" un eis Pistoul ze addéieren:

Mir spueren Zäit, Nerven a Mannstonnen

Dat ass besser! Alles ass fir Iech, Alexey, schaffe just, léif!

Natierlech war esou eng wichteg Equipe limitéiert Zougang duerch user_id - "foolproof". Gesinn wéi Lesha defteg Prozesser op der Datebank Server ëmbréngen, e puer Leit probéiert e Kommando mat enger zoufälleg Prozess Zuel ze gitt, mä Dir kënnt net meng Smart Bot Narr, hien direkt refuséiert.

/alertlog

Gutt, just am Fall, hunn ech de Kommando gemaach:
/alertlog - kréien déi spezifizéiert Zuel vun Alertlog Linnen
De Bot zitt en Alertlog a schéckt en un eise Service, wéi Pastebin, genannt pyste, a schéckt e Link op d'Paste an den Ufro Chat.

/checken

Als nächst koum eng Demande fir Iwwerwaachung vun der realer Leeschtung vun eiser Applikatioun. Bis elo huet de Projet technesch Ënnerstëtzung dës Donnéeën manuell gesammelt. Egal! Eis valant Tester hunn Testfäll dofir entwéckelt. De resultéierende Testprotokoll ass net ganz bequem ze liesen; en onerfueren Benotzer dauert laang fir ze verstoen an ass net sécher datt hien déi néideg Informatioun markéiert. A mir maachen net gär mat den Hänn, wat mir net mat den Hänn maache kënnen ... Eng nei Aufgab fir de Bot!

Mir spueren Zäit, Nerven a Mannstonnen

De Kommando /checks weist en einfachen an eendeiteg Menü; dës Kéier hunn eis Kärelen geléiert wéi een dëse Kommando ouni Instruktioune benotzt!

Wann Dir de gewënschte Punkt auswielt, amplaz vun engem Menü, erschéngt eng Notifikatioun iwwer den Start vum Test, sou datt ongedëlleg Benotzer eisen Test net 100500 Mol lafen:

Mir spueren Zäit, Nerven a Mannstonnen

Ofhängeg vum gewielten Menüpunkt gëtt e spezifeschen Test aus eisem Netz lancéiert, nämlech vun der Maschinn wou de Bot lieft (jmeter ass do virkonfiguréiert, déi néideg Tester stinn ...) oder direkt vum Rechenzentrum (vun engem virbereet Maschinn nieft der Applikatioun), fir Netzwierkverbindunge beim Testen vun Verspéidungen auszeschléissen oder op e Minimum ze reduzéieren.

Nom Test ofgeschloss an de Logbuch kritt, parséiert de Bot et a produzéiert d'Resultat an enger "mënschlech liesbar" Form:

Mir spueren Zäit, Nerven a Mannstonnen

Metrik Sammlung

D'Funktionalitéit ass ukomm an interesséiert Projektmanager hunn esou eng Funktioun fir hir Regiounen kritt. An ee sympathesche Projektmanager sot: "Ech wëll Zäitstatistiken hunn!" Eppes vum CIT huet hir gesot datt et bequem wier dëst alles an Zabbix ze iwwerwaachen. Zabbix, also Zabbix...

Ech hu geduecht datt ech muss virbereeden op d'Noutwendegkeet fir d'Léisung ze replizéieren ... Ech hunn d'Iddi an en Docker Container gesat. Am Container gëtt jmeter op engem Zäitplang lancéiert (eemol all 10 Minutten), setzt de Log op enger bestëmmter Plaz, php parséiert et a weist déi néideg Donnéeën a Form vun enger Websäit. Zabbix, mat dem Web.page.get Schlëssel, kritt dës Säit, wielt regelméisseg déi néideg Donnéeën fir bestëmmte ofhängeg Elementer a baut eng Grafik.

Mir spueren Zäit, Nerven a Mannstonnen

Ech mengen et huet sech net schlecht erausgestallt. Andeems Dir d'Grafik beobachtet, gesi mir als éischt déi geschätzte Geschwindegkeet vun der Applikatioun, a wa Peaks op der Grafik festgestallt ginn, wësse mir ongeféier wou de "Plug" ass. Et ass einfach. Bis elo huet sech erausgestallt datt et nëmme fir eng Regioun gefuerdert ass, awer ech si prett et fir déi interesséiert ze replizéieren.

Applikatioun Entwécklung

Statistiken iwwer ähnlech Aufgaben hunn zënter kuerzem méi Iddie fir d'Aarbecht ze vereinfachen an erliichtert. Op e puer Projeten, op Applikatiounsserveren, ass et e Besoin fir Schlëssel Crypto Pro Container ze installéieren, et gi vill vun hinnen, an déi digital Ënnerschrëft leeft mat der Zäit of. Heiansdo kommen 2 Aufgaben den Dag un. Awer ech hunn et als onsécher ugesinn e Bot fir dës Zwecker ze benotzen an hunn decidéiert datt ech d'Funktionalitéit direkt an der Applikatioun erstellen. Natierlech mat Autorisatioun a Kontroll vun Zougangsrechter. Wann Dir déi néideg Privilegien hutt, gëtt en zousätzleche Menüpunkt verfügbar fir mat digitalen Ënnerschrëften ze schaffen, Installatioun, Läschen, Informatioun ze gesinn, etc. D'Funktionalitéit ass am Moment ënner Entwécklung. Wéi et sech erausstellt, ass dëst net ganz schwéier, Dir musst just déi existent Instruktiounen e bëssen liesen, Code Beispiller kucken, Kollegen méi erfuerene an der Entwécklung froen, an dann maachen et. Wärend dem Fuerschungsprozess sinn Iddien entstanen fir d'Applikatioun ze addéieren. Ech wäert keng Napoleonesch Pläng maachen - et gëtt Entwécklung, loosst jidderee seng eegen Geschäft këmmeren. Awer wann et interessant ass, maachen ech et selwer.

Pläng

Wéi gesot, vill verschidden Iddien goufen gebuer fir eise Bot ze benotzen an net nëmmen - am Allgemengen, loosst eis soen, Iddien fir "Automatiséierungspunkte", vill vun hinnen goufen vergiess, well ech keng Zäit hat fir se opzeschreiwen. Elo probéieren ech alles opzeschreiwen, wat am Kapp kënnt, an ech recommandéieren datt anerer datselwecht maachen.

Awer den Alexey vergiesst net seng Wënsch ze ginn. Vun der leschter:
/kill_sql SQL_ID - ëmbréngen all Sessiounen mat dëser SQL_ID Ufro
/kill_block - ëmbréngen d'Root Blocking Sessioun
/show_em - weisen e Bild vun EM Leeschtung
Hien ass e schlau Guy, hie wëll DBA vu sengem Telefon nähen =)

Esou schaffe mir zum Virdeel vum Mammeland!

Wéi befreit Dir Iech vu Routine an oninteressant Aufgaben?

Ech hoffen, datt d'Liesung interessant ass, a vläicht souguer nëtzlech fir een, an ech hat keng Zäit fir de Lieser ze langweilen ... Vill Gléck fir eis all.

Source: will.com

Setzt e Commentaire