Kita ngirit wektu, saraf lan jam kerja

Proyek kita biasane regional, lan klien biasane pelayanan. Nanging, saliyane sektor publik, organisasi swasta uga nggunakake sistem kita. Ora ana masalah karo wong-wong mau.

Dadi, proyek utama yaiku regional, lan kadhangkala ana masalah. Contone, kanthi kinerja, nalika ing wilayah ana luwih saka 20k pangguna sing larang regane sajrone wektu ngluncurake fungsi anyar ing server produk. Iku lara…

Jenengku Ruslan lan aku ndhukung sistem informasi BARS Group lan ngembangaken bot pembunuh kanggo DBA serial kasar. Tulisan iki dudu kanggo wong sing ora seneng - ana akeh huruf lan gambar.

Kita ngirit wektu, saraf lan jam kerja

/awr

Sawetara aplikasi kita mbukak ing Oracle DBMS. Ana uga proyek ing DBMS PostgreSQL. Oracle duwe perkara sing apik - ngumpulake statistik babagan beban ing DBMS, sing nyorot masalah sing ana lan malah menehi rekomendasi kanggo ngilangi - Repositori Beban Kerja Otomatis (AWR). Ing salah siji titik (yaiku ing wayahe pain), pangembang terus takon kanggo ngumpulake laporan AWR kanggo analisis kinerja. Kita jujur ​​menyang server DBMS, ngumpulake laporan, njupuk menyang kita lan dikirim menyang produksi kanggo analisis. Sawise kaping 5 dadi ngganggu ... sawise kaping 10 dadi jengkel ...

Salah sawijining rekan kerjaku tau nyatakake yen kabeh sing ditindakake luwih saka sepisan kudu otomatis. Nganti wayahe iritasi, jujur, aku ora mikir babagan iki lan nyoba ngotomatisasi kabeh sing bisa diotomatisasi, nanging asring ora dikarepake lan luwih akeh riset tinimbang sifat sing ditrapake.

Banjur aku mikir: "Admin ora perlu nggawe laporan ...". Sawise kabeh, ngumpulake laporan tegese nglakokake skrip sql @$ORACLE_HOME/rdbms/admin/awrrpt.sql lan njupuk laporan saka server menyang panggonan sampeyan ... Oh ya, kita ora ngidini pangembangan kanggo produksi.

Banjur aku Googled informasi sing perlu, nggawe fungsi saka artikel ing basis test, mbukak script lan Ajaib - laporan iki disusun lan bisa disimpen sacara lokal. Digawe fungsi ngendi laporan AWR asring needed lan marang pangembang carane nggunakake.

Kira-kira wektu iki, ing wektu luang, sawise ngobrol karo @BotFather, aku nggawe bot Telegram kanggo aku, mung kanggo seneng-seneng. Aku ngaco ing fungsi prasaja ana - nuduhake wektu saiki, kurs, cuaca, mulang kanggo ngirim pujian kanggo bojoku (banjur gendakan) ing jadwal. Mbok menawa, ing wektu iku, ngirim pujian minangka fungsi paling populer ing botku, lan bojoku ngormati.

Dadi. Pangembang nulis kanggo kita ing Telegram, kita ngirim laporan kanggo wong-wong mau ing Telegram ... Apa yen dheweke nulis ora kanggo kita, nanging menyang bot? Sawise kabeh, bakal luwih apik kanggo kabeh wong, laporan bakal ditampa luwih cepet, lan sing paling penting, ngliwati kita. Mangkene ide fungsi populer pisanan kanggo botku.

Aku miwiti implementasine. Aku nindakake iku, minangka paling aku bisa, ing PHP (aplikasi kita dhewe ing PHP, aku luwih ngerti saka ing Python). Aku dudu tukang kode sing apik, dadi aku ora bakal nuduhake kodeku :)

Bot kasebut urip ing jaringan perusahaan kita lan nduweni akses menyang proyek tartamtu, kalebu basis data target. Supaya ora ngganggu paramèter ing tim utawa menu, aku nambahake fungsi iki ing obrolan grup kanthi kabar ngawasi. Kanthi cara iki, bot kasebut langsung ngerti basis data kanggo ngumpulake laporan kasebut.

Sampun nampa prentah kaya /wr N, ing ngendi N minangka jumlah jam lengkap sing dibutuhake laporan (kanthi standar - 1 jam), sanajan seminggu, yen database durung diwiwiti maneh, bot kasebut langsung wiwit kerja, ngumpulake laporan kasebut, nerbitake minangka kaca web lan langsung (meh ana) nyedhiyakake link menyang laporan sing dibutuhake banget.

Tindakake link lan iki, laporan AWR:

Kita ngirit wektu, saraf lan jam kerja

