Vi sparar tid, nerver och mantimmar

Våra projekt är oftast regionala och uppdragsgivarna är oftast departement. Men förutom den offentliga sektorn använder även privata organisationer våra system. Det finns praktiskt taget inga problem med dem.

Så de viktigaste projekten är regionala, och ibland finns det problem med dem. Till exempel med prestanda, när det i regioner finns mer än 20 XNUMX av våra värdefulla användare under perioden då ny funktionalitet rullas ut på produktservrar. Det är en smärta…

Jag heter Ruslan och jag stödjer informationssystemen för BARS Group och utveckla en mördarbot för våldsamma seriella DBA:er. Det här inlägget är inte för svaga hjärtan – det finns många bokstäver och bilder.

Vi sparar tid, nerver och mantimmar

/awr

Vissa av våra applikationer körs på Oracle DBMS. Det finns också projekt på PostgreSQL DBMS. Oracle har en underbar sak - att samla in statistik om belastningen på DBMS, som belyser befintliga problem och till och med ger rekommendationer för eliminering - Automatic Workload Repository (AWR). Vid ett tillfälle (nämligen i smärtögonblicket) bad utvecklarna hela tiden att samla in AWR rapporterar för resultatanalys. Vi gick ärligt till DBMS-servern, samlade in rapporter, tog dem till oss och skickade dem till produktion för analys. Efter 5:e gången blev det irriterande... efter 10:e blev det irriterande...

En av mina kollegor uttryckte en gång tanken att allt som görs mer än en gång ska automatiseras. Fram till ögonblicket av irritation, om jag ska vara ärlig, tänkte jag inte på det och försökte automatisera allt som kunde automatiseras, men ofta var det inte efterfrågat och var mer av en forskning snarare än en tillämpad natur.

Och då tänkte jag: "Administratörer behövs inte för att generera en rapport...". När allt kommer omkring innebär att samla in en rapport att köra sql-skriptet @$ORACLE_HOME/rdbms/admin/awrrpt.sql och ta rapporten från servern till din plats... Åh ja, vi tillåter inte utveckling för produktion.

Sedan Googlade jag den nödvändiga informationen, skapade funktionen från artikeln om testbasen, körde skriptet och miraklet - rapporten kompilerades och kan sparas lokalt. Skapade funktioner där AWR-rapporter ofta behövdes och berättade för utvecklare hur de skulle användas.

Ungefär vid denna tid, på min fritid, efter att ha pratat med @BotFather, skapade jag en Telegram-bot för mig själv, bara för skojs skull. Jag skruvade in en enkel funktionalitet där – visa aktuell tid, växelkurser, väder, lärde det att skicka komplimanger till min fru (dåvarande flickvän) enligt ett schema. Kanske, på den tiden, var att skicka komplimanger den mest populära funktionen i min bot, och min fru uppskattade det.

Så. Utvecklare skriver till oss i Telegram, vi skickar en rapport till dem i Telegram... Tänk om de inte skriver till oss utan till en bot? När allt kommer omkring kommer det att bli bättre för alla, rapporten kommer att tas emot snabbare, och viktigast av allt, kringgå oss. Så här föddes idén om den första populära funktionaliteten för min bot.

Jag började implementera. Jag gjorde det, så gott jag kunde, i PHP (vår applikation i sig är i PHP, jag är mer bevandrad i det än i Python). Jag är ingen bra kodare, så jag kommer inte visa dig min kod :)

Boten lever på vårt företagsnätverk och har tillgång till vissa projekt, inklusive måldatabaser. För att inte bry mig om parametrar i teamet eller med menyn, bifogade jag den här funktionen till gruppchatten med övervakningsmeddelanden. På så sätt vet boten omedelbart vilken databas rapporten ska samlas in från.

Efter att ha fått ett kommando som /awr N, där N är antalet hela timmar som en rapport behövs för (som standard - 1 timme), även för en vecka, om databasen inte har startat om, börjar boten omedelbart att arbeta, samlar in rapporten, publicerar den som en webbsida och ger omedelbart (nästan precis där) en länk till den välbehövliga rapporten.

Följ länken och här är den, AWR-rapporten:

Vi sparar tid, nerver och mantimmar

Som väntat klarade utvecklarna en sådan rapportgenerering, och några tackade oss till och med.

Efter att ha uppskattat teamets bekvämlighet ville projektledare från andra regioner detsamma, eftersom de får ut det mesta från kunden och är oroliga över prestanda och tillgänglighet hos systemen. Jag lade till boten i andra chattar. De använder det fortfarande, och jag är glad över det.

Senare fick kollegor från CIT veta hur vi samlar in rapporter och ville göra det också. Jag lade inte till dem i våra chattar, jag skapade en separat chatt med generering av rapporter enligt ett schema och på begäran.

/pgBadger

Vi har även andra applikationer i PHP i samband med PostgreSQL. Jag implementerade insamlingen av pgBadger-rapporter för de behövande med samma princip - i gruppchattar. Först använde de det, men sedan slutade de. Funktionaliteten klipptes bort som onödig.

/plikt

Vår avdelning har nattpass och har därför ett schema. Det finns i Google Kalkylark. Det är inte alltid bekvämt att leta efter en länk, öppna ett diagram, leta själv... En av mina tidigare kollegor lekte också med sin Telegram-bot och introducerade den i chatten på vår avdelning meddelanden om start av tjänstgöringsskiftet för avdelningsanställda. Boten analyserar schemat, bestämmer personen i tjänst vid aktuellt datum och, enligt schemat eller på begäran, rapporterar vem som är i tjänst idag. Det blev jättebra och bekvämt. Det är sant att jag inte riktigt gillade formatet på meddelandena. Dessutom, för anställda på en annan avdelning (till exempel BC "Medicin"), behövs egentligen inte information om de i tjänst i andra riktningar, men du måste veta vem som är i tjänst i "Medicin" vid problem. Jag bestämde mig för att "låna" funktionen, men ändra det jag inte gillade. Jag gjorde ett meddelandeformat som var bekvämt för mig själv och andra och tog bort onödig information.

/tnls

Efter att ha provat automatisering med en Telegram-bot dök många olika idéer upp, men jag ville göra absolut nödvändiga saker. Jag bestämde mig för att leda statistik över förfrågningar. För att komma åt våra kunders projekt har vi implementerat en så kallad "jump server" eller forwarding server. VPN-anslutningar höjs på den, sedan vidarebefordras applikationsportar, databaser och andra extra vidarebefordran till vårt lokala nätverk via ssh, för enkel åtkomst till våra anställdas projekt, utan problem med VPN-anslutningar. Allt du behöver göra är att skapa en VPN-anslutning till vårt företagsnätverk.

Statistiken över förfrågningar har visat att ofta, efter att en av tunnlarna misslyckas (vid nätverksproblem, till exempel på grund av en timeout), kontaktar folk oss för att återställa åtkomsten till projektet. I de flesta fall räcker det med att starta om anslutningen och allt är bra. Låt oss göra det själv. Här är kommandot:
Vi sparar tid, nerver och mantimmar

Du "faller igenom" till önskat menyalternativ, väljer ditt projekt, väntar en minut och alla är glada och nöjda...

Efter att ha tagit emot ett kommando, med en liten rörelse av byte och bitar, ansluter boten till vidarebefordranservern, och vet i förväg vilken vidarebefordran som måste startas om, och gör sitt jobb - återställer anslutningen till projektet. Jag skrev instruktioner så att du kan lösa sådana problem själv. Och folk kontaktade oss bara om det medföljande verktyget inte fungerade...

/ecp_to_pem

Ytterligare statistik visade att det ofta är nödvändigt att konvertera EDS Crypto Pro i pem-format(Base64) för olika integrationer, och vi har ganska många av dem. Uppgift: ta en behållare, kopiera den till en Windows-dator med P12FromGostCSP-verktyget installerat (betalt, förresten), konvertera det till pfx och konvertera sedan pfx med OpenSSL (med stöd för GOST-kryptering) till pem. Det är inte särskilt bekvämt, men du vill ha det med fingrarna.

