Заштедуваме време, нерви и работни часови

Нашите проекти се обично регионални, а клиенти најчесто се министерства. Но, покрај јавниот сектор, нашите системи ги користат и приватните организации. Со нив практично нема никакви проблеми.

Значи, главните проекти се регионални, а понекогаш има проблеми со нив. На пример, со перформанси, кога во регионите има повеќе од 20 илјади наши драгоцени корисници за време на периодот на пуштање нова функционалност на серверите на производите. Тоа е болка…

Моето име е Руслан и ги поддржувам информациските системи на BARS Group и развивање бот убиец за насилни сериски DBA. Овој пост не е за оние со слабо срце - има многу букви и слики.

Заштедуваме време, нерви и работни часови

/awr

Некои од нашите апликации работат на Oracle DBMS. Има и проекти на PostgreSQL DBMS. Oracle има прекрасна работа - собирање статистика за оптоварувањето на DBMS, што ги истакнува постоечките проблеми, па дури и дава препораки за елиминација - Автоматско складиште за оптоварување (AWR). Во еден момент (имено во моментот на болка), програмерите постојано бараа да се соберат AWR извештаи за анализа на перформансите. Искрено отидовме до серверот DBMS, собравме извештаи, ги однесовме кај нас и ги испративме во производство на анализа. После 5-ти пат стана досадно... после 10-ти стана иритирачки...

Еден од моите колеги еднаш изрази идеја дека сè што се прави повеќе од еднаш треба да се автоматизира. До моментот на иритација, да бидам искрен, не размислував за тоа и се обидов да автоматизирам сè што може да се автоматизира, но честопати тоа не беше барано и беше повеќе од истражувачка, а не од применета природа.

И тогаш си помислив: „Не се потребни администратори за генерирање извештај...“. На крајот на краиштата, собирањето извештај значи извршување на скриптата sql @$ORACLE_HOME/rdbms/admin/awrrpt.sql и преземање на извештајот од серверот до вашето место... О, да, не дозволуваме развој за производство.

Потоа ги пребарував потребните информации на Google, ја создадов функцијата од статијата на тест-базата, ја истрчав скриптата и чудото - извештајот беше составен и може да се зачува локално. Создаде функции каде што често беа потребни извештаи за AWR и им кажа на програмерите како да ги користат.

Отприлика во ова време, во моето слободно време, откако разговарав со @BotFather, создадов бот за Телеграма за себе, само за забава. Таму зезнав едноставна функционалност - прикажувај го тековното време, девизниот курс, времето, го научив да испраќа комплименти на мојата сопруга (тогаш девојка) на распоред. Можеби, во тоа време, испраќањето комплименти беше најпопуларната функционалност на мојот бот, а мојата сопруга го ценеше тоа.

Значи. Програмерите ни пишуваат во Телеграм, ние им испраќаме извештај во Телеграм... Што ако не ни пишат нам, туку на бот? На крајот на краиштата, ќе биде подобро за сите, извештајот ќе се добива побрзо, и што е најважно, заобиколувајќи не. Така се роди идејата за првата популарна функционалност за мојот бот.

Почнав со имплементација. Јас го направив тоа, најдобро што можев, во PHP (самата нашата апликација е во PHP, јас сум повеќе упатен во него отколку во Python). Јас не сум добар кодер, па нема да ви го покажам мојот код :)

Ботот живее на нашата корпоративна мрежа и има пристап до одредени проекти, вклучувајќи ги целните бази на податоци. За да не се замарам со параметрите во тимот или со менито, ја прикачив оваа функционалност на групниот разговор со известувања за следење. На овој начин ботот веднаш знае од која база да го собере извештајот.

Откако доби команда како /awr Н, каде што N е бројот на полни часови за кои е потребен извештај (стандардно - 1 час), дури и за една недела, ако базата на податоци не е рестартирана, ботот веднаш започнува со работа, го собира извештајот, го објавува како веб-страница и веднаш (речиси токму таму) обезбедува врска до многу потребниот извештај.