Kaya sing dikarepake, para pangembang ngrampungake laporan kasebut, lan sawetara malah matur nuwun.

Sawise ngormati penak tim, manajer proyek saka wilayah liyane pengin padha, amarga padha nampa paling saka customer lan kuwatir babagan kinerja lan kasedhiyan sistem. Aku nambahake bot menyang obrolan liyane. Dheweke isih nggunakake, lan aku seneng.

Mengko, kolega saka CIT ngerti babagan cara ngumpulake laporan lan uga pengin nindakake. Aku ora nambah menyang chats kita, Aku nggawe chatting kapisah karo generasi laporan ing jadwal lan ing request.

/pgBadger

Kita uga duwe aplikasi liyane ing PHP bebarengan karo PostgreSQL. Aku ngleksanakake koleksi laporan pgBadger kanggo sing mbutuhake nggunakake prinsip sing padha - ing obrolan grup. Kaping pisanan padha digunakake, nanging banjur mandheg. Fungsi kasebut dipotong minangka ora perlu.

/ kewajiban

Departemen kita duwe shift wengi lan, kanthi mangkono, duwe jadwal. Ana ing Google Sheets. Ora mesthi trep kanggo nggoleki link, mbukak grafik, goleki dhewe ... Salah sawijining mantan kolega uga main karo bot Telegram lan ngenalake menyang obrolan departemen kita. kabar babagan wiwitan shift tugas kanggo karyawan departemen. Bot ngurai jadwal, nemtokake wong sing tugas ing tanggal saiki lan, miturut jadwal utawa miturut panyuwunan, laporan sing lagi tugas dina iki. Ternyata apik lan trep. Bener, aku ora seneng karo format pesen kasebut. Uga, kanggo karyawan departemen liyane (contone, SM "Kedokteran"), informasi bab wong-wong ing tugas ing arah liyane ora tenan needed, nanging sampeyan kudu ngerti sing ing "Kedokteran" ing cilik saka masalah. Aku mutusakΓ© kanggo "nyilih" fungsi, nanging ngganti apa aku ora seneng. Aku nggawe format pesen sing trep kanggo aku lan wong liya, mbusak informasi sing ora perlu.

/tnls

Sawise nyoba otomatisasi nggunakake bot Telegram, akeh ide sing beda-beda muncul, nanging aku pengin nindakake perkara sing dibutuhake. Aku mutusakΓ© kanggo mimpin statistik ing panjalukan. Kanggo ngakses proyek pelanggan, kita wis ngetrapake "server mlumpat" utawa server penerusan. Sambungan VPN diunggahake, banjur port aplikasi, database lan penerusan tambahan liyane diterusake menyang jaringan lokal liwat ssh, supaya gampang ngakses proyek karyawan, tanpa masalah sambungan VPN. Sampeyan mung kudu nyiyapake sambungan VPN menyang jaringan perusahaan kita.

Statistik panjalukan nuduhake yen asring, sawise salah sawijining terowongan gagal (ing kasus masalah jaringan, amarga wektu entek, umpamane), wong ngubungi kita babagan mulihake akses menyang proyek kasebut. Ing sawetara kasus, mung miwiti maneh sambungan wis cukup lan kabeh apik. Ayo dadi dhewe. Punika dhawuhipun:
Kita ngirit wektu, saraf lan jam kerja

Sampeyan "tiba liwat" menyang item menu sing dikarepake, pilih proyek sampeyan, ngenteni sawetara menit lan kabeh wong seneng lan marem ...

Sawise nampa prentah, kanthi gerakan tipis saka bita lan bit, bot kasebut nyambung menyang server sing diterusake, ngerti luwih dhisik sing terusake kudu diwiwiti maneh, lan nindakake tugase - mulihake sambungan menyang proyek kasebut. Aku nulis instruksi supaya sampeyan bisa ngatasi masalah kasebut dhewe. Lan wong ngubungi kita mung yen alat sing diwenehake ora bisa digunakake...

/ecp_to_pem

Statistik luwih nuduhake yen asring perlu kanggo ngowahi EDS Crypto Pro ing format pem(Base64) kanggo macem-macem integrasi, lan kita duwe cukup akeh. Tugas: njupuk wadhah, nyalin menyang komputer Windows kanthi utilitas P12FromGostCSP diinstal (mbayar, kanthi cara), ngowahi dadi pfx, banjur ngowahi pfx nggunakake OpenSSL (kanthi dhukungan kanggo enkripsi GOST) dadi pem. Iku ora trep banget, nanging sampeyan pengin ing sworo seru saka driji.

