Urang ngahemat waktos, saraf jeung man-jam

Proyék urang biasana régional, sareng klien biasana kementerian. Tapi, salian ti sektor publik, organisasi swasta ogé ngagunakeun sistem urang. Sacara praktis henteu aya masalah sareng aranjeunna.

Janten, proyék utama nyaéta régional, sareng sakapeung aya masalah sareng aranjeunna. Contona, kalayan kinerja, nalika di wewengkon aya leuwih ti 20k pamaké berharga urang salila periode rolling kaluar fungsionalitas anyar dina server produk. Éta nyeri…

Nami abdi Ruslan sareng abdi ngadukung sistem inpormasi Bars Group sareng ngamekarkeun bot killer pikeun DBA serial telenges. Tulisan ieu sanés pikeun jalma anu lemah - aya seueur hurup sareng gambar.

Urang ngahemat waktos, saraf jeung man-jam

/aduh

Sababaraha aplikasi urang dijalankeun dina Oracle DBMS. Aya ogé proyék dina PostgreSQL DBMS. Oracle gaduh hal anu saé - ngumpulkeun statistik ngeunaan beban dina DBMS, anu nyorot masalah anu aya sareng bahkan ngadamel rekomendasi pikeun ngaleungitkeun - Repository Beban Otomatis (AWR). Dina hiji titik (nyaéta dina momen nyeri), pamekar terus nanya pikeun ngumpulkeun laporan AWR pikeun analisis kinerja. Urang jujur ​​indit ka server DBMS, ngumpulkeun laporan, nyandak ka kami sarta dikirim ka produksi pikeun analisis. Pas ka 5 jadi keuheul... pas ka 10 jadi jengkel...

Salah sahiji kolega kuring sakali ngungkabkeun ide yén sadayana anu dilakukeun langkung ti sakali kedah otomatis. Nepi ka momen iritasi, jujur, kuring teu mikir ngeunaan eta jeung nyoba ngajadikeun otomatis sagalana nu bisa otomatis, tapi mindeng teu di paménta jeung ieu leuwih panalungtikan tinimbang hiji alam dilarapkeun.

Terus kuring mikir: "Admin henteu diperyogikeun pikeun ngahasilkeun laporan ...". Barina ogé, ngumpulkeun laporan hartina executing skrip sql @$ORACLE_HOME/rdbms/admin/awrrpt.sql sarta nyandak laporan ti server ka tempat anjeun ... Oh enya, urang teu ngidinan ngembangkeun pikeun produksi.

Saterusna kuring Googled informasi diperlukeun, dijieun fungsi tina artikel dina basa test, ngajalankeun naskah jeung mujijat - laporan ieu disusun tur bisa disimpen sacara lokal. Dijieun fungsi dimana laporan AWR sering diperyogikeun sareng nyarioskeun ka pamekar kumaha ngagunakeunana.

Kira-kira waktos ieu, dina waktos luang kuring, saatos ngobrol sareng @BotFather, kuring nyiptakeun bot Telegram pikeun kuring sorangan, ngan ukur pikeun senang-senang. Kuring ngaco dina fungsionalitas basajan aya - némbongkeun waktu ayeuna, ongkos bursa, cuaca, ngajarkeun eta ngirim compliments ka pamajikan kuring (lajeng kabogoh) dina jadwal a. Panginten, dina waktos éta, ngirim pujian mangrupikeun pungsionalitas bot kuring anu paling populér, sareng pamajikan kuring ngahargaan éta.

Ku kituna. Pamekar nyerat ka kami di Telegram, kami ngirim laporan ka aranjeunna dina Telegram ... Kumaha upami aranjeunna nyerat sanés ka kami, tapi ka bot? Barina ogé, éta bakal langkung saé pikeun sadayana, laporan bakal ditampi langkung gancang, sareng anu paling penting, ngalangkungan kami. Ieu kumaha ideu fungsionalitas populér munggaran pikeun bot kuring lahir.

Kuring ngamimitian palaksanaan. Kuring ngalakukeun éta, sabisa-bisa, dina PHP (aplikasi urang sorangan aya dina PHP, kuring langkung terang tibatan Python). Abdi sanés coder anu saé, janten kuring moal nunjukkeun anjeun kode kuring :)

