Layihələrimiz adətən regional xarakter daşıyır, müştərilər isə adətən nazirliklərdir. Lakin dövlət sektoru ilə yanaşı, bizim sistemlərimiz də özəl təşkilatlar tərəfindən istifadə olunur. Onlarla praktiki olaraq heç bir problem yoxdur.
Deməli, bizim əsas layihələrimiz regional xarakter daşıyır və onların bəzən problemləri olur. Məsələn, məhsuldarlıqla, istehsal serverlərinə yeni funksionallığın yayılması zamanı bölgələrdə 20 dəyərli istifadəçimiz olduqda. Bu ağrıdır…
Adım Ruslandır və mən BARS Group və informasiya sistemlərinin dəstəklənməsi üzrə işləyirəm qəddar serial DBA-lar üçün killer bot hazırlamaqBu yazı ürəyi zəifləyənlər üçün deyil - çoxlu məktublar və şəkillər var.

/awr
Bəzi proqramlarımız Oracle DBMS-də işləyir. PostgreSQL DBMS-də də layihələrimiz var. Oracle-ın Avtomatik İş Yükü Anbarı (AWR) adlı gözəl xüsusiyyəti var – mövcud problemləri işıqlandıran və hətta onların həlli üçün tövsiyələr verən DBMS iş yükü statistikasını toplamaq üçün alət. Bir anda (yəni, böyük ağrılı bir zamanda) tərtibatçılar daim bu xüsusiyyəti tələb edirdilər. Performans təhlili üçün AWR hesabatlarıBiz səliqəli şəkildə DBMS serverinə getdik, hesabatlar topladıq, onları götürdük və təhlil üçün istehsala göndərdik. Beşinci dəfədən sonra bezdirici oldu... onuncu dəfədən sonra əsəbiləşdi...
Bir gün həmkarlarımdan biri təklif etdi ki, bir dəfədən çox görülən hər şey avtomatlaşdırılmalıdır. Mən əsəbiləşənə qədər, düzünü desəm, bu barədə həqiqətən düşünməmişdim və avtomatlaşdırıla bilən hər şeyi avtomatlaşdırmağa çalışdım, lakin çox vaxt buna tələbat yox idi və praktiki olaraq daha çox kəşfiyyat idi.
Və sonra düşündüm: “Hesabat yaratmaq üçün adminlərə ehtiyac yoxdur...”. Axı, hesabat toplamaq @$ORACLE_HOME/rdbms/admin/awrrpt.sql SQL skriptini yerinə yetirmək və hesabatı serverdən götürmək deməkdir... Bəli, biz istehsala inkişafa icazə vermirik.
Beləliklə, mən lazımi məlumatları Google-da axtardım, test verilənlər bazasında məqalədən funksiya yaratdım, skripti işə saldım və bax, hesabat hazır idi və yerli olaraq yadda saxlanıla bilərdi. AWR hesabatlarına tez-tez ehtiyac duyulan funksiyalar yaratdım və tərtibatçılara onlardan necə istifadə etməyi izah etdim.
Təxminən bu vaxtlarda @BotFather ilə söhbət etdikdən sonra əylənmək üçün Telegram botu yaratdım. Mən bəzi sadə funksionallıq əlavə etdim - cari vaxtı, valyuta məzənnələrini və havanı göstərmək - və ona cədvəl üzrə həyat yoldaşıma (o vaxt hələ də sevgilim) təriflər göndərməyi öyrətdim. Komplimentlər göndərmək, yəqin ki, o zaman botumun ən populyar xüsusiyyəti idi və həyat yoldaşım bunu yüksək qiymətləndirdi.
Beləliklə. Tərtibatçılar bizə Telegramda yazır, biz onlara Telegramda hesabat göndəririk... Bəs bizim əvəzimizə bota yazsalar necə? Bu, hamı üçün daha yaxşı olacaq, hesabat daha tez alınacaq və ən əsası, o, bizi cəlb etməyəcək. Botum üçün çox tələb olunan ilk funksiyanın ideyası belə yarandı.
Mən onu həyata keçirməyə başladım. Mən PHP-də əlimdən gələnin ən yaxşısını etdim (bizim tətbiqimiz əslində PHP-dədir, məsələn, Python-dan daha yaxşı bilirəm). Mən çox kodlayıcı deyiləm, ona görə kodumu sizə göstərməyəcəm :)
Bot bizim korporativ şəbəkəmizdə yerləşir və xüsusi layihələrə, o cümlədən hədəf verilənlər bazalarına çıxışı var. Komanda parametrləri və ya menyuları ilə qarışmamaq üçün bu funksiyanı monitorinq bildirişləri ilə qrup söhbətinə inteqrasiya etdim. Beləliklə, bot hesabat üçün hansı verilənlər bazasından istifadə edəcəyini dərhal bilir.
tipli bir əmr aldıqdan sonra /awr N, burada N hesabatın lazım olduğu tam saatların sayıdır (standart olaraq 1 saat), hətta bir həftə ərzində, verilənlər bazası yenidən işə salınmayıbsa, bot dərhal işə başlayır, hesabatı toplayır, veb səhifə kimi dərc edir və dərhal (demək olar ki, dərhal) çox ehtiyac duyulan hesabata keçid verir.
Linki izləyin və budur, AWR hesabatı:

Gözlənildiyi kimi, tərtibatçılar bu hesabat generasiyasını yaxşı idarə etdilər və kimsə hətta minnətdarlığını bildirdi.
Komandanın rahatlığını yüksək qiymətləndirərək, digər bölgələrdən olan layihə menecerləri də eyni şeyi istəyirdilər, çünki onlar tez-tez sistemin performansı və əlçatanlığı ilə bağlı narahat olduqları üçün müştərinin tənqidinə məruz qalırlar. Botu digər çatlara da əlavə etdim. Onlar hələ də ondan istifadə edirlər və mən bundan məmnunam.
Daha sonra CIT-dəki həmkarlarım hesabatları necə topladığımızı öyrəndilər və qoşulmaq istədilər. Mən onları söhbətlərimizə əlavə etmədim, əksinə planlı və tələb olunan hesabat yaratmaq üçün ayrıca söhbət yaratdım.
/pgBadger
PostgreSQL ilə birlikdə PHP-də başqa proqramlarımız da var. Qrup söhbətlərində eyni prinsipdən istifadə edərək ehtiyacı olanlar üçün pgBadger hesabat kolleksiyası tətbiq edildi. Əvvəlcə istifadə etdik, sonra dayandırdıq. Funksionallıq lazımsız olaraq kəsildi.
/vəzifə
Şöbəmizdə gecə növbəsi və müvafiq olaraq qrafik var. O, Google Cədvəldə saxlanılır. Linki axtarmaq, cədvəli açmaq və özünüzü axtarmaq həmişə əlverişli deyil... Keçmiş həmkarlarımdan biri də öz Telegram botu ilə oynayırdı və onu bizim departament çatında tətbiq edirdi. şöbə işçiləri üçün növbənin başlaması barədə bildirişlər. Bot cədvəli təhlil edir, cari tarixə əsasən növbətçi şəxsi müəyyənləşdirir və cədvəl əsasında və ya sorğu əsasında bu gün kimin növbətçi olduğunu xəbərdar edir. Əla və rahatdır. Ancaq mesaj formatından çox da razı deyildim. Həmçinin, başqa bir şöbənin (məsələn, Tibb Biznes Mərkəzi) əməkdaşlarının digər ərazilərdə növbətçi şəxslər haqqında məlumatlara ehtiyacı yoxdur, lakin problem yarandıqda Tibbdə kimin növbətçi olduğunu bilməlidirlər. Mən funksionallığı "borc almağa" qərar verdim, lakin bəyənmədiyim şeyi dəyişdirdim. Mən özüm və başqaları üçün rahat olan, lazımsız məlumatları silən mesaj formatı yaratdım.
/tnls
Telegram botu vasitəsilə avtomatlaşdırmanı sınadıqdan sonra məndə çoxlu müxtəlif ideyalar yarandı, lakin mən ciddi şəkildə zəruri işlər görmək istədim. saxlamağa qərar verdim müraciətlər üzrə statistika. Müştərilərimizin layihələrinə daxil olmaq üçün biz qondarma "hopper server" və ya yönləndirici server tətbiq etdik. Onun üzərində VPN əlaqələri qurulur, daha sonra tətbiq portları, verilənlər bazası və digər köməkçi ekspeditor xidmətləri SSH vasitəsilə yerli şəbəkəmizə yönləndirilir ki, bu da VPN bağlantıları problemi olmadan əməkdaşlarımızın layihələrinə rahat çıxışı təmin edir. Sadəcə olaraq korporativ şəbəkəmizə VPN bağlantısı qurun.
Sorğu statistikası göstərdi ki, tez-tez tunel çökdükdən sonra (şəbəkə problemləri, məsələn, fasilə kimi) insanlar layihəyə girişi bərpa etmək barədə soruşurlar. Əksər hallarda, sadəcə əlaqəni yenidən başlatmaq kifayətdir və hər şey qaydasındadır. Beləliklə, gəlin bunu özünüz edək. Budur əmr:

İstədiyiniz menyu elementinə "düşürsən", layihənizi seçin, bir dəqiqə gözləyin və hamı xoşbəxt və razı...
Komanda qəbul etdikdən sonra barmaq hərəkəti ilə bot göndərmə serverinə qoşulur, hansı yönləndirmənin yenidən işə salınmalı olduğunu əvvəlcədən bilir və öz işini görür - layihə ilə əlaqəni bərpa edir. İstifadəçilər bu cür problemləri müstəqil həll edə bilsinlər deyə təlimatlar yazdım. İnsanlar yalnız təqdim olunan alət işləmədiyi halda bizimlə əlaqə saxladılar...
/ecp_to_pem
Əlavə statistika göstərdi ki, tez-tez çevirmək lazımdır Crypto Pro-nun PEM formatında rəqəmsal imzası() для различных интеграций, а их у нас достаточно много. Задача: берешь контейнер, копируешь его на компьютер с Windows с установленой утилитой P12FromGostCSP(к слову, платной), конвертируешь его в pfx, а уже pfx конвертируешь с помощью OpenSSL(c поддержкой ГОСТового шифрования) в pem. Не очень удобно, а хочется по щелчку пальцев.
Google yenidən köməyə gəldi. Tapdım. Mən onu README-də təsvir olunduğu kimi tərtib etdim və işlədi. Mən botu yardım proqramından istifadə etməyi öyrətdim və demək olar ki, ani çevrilmə əldə etdim.

Yekun icra başa çatdıqda, yeni şifrələmə formatına - GOST-2012-ə keçid əmri verildi. Xatırladığım qədəri ilə o vaxtlar kommunal yalnız köhnə GOST (2001) ilə işləyirdi. Ola bilsin ki, bu, başqa mehriban bir insandan tamamilə fərqli, bənzər bir yardım idi; Dəqiq xatırlamıram.
Yeni GOST standartına keçdikdən sonra təhlükəsizlik baxımından botun funksionallığını sildim. Mən bunu Docker konteynerində tətbiq etdim.
Dockerfile, kiməsə lazım olarsa:
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.shDönüştürmək üçün mənbə konteynerini (xxx.000 kimi kataloq) /srv/in qovluğuna yerləşdirməli və /srv/out-dan hazır pemi götürməlisiniz.
Çevirmək üçün bu addımları yerinə yetirin:
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 və /emstart
Bir gün, DBMS-nin idarə edilməsi və inkişafı sahəsində böyük təcrübəyə malik, həqiqətən də gözəl Oracle DBA şirkəti şirkətimizə qoşuldu. Dərhal o, SSH vasitəsilə DBMS serverlərinə qoşulmaqda çətinlik çəkdi: harada və necə qoşulacağını anlaya bilmədi, giriş təfərrüatları aydın deyildi və ya ehtiyac duyduğu bir şeyi ötürə bilmədi. Biz kömək etməkdən məmnun olduq, necə qoşulacağımızı izah etdik və onun üçün Müəssisə Meneceri qurduq. Lakin SSH hələ də nəticə vermədi. Həmkarlarımızdan biri bunu sadə izah etdi: o, saf DBA-dır. 🙂 Biz qərara gəldik ki, serverdə nəyisə düzəltmək lazımdırsa, bunu özümüz edəcəyik.
EM bəzən ağır yük altında çökür və onu yenidən işə salmaq üçün... siz SSH vasitəsilə qoşulmalı və onu terminal vasitəsilə yenidən başlatmalısınız. “Adminlər bunu yaxşı bacarırlar” deyə yeni həmkarımız qərar verdi. Ağır DBMS yükləri burada qeyri-adi deyil və EM-nin yenidən işə salınması tələbləri adi hala çevrilib. Sonra eyni ssenari baş verir: stress, qıcıqlanma və həll yolu axtarmaq. Beləliklə, eyni qrup söhbətlərində aşağıdakı əmrlər göründü: /emstop və /emstart.