Google wis teka kanggo ngluwari maneh. ketemu utilitas sawetara wong jenis. Aku nglumpuk kaya sing ditulis ing README - kerjane. Aku mulang bot kanggo nggarap sarana lan entuk konversi meh cepet.
Kita ngirit wektu, saraf lan jam kerja

Ing wektu implementasine pungkasan, pesenan ditanggepi kanggo ngalih menyang format enkripsi anyar - gost-2012. Sa adoh aku ngelingi, utilitas ing wektu iku mung bisa digunakake karo GOST lawas (2001), mbok menawa ana liyane padha saka wong apik, aku ora ngelingi persis.
Sawise transisi menyang GOST anyar, fungsi bot wis dibusak kanggo alasan keamanan. Dilaksanakake ing wadhah docker.

Dockerfile, yen ana sing butuh:

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

Kanggo ngowahi, sampeyan kudu nyelehake wadhah asli (direktori kaya xxx.000) ing direktori /srv/in, lan njupuk pem rampung menyang /srv/out.

Kanggo ngowahi:

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

Sawijining dina, Oracle DBA sing apik banget, kanthi akeh pengalaman ing administrasi lan pangembangan DBMS, entuk kerja ing perusahaan kita. Lan dheweke langsung ngalami alangan nyambungake menyang server DBMS nganggo ssh: dheweke ora ngerti ngendi utawa carane nyambungake, akses kasebut ora diterangake kanthi jelas, utawa dheweke ora bisa nerusake apa sing dibutuhake kanggo awake dhewe. Inggih, kita seneng mbantu, kita marang wong carane nyambung, lan diterusake wong Enterprise Manager. Nanging isih ora bisa ditindakake kanthi ssh. Salah siji saka kolega nerangake mung: DBA purebred :) Kita mutusakΓ© yen kita kudu ngapiki soko ing server, kita bakal nindakake dhewe.

EM kadhangkala crash ing beban abot, lan kanggo miwiti maneh ... sampeyan kudu nyambung liwat ssh lan miwiti maneh liwat terminal. "Admin apik ing iki," kolega anyar kita mutusake. Beban abot ing DBMS ora umum kanggo kita, lan panjaluk kanggo miwiti maneh EM uga umum. Banjur skenario sing padha: tension, iritasi lan golek solusi kanggo masalah kasebut. Dadi ing obrolan grup sing padha, prentah ing ngisor iki muncul: /emstop lan /emstart.

Kita ngirit wektu, saraf lan jam kerja

/ mateni

Yen ana kompetisi kuwat ing database, lan iki kadhangkala mengkono, iku perlu kanggo mbongkar cepet database. Cara paling cepet yaiku mateni proses masalah ... Kanggo nindakake iki, sambungake liwat ssh, mateni -9 ... Bot bakal mbantu!

Kita ngirit wektu, saraf lan jam kerja

Alexey ngormati tim kasebut lan menehi jeneng sing nyenengake - "Kilyalka" utawa bedhil.
Sawijining dina, sawise ndeleng carane Alexey nyoba lan nandhang sangsara, ngetik / mateni xxx saben wektu kanggo saben proses, aku mutusake kanggo nambah "multi-barrel" menyang bedhil:

Kita ngirit wektu, saraf lan jam kerja

Kuwi luwih apik! Kabeh kanggo sampeyan, Alexey, mung kerja, dear!

Mesthine, tim penting kasebut diwatesi akses dening user_id - "foolproof". Ningali carane Lesha deftly matèni pangolahan ing server database, sawetara wong nyoba kanggo ngetik printah karo nomer proses acak, nanging sampeyan ora bisa ngapusi bot pinter sandi, langsung nolak.

/alertlog

Inggih, ing kasus, aku nggawe prentah:
/alertlog <jumlah baris> - entuk nomer garis alertlog sing ditemtokake
Bot narik alertlog lan dikirim menyang layanan kita, kaya pastebin, diarani pyste, lan ngirim link menyang tempel menyang obrolan panjaluk.

/ mriksa

Sabanjure teka panjalukan kanggo ngawasi kinerja nyata saka aplikasi kita. Nganti saiki, dhukungan teknis proyek ngumpulake data iki kanthi manual. Ora ketompo! Penguji gagah kita wis ngembangake kasus uji kanggo iki. Log tes sing diasilake ora trep kanggo diwaca; pangguna sing ora duwe pengalaman bakal suwe kanggo ngerti lan ora yakin bakal nyorot informasi sing dibutuhake. Lan kita ora seneng nindakake apa sing ora bisa ditindakake nganggo tangan kita ... Tugas anyar kanggo bot!

Kita ngirit wektu, saraf lan jam kerja

Printah /checks nampilake menu sing prasaja lan ora ambigu; wektu iki wong lanang kita sinau carane nggunakake printah iki tanpa instruksi!

