Projektimme ovat tyypillisesti alueellisia, ja asiakkainamme ovat tyypillisesti ministeriöt. Järjestelmiämme käyttävät kuitenkin julkisen sektorin lisäksi myös yksityiset organisaatiot. Niiden kanssa ei ole käytännössä mitään ongelmia.
Joten pääprojektimme ovat alueellisia, ja niissä on joskus ongelmia. Esimerkiksi suorituskyvyn kanssa, kun alueilla on 20 000 arvokasta käyttäjäämme uusien toimintojen käyttöönoton aikana tuotantopalvelimille. Se on tuskaa…
Nimeni on Ruslan ja työskentelen BARS Groupin tietojärjestelmien tukitiimissä. kehittämässä tappajabottia brutaaleille sarjatietokannan ylläpitäjilleTämä postaus ei sovi heikkohermoisille – siinä on paljon tekstiä ja kuvia.

/awr
Jotkin sovelluksistamme toimivat Oraclen tietokannan hallintajärjestelmässä. Meillä on myös projekteja PostgreSQL-tietokannan hallintajärjestelmässä. Oraclella on loistava ominaisuus nimeltä Automatic Workload Repository (AWR) – työkalu tietokannan hallintajärjestelmän työmäärätilastojen keräämiseen, joka korostaa olemassa olevia ongelmia ja antaa jopa suosituksia niiden korjaamiseksi. Yhdessä vaiheessa (nimittäin suurten vaikeuksien aikana) kehittäjät pyysivät tätä ominaisuutta jatkuvasti. AWR-raportit suorituskykyanalyysiä vartenKuuliaisesti menimme tietokannan hallintajärjestelmään, keräsimme raportit, vedimme ne sisään ja lähetimme ne tuotantoon analysoitavaksi. Viidennen kerran jälkeen siitä tuli ärsyttävää... kymmenennen kerran jälkeen siitä tuli ärsyttävää...
Eräänä päivänä yksi kollegoistani ehdotti, että kaikki useammin kuin kerran tehtävä pitäisi automatisoida. Ennen kuin ärsyynnyin, en rehellisesti sanottuna ollut ajatellut asiaa ja yritin automatisoida kaiken, mikä oli automatisoitavissa, mutta usein sille ei ollut kysyntää ja se oli enemmänkin kokeilua kuin käytännöllistä.
Ja sitten ajattelin: "Ylläpitäjiä ei tarvita raportin luomiseen..."Loppujen lopuksi raportin kerääminen tarkoittaa SQL-komentosarjan @$ORACLE_HOME/rdbms/admin/awrrpt.sql suorittamista ja raportin hakemista palvelimelta... Ai niin, emme salli kehitystä tuotantoympäristöön.
Niinpä googlasin tarvittavat tiedot, loin funktion artikkelista testitietokantaan, suoritin skriptin ja kas kummaa, raportti oli valmis ja se voitiin tallentaa paikallisesti. Loin funktioita sinne, missä AWR-raportteja usein tarvittiin, ja selitin kehittäjille, miten niitä käytetään.
Samoihin aikoihin, juteltuani @BotFatherin kanssa, loin huvikseni Telegram-botin. Lisäsin siihen joitakin yksinkertaisia toimintoja – kellonajan, valuuttakurssien ja sään näyttämisen – ja opetin sen lähettämään terveisiä vaimolleni (silloin vielä tyttöystävälleni) aikataulun mukaisesti. Terveisten lähettäminen oli luultavasti bottini suosituin ominaisuus tuolloin, ja vaimoni arvosti sitä.
Eli. Kehittäjät kirjoittavat meille Telegramissa, me lähetämme heille raportin Telegramissa... Mutta entä jos he kirjoittavat botille meidän sijaan? Se on parempi kaikille, raportti vastaanotetaan nopeammin ja mikä tärkeintä, se ei koske meitä. Näin syntyi idea bottini ensimmäisestä paljon pyydetystä ominaisuudesta.
Aloitin sen toteuttamisen. Tein parhaani PHP:ssä (sovelluksemme on itse asiassa PHP:ssä, jossa olen taitavampi kuin esimerkiksi Pythonissa). En ole kovin hyvä koodari, joten en näytä teille koodiani :)
Botti sijaitsee yritysverkossamme ja sillä on pääsy tiettyihin projekteihin, mukaan lukien kohdetietokantoihin. Välttääkseni komentoparametrien tai valikoiden kanssa sotkemisen, integroin tämän toiminnallisuuden ryhmäkeskusteluun valvontailmoitusten avulla. Tällä tavoin botti tietää heti, mitä tietokantaa raportointiin käytetään.
Saatuaan lomakkeen komennon /awr N, jossa N on kokonaisten tuntien lukumäärä, jolta raporttia tarvitaan (oletusarvoisesti 1 tunti), jopa viikon ajan, jos tietokantaa ei ole käynnistetty uudelleen, botti alkaa välittömästi työskennellä, kerää raportin, julkaisee sen verkkosivuna ja tarjoaa välittömästi (melkein välittömästi) linkin kipeästi kaivattuun raporttiin.
Seuraa linkkiä, niin tässä se on, AWR:n raportti:

Kuten odotettua, kehittäjät hoitivat raportin luomisen hyvin, ja joku jopa ilmaisi kiitollisuutensa.
Arvostettuaan tiimin kätevyyttä, myös muiden alueiden projektipäälliköt halusivat samaa, koska he usein saavat asiakkaiden kritiikin pääosan järjestelmän suorituskyvyn ja saatavuuden huolesta. Lisäsin botin myös muihin keskusteluihin. He käyttävät sitä edelleen, ja olen siitä tyytyväinen.
Myöhemmin kollegani CIT:llä saivat tietää, miten keräämme raportteja, ja halusivat liittyä mukaan. En lisännyt heitä keskusteluihimme, vaan loin erillisen keskustelun ajoitettua ja tarvittaessa luotavaa raporttien luomista varten.
/pgMäyrä
Meillä on myös muita PHP-sovelluksia PostgreSQL:n ohella. Toteutettiin pgBadger-raporttien kerääminen apua tarvitseville samalla periaatteella – ryhmäkeskusteluissa. Käytimme sitä aluksi, mutta sitten lopetimme. Toiminnallisuus leikattiin pois tarpeettomana.
/velvollisuus
Osastollamme on yövuoroja ja vastaavasti aikataulu. Se on tallennettu Google Sheetsiin. Linkin etsiminen, aikataulun avaaminen ja itse etsiminen ei ole aina kätevää... Yksi entinen kollegani leikki myös Telegram-bottinsa kanssa ja otti sen käyttöön osastomme keskustelussa. ilmoitukset osaston työntekijöiden työvuoron alusta. Botti jäsentää aikataulun, tunnistaa päivystävän henkilön kuluvan päivämäärän perusteella ja ilmoittaa aikataulun perusteella tai pyynnöstä, kuka on tänään päivystävä. Se on loistava ja kätevä. En kuitenkaan ollut kovin tyytyväinen viestimuotoon. Myöskään toisen osaston (esimerkiksi Medicine Business Centerin) työntekijät eivät oikeastaan tarvitse tietoa muiden alueiden päivystävästä henkilöstä, mutta heidän on tiedettävä, kuka on päivystävässä lääketieteessä ongelmatilanteissa. Päätin "lainata" toiminnallisuuden, mutta muuttaa sitä, mistä en pitänyt. Loin viestimuodon, joka on kätevä minulle ja muille, poistamalla tarpeettomat tiedot.
/tnls
Kokeiltuani automaatiota Telegram-botin kautta minulla oli paljon erilaisia ideoita, mutta halusin tehdä ehdottoman välttämättömiä asioita. Päätin pitää valituksia koskevat tilastot. Asiakkaidemme projektien käyttämiseksi olemme ottaneet käyttöön niin sanotun "hopper-palvelimen" eli edelleenlähetyspalvelimen. VPN-yhteydet muodostetaan sen kautta, ja sovellusportit, tietokannat ja muut apuvälityspalvelut välitetään sitten lähiverkkoomme SSH:n kautta, mikä varmistaa työntekijöidemme projektien kätevän käytön ilman VPN-yhteyksien vaivaa. Muodosta vain VPN-yhteys yritysverkkoomme.
Pyyntötilastot osoittivat, että tunnelin kaatumisen jälkeen (verkko-ongelmien, kuten aikakatkaisun, vuoksi) ihmiset usein kysyvät projektin käyttöoikeuden palauttamista. Useimmissa tapauksissa pelkkä yhteyden uudelleenkäynnistys riittää, ja kaikki on hyvin. Joten tehdään se itse. Tässä on komento:

"Putoat" haluamaasi valikkokohtaan, valitset projektisi, odotat hetken, ja kaikki ovat onnellisia ja tyytyväisiä...
Saatuaan komennon botti muodostaa sormen napsautuksella yhteyden edelleenlähetyspalvelimeen tietäen etukäteen, mikä edelleenlähetys on käynnistettävä uudelleen, ja suorittaa tehtävänsä – palauttaa yhteyden projektiin. Kirjoitin ohjeet, jotta käyttäjät voisivat ratkaista tällaiset ongelmat itsenäisesti. Ihmiset ottivat meihin yhteyttä vain, jos toimitettu työkalu ei toiminut...
/ecp_to_pem
Lisätilastot osoittivat, että muuntaminen on usein tarpeen Crypto Pron digitaalinen allekirjoitus PEM-muodossa() erilaisiin integraatioihin, ja meillä on niitä melko monta. Tehtävä: otat säilön, kopioit sen Windows-tietokoneelle, johon on asennettu P12FromGostCSP-apuohjelma (se on muuten maksullinen), muunnat sen pfx-muotoon ja sitten muunnat pfx-tiedoston pem-muotoon OpenSSL:llä (GOST-salaustuella). Se ei ole kovin kätevää, mutta haluat sen olevan mahdollisimman helppoa.
Google tuli taas apuun. Löysi sen. Käänsin sen README-tiedostossa kuvatulla tavalla, ja se toimi. Koulutin botin käyttämään apuohjelmaa ja sain lähes välittömän konversion.

Lopullisen käyttöönoton valmistuttua annettiin määräys siirtyä uuteen salausmuotoon – GOST-2012:een. Muistaakseni apuohjelma toimi tuolloin vain vanhan GOSTin (2001) kanssa. Ehkä se oli täysin erilainen, samanlainen apuohjelma joltain toisenlaisesta ihmisestä; en muista tarkalleen.
Vaihdettuani uuteen GOST-standardiin poistin botin toiminnallisuuden turvallisuussyistä. Toteutin sen Docker-konttiin.
Dockerfile, jos joku sitä tarvitsee:
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.shMuuntaaksesi sinun on sijoitettava lähdekoodisäiliö (hakemisto, kuten xxx.000) hakemistoon /srv/in ja noudettava valmis pem-tiedosto hakemistosta /srv/out.
Muuntaaksesi, noudata seuraavia ohjeita:
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ä yritykseemme liittyi todella siisti Oraclen tietokannan ylläpitäjä, jolla oli laaja kokemus tietokannan hallintajärjestelmien hallinnasta ja kehittämisestä. Hänellä oli heti alkuunsa vaikeuksia yhteyden muodostamisessa tietokannan hallintajärjestelmiin SSH:n kautta: hän ei tiennyt minne tai miten muodostaa yhteyden, käyttöoikeustiedot olivat epäselvät tai hän ei pystynyt välittämään tarvitsemaansa asiaa. Autoimme mielellämme, selitimme yhteyden muodostamisen ja asensimme Enterprise Managerin hänelle. Mutta SSH ei vieläkään toiminut. Yksi kollegoistamme selitti asian yksinkertaisesti: hän on puhdasverinen tietokannan ylläpitäjä. 🙂 Päätimme, että jos palvelimella tarvitsisi tehdä jotain muutoksia, tekisimme sen itse.
EM kaatuu joskus suuren kuormituksen alla, ja sen uudelleenkäynnistykseen… on muodostettava SSH-yhteys ja käynnistettävä se uudelleen terminaalin kautta. "Ylläpitäjät ovat hyviä siinä", uusi kollegamme päätti. Raskaat tietokantajärjestelmien kuormitukset eivät ole täällä harvinaisia, ja pyynnöistä EM:n uudelleenkäynnistykseen on tullut yleisiä. Sitten toistuu sama skenaario: stressiä, ärtymystä ja ratkaisun etsimistä. Joten samoissa ryhmäkeskusteluissa ilmestyi seuraavat komennot: /emstop ja /emstart.