Bot hirup dina jaringan perusahaan urang sareng gaduh aksés kana sababaraha proyék, kalebet pangkalan data target. Pikeun henteu ngaganggu parameter dina tim atanapi sareng ménu, kuring ngagantelkeun fungsionalitas ieu kana obrolan grup kalayan béwara ngawaskeun. Ku cara ieu bot langsung terang mana database pikeun ngumpulkeun laporan.

Sanggeus narima paréntah kawas /aduh N, dimana N nyaéta jumlah jam pinuh pikeun laporan anu diperlukeun (sacara standar - 1 jam), sanajan keur saminggu, lamun database teu acan restarted, bot langsung dimimitian gawé, ngumpulkeun laporan, publishes salaku a halaman wéb sareng langsung (ampir di dinya) nyayogikeun tautan kana laporan anu diperyogikeun pisan.

Turutan tautan sareng ieu, laporan AWR:

Urang ngahemat waktos, saraf jeung man-jam

Saperti nu diharapkeun, pamekar coped kalawan generasi laporan misalna, sarta sababaraha malah thanked kami.

Ngaapresiasi genah tim, manajer proyék ti wewengkon séjén hayang sarua, sabab narima paling ti nasabah tur hariwang ngeunaan kinerja sarta kasadiaan sistem. Kuring nambihkeun bot kana obrolan anu sanés. Aranjeunna masih ngagunakeun eta, sarta Kami bungah ngeunaan eta.

Engké, kolega ti CIT manggihan ngeunaan kumaha urang ngumpulkeun laporan jeung hayang ngalakukeun eta oge. Kuring henteu nambihanana kana obrolan urang, kuring nyiptakeun obrolan anu misah sareng generasi laporan dina jadwal sareng pamundut.

/pgBadger

Urang ogé boga aplikasi sejenna dina PHP ditéang jeung PostgreSQL. Kuring ngalaksanakeun kumpulan laporan pgBadger pikeun anu peryogi nganggo prinsip anu sami - dina obrolan grup. Awalna aranjeunna dipaké, tapi lajeng aranjeunna dieureunkeun. Fungsionalitasna dipotong salaku teu perlu.

/tugas

Departemen kami ngagaduhan shift wengi sareng, sasuai, gaduh jadwal. Éta aya dina Google Sheets. Teu salawasna merenah pikeun néangan tumbu, muka bagan, néangan sorangan ... Salah sahiji urut kolega kuring ogé maénkeun na Telegram bot na diwanohkeun kana obrolan departemen urang. bewara ngeunaan mimiti shift tugas pikeun pagawé departemén. Bot nu parses jadwal, nangtukeun jalma on tugas ku tanggal ayeuna na, nurutkeun jadwal atawa kana pamundut, ngalaporkeun saha on tugas kiwari. Tétéla hébat sarta merenah. Leres, kuring henteu resep pisan kana format pesen. Ogé, pikeun pagawé departemén séjén (contona, SM "Kedokteran"), informasi ngeunaan jalma on tugas di arah séjén teu bener diperlukeun, tapi anjeun kudu nyaho saha on tugas di "Kedokteran" bisi masalah. Kuring mutuskeun pikeun "nginjeum" pungsionalitasna, tapi ngarobah naon anu kuring henteu resep. Kuring ngadamel format pesen anu cocog pikeun kuring sareng anu sanés, ngaleungitkeun inpormasi anu teu perlu.

/tnls

Saatos nyobian otomatisasi nganggo bot Telegram, seueur ideu anu béda muncul, tapi kuring hoyong ngalakukeun hal-hal anu diperyogikeun. Kuring mutuskeun pikeun mingpin statistik on requests. Pikeun ngaksés proyék konsumén urang, kami parantos ngalaksanakeun anu disebut "jump server" atanapi server neraskeun. Sambungan VPN digedékeun di dinya, teras palabuhan aplikasi, pangkalan data sareng diteruskeun tambahan sanésna diteruskeun ka jaringan lokal urang via ssh, pikeun aksés gampang kana proyék karyawan urang, tanpa masalah sareng sambungan VPN. Sadaya anu anjeun kedah laksanakeun nyaéta nyetél sambungan VPN ka jaringan perusahaan kami.