Yen sampeyan milih item sing dikarepake, tinimbang menu, kabar babagan wiwitan tes katon, supaya pangguna sing ora sabar ora nindakake tes kaping 100500:

Kita ngirit wektu, saraf lan jam kerja

Gumantung ing item menu sing dipilih, tes khusus diluncurake saka jaringan kita, yaiku saka mesin ing ngendi bot kasebut urip (jmeter wis dikonfigurasi ing kana, tes sing dibutuhake ana ...) utawa langsung saka pusat data (saka a mesin sing disiapake ing jejere aplikasi), supaya ora kalebu sambungan jaringan nalika nyoba telat, utawa nyuda minimal.

Sawise rampung tes lan nampa log, bot kasebut ngurai lan ngasilake asil ing wangun "bisa diwaca manungsa":

Kita ngirit wektu, saraf lan jam kerja

Koleksi metrik

Fungsi kasebut wis teka lan manajer proyek sing kasengsem nampa fungsi kasebut kanggo wilayahe. Lan siji Manajer Proyek sing welas asih ujar: "Aku pengin duwe statistik wektu!" Wong saka CIT ngandhani yen bakal gampang ngawasi kabeh iki ing Zabbix. Zabbix, dadi Zabbix ...

Aku panginten sing aku kudu nyiapake perlu kanggo nurun solusi ... Aku sijine idea menyang wadhah docker. Ing wadhah kasebut, jmeter diluncurake kanthi jadwal (saben 10 menit), nempatake log ing papan tartamtu, php parses lan nampilake data sing dibutuhake ing wangun kaca web. Zabbix, nggunakake tombol web.page.get, nampa kaca iki, ajeg milih data sing perlu kanggo unsur gumantung tartamtu lan mbangun grafik.

Kita ngirit wektu, saraf lan jam kerja

Aku iku ternyata ora ala. Kanthi mirsani grafik, kita, sepisanan, ndeleng kacepetan kira-kira aplikasi, lan yen puncak dideteksi ing grafik, kita ngerti kira-kira ing ngendi "plug" kasebut. Iku prasaja. Nganti saiki, wis dikarepake mung kanggo siji wilayah, nanging aku siap kanggo niru kanggo sing kasengsem.

Pangembangan aplikasi

Statistik babagan tugas-tugas sing padha bubar nggawe luwih akeh gagasan kanggo nyederhanakake lan nggampangake karya. Ing sawetara proyek, ing server aplikasi, kudu nginstal wadhah utama Crypto Pro, ana akeh, lan tandha digital kadaluwarsa. Kadhangkala 2 tugas teka saben dina. Nanging aku nganggep ora aman nggunakake bot kanggo tujuan kasebut lan mutusake yen aku bakal nggawe fungsi kasebut langsung ing aplikasi kasebut. Alami kanthi wewenang lan mriksa hak akses. Yen sampeyan duwe hak istimewa sing dibutuhake, item menu tambahan bakal kasedhiya kanggo nggarap tandha digital, instalasi, pambusakan, ndeleng informasi, lsp. Fungsi kasebut lagi dikembangake. Ternyata, iki ora angel banget, sampeyan mung kudu maca instruksi sing wis ana, ndeleng conto kode, takon kanca sing luwih berpengalaman ing pembangunan, lan banjur nindakake. Sajrone proses riset, ide muncul kanggo nambah aplikasi kasebut. Aku ora bakal nggawe rencana Napoleon - ana pembangunan, supaya saben wong mikirake bisnise dhewe. Nanging nalika iku menarik, aku nindakake dhewe.

Rencana

Kaya sing dakkandhakake, akeh gagasan beda sing lair kanggo nggunakake bot kita lan ora mung - umume, ayo ngomong, gagasan kanggo "titik otomatis", akeh sing dilalekake, amarga aku ora duwe wektu kanggo nulis. Saiki aku nyoba nulis kabeh sing ana ing pikiranku, lan aku nyaranake supaya wong liya nindakake perkara sing padha.

Nanging Alexey ora lali kanggo menehi wishes. Saka paling anyar:
/kill_sql SQL_ID - mateni kabeh sesi karo request SQL_ID iki
/kill_block - mateni sesi pamblokiran ROOT
/show_em - nuduhake gambar kinerja EM
Wong licik, arep njahit DBA saka hp =)

Iki carane kita bisa kanggo entuk manfaat saka Motherland!

Kepiye cara ngilangi tugas rutin lan ora nyenengake?

Mugi maca dadi menarik, lan bisa uga migunani kanggo wong, lan aku ora duwe wektu kanggo bosen maca ... Good luck kanggo kita kabeh.

Source: www.habr.com

Add a comment