Biz vaqtni, asablarni va ish soatlarini tejaymiz

Bizning loyihalarimiz odatda mintaqaviy, mijozlar esa odatda vazirliklardir. Lekin, davlat sektoridan tashqari, xususiy tashkilotlar ham bizning tizimlarimizdan foydalanadi. Ular bilan deyarli hech qanday muammo yo'q.

Xullas, asosiy loyihalar mintaqaviy bo‘lib, ba’zida ular bilan bog‘liq muammolar mavjud. Misol uchun, mahsulot serverlarida yangi funksiyalarni ishga tushirish davrida mintaqalarda 20 mingdan ortiq qimmatbaho foydalanuvchilarimiz bo'lsa, unumdorlik bilan. Bu og'riq…

Mening ismim Ruslan va men BARS Group va axborot tizimlarini qo'llab-quvvatlayman zo'ravon seriyali DBAlar uchun qotil botni ishlab chiqish. Bu post zaiflar uchun emas - juda ko'p harflar va rasmlar mavjud.

Biz vaqtni, asablarni va ish soatlarini tejaymiz

/awr

Ba'zi ilovalarimiz Oracle DBMS da ishlaydi. PostgreSQL DBMSda ham loyihalar mavjud. Oracle-da ajoyib narsa bor - mavjud muammolarni ta'kidlaydigan va hatto ularni bartaraf etish bo'yicha tavsiyalar beradigan DBMSdagi yuk bo'yicha statistik ma'lumotlarni to'plash - Avtomatik Ish yukining ombori (AWR). Bir nuqtada (aniqrog'i, og'riqli paytda) ishlab chiquvchilar doimiy ravishda yig'ishni so'rashdi Ishlash tahlili uchun AWR hisobotlari. Biz halollik bilan DBMS serveriga bordik, hisobotlarni to'pladik, ularni bizga olib bordik va tahlil qilish uchun ishlab chiqarishga jo'natdik. 5-martadan keyin zerikarli bo'lib qoldi... 10-dan keyin esa asabiylashdi...

Bir marta mening hamkasblarimdan biri bir necha marta bajariladigan barcha ishlarni avtomatlashtirish kerak degan fikrni aytdi. G'azablanish paytigacha, rostini aytsam, men bu haqda o'ylamagan edim va avtomatlashtirilishi mumkin bo'lgan hamma narsani avtomatlashtirishga harakat qildim, lekin ko'pincha u talabga ega emas edi va amaliy tabiatdan ko'ra ko'proq tadqiqot edi.

Va keyin men o'yladim: “Hisobot yaratish uchun administratorlar kerak emas...”. Axir, hisobot yig'ish @$ORACLE_HOME/rdbms/admin/awrrpt.sql sql skriptini bajarish va hisobotni serverdan sizning joyingizga olib borishni anglatadi ... Ha, biz ishlab chiqarish uchun ishlab chiqishga ruxsat bermaymiz.

Keyin men kerakli ma'lumotlarni Google'da qidirdim, test bazasidagi maqoladan funktsiyani yaratdim, skriptni va mo''jizani ishga tushirdim - hisobot tuzilgan va uni mahalliy sifatida saqlash mumkin. AWR hisobotlari tez-tez kerak bo'lgan funksiyalar yaratildi va ishlab chiquvchilarga ulardan qanday foydalanish kerakligini aytdi.

