Biz vaxta, əsəblərə və iş saatlarına qənaət edirik

Layihələrimiz adətən regional xarakter daşıyır, müştərilər isə adətən nazirliklərdir. Amma dövlət sektoru ilə yanaşı, özəl təşkilatlar da bizim sistemlərdən istifadə edir. Onlarla praktiki olaraq heç bir problem yoxdur.

Belə ki, əsas layihələr regional xarakter daşıyır və bəzən onlarla problemlər yaranır. Məsələn, məhsul serverlərində yeni funksionallığın tətbiqi dövründə regionlarda 20k-dən çox dəyərli istifadəçimiz olduqda performansla. Bu bir ağrıdır…

Adım Ruslandır və mən BARS Group-un informasiya sistemlərini dəstəkləyirəm və zorakı serial DBA-lar üçün öldürücü bot hazırlamaq. Bu yazı ürək zəifliyi üçün deyil - çoxlu məktublar və şəkillər var.

Biz vaxta, əsəblərə və iş saatlarına qənaət edirik

/awr

Bəzi proqramlarımız Oracle DBMS-də işləyir. PostgreSQL DBMS-də layihələr də var. Oracle-ın gözəl bir xüsusiyyəti var - mövcud problemləri vurğulayan və hətta aradan qaldırılması üçün tövsiyələr verən DBMS-də yüklə bağlı statistika toplamaq - Avtomatik İş Yükü Anbarı (AWR). Bir anda (yəni ağrı anında) tərtibatçılar daim toplamaq istədilər Performans təhlili üçün AWR hesabatları. Biz vicdanla DBMS serverinə getdik, hesabatlar topladıq, bizə apardıq və təhlil üçün istehsala göndərdik. 5-ci dəfədən sonra bezdirici oldu...10-dan sonra qıcıqlandırıcı oldu...

Bir dəfə həmkarlarımdan biri belə bir fikir söylədi ki, bir dəfədən çox görülən hər şey avtomatlaşdırılmalıdır. Qıcıqlanma anına qədər, düzünü desəm, bu barədə düşünmürdüm və avtomatlaşdırıla bilən hər şeyi avtomatlaşdırmağa çalışırdım, lakin çox vaxt tələb olunmur və tətbiqi xarakterdən daha çox tədqiqat xarakteri daşıyırdı.

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 öz yerinə götürmək deməkdir... Bəli, biz istehsal üçün inkişafa icazə vermirik.

Sonra mən lazımi məlumatları Google-da axtardım, test bazasında məqalədən funksiya yaratdım, skript və möcüzəni işlətdim - hesabat tərtib edildi və yerli olaraq saxlanıla bilər. AWR hesabatlarına tez-tez ehtiyac duyulan funksiyalar yaratdı və tərtibatçılara onlardan necə istifadə edəcəyini izah etdi.

Təxminən bu vaxtlarda, boş vaxtlarımda @BotFather ilə söhbət etdikdən sonra özüm üçün sadəcə əylənmək üçün Telegram bot yaratdım. Mən orada sadə bir funksionallığı işə saldım - cari vaxtı, valyuta məzənnələrini, havanı göstərin, ona qrafik üzrə həyat yoldaşıma (sonra sevgilimə) iltifatlar göndərməyi öyrətdim. Ola bilsin ki, o zaman komplimentlər göndərmək botun ən populyar funksiyası idi və həyat yoldaşım bunu yüksək qiymətləndirirdi.

Belə ki. Developerlər bizə Telegramda yazır, biz onlara Telegramda hesabat göndəririk... Bizə yox, bota yazsalar necə? Axı, bu, hamı üçün daha yaxşı olacaq, hesabat daha sürətli alınacaq və ən əsası, bizdən yan keçəcək. Botum üçün ilk populyar funksionallıq ideyası belə yarandı.

həyata keçirməyə başladım. Mən bunu bacardığım qədər PHP-də etdim (bizim proqramın özü PHP-dədir, mən Python-dan daha çox məlumatlıyam). Mən yaxşı kodlayıcı deyiləm, ona görə də kodumu sizə göstərməyəcəm :)

Bot bizim korporativ şəbəkəmizdə yaşayır və müəyyən layihələrə, o cümlədən hədəf verilənlər bazalarına çıxışı var. Komandadakı parametrlərlə və ya menyu ilə narahat olmamaq üçün bu funksiyanı monitorinq bildirişləri ilə qrup söhbətinə əlavə etdim. Beləliklə, bot hesabatın hansı verilənlər bazasından toplanacağını dərhal bilir.

kimi bir əmr aldıqdan sonra /awr N, burada N hesabatın tələb olunduğ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, hesabat kimi dərc edir. web səhifəsi və dərhal (demək olar ki, orada) çox ehtiyac duyulan hesabata keçid təmin edir.

