Біз уақытты, жүйкені және адам сағатын үнемдейміз

Біздің жобаларымыз әдетте аймақтық, ал тапсырыс берушілер әдетте министрліктер. Бірақ біздің жүйелерді мемлекеттік сектордан басқа жеке ұйымдар да пайдаланады. Олармен іс жүзінде ешқандай проблемалар жоқ.

Демек, негізгі жобалар аймақтық, кейде олармен проблемалар туындайды. Мысалы, өнімділікпен, өңірлерде өнім серверлерінде жаңа функцияларды шығару кезеңінде біздің 20 мыңнан астам құнды пайдаланушыларымыз болған кезде. Бұл азап…

Менің атым Руслан мен BARS Group ақпараттық жүйелерін қолдаймын және зорлық-зомбылық сериялық DBA үшін өлтіруші бот әзірлеу. Бұл жазба әлсірегендерге арналмаған - көптеген хаттар мен суреттер бар.

Біз уақытты, жүйкені және адам сағатын үнемдейміз

/авр

Кейбір қолданбаларымыз Oracle DBMS жүйесінде жұмыс істейді. PostgreSQL ДҚБЖ жобалары да бар. Oracle-де тамаша нәрсе бар - ДҚБЖ жүктемесі туралы статистиканы жинау, ол бар проблемаларды көрсетеді және тіпті жою бойынша ұсыныстар береді - Автоматты жұмыс жүктемесінің репозиторийі (AWR). Бір сәтте (дәлірек айтқанда, ауырсыну сәтінде) әзірлеушілер үнемі жинауды сұрады Өнімділікті талдауға арналған AWR есептері. Біз ДҚБЖ серверіне адалдықпен кіріп, есептерді жинап, бізге апарып, талдауға өндіріске жібердік. 5-реттен кейін тітіркендіреді... 10-нан кейін тітіркендіреді...

Бірде менің әріптестерімнің бірі бір емес, бірнеше рет жасалатын барлық нәрсе автоматтандырылуы керек деген идеяны білдірді. Тітіркенген сәтке дейін, шынымды айтсам, мен бұл туралы ойламадым және автоматтандыруға болатын барлық нәрсені автоматтандыруға тырыстым, бірақ көбінесе ол сұранысқа ие болмады және қолданбалы сипаттағыдан гөрі зерттеу болды.

Сосын мен ойладым: «Есепті жасау үшін әкімшілер қажет емес...». Өйткені, есепті жинау @$ORACLE_HOME/rdbms/admin/awrrpt.sql sql сценарийін орындауды және есепті серверден өз орныңызға алуды білдіреді... Иә, біз өндіріске әзірлеуге рұқсат бермейміз.

Содан кейін мен қажетті ақпаратты Google-да іздедім, тест базасындағы мақаладан функцияны жасадым, сценарийді іске қостым және керемет - есеп құрастырылды және оны жергілікті түрде сақтауға болады. AWR есептері жиі қажет болатын функциялар жасалды және әзірлеушілерге оларды қалай пайдалану керектігін айтты.

Шамамен осы уақытта, бос уақытымда @BotFather-пен сөйлескеннен кейін мен өзім үшін Telegram ботын тек көңіл көтеру үшін жасадым. Мен мұнда қарапайым функционалдылықты бұздым - ағымдағы уақытты, валюта бағамын, ауа-райын көрсетіңіз, оны кесте бойынша әйеліме (сол кездегі қызыма) мақтаулар жіберуді үйреттім. Мүмкін, сол кезде комплимент жіберу менің ботымның ең танымал функционалдығы болды және менің әйелім оны жоғары бағалады.

Сонымен. Әзірлеушілер бізге Telegram арқылы жазады, біз оларға Telegram арқылы есеп жібереміз... Олар бізге емес, ботқа жазса ше? Өйткені, бұл барлығына жақсы болады, есеп тезірек қабылданады, ең бастысы, бізді айналып өтеді. Менің ботқа арналған алғашқы танымал функционалдылық идеясы осылай дүниеге келді.

іске асыруды бастадым. Мен мұны мүмкіндігінше PHP тілінде жасадым (біздің қосымшамыздың өзі PHP-де, мен оны Python-ға қарағанда жақсы білемін). Мен жақсы кодер емеспін, сондықтан мен сізге кодымды көрсетпеймін :)