Statistik requests geus ditémbongkeun yén mindeng, sanggeus salah sahiji torowongan gagal (dina kasus masalah jaringan, alatan timeout a, contona), jalma anu ngahubungi ngeunaan malikkeun aksés ka proyék. Dina kalolobaan kasus, ngan ngabalikan deui sambungan anu cukup sareng sadayana henteu kunanaon. Hayu urang ngalakukeun hal eta sorangan. Ieu paréntahna:
Urang ngahemat waktos, saraf jeung man-jam

Anjeun "turun" kana item ménu anu dipikahoyong, pilih proyék anjeun, antosan sakedap sareng sadayana bagja sareng sugema...

Saatos nampi paréntah, kalayan gerakan sakedik bait sareng bit, bot nyambung ka server anu diteruskeun, terang sateuacanna anu diteruskeun kedah dibalikan deui, sareng ngalaksanakeun tugasna - mulangkeun sambungan kana proyék. Kuring nyerat paréntah supados anjeun tiasa ngabéréskeun masalah sapertos kitu nyalira. Sareng jalma ngahubungi kami ngan upami alat anu disayogikeun henteu jalan...

/ecp_to_pem

Statistik salajengna nunjukkeun yén éta sering diperyogikeun pikeun ngarobih EDS Crypto Pro dina format pem(Dasar64) pikeun sagala rupa integrasi, sarta kami geus rada loba di antarana. Tugas: nyandak wadahna, nyalin kana komputer Windows sareng utilitas P12FromGostCSP dipasang (dibayar, ku jalan kitu), ngarobih kana pfx, teras ngarobih pfx nganggo OpenSSL (kalayan dukungan enkripsi GOST) kana pem. Teu pisan merenah, tapi anjeun hoyong eta dina jepret ramo Anjeun.

Google geus datang ka nyalametkeun deui. Kapanggih mangpaat sababaraha jenis jalma. Kuring dirakit sakumaha ditulis dina README - éta digawé. Kuring ngajar bot pikeun digawe sareng utiliti sareng ngagaduhan konvérsi ampir instan.
Urang ngahemat waktos, saraf jeung man-jam

Dina waktos palaksanaan ahir, hiji pesenan dikaluarkeun pikeun pindah ka format enkripsi anyar - gost-2012. Sajauh anu kuring émut, utilitas dina waktos éta ngan ukur damel sareng GOST lami (2001), panginten éta mangrupikeun utilitas anu sami ti jalma anu sanés, kuring henteu émut persis.
Saatos transisi ka GOST anyar, pungsionalitas bot dicabut kusabab alesan kaamanan. Dilaksanakeun dina wadah docker.

Dockerfile, upami aya anu peryogi:

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

Pikeun ngarobah, anjeun kudu nempatkeun wadah aslina (diréktori kawas xxx.000) dina / srv / di diréktori, sarta nyandak pem rengse ka / srv / kaluar.

Pikeun ngarobah:

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

Hiji dinten, Oracle DBA anu saé pisan, kalayan seueur pangalaman dina administrasi sareng pamekaran DBMS, ngagaduhan padamelan di perusahaan kami. Sareng anjeunna langsung ngalaman masalah nyambungkeun ka server DBMS nganggo ssh: anjeunna henteu terang dimana atanapi kumaha nyambungkeun, aksésna henteu dijelaskeun sacara jelas, atanapi anjeunna henteu tiasa neraskeun hal anu anjeunna peryogikeun ka dirina. Nya, kami bagja ngabantosan, kami nyarioskeun kumaha nyambungkeun, sareng teraskeun anjeunna Manajer Perusahaan. Tapi hal-hal tetep henteu hasil sareng ssh. Salah sahiji kolega kuring ngajelaskeun eta saukur: a DBA purebred :) Urang mutuskeun yén lamun urang kudu tweak hal dina server, urang bakal ngalakukeun eta sorangan.