Linki izləyin və budur, AWR hesabatı:

Biz vaxta, əsəblərə və iş saatlarına qənaət edirik

Gözlənildiyi kimi, tərtibatçılar bu cür hesabatın öhdəsindən gəldilər və bəziləri hətta bizə təşəkkür etdilər.

Komandanın rahatlığını yüksək qiymətləndirərək, digər bölgələrdən olan layihə menecerləri də bunu istədilər, çünki onlar müştəridən daha çox şey alırlar və sistemlərin performansı və mövcudluğundan narahatdırlar. Botu başqa söhbətlərə əlavə etdim. Hələ də istifadə edirlər və mən buna şadam.

Daha sonra CIT-dən olan həmkarlarımız hesabatları necə topladığımızı öyrəndilər və bunu da etmək istədilər. Mən onları söhbətlərimizə əlavə etmədim, cədvəl üzrə və sorğu əsasında hesabatların yaradılması ilə ayrıca söhbət yaratdım.

/pgBadger

PostgreSQL ilə birlikdə PHP-də başqa proqramlarımız da var. Ehtiyacı olanlar üçün pgBadger hesabatlarının toplusunu eyni prinsiplə - qrup söhbətlərində həyata keçirdim. Əvvəlcə ondan istifadə etdilər, amma sonra dayandırdılar. Funksionallıq lazımsız olaraq kəsildi.

/vəzifə

Şöbəmizdə gecə növbəsi var və buna uyğun olaraq qrafik var. Google Cədvəldə var. Keçmiş həmkarlarımdan biri də öz Telegram botu ilə oynadı və onu departamentimizin çatına daxil etdi. şöbə işçiləri üçün növbənin başlaması barədə bildirişlər. Bot cədvəli təhlil edir, cari tarixə görə növbətçi şəxsi müəyyənləşdirir və cədvələ uyğun və ya sorğuya əsasən bu gün kimin növbətçi olduğunu bildirir. Əla və rahat çıxdı. Düzdür, mesajların formatını çox bəyənmədim. Həmçinin, başqa bir şöbənin işçiləri üçün (məsələn, BC "Tibb") digər istiqamətlərdə növbətçi olanlar haqqında məlumat həqiqətən lazım deyil, lakin problem olduqda "Tibb"də kimin növbətçi olduğunu bilmək lazımdır. Funksiyanı "borc almağa" qərar verdim, amma bəyənmədiyim şeyi dəyişdirdim. Lazımsız məlumatları silməklə özüm və başqaları üçün əlverişli mesaj formatı etdim.

/tnls

Telegram botundan istifadə edərək avtomatlaşdırmanı sınadıqdan sonra bir çox fərqli fikirlər ortaya çıxdı, lakin mən ciddi şəkildə lazım olan şeylər etmək istədim. rəhbərlik etməyə qərar verdim sorğular üzrə statistika. Müştərilərimizin layihələrinə daxil olmaq üçün biz “atlama serveri” və ya yönləndirici server tətbiq etdik. Onun üzərində VPN əlaqələri qurulur, sonra proqram portları, verilənlər bazası və digər köməkçi yönləndirmələr VPN bağlantılarında problem olmadan əməkdaşlarımızın layihələrinə asan çıxış üçün ssh vasitəsilə yerli şəbəkəmizə yönləndirilir. Sizə lazım olan yeganə şey korporativ şəbəkəmizə VPN bağlantısı qurmaqdır.

Müraciətlərin statistikası göstərdi ki, tez-tez tunellərdən biri uğursuz olduqdan sonra (məsələn, şəbəkə problemləri zamanı, məsələn, fasilə səbəbindən) insanlar layihəyə girişi bərpa etmək üçün bizə müraciət edirlər. Əksər hallarda, sadəcə əlaqəni yenidən başlatmaq kifayətdir və hər şey qaydasındadır. Gəlin bunu özünüz edək. Budur əmr:
Biz vaxta, əsəblərə və iş saatlarına qənaət edirik

İstədiyiniz menyu elementinə "düşürsən", layihənizi seçin, bir dəqiqə gözləyin və hamı xoşbəxt və razıdır...

Komanda qəbul edildikdən sonra baytların və bitlərin cüzi 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. Təlimatlar yazdım ki, belə məsələləri özünüz həll edəsiniz. İnsanlar isə 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 Pem formatında EDS Crypto Pro(Basexnumx) müxtəlif inteqrasiyalar üçün və bizdə onların kifayət qədər çoxu var. Tapşırıq: bir konteyner götürün, onu P12FromGostCSP yardım proqramı quraşdırılmış (yeri gəlmişkən, pullu) olan Windows kompüterinə köçürün, onu pfx-ə çevirin və sonra OpenSSL (GOST şifrələmə dəstəyi ilə) istifadə edərək pfx-i pem-ə çevirin. Bu, çox rahat deyil, ancaq barmaqlarınızın çırpılmasında istəyirsiniz.