Следете ја врската и еве го, извештајот AWR:

Заштедуваме време, нерви и работни часови

Како што се очекуваше, програмерите се справија со таквото генерирање извештаи, а некои дури ни се заблагодарија.

Со оглед на практичноста на тимот, проект менаџерите од другите региони го сакаа истото, бидејќи добиваат најмногу од клиентите и се загрижени за перформансите и достапноста на системите. Го додадов ботот во други муабети. Сè уште го користат, и мило ми е поради тоа.

Подоцна, колегите од CIT дознаа како собираме извештаи и сакаа да го направат тоа. Не ги додадов во нашите разговори, создадов посебен разговор со генерирањето извештаи на распоред и на барање.

/pgBadger

Имаме и други апликации во PHP во врска со PostgreSQL. Ја имплементирав збирката на извештаи од pgBadger за оние на кои им требаше користејќи го истиот принцип - во групни разговори. Отпрвин го користеа, но потоа престанаа. Функционалноста беше исклучена како непотребна.

/должност

Нашиот оддел има ноќни смени и, соодветно, има распоред. Тоа е во Google Sheets. Не е секогаш погодно да барате врска, да отворите графикон, да барате сами... Еден од моите поранешни колеги исто така си поигра со својот Телеграм бот и го воведе во разговорот на нашиот оддел известувања за отпочнување на дежурства за вработените во секторот. Ботот го анализира распоредот, го одредува дежурниот до тековниот датум и, според распоредот или на барање, известува кој е на должност денес. Излезе одлично и удобно. Точно, не ми се допадна форматот на пораките. Исто така, за вработените во друг оддел (на пример, СРД „Медицина“), информациите за дежурните во други насоки навистина не се потребни, но треба да знаете кој е на должност во „Медицина“ во случај на проблеми. Решив да ја „позајмам“ функционалноста, но да го сменам она што не ми се допаѓа. Направив формат на порака погоден за себе и за другите, отстранувајќи ги непотребните информации.

/tnls

Откако ја испробав автоматизацијата со помош на бот на Telegram, се појавија многу различни идеи, но сакав да ги направам строго неопходните работи. Решив да водам статистика за барањата. За да пристапиме до проектите на нашите клиенти, имплементиравме таканаречен „сервер за скокање“ или сервер за препраќање. На него се подигаат VPN конекции, потоа портите за апликации, бази на податоци и други помошни препраќања се препраќаат до нашата локална мрежа преку ssh, за лесен пристап до проектите на нашите вработени, без проблеми со VPN конекциите. Сè што треба да направите е да поставите VPN конекција со нашата корпоративна мрежа.

Статистиката на барања покажа дека често, откако еден од тунелите не успее (во случај на проблеми со мрежата, на пример, поради истек на време), луѓето не контактираат за враќање на пристапот до проектот. Во повеќето случаи, доволно е само рестартирање на врската и сè е во ред. Ајде да го направиме тоа сами. Еве ја командата:
Заштедуваме време, нерви и работни часови

„Пропаѓате“ во посакуваната ставка од менито, го избирате вашиот проект, почекате малку и сите се среќни и задоволни...

По добивањето на команда, со мало поместување на бајтите и битовите, ботот се поврзува со серверот за препраќање, знаејќи однапред кое препраќање треба да се рестартира и си ја врши својата работа - ја враќа врската со проектот. Напишав инструкции за да можете сами да ги решите таквите прашања. А луѓето не контактираа само доколку дадената алатка не работи...

/ecp_to_pem

Понатамошните статистики покажаа дека често е неопходно да се конвертира EDS Crypto Pro во формат pem(База64) за различни интеграции, а ги имаме доста од нив. Задача: земете контејнер, копирајте го на компјутер со Windows со инсталирана алатка P12FromGostCSP (патем се плаќа), претворете го во pfx, а потоа претворете го pfx користејќи OpenSSL (со поддршка за шифрирање GOST) во pem. Не е многу погодно, но го сакате само со прстите.

