Säästämme aikaa, hermoja ja työtunteja

Projektimme ovat yleensä alueellisia ja asiakkaita ovat yleensä ministeriöt. Mutta julkisen sektorin lisäksi myös yksityiset organisaatiot käyttävät järjestelmiämme. Niiden kanssa ei käytännössä ole ongelmia.

Pääprojektit ovat siis alueellisia, ja joskus niissä on ongelmia. Esimerkiksi suorituskyvyn osalta, kun alueilla on yli 20 XNUMX arvokasta käyttäjäämme tuotepalvelimien uusien toimintojen käyttöönoton aikana. Se on tuskaa…

Nimeni on Ruslan ja tuen BARS Groupin tietojärjestelmiä ja tappajabotin kehittäminen väkivaltaisille sarja-DBA:ille. Tämä postaus ei ole heikkohermoisille - siinä on paljon kirjeitä ja kuvia.

Säästämme aikaa, hermoja ja työtunteja

/awr

Jotkut sovelluksistamme toimivat Oracle DBMS:llä. Myös PostgreSQL DBMS:ssä on projekteja. Oraclella on hieno asia - tilastojen kerääminen DBMS:n kuormituksesta, mikä korostaa olemassa olevia ongelmia ja jopa antaa suosituksia niiden poistamiseksi - Automatic Workload Repository (AWR). Yhdessä vaiheessa (eli kivun hetkellä) kehittäjät pyysivät jatkuvasti keräämään AWR-raportit suorituskykyanalyysiä varten. Menimme rehellisesti DBMS-palvelimelle, keräsimme raportit, veimme ne meille ja lähetimme ne tuotantoon analysoitavaksi. Viidennen kerran jälkeen se tuli ärsyttäväksi... 5:nnen jälkeen ärsytti...

Eräs kollegani esitti kerran ajatuksen, että kaikki, mitä tehdään useammin kuin kerran, pitäisi automatisoida. Ärsytyshetkeen asti, rehellisesti sanottuna, en ajatellut sitä ja yritin automatisoida kaiken automatisoitavan, mutta usein se ei ollut kysyntää ja oli enemmän tutkimusta kuin soveltavaa luonnetta.

Ja sitten ajattelin: "Järjestelmänvalvojia ei tarvita raportin luomiseen...". Loppujen lopuksi raportin kerääminen tarkoittaa sql-komentosarjan @$ORACLE_HOME/rdbms/admin/awrrpt.sql suorittamista ja raportin viemistä palvelimelta kotiisi... Voi kyllä, emme salli kehitystä tuotantoa varten.

Sitten googletin tarvittavat tiedot, loin toiminnon testipohjan artikkelista, suoritin skriptin ja ihme - raportti koottiin ja voidaan tallentaa paikallisesti. Luonut toimintoja, joissa AWR-raportteja usein tarvittiin, ja kertonut kehittäjille, kuinka niitä käytetään.

Samoihin aikoihin, vapaa-ajallani, keskusteltuani @BotFatherin kanssa, loin itselleni Telegram-botin huvin vuoksi. Kiinnitin sinne yksinkertaisen toiminnon - näytän kellonajan, valuuttakurssit, sään, opetin sen lähettämään kohteliaisuuksia vaimolleni (silloin tyttöystävälleni) aikataulun mukaan. Kenties siihen aikaan kohteliaisuuden lähettäminen oli bottini suosituin toiminto, ja vaimoni arvosti sitä.

Niin. Kehittäjät kirjoittavat meille Telegramissa, me lähetämme heille raportin Telegramissa... Entä jos he eivät kirjoittaisi meille, vaan botille? Loppujen lopuksi se on parempi kaikille, raportti vastaanotetaan nopeammin, ja mikä tärkeintä, ohittaa meidät. Näin syntyi idea bottini ensimmäisestä suositusta toiminnallisuudesta.

Aloitin toteutuksen. Tein sen parhaani mukaan PHP:llä (itse sovelluksemme on PHP:ssä, olen perehtynyt siihen paremmin kuin Pythonissa). En ole hyvä koodaaja, joten en näytä koodiani :)