Google yenidən köməyə gəldi. tapıldı bir növ insanın faydası. Mən onu README-də yazıldığı kimi yığdım - işlədi. Mən bota yardım proqramı ilə işləməyi öyrətdim və demək olar ki, ani çevrilmə əldə etdim.
Biz vaxta, əsəblərə və iş saatlarına qənaət edirik

Son icra zamanı yeni şifrələmə formatına - gost-2012-ə keçmək barədə əmr verildi. Xatırladığım qədəri ilə, o anda kommunal yalnız köhnə GOST (2001) ilə işləyirdi, bəlkə də başqa bir xeyirxah insandan başqa bir oxşar yardım proqramı idi, dəqiq xatırlamıram.
Yeni GOST-a keçiddən sonra təhlükəsizlik səbəbi ilə botun funksionallığı silindi. Bir docker konteynerində həyata keçirdi.

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.sh

Çevirmək üçün orijinal konteyneri (xxx.000 kimi kataloq) /srv/in qovluğuna yerləşdirməli və hazır pemi /srv/out-a aparmalısınız.

Çevirmək:

 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 çox gözəl Oracle DBA şirkəti şirkətimizdə işə düzəldi. Və dərhal ssh ilə DBMS serverlərinə qoşulmaqda çətinlik çəkdi: harada və necə qoşulacağını bilmir, giriş aydın şəkildə təsvir edilmir və ya özünə lazım olan bir şeyi ötürə bilmir. Yaxşı, kömək etməkdən məmnunuq, ona necə qoşulacağını söylədik və Müəssisə Meneceri göndərdik. Ancaq ssh ilə işlər hələ də nəticə vermədi. Həmkarlarımdan biri bunu sadə izah etdi: saf DBA :) 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... ssh vasitəsilə qoşulmaq və terminal vasitəsilə yenidən işə salmaq lazımdır. "Adminlər bu işdə yaxşıdırlar" deyə yeni həmkarımız qərar verdi. DBMS-də ağır yüklər bizim üçün qeyri-adi deyil və EM-nin yenidən işə salınması tələbləri də tez-tez olur. Sonra eyni ssenari: gərginlik, qıcıqlanma və problemin həlli üçün axtarış. Beləliklə, eyni qrup söhbətlərində aşağıdakı əmrlər meydana çıxdı: /emstop və /emstart.

Biz vaxta, əsəblərə və iş saatlarına qənaət edirik

/öldürmək

Əgər verilənlər bazasında güclü rəqabət varsa və bu bəzən baş verirsə, verilənlər bazasını tez bir zamanda boşaltmaq lazımdır. Ən sürətli yol problemli prosesi öldürməkdir... Bunun üçün ssh vasitəsilə qoşulun, kill -9... Bot kömək edəcək!

Biz vaxta, əsəblərə və iş saatlarına qənaət edirik

Aleksey komandanı yüksək qiymətləndirdi və ona mehriban bir ad verdi - "Kilyalka" ya da silah.
Bir gün, Alekseyin necə çalışdığını və əziyyət çəkdiyini, hər bir proses üçün hər dəfə xxx-ə daxil olduğunu / öldürdüyünü izlədikdən sonra silahımıza "çox lüləli" əlavə etmək qərarına gəldim:

Biz vaxta, əsəblərə və iş saatlarına qənaət edirik

Bu daha yaxşıdır! Hər şey sənin üçündür, Aleksey, çalış, əzizim!

Təbii ki, belə vacib komanda məhdud idi user_id ilə giriş - "qüsursuz". Lesha'nın verilənlər bazası serverindəki prosesləri necə məharətlə öldürdüyünü görən bir neçə insan təsadüfi bir proses nömrəsi ilə bir əmr daxil etməyə çalışdı, amma mənim ağıllı botu aldada bilməzsən, o, 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 bir xəbərdarlıq qeydini çıxarır və onu pastebin kimi xidmətimizə göndərir, pyste adlanır və sorğu söhbətinə pastaya keçid göndərir.

/yoxlayır

Sonra bir sorğu gəldi tətbiqimizin real performansını izləmək. İndiyə qədər layihənin texniki dəstəyi bu məlumatları əl ilə toplayırdı. Fərqi yoxdur! Cəsur sınaqçılarımız bunun üçün test nümunələri hazırlamışlar. Yaranan test jurnalını oxumaq çox rahat deyil, təcrübəsiz istifadəçinin başa düşməsi çox vaxt aparacaq və lazımi məlumatları vurğulayacağına əmin deyil. Biz isə əlimizlə edə bilmədiklərimizi əlimizlə etməyi sevmirik... Bot üçün yeni tapşırıq!