Google повторно дојде на помош. Пронајден корисност на некоја љубезна личност. Го склопив како што е напишано во README - функционираше. Го научив ботот да работи со алатката и добив скоро инстант конверзија.
Заштедуваме време, нерви и работни часови

До моментот на финалната имплементација, беше издадена наредба да се префрли на нов формат за шифрирање - gost-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, со многу искуство во администрација и развој на DBMS, се вработи во нашата компанија. И тој веднаш имаше проблем да се поврзе со серверите DBMS со ssh: не знае каде и како да се поврзе, пристапот не е јасно опишан или не може да препрати нешто што му треба на себе. Па, со задоволство помагаме, му кажавме како да се поврзе и му препративме Enterprise Manager. Но, работите сè уште не функционираа со ssh. Еден од моите колеги го објасни тоа едноставно: чистокрвни DBA :) Решивме дека ако треба да измениме нешто на серверот, ќе го направиме тоа сами.

ЕМ понекогаш паѓа при големо оптоварување, а за да го рестартираш... треба да се поврзеш преку ssh и да се рестартираш преку терминал. „Админите се добри во ова“, одлучи нашиот нов колега. Тешките оптоварувања на DBMS не се невообичаени за нас, а барањата за рестартирање на ЕМ се исто така чести. Потоа истото сценарио: напнатост, иритација и барање решение за проблемот. Така, во истите групни разговори се појавија следните команди: /emstop и /emstart.

Заштедуваме време, нерви и работни часови

/убиј

Ако постои силна конкуренција во базата на податоци, а тоа понекогаш се случува, потребно е брзо да се истовари базата на податоци. Најбрзиот начин е да го убиете проблематичниот процес... За да го направите ова, поврзете се преку ssh, убие -9... Ботот ќе помогне!

Заштедуваме време, нерви и работни часови

Алексеј го ценеше тимот и му даде приврзано име - „Киљалка“ или пиштол.
Еден ден, откако гледав како Алексеј се обидуваше и страдаше, влегувајќи / убие xxx секој пат за секој од процесите, решив да додадам „повеќе цевка“ во нашиот пиштол:

Заштедуваме време, нерви и работни часови

Тоа е подобро! Сè е за тебе, Алексеј, само работи, драги!

Нормално, толку важен тим беше ограничен пристап од user_id - „непромислен“. Гледајќи како Леша вешто ги убива процесите на серверот на базата на податоци, неколку луѓе се обидоа да внесат команда со случаен број на процес, но не можете да го измамите мојот паметен бот, тој веднаш одби.

/alertlog

Па, за секој случај, ја направив командата:
/alertlog <број на линии> — добијте го наведениот број линии за дневник за предупредување
Ботот повлекува дневник за предупредување и го испраќа до нашата услуга, како pastebin, наречена pyste, и испраќа врска до пастата до разговорот за барање.

/проверки

Следно дојде барање за следење на реалните перформанси на нашата апликација. Досега, техничката поддршка на проектот ги собираше овие податоци рачно. Без разлика! Нашите храбри тестери развија тест случаи за ова. Добиениот тест дневник не е многу лесен за читање; на неискусниот корисник ќе му треба долго време да го разбере и не е сигурен дека ќе ги нагласи потребните информации. И не сакаме да го правиме со нашите раце она што не можеме да го направиме со нашите раце... Нова задача за ботот!

Заштедуваме време, нерви и работни часови

Командата /checks прикажува едноставно и недвосмислено мени; овој пат нашите момци научија како да ја користат оваа команда без инструкции!

Кога ќе ја изберете саканата ставка, наместо мени, се појавува известување за почеток на тестот, така што нетрпеливите корисници не го извршуваат нашиот тест 100500 пати:

Заштедуваме време, нерви и работни часови

Во зависност од избраната ставка од менито, специфичен тест се стартува од нашата мрежа, имено од машината каде што живее ботот (jmeter е претходно конфигуриран таму, потребните тестови се наоѓаат...) или директно од центарот за податоци (од подготвена машина до апликацијата), со цел да се исклучат мрежните конекции при доцнењата на тестирањето или да се сведат на минимум.

По завршувањето на тестот и добивањето на дневникот, ботот го анализира и го произведува резултатот во форма „читлива за луѓе“:

Заштедуваме време, нерви и работни часови

Збирка на метрика

Функционалноста пристигна и заинтересираните проект-менаџери добија таква функција за нивните региони. И еден сочувствителен проект менаџер рече: „Сакам да имам временска статистика!“ Некој од ЦИТ и рекол дека би било погодно сето ова да се следи во Забикс. Забикс, па Забикс...

Мислев дека треба да се подготвам за потребата да го реплицирам решението... Идејата ја ставив во докер контејнер. Во контејнерот, jmeter се активира по распоред (еднаш на 10 минути), го става дневникот на одредено место, php го анализира и ги прикажува потребните податоци во форма на веб-страница. Zabbix, користејќи го клучот web.page.get, ја прима оваа страница, редовно ги избира потребните податоци за одредени зависни елементи и гради графикон.

Заштедуваме време, нерви и работни часови

Мислам дека не испадна лошо. Набљудувајќи го графикот, прво ја гледаме приближната брзина на апликацијата, а ако се откријат врвови на графикот, приближно знаеме каде е „приклучокот“. Едноставно е. Досега се покажа дека е баран само за еден регион, но јас сум подготвен да го реплицирам за заинтересираните.

Развој на апликација

Статистиката за слични задачи неодамна доведе до повеќе идеи за поедноставување и олеснување на работата. На некои проекти, на серверите за апликации, има потреба да се инсталираат клучни контејнери Crypto Pro, ги има многу, а дигиталниот потпис истекува со текот на времето. Понекогаш пристигнуваат 2 задачи на ден. Но, сметав дека е небезбедно да користам бот за овие цели и решив дека функционалноста ќе ја креирам директно во апликацијата. Секако со овластување и проверка на правата за пристап. Доколку ги имате потребните привилегии, дополнителна ставка од менито ќе биде достапна за работа со дигитални потписи, инсталација, бришење, прегледување информации итн. Функционалноста моментално се развива. Како што се испостави, ова не е многу тешко, само треба малку да ги прочитате постојните инструкции, да погледнете примери за кодови, да побарате колеги поискусни во развојот и потоа направете го тоа. Во текот на истражувачкиот процес, се појавија идеи кои треба да се додадат во апликацијата. Нема да правам планови на Наполеон - има развој, секој нека си размислува за својата работа. Но, иако е интересно, јас го правам тоа сам.

Планови

Како што реков, се родија многу различни идеи за користење на нашиот бот и не само - воопшто, да речеме, идеи за „точки за автоматизација“, многу од нив беа заборавени, бидејќи немав време да ги запишам. Сега се обидувам да запишам се што ќе ми падне на памет, а истото им го препорачувам и на другите.

Но, Алексеј не заборава да ги даде своите желби. Од најновите:
/kill_sql SQL_ID — убијте ги сите сесии со ова барање SQL_ID
/kill_block - убијте ја сесијата за блокирање на root
/show_em — прикажете слика од перформансите на ЕМ
Тој е итар тип, тој сака да шие DBA од неговиот телефон =)

Вака работиме за доброто на Татковината!

Како да се ослободите од рутински и неинтересни задачи?

Се надевам дека читањето испадна интересно, а можеби дури и корисно за некого, и немав време да му досадувам на читателот... Среќно на сите нас.

Извор: www.habr.com

Додадете коментар