/öldürmək
Əgər verilənlər bazasında bəzən baş verən ağır mübahisə varsa, verilənlər bazasını tez bir zamanda boşaltmaq lazımdır. Ən sürətli yol təhqiredici prosesi öldürməkdir... Bunun üçün SSH vasitəsilə qoşulun, -9-u öldürün... Bot kömək edəcək!

Aleksey komandanı yüksək qiymətləndirdi və ona mehriban bir ad verdi - "Kilalka" ya da silah.
Bir gün Alekseyin mübarizə və əziyyət çəkməsinə baxandan sonra hər bir proses üçün hər dəfə xxx yazaraq / öldürüb silahımıza “çox lüləli” əlavə etmək qərarına gəldim:

Bu daha yaxşıdır! Hər şey sənin üçündür, Aleksey, işləməyə davam et, əzizim!
Təbii ki, belə vacib komanda məhdud idi user_id ilə giriş - "qüsursuz". Leshanın verilənlər bazası serverində prosesləri necə məharətlə öldürdüyünü görən bir neçə nəfər təsadüfi proses nömrəsi ilə əmr daxil etməyə çalışdı, lakin mənim smart botum aldana bilməz; dərhal imtina etdi.
/alertlog
Yaxşı, hər halda, əmr etdim:
/alertlog <sətirlərin sayı> — müəyyən edilmiş sayda xəbərdarlıq sətirini əldə edin
Bot xəbərdarlıq jurnalını çəkir və onu xidmətimizə, pyste adlı pastebin kimi xidmətə göndərir və sorğu söhbətində pastaya keçid göndərir.
/yoxlayır
Sonra müraciət gəldi Tətbiqimizin real performansının monitorinqi. İndiyədək layihənin texniki dəstək komandası bu məlumatları əl ilə toplayır. Bu düzgün deyil! Cəsarətli sınaqçılarımız bu məqsədlə test nümunələri hazırlamışlar. Nəticədə test qeydləri çox istifadəçi dostu deyil; təcrübəsiz istifadəçi onu anlamaq üçün uzun müddət sərf edəcək və lazım olan məlumatı çıxara bilməyəcək. Biz isə əl müdaxiləsi olmadan edilə bilən işləri əllə etməyi sevmirik... Bot üçün yeni çağırış!

/checks əmri sadə və sadə menyu yaradır; bu dəfə bizim uşaqlar bu əmrdən təlimatsız istifadə etməyi öyrəndilər!
İstədiyiniz elementi seçdiyiniz zaman, səbirsiz istifadəçilər testimizi 100500 dəfə keçirməsin deyə menyu əvəzinə testin başlanması haqqında bildiriş görünür:

Seçilmiş menyu elementindən asılı olaraq, sınaq zamanı şəbəkə gecikməsini aradan qaldırmaq və ya ən azı minimuma endirmək üçün şəbəkəmizdən, yəni botun yerləşdiyi maşından (jmeter əvvəlcədən konfiqurasiya olunub, lazımi testlər yerləşdirilib və s.) və ya birbaşa məlumat mərkəzindən (tətbiqin yanında hazırlanmış maşından) xüsusi bir sınaq işə salınır.
Test tamamlandıqdan və jurnal qəbul edildikdən sonra bot onu təhlil edir və nəticəni insan tərəfindən oxuna bilən formatda hazırlayır:

Metriklər toplusu
Funksionallıq hit oldu və istəyən layihə menecerləri bunu öz bölgələri üçün aldılar. Bir mərhəmətli layihə meneceri, "Mən vaxta əsaslanan statistikaya sahib olmaq istəyirəm!" Mərkəzi İnformasiya Texnologiyaları Mərkəzindən kimsə bütün bunları Zabbix-də izləməyin rahat olacağını təklif etdi. Zabbix, belə ki, Zabbix...
Həllin təkrarlanması ehtiyacına hazırlaşmağım lazım olduğunu düşündüm... Mən ideyanı Docker konteynerində həyata keçirdim. JMeter konteynerdə cədvəl üzrə işləyir (hər 10 dəqiqədən bir), jurnalı müəyyən bir yerdə saxlayır, PHP onu təhlil edir və lazımi məlumatları veb səhifə kimi çıxarır. Zabbix bu səhifəni əldə etmək üçün web.page.get açarından istifadə edir, xüsusi asılı elementlər üçün tələb olunan məlumatları seçmək üçün müntəzəm ifadədən istifadə edir və qrafiki tərtib edir.

Məncə, çox yaxşı alındı. Qrafikə baxaraq, ilk növbədə, tətbiqin təxmini sürətini görə bilərik və qrafikdə hər hansı bir sıçrayış aşkarlasaq, darboğazın harada olduğunu təxminən müəyyən edə bilərik. Bu sadədir. İndiyə qədər onun yalnız bir regionda faydalı olduğu sübut olunub, lakin mən onu maraqlanan hər kəsə yaymağa hazıram.
Tətbiqin dəqiqləşdirilməsi
Bu yaxınlarda oxşar tapşırıqların statistikası mənə işimi sadələşdirmək və asanlaşdırmaq üçün bəzi fikirlər verdi. Bəzi layihələr tətbiq serverlərində Crypto Pro açar konteynerlərinin quraşdırılmasını tələb edir. Onların bir çoxu var və rəqəmsal imzaların müddəti zamanla bitir. Bəzən gündə iki tapşırıq alıram. Lakin mən bu məqsədlər üçün botdan istifadə etməyi təhlükəli hesab etdim və funksionallığı birbaşa tətbiqdə tətbiq etmək qərarına gəldim. Təbii ki, bunun üçün icazə və giriş hüquqlarının yoxlanılması tələb olunur. Lazımi imtiyazlar təmin olunarsa, rəqəmsal imzalarla işləmək, quraşdırma, silmək, məlumatlara baxmaq və s. üçün əlavə menyu elementi olacaq. Bu funksionallıq hazırda inkişaf mərhələsindədir. Məlum oldu ki, bu çox çətin deyil; Mən sadəcə mövcud təlimatları oxumalı, kod nümunələrinə baxmalı, daha təcrübəli həmkarlarımdan soruşmalı və sonra bunu etməliyəm. Tədqiqat apararkən tətbiqə əlavə etmək üçün fikirlər tapdım. Mən heç bir böyük plan qurmayacağam - inkişaf artıq davam edir, ona görə də hər kəs öz işini görsün. Amma hələ ki, mən bunu yalnız özüm edirəm.
Planlar
Dediyim kimi, mən botumuzdan və başqa şeylərdən istifadə etmək üçün çoxlu müxtəlif ideyalarla gəldim, yəni “avtomatlaşdırma nöqtələri” üçün ideyalar. Onların bir çoxu unudulmuşdu, çünki onları yazmağa vaxtım yox idi. İndi ağlıma gələn hər şeyi yazmağa çalışıram və başqalarına da bunu etməyi tövsiyə edirəm.
Aleksey isə öz istəklərini bölüşməyi heç vaxt unutmur. Ən sonlar arasında:
/kill_sql SQL_ID — bu SQL_ID sorğusu ilə bütün sessiyaları öldürün
/kill_block - kök bloklama sessiyasını öldürün
/show_em — EM performans görüntüsünü göstərin
Hiyləgər telefonundan DBA etmək istəyir =)
Biz Vətənin rifahı üçün belə çalışırıq!
Rutin və maraqsız işlərdən özünüzü necə azad edirsiniz?
Ümid edirəm ki, bu oxumaq maraqlı oldu, bəlkə də kiməsə faydalı oldu və oxucunu darıxdırmağa vaxtım olmadı... Hamımıza uğurlar.
Mənbə: www.habr.com