Бот біздің корпоративтік желімізде тұрады және белгілі бір жобаларға, соның ішінде мақсатты дерекқорларға қол жеткізе алады. Командадағы параметрлермен немесе мәзірмен алаңдамау үшін мен бұл функцияны бақылау хабарландырулары бар топтық чатқа тіркедім. Осылайша, бот есепті қай дерекқордан жинау керектігін бірден біледі.

сияқты пәрмен алған /awr Н, мұндағы N - есеп қажет болатын толық сағаттар саны (әдепкі бойынша - 1 сағат), тіпті бір апта бойы, егер дерекқор қайта іске қосылмаған болса, бот дереу жұмыс істей бастайды, есепті жинайды, оны есеп ретінде жариялайды. веб-парақ және бірден (дерлік сол жерде) өте қажет есептің сілтемесін береді.

Сілтемені орындаңыз және міне, AWR есебі:

Біз уақытты, жүйкені және адам сағатын үнемдейміз

Күткендей, әзірлеушілер мұндай есеп беруді жеңе алды, ал кейбіреулері бізге алғыс айтты.

Команданың ыңғайлылығын бағалай отырып, басқа аймақтардағы жоба менеджерлері де соны қалайды, өйткені олар тұтынушыдан көбірек алады және жүйелердің өнімділігі мен қолжетімділігіне алаңдайды. Мен ботты басқа чаттарға қостым. Олар оны әлі де пайдаланады, мен бұған қуаныштымын.

Кейінірек CIT әріптестері біздің есептерді қалай жинайтынымызды біліп, оны да жасағымыз келді. Мен оларды чаттарымызға қоспадым, кесте бойынша және сұраныс бойынша есептерді шығарумен бөлек чатты құрдым.

/pgBadger

Бізде PostgreSQL-пен бірге PHP-де басқа қолданбалар да бар. Мен мұқтаждар үшін pgBadger есептерінің жинағын топтық чаттарда бірдей принципті қолдана отырып жүзеге асырдым. Алдымен олар оны пайдаланды, бірақ кейін олар тоқтады. Функционалдық қажетсіз деп кесілді.

/міндет

Біздің бөлімде түнгі ауысым бар және сәйкесінше кесте бар. Ол Google Sheets ішінде. Сілтеме іздеу, диаграмма ашу, өзіңді іздеу әрқашан қолайлы бола бермейді... Менің бұрынғы әріптестерімнің бірі де өзінің Telegram ботымен ойнап, оны біздің бөлімнің чатына енгізді. бөлім қызметкерлері үшін кезекшілік ауысымының басталғаны туралы хабарламалар. Бот кестені талдайды, ағымдағы күн бойынша кезекші адамды анықтайды және кестеге сәйкес немесе сұраныс бойынша бүгін кімнің кезекші екенін хабарлайды. Бұл керемет және ыңғайлы болып шықты. Рас, маған хабарламалардың форматы ұнамады. Сондай-ақ, басқа бөлімнің қызметкерлері үшін (мысалы, «Медицина» БК) басқа бағыттар бойынша кезекшілер туралы ақпарат қажет емес, бірақ проблемалар туындаған жағдайда «Медицинада» кімнің кезекші екенін білу керек. Мен функционалдылықты «қарызға алуды» шештім, бірақ маған ұнамайтын нәрсені өзгертті. Мен қажет емес ақпаратты алып тастап, өзіме және басқаларға ыңғайлы хабарлама пішімін жасадым.

/tnls

Telegram боты арқылы автоматтандыруды қолданып көргеннен кейін көптеген әртүрлі идеялар пайда болды, бірақ мен өте қажет нәрселерді жасағым келді. Мен жетекшілік етуді шештім сұраныстар бойынша статистика. Клиенттеріміздің жобаларына қол жеткізу үшін біз «секіру сервері» немесе қайта жіберу сервері деп аталатын серверді іске асырдық. Оған VPN қосылымдары орнатылады, содан кейін қолданба порттары, дерекқорлар және басқа көмекші бағыттаулар VPN қосылымдарымен проблемаларсыз қызметкерлеріміздің жобаларына оңай қол жеткізу үшін ssh арқылы жергілікті желіге жіберіледі. Сізге тек корпоративтік желіге VPN қосылымын орнату жеткілікті.