/ kill
Jos tietokannassa on paljon kilpailua, mitä joskus tapahtuu, on tarpeen purkaa tietokanta nopeasti. Nopein tapa on lopettaa hyökkäävä prosessi... Voit tehdä tämän muodostamalla SSH-yhteyden, lopettamalla komennon -9... Botti auttaa!

Aleksei arvosti joukkuetta ja antoi sille hellän nimen - "Kilalka" tai ase.
Eräänä päivänä, nähtyäni Alexeyn kamppailevan ja kärsivän kirjoittaen /kill xxx joka kerta kullekin prosessille, päätin lisätä aseeseemme "monipiippuisen":

Parempi näin! Kaikki on sinua varten, Aleksei, jatka vain työskentelyä, rakas!
Luonnollisesti näin tärkeä joukkue oli rajallinen käyttöoikeus käyttäjän tunnuksella - "idioottivarma". Nähdessään, kuinka Lesha taitavasti tappoi prosesseja tietokantapalvelimella, useat ihmiset yrittivät syöttää komennon satunnaisella prosessinumerolla, mutta älykäs bottini ei antanut periksi; se kieltäytyi välittömästi.
/hälytysloki
No, varmuuden vuoksi tein komennon:
/alertlog <rivien määrä> — hae määritetty määrä hälytyslokirivejä
Botti noutaa hälytyslokin ja lähettää sen palveluumme, pastebinin kaltaiseen palveluun nimeltä pyste, ja lähettää linkin liittämiseen pyyntöchatissa.
/tarkistukset
Sitten tuli pyyntö Sovelluksemme todellisen suorituskyvyn seuranta. Tähän asti projektin tekninen tukitiimi on kerännyt nämä tiedot manuaalisesti. Se ei pidä paikkaansa! Rohkeat testaajamme ovat kehittäneet testitapauksia tätä tarkoitusta varten. Tuloksena olevat testilokit eivät ole kovin käyttäjäystävällisiä; kokematon käyttäjä käyttää paljon aikaa sen selvittämiseen eikä välttämättä pysty poimimaan tarvitsemiaan tietoja. Emmekä pidä asioiden tekemisestä manuaalisesti, jotka voidaan tehdä ilman manuaalista puuttumista asiaan... Uusi haaste botille!

/checks-komento tuottaa yksinkertaisen ja selkeän 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 aloittamisesta, jotta kärsimättömät käyttäjät eivät aja testiämme 100500 kertaa:

Valitusta valikkokohdasta riippuen tietty testi käynnistetään verkosta, nimittäin koneesta, jossa botti sijaitsee (jmeter on esikonfiguroitu siellä, tarvittavat testit sijaitsevat jne.) tai suoraan datakeskuksesta (sovelluksen vieressä olevasta valmistellusta koneesta), jotta verkkoviive testauksen aikana poistuu tai ainakin minimoituu.
Kun testi on valmis ja loki vastaanotettu, botti jäsentää sen ja tuottaa tuloksen ihmisen luettavassa muodossa:

Mittarikokoelma
Toiminnallisuus oli hitti, ja halukkaat projektipäälliköt ottivat sen käyttöön alueilleen. Eräs myötätuntoinen projektipäällikkö totesi: "Haluan aikaan perustuvia tilastoja!" Joku keskustietotekniikkakeskuksesta ehdotti, että kaikkea tätä olisi kätevää seurata Zabbixissa. Zabbix, joten Zabbix…
Ajattelin, että minun piti valmistautua ratkaisun replikointitarpeeseen... Toteutin idean Docker-kontissa. JMeter toimii kontissa aikataulun mukaisesti (10 minuutin välein), tallentaa lokin tiettyyn sijaintiin, PHP jäsentää sen ja tuottaa tarvittavat tiedot verkkosivuna. Zabbix käyttää web.page.get-avainta tämän sivun hakemiseen, käyttää säännöllistä lauseketta tarvittavan tiedon valitsemiseen tietyille riippuvaisille elementeille ja piirtää graafin.

Mielestäni se onnistui aika hyvin. Katsomalla kaaviota voimme ensinnäkin nähdä sovelluksen likimääräisen nopeuden, ja jos havaitsemme kaaviossa piikkejä, voimme karkeasti määrittää, missä pullonkaula on. Se on yksinkertaista. Tähän mennessä se on osoittautunut hyödylliseksi vain yhdellä alueella, mutta olen valmis ottamaan sen käyttöön kaikille kiinnostuneille.
Sovelluksen tarkentaminen
Samankaltaisten tehtävien tilastot antoivat minulle hiljattain ideoita työni yksinkertaistamiseksi ja helpottamiseksi. Jotkut projektit vaativat Crypto Pro -avainsäiliöiden asentamista sovelluspalvelimille. Niitä on paljon, ja digitaaliset allekirjoitukset vanhenevat ajan myötä. Joskus saan kaksi tehtävää päivässä. Mutta pidin botin käyttöä näihin tarkoituksiin vaarallisena ja päätin toteuttaa toiminnon suoraan sovelluksessa. Luonnollisesti se vaatisi valtuutuksen ja käyttöoikeuksien varmentamisen. Jos tarvittavat oikeudet täyttyvät, digitaalisten allekirjoitusten käsittelyyn, asennukseen, poistamiseen, tietojen tarkasteluun ja niin edelleen on käytettävissä lisävalikkokohta. Tämä toiminto on parhaillaan kehitteillä. Käy ilmi, ettei se ole kovin vaikea; minun tarvitsee vain lukea olemassa olevat ohjeet, katsoa koodiesimerkkejä, kysyä kokeneemmilta kollegoilta ja sitten tehdä se. Tutkimuksen aikana keksin ideoita sovelluksen lisäämiseksi. En aio tehdä suuria suunnitelmia – kehitys on jo käynnissä, joten jokainen voi tehdä omat juttunsa. Mutta toistaiseksi teen sen vain itse.
suunnitelmat
Kuten sanoin, keksin paljon erilaisia ideoita bottimme ja muiden asioiden käyttöön – pohjimmiltaan ideoita "automaatiopisteille", niin sanoakseni. Monet niistä unohtuivat, koska minulla ei ollut aikaa kirjoittaa niitä muistiin. Nyt yritän kirjoittaa muistiin kaiken, mitä mieleeni tulee, ja suosittelen muillekin samaa.
Aleksei ei kuitenkaan koskaan unohda jakaa omia toiveitaan. Yksi viimeisimmistä:
/kill_sql SQL-tunnus — lopeta kaikki istunnot tällä SQL_ID-kyselyllä
/tappoesto - lopeta pääkäyttäjän estoistunto
/näytä_em — näytä EM-suorituskykykuva
Ovela haluaa tehdä DBA:n puhelimestaan =)
Näin me toimimme kotimaan hyväksi!
Miten vapautat itsesi rutiininomaisista ja mielenkiinnottomista tehtävistä?
Toivottavasti tämä lukukokemus oli mielenkiintoinen ja ehkä jopa hyödyllinen jollekin, enkä ehtinyt tylsistyttää lukijaa... Onnea meille kaikille.
Lähde: will.com