Google har kommit till undsättning igen. Hittades någon snäll persons nytta. Jag monterade det som skrivet i README - det fungerade. Jag lärde boten att arbeta med verktyget och fick en nästan omedelbar konvertering.
Vi sparar tid, nerver och mantimmar

Vid tidpunkten för den slutliga implementeringen utfärdades en order om att byta till ett nytt krypteringsformat - gost-2012. Såvitt jag minns fungerade verktyget vid det ögonblicket bara med den gamla GOST (2001), kanske var det ett annat liknande verktyg från en annan snäll person, jag minns inte exakt.
Efter övergången till den nya GOST togs botens funktionalitet bort av säkerhetsskäl. Implementerade det i en hamnarcontainer.

Dockerfile, om någon behöver den:

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

För att konvertera måste du placera den ursprungliga behållaren (katalog som xxx.000) i katalogen /srv/in och ta den färdiga pem till /srv/out.

Att konvertera:

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

En dag fick en väldigt cool Oracle DBA, med mycket erfarenhet av DBMS-administration och utveckling, jobb på vårt företag. Och han hade omedelbart problem med att ansluta till DBMS-servrarna med ssh: han vet inte var eller hur han ska ansluta, åtkomsten är inte tydligt beskriven, eller han kan inte vidarebefordra något han behöver till sig själv. Tja, vi hjälper gärna till, vi berättade för honom hur man ansluter och skickade honom Enterprise Manager. Men saker och ting fungerade fortfarande inte med ssh. En av mina kollegor förklarade det enkelt: en renrasig DBA :) Vi bestämde oss för att om vi behöver justera något på servern så gör vi det själva.

EM kraschar ibland under hård belastning, och för att starta om den... måste du ansluta via ssh och starta om via terminalen. "Admins är bra på det här", beslutade vår nya kollega. Tung belastning på DBMS är inte ovanligt för oss, och förfrågningar om att starta om EM är också vanliga. Sedan samma scenario: spänning, irritation och sökande efter en lösning på problemet. Så i samma gruppchatt dök följande kommandon upp: /emstop och /emstart.

Vi sparar tid, nerver och mantimmar

/döda

Om det råder stark konkurrens på databasen, och detta händer ibland, är det nödvändigt att snabbt ladda ner databasen. Det snabbaste sättet är att döda den problematiska processen... För att göra detta, anslut via ssh, döda -9... Boten hjälper!

Vi sparar tid, nerver och mantimmar

Alexey uppskattade laget och gav det ett kärleksfullt namn - "Kilyalka" eller en pistol.
En dag, efter att ha sett hur Alexey försökte och led, angav /kill xxx varje gång för var och en av processerna, bestämde jag mig för att lägga till "multi-barrel" till vår pistol:

Vi sparar tid, nerver och mantimmar

Det är bättre! Allt är för dig, Alexey, bara jobba, kära!

Naturligtvis var ett så viktigt lag begränsat åtkomst av user_id - "idiotsäker". När han såg hur Lesha skickligt dödar processer på databasservern, försökte flera personer ange ett kommando med ett slumpmässigt processnummer, men du kan inte lura min smarta bot, han vägrade omedelbart.

/alertlog

Tja, för säkerhets skull gjorde jag kommandot:
/alertlog — få det angivna antalet varningsloggrader
Boten drar en varningslogg och skickar den till vår tjänst, som pastebin, kallad pyste, och skickar en länk till inklistringen till förfrågan chatten.

/checkar

Därefter kom en förfrågan om övervaka den verkliga prestandan för vår applikation. Fram till nu har projektteknisk support samlat in dessa data manuellt. Spelar ingen roll! Våra tappra testare har tagit fram testfall för detta. Den resulterande testloggen är inte särskilt bekväm att läsa; en oerfaren användare kommer att ta lång tid att förstå och är inte säker på att han kommer att lyfta fram den nödvändiga informationen. Och vi gillar inte att göra med våra händer vad vi inte kan göra med våra händer... En ny uppgift för boten!

Vi sparar tid, nerver och mantimmar

Kommandot /checks visar en enkel och otvetydig meny; den här gången lärde sig våra killar hur man använder det här kommandot utan instruktioner!