Сұраныстардың статистикасы көрсеткендей, көбінесе туннельдердің бірі істен шыққаннан кейін (мысалы, желі ақаулары болған жағдайда, күту уақытының үзілуіне байланысты) адамдар жобаға қолжетімділікті қалпына келтіру туралы хабарласады. Көп жағдайда қосылымды қайта іске қосу жеткілікті және бәрі жақсы. Өзіңіз жасайық. Міне пәрмен:
Біз уақытты, жүйкені және адам сағатын үнемдейміз

Сіз қалаған мәзір элементіне «жүріп» кетесіз, жобаңызды таңдайсыз, бір минут күтесіз және бәрі бақытты және қанағаттанған ...

Пәрменді алғаннан кейін байттардың және биттердің аздап қозғалуымен бот қайта жіберу серверіне қосылады, қандай қайта жіберуді қайта бастау керектігін алдын ала біліп, өз жұмысын орындайды - жобамен байланысты қалпына келтіреді. Мен осындай мәселелерді өзіңіз шеше алатындай нұсқаулар жаздым. Адамдар бізге берілген құрал жұмыс істемесе ғана хабарласты...

/ecp_to_pem

Әрі қарай статистика оны жиі түрлендіру қажет екенін көрсетті pem форматындағы EDS Crypto Pro(Негізі64) әртүрлі интеграциялар үшін және бізде олардың саны өте көп. Тапсырма: контейнерді алыңыз, оны P12FromGostCSP қызметтік бағдарламасы орнатылған Windows компьютеріне көшіріңіз (айтпақшы, ақылы), оны pfx форматына түрлендіріңіз, содан кейін OpenSSL (ГОСТ шифрлауын қолдайтын) арқылы pfx пемге түрлендіріңіз. Бұл өте ыңғайлы емес, бірақ сіз оны саусақтарыңыздың ұшында алғыңыз келеді.

Google тағы да көмекке келді. Табылды қандай да бір мейірімді адамның пайдасы. Мен оны README-де жазылғандай жинадым - ол жұмыс істеді. Мен ботқа қызметтік бағдарламамен жұмыс істеуді үйреттім және лезде түрлендіруге қол жеткіздім.
Біз уақытты, жүйкені және адам сағатын үнемдейміз

Түпкілікті іске асыру сәтіне қарай жаңа шифрлау пішіміне көшу туралы бұйрық шығарылды - гост-2012. Менің есімде, сол кезде утилита тек ескі ГОСТ-пен (2001) жұмыс істеді, мүмкін бұл басқа мейірімді адамның тағы бір ұқсас утилитасы болды, дәл есімде жоқ.
Жаңа ГОСТ-қа көшкеннен кейін қауіпсіздік мақсатында боттың функционалдығы жойылды. Оны докер контейнерінде іске асырды.

Dockerfile, егер біреу қажет болса:

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

Түрлендіру үшін бастапқы контейнерді (xxx.000 сияқты каталог) /srv/in каталогына орналастырып, дайын пемді /srv/out файлына алу керек.

Түрлендіру үшін:

 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

Бір күні өте керемет Oracle DBA, ДҚБЖ басқару және әзірлеуде үлкен тәжірибесі бар, біздің компанияға жұмысқа тұрды. Ол бірден ssh көмегімен ДҚБЖ серверлеріне қосылуда қиындықтарға тап болды: ол қайда және қалай қосылу керектігін білмейді, қолжетімділік анық сипатталмаған немесе ол өзіне қажет нәрсені жібере алмайды. Біз көмектесуге қуаныштымыз, біз оған қалай қосылу керектігін айттық және оған кәсіпорын менеджерін жібердік. Бірақ бәрібір ssh-мен жұмыс істемеді. Менің әріптестерімнің бірі мұны қарапайым түрде түсіндірді: асыл тұқымды DBA :) Егер серверде бірдеңені өзгерту керек болса, оны өзіміз жасаймыз деп шештік.