Botti elää yritysverkostossamme ja sillä on pääsy tiettyihin projekteihin, mukaan lukien kohdetietokannat. Jotta en vaivautuisi ryhmän parametrien tai valikon kanssa, liitin tämän toiminnon ryhmäkeskusteluun valvontailmoituksilla. Näin botti tietää heti, mistä tietokannasta raportti tulee kerätä.

Saatuaan komennon kuten /awr N, missä N on kokonaisten tuntien määrä, jolta raportti tarvitaan (oletusarvoisesti 1 tunti), vaikka viikon ajan, jos tietokantaa ei ole käynnistetty uudelleen, botti alkaa heti toimia, kerää raportin, julkaisee sen web-sivulle ja antaa heti (melkein siellä) linkin kaivattua raporttiin.

Seuraa linkkiä ja tässä se on, AWR-raportti:

Säästämme aikaa, hermoja ja työtunteja

Kuten odotettiin, kehittäjät selviytyivät tällaisesta raporttien luomisesta, ja jotkut jopa kiittivät meitä.

Muiden alueiden projektipäälliköt arvostivat tiimin mukavuutta, sillä he saavat eniten asiakkaalta ja ovat huolissaan järjestelmien toimivuudesta ja saatavuudesta. Lisäsin botin muihin keskusteluihin. He käyttävät sitä edelleen, ja olen siitä iloinen.

Myöhemmin CIT:n kollegat saivat tietää, kuinka keräämme raportteja, ja halusivat myös tehdä sen. En lisännyt niitä keskusteluihimme, vaan loin erillisen chatin, jossa luodaan raportteja aikataulun mukaan ja pyynnöstä.

/pgBadger

Meillä on myös muita PHP-sovelluksia PostgreSQL:n yhteydessä. Totesin pgBadger-raporttien keräämisen sitä tarvitseville samalla periaatteella - ryhmäkeskusteluissa. Aluksi he käyttivät sitä, mutta sitten he lopettivat. Toiminto karsittiin tarpeettomaksi.

/ velvollisuus

Osastollamme on yövuoroja ja sen mukaisesti aikataulu. Se on Google Sheetsissä. Aina ei ole kätevää etsiä linkkiä, avata kaaviota, etsiä itse... Yksi entisistä työkavereistani pelasi myös Telegram-bottillaan ja esitteli sen osastomme chattiin ilmoitukset osaston työntekijöiden työvuoron alkamisesta. Botti jäsentää aikataulun, määrittää päivystävän henkilön kulloiseenkin päivämäärään mennessä ja ilmoittaa aikataulun mukaan tai pyynnöstä kuka on tänään päivystyksessä. Siitä tuli hieno ja kätevä. Totta, en todellakaan pitänyt viestien muodosta. Myöskään toisen osaston (esim. BC ”Lääketiede”) työntekijöille ei varsinaisesti tarvita tietoa muuhun suuntaan päivystävästä, vaan pitää tietää, kuka on ”Lääketieteessä” päivystävä ongelmatilanteissa. Päätin "lainata" toiminnot, mutta muuttaa sitä, mistä en pitänyt. Tein itselleni ja muille sopivan viestimuodon poistaen turhat tiedot.

/tnls

Kokeilun jälkeen automaatiota Telegram-botilla, tuli monia erilaisia ​​ideoita, mutta halusin tehdä ehdottoman välttämättömiä asioita. Päätin johtaa pyyntöjen tilastot. Asiakkaidemme projekteihin pääsemiseksi olemme ottaneet käyttöön ns. "hyppypalvelimen" eli välityspalvelimen. VPN-yhteydet nostetaan sille, sitten sovellusportit, tietokannat ja muut apulähetykset välitetään paikallisverkkoomme ssh:n kautta, jotta työntekijöidemme projekteja on helppo päästä käsiksi ilman VPN-yhteyksien ongelmia. Sinun tarvitsee vain muodostaa VPN-yhteys yritysverkkoomme.