Biz vaxta, əsəblərə və iş saatlarına qənaət edirik

/checks əmri sadə və birmənalı menyu göstərir, bu dəfə bizim uşaqlar bu əmrdən təlimatsız istifadə etməyi öyrəndilər!

İstədiyiniz elementi seçdiyiniz zaman menyu əvəzinə testin başlaması barədə bildiriş görünür ki, səbirsiz istifadəçilər testimizi 100500 dəfə keçirməsinlər:

Biz vaxta, əsəblərə və iş saatlarına qənaət edirik

Seçilmiş menyu elementindən asılı olaraq, şəbəkəmizdən, yəni botun yaşadığı maşından (jmetr orada əvvəlcədən konfiqurasiya edilib, lazımi testlər yerləşdirilib...) və ya birbaşa məlumat mərkəzindən (birdən gecikmələri sınaqdan keçirərkən şəbəkə bağlantılarını istisna etmək və ya minimuma endirmək üçün proqramın yanında hazırlanmış maşın.

Testi tamamladıqdan və jurnalı qəbul etdikdən sonra bot onu təhlil edir və nəticəni “insan tərəfindən oxuna bilən” formada verir:

Biz vaxta, əsəblərə və iş saatlarına qənaət edirik

Metriklər toplusu

Funksionallıq gəldi və maraqlanan layihə menecerləri öz bölgələri üçün belə bir funksiya aldılar. Və bir mərhəmətli Layihə Meneceri dedi: "Mən vaxt statistikasına sahib olmaq istəyirəm!" CIT-dən kimsə ona Zabbix-də bütün bunları izləməyin rahat olacağını söylədi. Zabbix, deməli Zabbix...

Düşündüm ki, həlli təkrarlamaq zərurəti üçün hazırlaşmalıyam... İdeyanı doker konteynerinə qoydum. Konteynerdə jmeter cədvəl üzrə işə salınır (hər 10 dəqiqədə bir), jurnalı müəyyən yerə qoyur, php onu təhlil edir və lazımi məlumatları veb səhifə şəklində göstərir. Zabbix, web.page.get açarından istifadə edərək, bu səhifəni alır, müəyyən asılı elementlər üçün müntəzəm olaraq lazımi məlumatları seçir və qrafik qurur.

Biz vaxta, əsəblərə və iş saatlarına qənaət edirik

Məncə pis olmadı. Qrafiki müşahidə edərək, biz, ilk növbədə, tətbiqin təxmini sürətini görürük və qrafikdə zirvələr aşkar edilərsə, "plug"ın harada olduğunu təxminən bilirik. Bu sadədir. İndiyə qədər yalnız bir bölgə üçün tələbat olduğu ortaya çıxdı, amma maraqlananlar üçün onu təkrarlamağa hazıram.

Tətbiq inkişafı

Oxşar tapşırıqlar üzrə statistika son vaxtlar işi sadələşdirmək və asanlaşdırmaq üçün daha çox ideyanın yaranmasına səbəb olmuşdur. Bəzi layihələrdə, tətbiq serverlərində əsas Crypto Pro konteynerlərinin quraşdırılmasına ehtiyac var, onların çoxu var və rəqəmsal imzanın müddəti zamanla bitir. Bəzən gündə 2 tapşırıq gəlir. Amma mən bu məqsədlər üçün botdan istifadə etməyi təhlükəli hesab etdim və funksionallığı birbaşa tətbiqdə yaratmağı qərara aldım. Təbii ki, icazə və giriş hüquqlarının yoxlanılması ilə. Lazımi imtiyazlarınız varsa, rəqəmsal imzalarla işləmək, quraşdırma, silmək, məlumatlara baxmaq və s. üçün əlavə menyu elementi mövcud olacaq. Funksionallıq hazırda inkişaf mərhələsindədir. Məlum oldu ki, bu, çox çətin deyil, sadəcə olaraq, mövcud təlimatları bir az oxumaq, kod nümunələrinə baxmaq, inkişafda daha təcrübəli olan həmkarlarından soruşmaq və sonra bunu etmək lazımdır. Tədqiqat prosesi zamanı tətbiqə əlavə etmək üçün fikirlər ortaya çıxdı. Napoleon planlarını etməyəcəyəm - inkişaf var, qoy hər kəs öz işinə baxsın. Amma maraqlı olsa da, özüm edirəm.

Planlar

Dediyim kimi, botumuzdan istifadə üçün çoxlu müxtəlif fikirlər doğuldu və nəinki - ümumiyyətlə, deyək ki, “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.

Ancaq Aleksey istəklərini verməyi unutmur. Ən sondan:
/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ının şəklini göstərin
O hiyləgər oğlandır, telefonundan DBA tikmə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ə qurtarırsınız?

Ümid edirəm ki, 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

Добавить комментарий