EM кейде ауыр жүктемеде істен шығады және оны қайта іске қосу үшін... ssh арқылы қосылып, терминал арқылы қайта іске қосу керек. «Әкімшілер мұны жақсы біледі», - деп шешті жаңа әріптесіміз. ДҚБЖ-дағы ауыр жүктемелер біз үшін сирек емес, сонымен қатар EM қайта іске қосу туралы сұраулар жиі кездеседі. Содан кейін бірдей сценарий: шиеленіс, тітіркену және мәселенің шешімін іздеу. Сол топтық чаттарда келесі пәрмендер пайда болды: /emstop және /emstart.

Біз уақытты, жүйкені және адам сағатын үнемдейміз

/өлтір

Деректер базасында күшті бәсекелестік болса және бұл кейде орын алса, дерекқорды жылдам босату қажет. Ең жылдам жолы - проблемалық процесті өлтіру... Ол үшін ssh арқылы қосылыңыз, kill -9... Бот көмектеседі!

Біз уақытты, жүйкені және адам сағатын үнемдейміз

Алексей команданы бағалап, оған мейірімді есім берді - «Килялка» немесе мылтық.
Бір күні Алексейдің қалай тырысқанын және азап шеккенін көргеннен кейін, әрбір процесс үшін әрбір рет xxx-ке кіру / өлтіру, мен қаруымызға «көп ұңғылы» қосуды шештім:

Біз уақытты, жүйкені және адам сағатын үнемдейміз

Бұл жақсырақ! Бәрі сен үшін, Алексей, тек еңбек ет, қымбаттым!

Әрине, мұндай маңызды команда шектеулі болды user_id арқылы кіру - «мінсіз». Лешаның дерекқор серверіндегі процестерді қалай ептілікпен өлтіретінін көріп, бірнеше адам кездейсоқ процесс нөмірі бар пәрменді енгізуге тырысты, бірақ сіз менің смарт-ботымды алдай алмайсыз, ол бірден бас тартты.

/alertlog

Қалай болғанда да, мен команданы жасадым:
/alertlog <жолдар саны> — ескертулер журналының белгіленген санын алыңыз
Бот ескерту журналын алып, оны pyste деп аталатын pastebin сияқты біздің қызметімізге жібереді және сұрау чатына қою сілтемесін жібереді.

/тексереді

Келесі сұраныс келді қолданбамыздың нақты өнімділігін бақылау. Осы уақытқа дейін жобаның техникалық қолдауы бұл деректерді қолмен жинады. Маңызды емес! Біздің батыл тестерлеріміз бұл үшін сынақ жағдайларын әзірледі. Алынған сынақ журналын оқу өте ыңғайлы емес, тәжірибесіз пайдаланушы түсіну үшін көп уақыт алады және ол қажетті ақпаратты бөлектейтініне сенімді емес. Ал біз өз қолымызбен жасай алмайтын нәрсені қолмен істегенді ұнатпаймыз... Ботқа арналған жаңа тапсырма!

Біз уақытты, жүйкені және адам сағатын үнемдейміз

/checks пәрмені қарапайым және бір мағыналы мәзірді көрсетеді, бұл жолы біздің жігіттер бұл команданы нұсқауларсыз пайдалануды үйренді!

Қажетті элементті таңдаған кезде, мәзірдің орнына сынақтың басталуы туралы хабарландыру пайда болады, сондықтан шыдамсыз пайдаланушылар біздің тестімізді 100500 XNUMX рет орындамайды:

Біз уақытты, жүйкені және адам сағатын үнемдейміз

Таңдалған мәзір элементіне байланысты, біздің желімізден, атап айтқанда, бот тұратын құрылғыдан (jmeter алдын ала конфигурацияланған, қажетті сынақтар орналасқан...) немесе тікелей деректер орталығынан (бірден кідірістерді тестілеу кезінде желілік қосылымдарды болдырмау немесе оларды минимумға дейін азайту үшін қолданбаның қасында дайындалған машина).

Тестілеуді аяқтап, журналды алғаннан кейін бот оны талдайды және нәтижені «адам оқи алатын» пішінде шығарады:

Біз уақытты, жүйкені және адам сағатын үнемдейміз