EM kadang nabrak dina beban beurat, sareng pikeun ngamimitian deui ... anjeun kedah nyambungkeun via ssh sareng balikan deui ngaliwatan terminal. "Admin saé dina ieu," saur batur sapagawean anyar urang. Beban beurat dina DBMS henteu jarang pikeun urang, sareng pamundut pikeun ngamimitian deui EM ogé umum. Lajeng skenario sarua: tegangan, iritasi jeung neangan solusi pikeun masalah. Janten dina obrolan grup anu sami muncul paréntah di handap ieu: /emstop jeung /emstart.

Urang ngahemat waktos, saraf jeung man-jam

/ maehan

Lamun aya kompetisi kuat dina database, sarta ieu kadang kajadian, perlu gancang ngabongkar momotanana database. Cara panggancangna nyaéta maéhan prosés masalah ... Jang ngalampahkeun ieu, sambungkeun via ssh, maéhan -9 ... Bot bakal mantuan!

Urang ngahemat waktos, saraf jeung man-jam

Alexey ngaapresiasi tim sareng masihan nami kaasih - "Kilyalka" atawa bedil.
Hiji dinten, saatos ningali kumaha Alexey nyobian sareng sangsara, ngalebetkeun / maéhan xxx unggal waktos pikeun unggal prosés, kuring mutuskeun pikeun nambihan "multi-laras" kana bedil kami:

Urang ngahemat waktos, saraf jeung man-jam

Éta hadé! Sagalana keur anjeun, Alexey, ngan gawé, dear!

Alami, tim penting sapertos ieu diwatesan aksés ku user_id - "foolproof". Ningali kumaha Lesha deftly maéhan prosés dina server database, sababaraha urang nyoba asupkeun paréntah kalawan jumlah prosés acak, tapi anjeun teu bisa fool bot pinter kuring, anjeunna langsung nampik.

/alertlog

Nya, bisi waé, kuring ngadamel paréntah:
/alertlog <jumlah garis> - Kéngingkeun jumlah garis alertlog anu ditangtukeun
Bot narik alertlog sareng ngirimkeunana ka jasa kami, sapertos pastebin, disebut pyste, sareng ngirim tautan kana témpél kana obrolan pamundut.

/cék

Salajengna sumping pamundut pikeun ngawaskeun kinerja nyata aplikasi urang. Dugi ka ayeuna, dukungan téknis proyék ngumpulkeun data ieu sacara manual. Henteu masalah! Penguji gagah kami parantos ngembangkeun kasus uji pikeun ieu. Log tés anu hasilna henteu gampang dibaca; pangguna anu teu ngalaman bakal lami ngartos sareng henteu yakin yén anjeunna bakal nyorot inpormasi anu diperyogikeun. Sarta kami teu resep ngalakukeun kalawan leungeun kami naon urang teu bisa ngalakukeun kalawan leungeun kami ... Hiji tugas anyar pikeun bot!

Urang ngahemat waktos, saraf jeung man-jam

Paréntah / cék nampilkeun ménu anu saderhana sareng teu ambigu; waktos ieu urang diajar kumaha ngagunakeun paréntah ieu tanpa paréntah!

Nalika anjeun milih barang anu dipikahoyong, tinimbang ménu, béwara ngeunaan ngamimitian tés muncul, ku kituna pangguna anu teu sabar henteu ngajalankeun tés kami 100500 kali:

Urang ngahemat waktos, saraf jeung man-jam

Gumantung kana item ménu anu dipilih, tés khusus diluncurkeun tina jaringan kami, nyaéta tina mesin dimana bot hirup (jmeter tos dikonpigurasi di dinya, tés anu diperyogikeun aya ...) atanapi langsung ti pusat data (tina a mesin disiapkeun gigireun aplikasi), guna ngaluarkeun sambungan jaringan nalika nguji Nepi, atawa ngurangan aranjeunna ka minimum.

Saatos ngabéréskeun tés sareng nampi log, bot ngémutan éta sareng ngahasilkeun hasil dina bentuk "bisa dibaca manusa":

Urang ngahemat waktos, saraf jeung man-jam

Koléksi métrik