Pyyntötilastot ovat osoittaneet, että usein, kun jokin tunneleista epäonnistuu (verkko-ongelmissa, esimerkiksi aikakatkaisun vuoksi), ihmiset ottavat meihin yhteyttä projektiin pääsyn palauttamiseksi. Useimmissa tapauksissa pelkkä yhteyden käynnistäminen uudelleen riittää ja kaikki on kunnossa. Tehdään se itse. Tässä on komento:
Säästämme aikaa, hermoja ja työtunteja

"Puudut" haluttuun valikkokohtaan, valitset projektisi, odotat hetki ja kaikki ovat iloisia ja tyytyväisiä...

Saatuaan komennon, tavujen ja bittien pienellä liikkeellä, botti muodostaa yhteyden edelleenlähetyspalvelimeen tietäen etukäteen, mikä edelleenlähetys on käynnistettävä uudelleen, ja tekee tehtävänsä - palauttaa yhteyden projektiin. Kirjoitin ohjeet, jotta voit ratkaista tällaiset ongelmat itse. Ja ihmiset ottivat meihin yhteyttä vain, jos toimitettu työkalu ei toiminut...

/ecp_to_pem

Lisätilastot osoittivat, että muuntaminen on usein tarpeen EDS Crypto Pro PEM-muodossa(BASE64) erilaisille integroinneille, ja meillä on niitä melko paljon. Tehtävä: ota kontti, kopioi se Windows-tietokoneelle, johon on asennettu P12FromGostCSP-apuohjelma (muuten, maksullinen), muunna se pfx:ksi ja muunna sitten pfx käyttämällä OpenSSL:ää (tuella GOST-salausta) pem-muotoon. Se ei ole kovin kätevää, mutta haluat sen sormen napsautuksella.

Google on tullut jälleen apuun. Löytyi jonkun ystävällisen ihmisen hyöty. Kokosin sen README:ssä kirjoitetulla tavalla - se toimi. Opetin botin toimimaan apuohjelman kanssa ja sain melkein välittömän muunnoksen.
Säästämme aikaa, hermoja ja työtunteja

Lopulliseen käyttöönottoon mennessä annettiin määräys vaihtaa uuteen salausmuotoon - gost-2012. Sikäli kuin muistan, apuohjelma toimi sillä hetkellä vain vanhan GOST:n (2001) kanssa, ehkä se oli toinen samanlainen apuohjelma toiselta ystävälliseltä henkilöltä, en muista tarkalleen.
Uuteen GOST:iin siirtymisen jälkeen botin toiminnallisuus poistettiin turvallisuussyistä. Toteutettu se telakointisäiliössä.

Dockerfile, jos joku tarvitsee sitä:

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

Muuntaaksesi sinun täytyy sijoittaa alkuperäinen säilö (hakemisto kuten xxx.000) hakemistoon /srv/in ja viedä valmis pem kansioon /srv/out.

Muuntaa:

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

Eräänä päivänä erittäin siisti Oracle DBA, jolla on paljon kokemusta DBMS-hallinnosta ja -kehityksestä, sai työpaikan yritykseemme. Ja hänellä oli heti vaikeuksia muodostaa yhteyttä DBMS-palvelimiin ssh:lla: hän ei tiedä minne tai miten muodostaa yhteys, pääsyä ei ole kuvattu selkeästi tai hän ei voi välittää jotain tarvitsemaansa itselleen. No, autamme mielellämme, kerroimme hänelle yhteyden muodostamisen ja lähetimme hänelle Enterprise Managerin. Mutta asiat eivät silti toimineet ssh: n kanssa. Eräs kollegani selitti sen yksinkertaisesti: puhdasrotuinen DBA :) Päätimme, että jos meidän täytyy säätää jotain palvelimella, teemme sen itse.

