Убакытты, нервдерди жана адам-сааттарды үнөмдөйбүз

Биздин долбоорлор көбүнчө аймактык, ал эми кардарлар көбүнчө министрликтер. Бирок, мамлекеттик сектордон тышкары, жеке уюмдар дагы биздин системаларды колдонушат. Алар менен иш жүзүндө эч кандай көйгөйлөр жок.

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

Менин атым Руслан, мен BARS Group жана маалыматтык системаларын колдойм зордук-зомбулук сериялык DBA үчүн өлтүргүч бот иштеп чыгуу. Бул билдирүү жүрөгү алсырагандар үчүн эмес - көп каттар жана сүрөттөр бар.

Убакытты, нервдерди жана адам-сааттарды үнөмдөйбүз

/awr

Кээ бир колдонмолорубуз Oracle DBMSде иштейт. PostgreSQL DBMS боюнча долбоорлор да бар. Oracle бир сонун нерсеге ээ - DBMSдеги жүктөм боюнча статистиканы чогултуу, ал учурдагы көйгөйлөрдү баса белгилейт жана ал тургай жоюу боюнча сунуштарды берет - Automatic Workload Repository (AWR). Бир убакта (атап айтканда, ооруп жаткан учурда) иштеп чыгуучулар дайыма чогултууну суранышты Ишти талдоо үчүн AWR отчеттору. Биз чынчылдык менен DBMS серверине барып, отчетторду чогултуп, аларды бизге алып барып, талдоо үчүн өндүрүшкө жөнөттүк. 5-жолу болгондон кийин тажатма болуп калды... 10дон кийин кыжырды келтирет...

Бир жолу менин кесиптештеримдин бири бир нече жолу жасалган иштердин бардыгы автоматташтырылышы керек деген ойду айткан. Ачууланган учурга чейин, чынын айтсам, мен бул жөнүндө ойлонгон эмесмин жана автоматташтырылышы мүмкүн болгон нерселердин баарын автоматташтырууга аракет кылчумун, бирок көп учурда ал суроо-талапка ээ болгон эмес жана прикладдык мүнөздөгү эмес, изилдөөчү.

Анан мен ойлодум: "Админдер отчет түзүү үчүн керек эмес...". Кантсе да, отчет чогултуу SQL скриптин @$ORACLE_HOME/rdbms/admin/awrrpt.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 туташуулары көтөрүлөт, андан кийин тиркеме порттору, маалымат базалары жана башка көмөкчү багыттоолор биздин локалдык тармагыбызга ssh аркылуу жөнөтүлөт, бул биздин кызматкерлердин долбоорлоруна оңой жетүү үчүн, VPN туташууларында көйгөйсүз. Сизге болгону биздин корпоративдик тармагыбызга VPN туташуусун орнотуу жетиштүү.

Сурамдардын статистикасы көрсөткөндөй, көп учурда туннелдердин бири иштебей калгандан кийин (тармак көйгөйлөрү болгон учурда, тайм-ауттан улам), адамдар долбоорго кирүү мүмкүнчүлүгүн калыбына келтирүү боюнча бизге кайрылышат. Көпчүлүк учурларда, жөн гана байланышты кайра баштоо жетиштүү жана баары жакшы болот. Келгиле, өзүңөр кылалы. Бул жерде буйрук болуп саналат:
Убакытты, нервдерди жана адам-сааттарды үнөмдөйбүз

Сиз каалаган меню пунктуна "жыгыласыз", долбооруңузду тандап, бир мүнөт күтө туруңуз жана баары бактылуу жана ыраазы болот...

Буйрук алгандан кийин, байттардын жана биттердин бир аз кыймылы менен бот жөнөтүүчү серверге туташып, кайсы багыттоо кайра башталышы керектигин алдын ала билип, өз ишин аткарат - долбоор менен байланышты калыбына келтирет. Ушундай маселелерди өзүң чече аласың деп көрсөтмө жаздым. Ал эми берилген курал иштебей калганда гана адамдар бизге кайрылышты...

/ecp_to_pem

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

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

Бир күнү, DBMS башкаруу жана өнүктүрүү боюнча көп тажрыйбасы бар абдан сонун Oracle DBA биздин компанияга жумушка орношту. Жана ал дароо ssh менен DBMS серверлерине туташуу кыйынчылыкка дуушар болду: ал кайда жана кантип туташаарын билбейт, кирүү мүмкүнчүлүгү так сүрөттөлбөйт же өзүнө керектүү нерсени жөнөтө албайт. Макул, биз жардам берүүгө кубанычтабыз, ага кантип туташуу керектигин айтып, Enterprise Manager жөнөттүк. Бирок баары ssh менен болгон жок. Менин кесиптештеримдин бири муну жөн эле түшүндүрүп берди: таза кандуу DBA :)

EM кээде оор жүктүн астында кыйрап калат жана аны кайра иштетүү үчүн... ssh аркылуу туташып, терминал аркылуу кайра иштетүү керек. "Админдер бул ишти жакшы билишет" деп чечти биздин жаңы кесиптеш. МБДга оор жүктөөлөр биз үчүн сейрек эмес жана ЭМди кайра иштетүү өтүнүчтөрү да кеңири таралган. Анан ошол эле сценарий: чыңалуу, кыжырдануу жана маселени чечүү жолун издөө. Ошентип, ошол эле топтук чаттарда төмөнкү буйруктар пайда болду: /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 тигип келет =)

Биз Родинанын жыргалчылыгы учун мына ушундай иштеп жатабыз!

Күнүмдүк жана кызыксыз иштерден кантип арыласыз?

Окуу кызыктуу болду, балким кимдир бирөө үчүн пайдалуу болду деп үмүттөнөм, окурманды тажатканга убактым болгон жок... Баарыбызга ийгилик.

Source: www.habr.com

Комментарий кошуу