Taxminan shu vaqtlarda, bo'sh vaqtimda, @BotFather bilan suhbatlashganimdan so'ng, men o'zim uchun Telegram botini yaratdim, xolos. Men u erda oddiy funktsiyani o'rnatdim - joriy vaqtni, valyuta kurslarini, ob-havoni ko'rsating, unga jadval bo'yicha xotinimga (keyin qiz do'stimga) maqtovlar yuborishni o'rgatdi. Ehtimol, o'sha paytda iltifotlarni yuborish mening botimning eng mashhur funksiyasi edi va xotinim buni qadrladi.

Shunday qilib. Dasturchilar bizga Telegramda yozishadi, biz ularga Telegramda hisobot jo'natamiz... Bizga emas, botga yozishsa-chi? Axir, hamma uchun yaxshiroq bo'ladi, hisobot tezroq qabul qilinadi va eng muhimi, bizni chetlab o'tadi. Mening botim uchun birinchi mashhur funksionallik g'oyasi shunday tug'ildi.

Men amalga oshirishni boshladim. Men buni iloji boricha PHP da qildim (bizning ilovamizning o'zi PHPda, men Python-dan ko'ra ko'proq bilaman). Men yaxshi koder emasman, shuning uchun sizga kodimni ko'rsatmayman :)

Bot bizning korporativ tarmog'imizda yashaydi va muayyan loyihalarga, jumladan, maqsadli ma'lumotlar bazalariga kirish huquqiga ega. Jamoadagi parametrlar yoki menyu bilan bezovtalanmaslik uchun men ushbu funksiyani monitoring bildirishnomalari bilan guruh suhbatiga biriktirdim. Shunday qilib, bot hisobotni qaysi ma'lumotlar bazasidan yig'ish kerakligini darhol bilib oladi.

kabi buyruq olgan /awr N, bu erda N - hisobot kerak bo'lgan to'liq soatlar soni (sukut bo'yicha - 1 soat), hatto bir hafta davomida, agar ma'lumotlar bazasi qayta ishga tushirilmagan bo'lsa, bot darhol ishlay boshlaydi, hisobotni yig'adi va uni nashr sifatida nashr etadi. veb-sahifa va darhol (deyarli o'sha erda) juda kerakli hisobotga havolani taqdim etadi.

Havolani kuzatib boring va mana AWR hisoboti:

Biz vaqtni, asablarni va ish soatlarini tejaymiz

Kutilganidek, ishlab chiquvchilar bunday hisobotlarni yaratishga muvaffaq bo'lishdi, ba'zilari esa bizga minnatdorchilik bildirishdi.

Jamoaning qulayligini qadrlagan holda, boshqa mintaqalardagi loyiha menejerlari ham xuddi shunday qilishni xohlashdi, chunki ular mijozdan ko'proq narsani olishadi va tizimlarning ishlashi va mavjudligi haqida qayg'uradilar. Men botni boshqa chatlarga qo'shdim. Ular hali ham undan foydalanishadi va men bundan xursandman.

Keyinchalik CITdagi hamkasblarimiz hisobotlarni qanday yig'ishimiz haqida bilib oldilar va buni ham qilishni xohlashdi. Men ularni suhbatlarimizga qo'shmadim, men jadval bo'yicha va so'rov bo'yicha hisobotlarni yaratish bilan alohida chat yaratdim.

/pgBadger

Bizda PostgreSQL bilan birgalikda PHP-da boshqa ilovalar ham mavjud. Men muhtojlar uchun pgBadger hisobotlari to'plamini xuddi shu printsipdan foydalangan holda - guruh suhbatlarida amalga oshirdim. Avvaliga ular undan foydalanishdi, lekin keyin ular to'xtashdi. Funktsionallik keraksiz deb bekor qilindi.

/burch

Bizning bo'limda tungi smenalar mavjud va shunga mos ravishda jadval mavjud. U Google Sheets-da. Havolani izlash, diagramma ochish, o‘zingizni izlash har doim ham qulay emas... Mening sobiq hamkasblarimdan biri ham o‘zining Telegram boti bilan o‘ynab, bo‘limimiz chatiga kiritgan. bo'lim xodimlari uchun navbatchilikning boshlanishi to'g'risida xabarnomalar. Bot jadvalni tahlil qiladi, joriy sana bo'yicha navbatchini aniqlaydi va jadval bo'yicha yoki so'rov bo'yicha bugungi kunda kim navbatchilik qilayotgani haqida xabar beradi. Bu ajoyib va ​​qulay bo'lib chiqdi. To'g'ri, menga xabarlar formati unchalik yoqmadi. Shuningdek, boshqa bo'lim xodimlari uchun (masalan, "Tibbiyot" BC) boshqa yo'nalishlarda navbatchi bo'lganlar to'g'risidagi ma'lumotlar haqiqatan ham kerak emas, ammo muammolar yuzaga kelganda "Tibbiyot" da kim navbatchi ekanligini bilishingiz kerak. Funktsionallikni "qarzga" olishga qaror qildim, lekin menga yoqmagan narsani o'zgartirdim. Men keraksiz ma'lumotlarni olib tashlagan holda o'zim va boshqalar uchun qulay xabar formatini yaratdim.

/tnls

Telegram boti yordamida avtomatlashtirishni sinab ko'rganimdan so'ng, juda ko'p turli xil g'oyalar paydo bo'ldi, lekin men juda zarur narsalarni qilishni xohladim. Men rahbarlik qilishga qaror qildim so'rovlar bo'yicha statistika. Mijozlarimizning loyihalariga kirish uchun biz "o'tish serveri" yoki yo'naltiruvchi serverni amalga oshirdik. Unda VPN ulanishlari o'rnatiladi, so'ngra dastur portlari, ma'lumotlar bazalari va boshqa yordamchi yo'naltirishlar bizning mahalliy tarmog'imizga ssh orqali yo'naltiriladi, bu bizning xodimlarimizning loyihalariga VPN ulanishlari bilan muammosiz kirish uchun. Buning uchun korporativ tarmog‘imizga VPN ulanishini o‘rnatish kifoya.

So'rovlar statistikasi shuni ko'rsatdiki, ko'pincha tunnellardan biri ishlamay qolgandan so'ng (tarmoq muammolari bo'lsa, masalan, vaqt tugashi sababli), odamlar loyihaga kirishni tiklash haqida bizga murojaat qilishadi. Ko'pgina hollarda, ulanishni qayta ishga tushirish kifoya va hamma narsa yaxshi. Keling, buni o'zingiz qilaylik. Mana buyruq:
Biz vaqtni, asablarni va ish soatlarini tejaymiz

Siz kerakli menyu bandiga "tushasiz", loyihangizni tanlang, bir daqiqa kuting va hamma baxtli va mamnun ...

Buyruqni olgandan so'ng, bayt va bitlarning biroz harakatlanishi bilan bot, qaysi yo'naltirishni qayta boshlash kerakligini oldindan bilib, yo'naltiruvchi serverga ulanadi va o'z ishini bajaradi - loyihaga ulanishni tiklaydi. Bunday muammolarni o'zingiz hal qilishingiz uchun ko'rsatmalar yozdim. Va odamlar bizga faqat taqdim etilgan vosita ishlamagan taqdirdagina murojaat qilishdi...

/ecp_to_pem

Keyingi statistik ma'lumotlar shuni ko'rsatdiki, ko'pincha konvertatsiya qilish kerak EDS Crypto Pro pem formatida(Baza64) turli integratsiyalar uchun, va bizda ularning ko'pi bor. Vazifa: konteyner oling, uni P12FromGostCSP yordam dasturi o'rnatilgan Windows kompyuteriga nusxa ko'chiring (aytmoqchi, pullik), uni pfx-ga o'zgartiring va OpenSSL (GOST shifrlashni qo'llab-quvvatlaydigan) yordamida pfx-ni pem-ga o'zgartiring. Bu juda qulay emas, lekin siz buni barmoqlaringiz bilan urishni xohlaysiz.

Google yana yordamga keldi. Topildi qandaydir mehribon odamning foydasi. Men uni README-da yozilganidek yig'dim - u ishladi. Men botni yordamchi dastur bilan ishlashni o'rgatganman va deyarli bir zumda konvertatsiya qildim.
Biz vaqtni, asablarni va ish soatlarini tejaymiz

Yakuniy amalga oshirish vaqtida yangi shifrlash formatiga - gost-2012 ga o'tish to'g'risida buyruq chiqarildi. Esimda, o'sha paytda yordamchi dastur faqat eski GOST (2001) bilan ishlagan, ehtimol bu boshqa mehribon odamning shunga o'xshash yordamchi dasturi edi, aniq esimda yo'q.
Yangi GOSTga o'tgandan so'ng, xavfsizlik nuqtai nazaridan botning funksionalligi o'chirildi. Uni docker konteynerida amalga oshirdi.

Dockerfile, agar kimdir kerak bo'lsa:

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

Konvertatsiya qilish uchun asl konteynerni (xxx.000 kabi katalog) /srv/in katalogiga joylashtirishingiz va tayyor pemni /srv/out ga olib borishingiz kerak.

Konvertatsiya qilish uchun:

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

Bir kuni, DBMSni boshqarish va ishlab chiqishda katta tajribaga ega bo'lgan juda zo'r Oracle DBA kompaniyamizga ishga joylashdi. Va u darhol ssh bilan DBMS serverlariga ulanishda muammoga duch keldi: u qayerga va qanday ulanishni bilmaydi, kirish aniq tasvirlanmagan yoki u o'zi uchun kerakli narsani uzata olmaydi. Xo'sh, biz yordam berishdan xursandmiz, biz unga qanday ulanishni aytdik va unga Enterprise Manager yubordik. Lekin ssh bilan hammasi yaxshi bo'lmadi. Mening hamkasblarimdan biri buni oddiygina tushuntirdi: naslli DBA :) Agar serverda biror narsani o'zgartirish kerak bo'lsa, buni o'zimiz qilamiz, deb qaror qildik.

EM ba'zan og'ir yuk ostida ishdan chiqadi va uni qayta ishga tushirish uchun ... siz ssh orqali ulanishingiz va terminal orqali qayta ishga tushirishingiz kerak. “Adminlar bu borada yaxshi”, deb qaror qildi yangi hamkasbimiz. DBMSdagi og'ir yuklar biz uchun odatiy hol emas va EMni qayta ishga tushirish so'rovlari ham keng tarqalgan. Keyin xuddi shu stsenariy: keskinlik, tirnash xususiyati va muammoni hal qilish yo'lini izlash. Shunday qilib, bir xil guruh suhbatlarida quyidagi buyruqlar paydo bo'ldi: /emstop va /emstart.

Biz vaqtni, asablarni va ish soatlarini tejaymiz

/ o'ldirish

Agar ma'lumotlar bazasida kuchli raqobat mavjud bo'lsa va bu ba'zida sodir bo'lsa, ma'lumotlar bazasini tezda tushirish kerak. Eng tez yo'li muammoli jarayonni o'ldirishdir... Buning uchun ssh orqali ulaning, kill -9... Bot yordam beradi!

Biz vaqtni, asablarni va ish soatlarini tejaymiz

Aleksey jamoani qadrladi va unga mehrli nom berdi - "Kilyalka" yoki qurol.
Bir kuni, Alekseyning qanday harakat qilganini va qanday azob chekayotganini ko'rib, har bir jarayon uchun har safar xxx-ni kiriting / o'ldiring, men qurolimizga "ko'p barrel" qo'shishga qaror qildim:

Biz vaqtni, asablarni va ish soatlarini tejaymiz

Shunday yaxshiroq! Hammasi sen uchun, Aleksey, faqat ishla, azizim!

Tabiiyki, bunday muhim jamoa cheklangan edi user_id orqali kirish - "nomaqbul". Leshaning ma'lumotlar bazasi serveridagi jarayonlarni qanday qilib mohirlik bilan o'ldirishini ko'rib, bir nechta odamlar tasodifiy jarayon raqami bilan buyruq kiritishga harakat qilishdi, lekin siz mening aqlli botimni alday olmaysiz, u darhol rad etdi.

/alertlog

Xo'sh, har holda, men buyruq berdim:
/alertlog — belgilangan sonli ogohlantirish qatorlarini oling
Bot ogohlantirish jurnalini olib, uni pyste deb ataladigan pastebin kabi bizning xizmatimizga yuboradi va so'rov suhbatiga pastaga havolani yuboradi.

/tekshiradi

Keyingi so'rov keldi ilovamizning haqiqiy ishlashini kuzatish. Hozirgacha loyihaning texnik yordami ushbu ma'lumotlarni qo'lda to'plagan. Ahamiyatsiz; .. bo'lsa ham! Bizning jasur sinovchilarimiz buning uchun test holatlarini ishlab chiqdilar. Olingan test jurnalini o'qish juda qulay emas, tajribasiz foydalanuvchi tushunish uchun ko'p vaqt talab etadi va u kerakli ma'lumotlarni ajratib ko'rsatishiga ishonchi komil emas. Va biz qo'llarimiz bilan qila olmaydigan narsalarni qo'llarimiz bilan qilishni yoqtirmaymiz ... Bot uchun yangi vazifa!

Biz vaqtni, asablarni va ish soatlarini tejaymiz

/checks buyrug'i oddiy va bir ma'noli menyuni ko'rsatadi; bu safar bizning yigitlar bu buyruqni ko'rsatmalarsiz qanday ishlatishni o'rganishdi!

Kerakli elementni tanlaganingizda, menyu o'rniga test boshlanishi haqida bildirishnoma paydo bo'ladi, shunda sabrsiz foydalanuvchilar bizning testimizni 100500 XNUMX marta o'tkazmaydilar:

Biz vaqtni, asablarni va ish soatlarini tejaymiz

Tanlangan menyu bandiga qarab, bizning tarmog'imizdan, ya'ni bot yashaydigan mashinadan (jmeter oldindan sozlangan, kerakli testlar joylashgan...) yoki to'g'ridan-to'g'ri ma'lumotlar markazidan (agar dastur yonida tayyorlangan mashina), kechikishlarni sinovdan o'tkazishda tarmoq ulanishlarini istisno qilish yoki ularni minimal darajaga tushirish uchun.

Sinovni tugatgandan va jurnalni olgandan so'ng, bot uni tahlil qiladi va natijani "odam o'qiy oladigan" shaklda chiqaradi:

Biz vaqtni, asablarni va ish soatlarini tejaymiz

Ko'rsatkichlar to'plami

Funktsionallik keldi va manfaatdor loyiha menejerlari o'z hududlari uchun bunday funktsiyani oldilar. Va bir mehribon loyiha menejeri dedi: "Men vaqt statistikasiga ega bo'lishni xohlayman!" CIT dan kimdir unga bularning barchasini Zabbixda kuzatish qulay bo'lishini aytdi. Zabbix, shuning uchun Zabbix...

Men yechimni takrorlash zarurligiga tayyorgarlik ko'rishim kerak deb o'yladim... Men bu fikrni doker konteyneriga joylashtirdim. Konteynerda jmeter jadval bo'yicha ishga tushiriladi (har 10 daqiqada bir marta), jurnalni ma'lum bir joyga qo'yadi, php uni tahlil qiladi va veb-sahifa shaklida kerakli ma'lumotlarni ko'rsatadi. Zabbix, web.page.get kalitidan foydalanib, ushbu sahifani oladi, muntazam ravishda ma'lum bog'liq elementlar uchun kerakli ma'lumotlarni tanlaydi va grafik tuzadi.

Biz vaqtni, asablarni va ish soatlarini tejaymiz

Menimcha, yomon bo'lmadi. Grafikni kuzatib, biz, birinchi navbatda, dasturning taxminiy tezligini ko'ramiz va agar grafikda cho'qqilar aniqlansa, biz "vilka" qaerdaligini taxminan bilamiz. Hammasi oddiy. Hozircha u faqat bitta mintaqa uchun talabga ega bo'lib chiqdi, ammo men uni qiziqtirganlar uchun takrorlashga tayyorman.

Ilovani ishlab chiqish

Shu kabi vazifalar bo'yicha statistik ma'lumotlar yaqinda ishni soddalashtirish va engillashtirish uchun ko'proq g'oyalarni keltirib chiqardi. Ba'zi loyihalarda, dastur serverlarida asosiy Crypto Pro konteynerlarini o'rnatishga ehtiyoj bor, ularning ko'pi bor va vaqt o'tishi bilan raqamli imzo muddati tugaydi. Ba'zan kuniga 2 ta vazifa keladi. Lekin men bu maqsadlar uchun botdan foydalanishni xavfli deb hisobladim va bu funksiyani bevosita ilovada yaratishga qaror qildim. Tabiiyki, avtorizatsiya va kirish huquqlarini tekshirish bilan. Agar sizda kerakli imtiyozlar mavjud bo'lsa, raqamli imzolar bilan ishlash, o'rnatish, o'chirish, ma'lumotlarni ko'rish va hokazolar uchun qo'shimcha menyu bandi mavjud bo'ladi. Funksionallik hozirda ishlab chiqilmoqda. Ma'lum bo'lishicha, bu unchalik qiyin emas, siz shunchaki mavjud ko'rsatmalarni biroz o'qib chiqishingiz, kod misollarini ko'rib chiqishingiz, ishlab chiqishda tajribali hamkasblardan so'rashingiz va keyin buni qilishingiz kerak. Tadqiqot jarayonida ilovaga qo'shish uchun g'oyalar paydo bo'ldi. Men Napoleon rejalarini tuzmayman - rivojlanish bor, har kim o'z ishini o'ylasin. Lekin bu qiziq bo'lsa-da, men buni o'zim qilaman.

rejalari

Aytganimdek, bizning botimizdan foydalanish uchun juda ko'p turli xil g'oyalar tug'ildi va nafaqat - umuman, aytaylik, "avtomatlashtirish punktlari" g'oyalari, ularning ko'plari unutildi, chunki men ularni yozishga vaqtim yo'q edi. Endi men xayolimga kelgan hamma narsani yozishga harakat qilaman va boshqalarga ham shunday qilishni tavsiya qilaman.

Ammo Aleksey o'z xohish-istaklarini berishni unutmaydi. Eng oxirgisidan:
/kill_sql SQL_ID - ushbu SQL_ID so'rovi bilan barcha seanslarni o'chirish
/kill_block - ildiz blokirovkasi seansini o'ldirish
/show_em — EM ishlashining rasmini ko'rsatish
U ayyor yigit, telefonidan DBA tikmoqchi =)

Biz Vatan manfaati uchun shunday mehnat qilamiz!

Oddiy va qiziq bo'lmagan vazifalardan qanday qutulasiz?

Umid qilamanki, o'qish qiziqarli bo'ldi va hatto kimgadir foydali bo'ldi va men o'quvchini zeriktirishga vaqtim yo'q edi ... Hammamizga omad.

Manba: www.habr.com

a Izoh qo'shish