EM kaatuu joskus raskaan kuormituksen alla, ja käynnistääksesi sen uudelleen... sinun on muodostettava yhteys ssh:n kautta ja käynnistettävä uudelleen terminaalin kautta. "Järjestelmänvalvojat ovat hyviä tässä", uusi kollegamme päätti. DBMS:n raskas kuormitus ei ole meille harvinaista, ja myös EM:n uudelleenkäynnistyspyynnöt ovat yleisiä. Sitten sama skenaario: jännitys, ärsytys ja ratkaisun etsiminen ongelmaan. Joten samassa ryhmäkeskustelussa ilmestyi seuraavat komennot: /emstop ja /emstart.

Säästämme aikaa, hermoja ja työtunteja

/ kill

Jos tietokannassa on kovaa kilpailua ja näin joskus tapahtuu, tietokanta on purettava nopeasti. Nopein tapa on tappaa ongelmallinen prosessi... Voit tehdä tämän muodostamalla yhteyden ssh:n kautta, tappamalla -9... Botti auttaa!

Säästämme aikaa, hermoja ja työtunteja

Aleksei arvosti joukkuetta ja antoi sille rakastavan nimen - "Kilyalka" tai aseen.
Eräänä päivänä katsottuani kuinka Aleksei yritti ja kärsi syöttäen /kill xxx joka kerta jokaisessa prosessissa, päätin lisätä "monipiippuisen" aseeseemme:

Säästämme aikaa, hermoja ja työtunteja

Tuo on parempi! Kaikki on sinua varten, Aleksei, työskentele vain, rakas!

Luonnollisesti näin tärkeä joukkue oli rajallinen pääsy user_id-tunnuksella - "idioottivarma". Nähdessään, kuinka Lesha taitavasti tappaa prosesseja tietokantapalvelimella, useat ihmiset yrittivät syöttää komennon satunnaisella prosessinumerolla, mutta et voi huijata älykästä bottiani, hän kieltäytyi välittömästi.

/alertlog

No, varmuuden vuoksi annoin komennon:
/alertlog <rivien määrä> — hanki määritetty määrä hälytyslokin rivejä
Botti vetää hälytyslokin ja lähettää sen palveluumme, kuten pastebin, nimeltään pyste, ja lähettää linkin liittämiseen pyyntöchatiin.

/tarkistaa

Seuraavaksi tuli pyyntö seurata sovelluksemme todellista suorituskykyä. Tähän asti projektin tekninen tuki on kerännyt nämä tiedot manuaalisesti. Ei väliä! Upeat testaajamme ovat kehittäneet testitapauksia tätä varten. Tuloksena olevaa testilokia ei ole kovin kätevä lukea; kokemattomalle käyttäjälle kestää kauan ymmärtää, eikä hän ole varma, korostaako hän tarvittavat tiedot. Emmekä halua tehdä käsillämme sitä, mitä emme voi tehdä käsillämme... Uusi tehtävä botille!

Säästämme aikaa, hermoja ja työtunteja

/checks-komento näyttää yksinkertaisen ja yksiselitteisen valikon; tällä kertaa kaverimme oppivat käyttämään tätä komentoa ilman ohjeita!

Kun valitset halutun kohteen, valikon sijaan näkyviin tulee ilmoitus testin alkamisesta, jotta kärsimättömät käyttäjät eivät suorita testiämme 100500 XNUMX kertaa:

Säästämme aikaa, hermoja ja työtunteja

Valitusta valikkokohdasta riippuen erityinen testi käynnistetään verkostamme, nimittäin koneelta, jossa botti asuu (jmeter on esikonfiguroitu siellä, tarvittavat testit sijaitsevat...) tai suoraan datakeskuksesta (kotikoneesta). valmisteltu kone sovelluksen vieressä), jotta verkkoyhteydet voidaan sulkea pois testattaessa viiveitä tai vähentää ne minimiin.

Testin suorittamisen ja lokin vastaanottamisen jälkeen botti jäsentää sen ja tuottaa tuloksen "ihmisen luettavassa" muodossa:

Säästämme aikaa, hermoja ja työtunteja

Mittarikokoelma