Fungsionalitasna parantos sumping sareng manajer proyék kabetot nampi fungsi sapertos kitu pikeun daérahna. Sareng saurang Manajer Proyék anu welas asih nyarios: "Kuring hoyong gaduh statistik waktos!" Batur ti CIT ka dirina yén éta bakal merenah pikeun ngawas sadayana ieu dina Zabbix. Zabbix, jadi Zabbix ...

Teu sangka yen kuring diperlukeun pikeun nyiapkeun kudu ngayakeun réplikasi solusi ... Kuring nempatkeun ide kana wadahna docker. Dina wadahna, jmeter diluncurkeun dina jadwal (satiap 10 menit sakali), nempatkeun log dina tempat anu tangtu, php parses sareng nampilkeun data anu diperyogikeun dina bentuk halaman wéb. Zabbix, ngagunakeun konci web.page.get, narima kaca ieu, rutin milih data diperlukeun pikeun elemen gumantung tangtu jeung ngawangun grafik.

Urang ngahemat waktos, saraf jeung man-jam

Jigana tétéla teu goréng. Ku observasi grafik, urang, firstly, tingali laju perkiraan tina aplikasi, sarta lamun puncak nu dideteksi dina grafik, urang nyaho ngeunaan dimana "colokan" nyaeta. Ieu basajan. Sajauh ieu tétéla paménta ngan pikeun hiji wewengkon, tapi kuring siap pikeun ngayakeun réplikasi pikeun maranéhanana kabetot.

Pangwangunan aplikasi

Statistik ngeunaan tugas-tugas anu sami nembe masihan langkung seueur ide pikeun nyederhanakeun sareng ngagampangkeun padamelan. Dina sababaraha proyék, dina server aplikasi, aya anu peryogi pikeun masang konci Crypto Pro peti, aya loba di antarana, sarta signature digital kadaluwarsa kana waktu. Kadang-kadang 2 tugas sumping sadinten. Tapi kuring dianggap teu aman ngagunakeun bot pikeun tujuan ieu sareng mutuskeun yén kuring bakal nyiptakeun fungsionalitas langsung dina aplikasi. Alami kalayan otorisasi sareng mariksa hak aksés. Upami Anjeun gaduh hak husus diperlukeun, hiji item menu tambahan bakal sadia pikeun gawé bareng tanda tangan digital, instalasi, ngahapus, nempo inpo, jsb fungsionalitas nu ayeuna nuju ngembangkeun. Salaku tétéla, ieu teu hésé pisan, Anjeun ngan perlu maca parentah nu aya saeutik, kasampak di conto kode, nanya ka kolega leuwih ngalaman dina ngembangkeun, lajeng ngalakukeun eta. Salila prosés panalungtikan, ideu muncul pikeun nambihan kana aplikasi. Kuring moal nyieun rencana Napoleonic - aya ngembangkeun, hayu dulur kapikiran bisnis sorangan. Tapi bari éta metot, Kuring ngalakonan eta sorangan.

Rencana

Sakumaha anu kuring nyarios, seueur ideu anu béda lahir pikeun ngagunakeun bot kami sareng henteu ngan ukur - sacara umum, hayu urang nyarios, ideu pikeun "titik otomatis", seueur di antarana anu hilap, sabab kuring henteu gaduh waktos nyerat. Ayeuna kuring nyoba nulis handap sagalana nu datang ka pikiran, sarta kuring nyarankeun yén batur lakonan hal nu sarua.

Tapi Alexey teu poho pikeun masihan kahayang-Na. Ti panganyarna:
/kill_sql SQL_ID - maéhan sakabéh sesi kalawan pamundut SQL_ID ieu
/kill_block - maéhan sési blocking root
/show_em — nunjukkeun gambar kinerja EM
Lalaki licik, hayang ngajahit DBA tina hp na =)

Ieu kumaha urang dianggo pikeun kapentingan Motherland!

Kumaha anjeun ngaleungitkeun diri tina tugas rutin sareng teu pikaresepeun?

Kuring miharep bacaan tétéla jadi metot, sarta meureun malah mangpaat pikeun batur, sarta kuring teu boga waktu pikeun bore nu maca ... Good tuah ka urang sadayana.

sumber: www.habr.com

Tambahkeun komentar