När du väljer önskat objekt, istället för en meny, visas ett meddelande om starten av testet, så att otåliga användare inte kör vårt test 100500 XNUMX gånger:

Vi sparar tid, nerver och mantimmar

Beroende på valt menyalternativ startas ett specifikt test från vårt nätverk, nämligen från maskinen där boten bor (jmeter är förkonfigurerad där, nödvändiga tester finns...) eller direkt från datacentret (från en förberedd maskin bredvid applikationen), för att utesluta nätverksanslutningar vid testning av förseningar, eller minska dem till ett minimum.

Efter att ha slutfört testet och mottagit loggen, analyserar boten den och producerar resultatet i en "läsbar" form:

Vi sparar tid, nerver och mantimmar

Insamling av statistik

Funktionaliteten har kommit och intresserade projektledare har fått en sådan funktion för sina regioner. Och en medkännande projektledare sa: "Jag vill ha tidsstatistik!" Någon från CIT sa till henne att det skulle vara bekvämt att övervaka allt detta i Zabbix. Zabbix, alltså Zabbix...

Jag tänkte att jag behövde förbereda mig på behovet av att replikera lösningen... Jag lade in idén i en hamnarcontainer. I behållaren startas jmeter enligt ett schema (en gång var 10:e minut), lägger loggen på en viss plats, php analyserar den och visar nödvändig data i form av en webbsida. Zabbix, med hjälp av web.page.get-nyckeln, tar emot denna sida, väljer regelbundet nödvändig data för vissa beroende element och bygger en graf.

Vi sparar tid, nerver och mantimmar

Jag tycker att det inte blev illa. Genom att observera grafen ser vi för det första den ungefärliga hastigheten för applikationen, och om toppar detekteras på grafen vet vi ungefär var "pluggen" är. Det är enkelt. Hittills har det visat sig vara efterfrågat endast för en region, men jag är redo att replikera det för de som är intresserade.

Applikationsutveckling

Statistik över liknande uppgifter har på senare tid gett upphov till fler idéer för att förenkla och underlätta arbetet. På vissa projekt, på applikationsservrar, finns det ett behov av att installera viktiga Crypto Pro-behållare, det finns många av dem och den digitala signaturen upphör med tiden. Ibland kommer 2 uppgifter om dagen. Men jag ansåg att det var osäkert att använda en bot för dessa ändamål och bestämde mig för att jag skulle skapa funktionaliteten direkt i applikationen. Naturligtvis med behörighet och kontroll av åtkomsträttigheter. Om du har nödvändiga privilegier kommer ytterligare ett menyalternativ att finnas tillgängligt för att arbeta med digitala signaturer, installation, radering, visa information etc. Funktionaliteten är för närvarande under utveckling. Som det visade sig är detta inte särskilt svårt, du behöver bara läsa de befintliga instruktionerna lite, titta på kodexempel, fråga kollegor som är mer erfarna inom utveckling och sedan göra det. Under forskningsprocessen dök idéer upp att lägga till ansökan. Jag kommer inte att göra Napoleonska planer - det finns utveckling, låt alla sköta sina egna saker. Men även om det är intressant, så gör jag det själv.

planer

Som jag sa föddes många olika idéer för att använda vår bot och inte bara - i allmänhet, låt oss säga, idéer för "automationspunkter", många av dem glömdes bort, eftersom jag inte hade tid att skriva ner dem. Nu försöker jag skriva ner allt som kommer att tänka på, och jag rekommenderar att andra gör detsamma.

Men Alexey glömmer inte att ge sina önskemål. Från det senaste:
/kill_sql SQL_ID — döda alla sessioner med denna SQL_ID-begäran
/kill_block - döda rotblockeringssessionen
/visa_em — visa en bild av EM-prestanda
Han är en slug kille, han vill sy DBA från sin telefon =)

Så här arbetar vi till förmån för fosterlandet!

Hur slipper du rutinmässiga och ointressanta uppgifter?

Jag hoppas att läsningen visade sig vara intressant, och kanske till och med användbar för någon, och att jag inte hade tid att tråka ut läsaren... Lycka till för oss alla.

Källa: will.com

Lägg en kommentar