Toimivuus on saapunut ja kiinnostuneet projektipäälliköt ovat saaneet sellaisen toiminnon alueilleen. Ja yksi myötätuntoinen projektipäällikkö sanoi: "Haluan saada aikatilastot!" Joku CIT:stä kertoi hänelle, että tätä kaikkea olisi kätevää seurata Zabbixissa. Zabbix, siis Zabbix...

Ajattelin, että minun täytyy valmistautua tarpeeseen toistaa ratkaisu... Laitoin idean telakointikonttiin. Säilössä jmeter käynnistetään aikataulun mukaan (kerran 10 minuutin välein), asettaa lokin tiettyyn paikkaan, php jäsentää sen ja näyttää tarvittavat tiedot web-sivun muodossa. Zabbix vastaanottaa tämän sivun käyttämällä web.page.get-avainta, valitsee säännöllisesti tarvittavat tiedot tietyille riippuvaisille elementeille ja rakentaa kaavion.

Säästämme aikaa, hermoja ja työtunteja

Mielestäni siitä ei tullut paha. Tarkkailemalla kuvaajaa näemme ensinnäkin sovelluksen likimääräisen nopeuden, ja jos kaaviossa havaitaan huippuja, tiedämme suunnilleen missä "pistoke" on. Se on yksinkertaista. Toistaiseksi se on osoittautunut kysytyksi vain yhdelle alueelle, mutta olen valmis toistamaan sen kiinnostuneille.

Sovellus kehitys

Vastaavien tehtävien tilastot ovat viime aikoina herättäneet uusia ideoita työn yksinkertaistamiseen ja helpottamiseen. Joissakin projekteissa, sovelluspalvelimissa, on asennettava keskeiset Crypto Pro -säiliöt, niitä on monia, ja digitaalinen allekirjoitus vanhenee ajan myötä. Joskus tulee 2 tehtävää päivässä. Pidin kuitenkin epäturvallisena käyttää bottia näihin tarkoituksiin ja päätin luoda toiminnallisuuden suoraan sovellukseen. Luonnollisesti valtuutuksen ja käyttöoikeuksien tarkistamisen kanssa. Jos sinulla on tarvittavat oikeudet, käytettävissä on ylimääräinen valikkokohta digitaalisten allekirjoitusten, asennuksen, poistamisen, tietojen katselun jne. käyttöä varten. Toiminto on parhaillaan kehitteillä. Kuten kävi ilmi, tämä ei ole kovin vaikeaa, sinun tarvitsee vain lukea olemassa olevia ohjeita hieman, katsoa koodiesimerkkejä, kysyä kehittämisessä kokeneemmilta kollegoilta ja tehdä se sitten. Tutkimusprosessin aikana syntyi ideoita lisättäväksi hakemukseen. En tee Napoleonin suunnitelmia - kehitystä on, antakaa jokaisen hoitaa omat asiansa. Mutta vaikka se on mielenkiintoista, teen sen itse.

suunnitelmat

Kuten sanoin, bottimme käyttöön syntyi monia erilaisia ​​ideoita, ei vain - yleensä, sanokaamme ideoita "automaatiopisteisiin", monet niistä unohtuivat, koska minulla ei ollut aikaa kirjoittaa niitä muistiin. Nyt yritän kirjoittaa ylös kaiken, mitä mieleeni tulee, ja suosittelen, että muut tekevät samoin.

Mutta Aleksei ei unohda esittää toiveitaan. Uusimmasta:
/kill_sql SQL_ID — lopeta kaikki istunnot tällä SQL_ID-pyynnöllä
/kill_block - lopeta juurien estoistunto
/show_em — näytä kuva EM-suorituksesta
Hän on ovela kaveri, hän haluaa ommella DBA:ta puhelimellaan =)

Näin toimimme isänmaan hyväksi!

Miten pääset eroon rutiineista ja epämiellyttävistä tehtävistä?

Toivottavasti lukeminen osoittautui mielenkiintoiseksi ja kenties hyödylliseksikin jollekin, enkä ehtinyt ikävystyttää lukijaa... Onnea meille kaikille.

Lähde: will.com

Lisää kommentti