Көрсеткіштер жинағы

Функционалдық келді және мүдделі жоба менеджерлері өз аймақтары үшін осындай функцияны алды. Бір жанашыр жоба менеджері: «Мен уақыт статистикасын алғым келеді!» CIT-тен біреу оған мұның бәрін Zabbix-те бақылау ыңғайлы болатынын айтты. Заббикс, сондықтан Заббикс...

Мен шешімді қайталау қажеттілігіне дайындалуым керек деп ойладым... Мен идеяны докер контейнеріне салдым. Контейнерде jmeter кесте бойынша іске қосылады (әр 10 минут сайын), журналды белгілі бір жерге орналастырады, php оны талдайды және қажетті деректерді веб-бет түрінде көрсетеді. Zabbix, web.page.get пернесін пайдалана отырып, осы бетті алады, белгілі бір тәуелді элементтер үшін қажетті деректерді жүйелі түрде таңдайды және графикті құрады.

Біз уақытты, жүйкені және адам сағатын үнемдейміз

Жаман емес шықты деп ойлаймын. Графикті бақылай отырып, біз, біріншіден, қолданбаның шамамен жылдамдығын көреміз, ал егер графикте шыңдар анықталса, біз «штепсельдің» қайда екенін шамамен білеміз. Бәрі оңай. Әзірге ол тек бір өңірде сұранысқа ие болып шықты, бірақ мен оны қызығушылық танытқандар үшін қайталауға дайынмын.

Қолданбаны әзірлеу

Ұқсас тапсырмалар бойынша статистика жақында жұмысты жеңілдету және жеңілдету туралы көбірек идеяларды тудырды. Кейбір жобаларда, қолданбалы серверлерде негізгі Crypto Pro контейнерлерін орнату қажеттілігі туындайды, олардың көпшілігі бар және уақыт өте келе цифрлық қолтаңбаның мерзімі аяқталады. Кейде күніне 2 тапсырма келеді. Бірақ мен ботты осы мақсаттар үшін пайдалану қауіпті деп санадым және функционалдылықты тікелей қолданбада жасаймын деп шештім. Әрине авторизациямен және қол жеткізу құқықтарын тексерумен. Қажетті артықшылықтарыңыз болса, цифрлық қолтаңбамен жұмыс істеу, орнату, жою, ақпаратты қарау және т.б. үшін қосымша мәзір элементі қолжетімді болады. Функционалдық қазір әзірлену үстінде. Белгілі болғандай, бұл өте қиын емес, сізге бар нұсқауларды аздап оқып, код мысалдарын қарау керек, әзірлеуде тәжірибесі бар әріптестерден сұраңыз, содан кейін мұны жасаңыз. Зерттеу барысында қосымшаға қосу үшін идеялар пайда болды. Мен Наполеон жоспарларын жасамаймын - даму бар, әркім өз ісімен айналыссын. Бірақ бұл қызықты болғанымен, мен мұны өзім жасаймын.

жоспарлары

Жоғарыда айтқанымдай, біздің ботты пайдалану үшін көптеген әртүрлі идеялар дүниеге келді, олар тек «автоматтандыру нүктелері» туралы идеяларды айталық, олардың көпшілігі ұмытылды, өйткені мен оларды жазуға уақытым болмады. Қазір ойыма келгеннің бәрін қағазға түсіруге тырысамын, басқаларға да солай істеуге кеңес беремін.

Бірақ Алексей өз тілектерін айтуды ұмытпайды. Соңғысынан:
/kill_sql SQL_ID — осы SQL_ID сұрауымен барлық сеанстарды жою
/kill_block - түбірлік блоктау сеансын жою
/show_em — ЭМ өнімділігінің суретін көрсету
Ол қу жігіт, телефонынан DBA тігіп алғысы келеді =)

Міне, біз Отан игілігі үшін еңбек етеміз!

Күнделікті және қызықсыз тапсырмалардан қалай арылуға болады?

Оқу қызықты болды, тіпті біреуге пайдалы болды деп үміттенемін және оқырманды жалықтырып үлгермедім... Бәрімізге сәттілік.

Ақпарат көзі: www.habr.com

пікір қалдыру