Kami menjimatkan masa, saraf dan jam kerja

Projek kami biasanya serantau, dan pelanggan biasanya kementerian. Tetapi, sebagai tambahan kepada sektor awam, organisasi swasta juga menggunakan sistem kami. Hampir tidak ada masalah dengan mereka.

Jadi, projek utama adalah serantau, dan kadangkala terdapat masalah dengannya. Contohnya, dengan prestasi, apabila di wilayah terdapat lebih daripada 20k pengguna berharga kami semasa tempoh pelancaran fungsi baharu pada pelayan produk. Ia adalah kesakitan…

Nama saya Ruslan dan saya menyokong sistem maklumat Kumpulan BARS dan membangunkan bot pembunuh untuk DBA bersiri ganas. Entri ini bukan untuk orang yang lemah hati - terdapat banyak surat dan gambar.

Kami menjimatkan masa, saraf dan jam kerja

/awr

Beberapa aplikasi kami dijalankan pada Oracle DBMS. Terdapat juga projek pada DBMS PostgreSQL. Oracle mempunyai perkara yang menarik - mengumpul statistik mengenai beban pada DBMS, yang menyerlahkan masalah sedia ada dan juga membuat cadangan untuk penghapusan - Repositori Beban Kerja Automatik (AWR). Pada satu ketika (iaitu pada saat kesakitan), pemaju sentiasa meminta untuk mengumpul Laporan AWR untuk analisis prestasi. Kami secara jujur ​​pergi ke pelayan DBMS, mengumpul laporan, membawanya kepada kami dan menghantarnya ke pengeluaran untuk analisis. Selepas kali ke-5 ia menjadi menjengkelkan... selepas ke-10 ia menjadi menjengkelkan...

Salah seorang rakan sekerja saya pernah menyatakan idea bahawa semua yang dilakukan lebih daripada sekali harus diautomasikan. Sehingga saat kerengsaan, sejujurnya, saya tidak memikirkannya dan cuba mengautomasikan segala-galanya yang boleh diautomasikan, tetapi selalunya ia tidak dalam permintaan dan lebih kepada penyelidikan dan bukannya sifat terpakai.

Dan kemudian saya berfikir: β€œPentadbir tidak diperlukan untuk menjana laporan...”. Lagipun, mengumpul laporan bermakna melaksanakan skrip sql @$ORACLE_HOME/rdbms/admin/awrrpt.sql dan membawa laporan daripada pelayan ke tempat anda... Oh ya, kami tidak membenarkan pembangunan untuk pengeluaran.

Kemudian saya Googled maklumat yang diperlukan, mencipta fungsi dari artikel di pangkalan ujian, menjalankan skrip dan keajaiban - laporan telah disusun dan boleh disimpan secara tempatan. Mencipta fungsi di mana laporan AWR sering diperlukan dan memberitahu pembangun cara menggunakannya.

Pada masa ini, pada masa lapang saya, selepas bercakap dengan @BotFather, saya mencipta bot Telegram untuk diri saya sendiri, hanya untuk keseronokan. Saya mengacaukan fungsi mudah di sana - tunjukkan masa semasa, kadar pertukaran, cuaca, mengajarnya untuk menghantar pujian kepada isteri saya (kemudian teman wanita) mengikut jadual. Mungkin, pada masa itu, menghantar pujian adalah fungsi bot saya yang paling popular, dan isteri saya menghargainya.

Jadi. Pembangun menulis kepada kami dalam Telegram, kami menghantar laporan kepada mereka dalam Telegram... Bagaimana jika mereka menulis bukan kepada kami, tetapi kepada bot? Lagipun, ia akan menjadi lebih baik untuk semua orang, laporan akan diterima dengan lebih cepat, dan yang paling penting, memintas kami. Ini adalah bagaimana idea fungsi popular pertama untuk bot saya dilahirkan.

Saya memulakan pelaksanaan. Saya melakukannya, sebaik mungkin, dalam PHP (aplikasi kami sendiri dalam PHP, saya lebih mahir daripada Python). Saya bukan pengekod yang baik, jadi saya tidak akan menunjukkan kepada anda kod saya :)

Bot itu hidup di rangkaian korporat kami dan mempunyai akses kepada projek tertentu, termasuk pangkalan data sasaran. Untuk tidak mengganggu parameter dalam pasukan atau menu, saya menambahkan fungsi ini pada sembang kumpulan dengan pemberitahuan pemantauan. Dengan cara ini bot dengan serta-merta mengetahui pangkalan data mana untuk mengumpul laporan.

Setelah menerima arahan seperti /awr N, di mana N ialah bilangan jam penuh yang mana laporan diperlukan (secara lalai - 1 jam), walaupun selama seminggu, jika pangkalan data belum dimulakan semula, bot serta-merta mula berfungsi, mengumpul laporan, menerbitkannya sebagai halaman web dan serta-merta (hampir di sana) menyediakan pautan ke laporan yang sangat diperlukan.

Ikuti pautan dan inilah, laporan AWR:

Kami menjimatkan masa, saraf dan jam kerja

Seperti yang dijangkakan, pembangun mengatasi penjanaan laporan sedemikian, malah ada yang berterima kasih kepada kami.

Setelah menghargai kemudahan pasukan, pengurus projek dari wilayah lain menginginkan perkara yang sama, kerana mereka menerima paling banyak daripada pelanggan dan bimbang tentang prestasi dan ketersediaan sistem. Saya menambahkan bot pada sembang lain. Mereka masih menggunakannya, dan saya gembira mengenainya.

Kemudian, rakan sekerja dari CIT mengetahui tentang cara kami mengumpul laporan dan mahu melakukannya juga. Saya tidak menambahkannya pada sembang kami, saya mencipta sembang berasingan dengan penjanaan laporan mengikut jadual dan atas permintaan.

/pgBadger

Kami juga mempunyai aplikasi lain dalam PHP bersama-sama dengan PostgreSQL. Saya melaksanakan pengumpulan laporan pgBadger untuk mereka yang memerlukan menggunakan prinsip yang sama - dalam sembang kumpulan. Pada mulanya mereka menggunakannya, tetapi kemudian mereka berhenti. Fungsi telah dipotong sebagai tidak perlu.

/tugas

Jabatan kami mempunyai syif malam dan, oleh itu, mempunyai jadual. Ia ada dalam Helaian Google. Bukan selalu senang untuk mencari pautan, buka carta, cari sendiri... Salah seorang bekas rakan sekerja saya juga bermain dengan bot Telegramnya dan memperkenalkannya ke dalam sembang jabatan kami pemberitahuan tentang permulaan syif bertugas untuk kakitangan jabatan. Bot menghuraikan jadual, menentukan orang yang bertugas mengikut tarikh semasa dan, mengikut jadual atau atas permintaan, melaporkan orang yang bertugas hari ini. Ternyata hebat dan mudah. Benar, saya tidak begitu menyukai format mesej. Juga, untuk pekerja jabatan lain (contohnya, BC "Perubatan"), maklumat tentang mereka yang bertugas ke arah lain tidak benar-benar diperlukan, tetapi anda perlu mengetahui siapa yang bertugas dalam "Perubatan" sekiranya berlaku masalah. Saya memutuskan untuk "meminjam" fungsi itu, tetapi menukar perkara yang saya tidak suka. Saya membuat format mesej mudah untuk diri saya dan orang lain, mengalih keluar maklumat yang tidak perlu.

/tnls

Selepas mencuba automasi menggunakan bot Telegram, banyak idea berbeza muncul, tetapi saya mahu melakukan perkara yang sangat diperlukan. Saya memutuskan untuk memimpin statistik mengenai permintaan. Untuk mengakses projek pelanggan kami, kami telah melaksanakan apa yang dipanggil "pelayan lompat" atau pelayan pemajuan. Sambungan VPN dibangkitkan padanya, kemudian port aplikasi, pangkalan data dan pemajuan tambahan lain dimajukan ke rangkaian tempatan kami melalui ssh, untuk akses mudah kepada projek pekerja kami, tanpa masalah dengan sambungan VPN. Apa yang anda perlu lakukan ialah menyediakan sambungan VPN ke rangkaian korporat kami.

Statistik permintaan telah menunjukkan bahawa selalunya, selepas salah satu terowong gagal (dalam kes masalah rangkaian, disebabkan tamat masa, contohnya), orang menghubungi kami tentang memulihkan akses kepada projek. Dalam kebanyakan kes, hanya memulakan semula sambungan sudah memadai dan semuanya baik-baik saja. Jom buat sendiri. Berikut adalah arahannya:
Kami menjimatkan masa, saraf dan jam kerja

Anda "jatuh" ke dalam item menu yang dikehendaki, pilih projek anda, tunggu sebentar dan semua orang gembira dan berpuas hati...

Setelah menerima arahan, dengan pergerakan sedikit bait dan bit, bot menyambung ke pelayan pemajuan, mengetahui terlebih dahulu pemajuan yang perlu dimulakan semula, dan melakukan tugasnya - memulihkan sambungan ke projek. Saya menulis arahan supaya anda boleh menyelesaikan sendiri isu tersebut. Dan orang ramai menghubungi kami hanya jika alat yang disediakan tidak berfungsi...

/ecp_to_pem

Statistik lanjut menunjukkan bahawa ia selalunya perlu untuk menukar EDS Crypto Pro dalam format pem(Pangkalan64) untuk pelbagai penyepaduan, dan kami mempunyai banyak daripadanya. Tugas: ambil bekas, salin ke komputer Windows dengan utiliti P12FromGostCSP dipasang (berbayar, dengan cara), tukarkannya kepada pfx, dan kemudian tukar pfx menggunakan OpenSSL (dengan sokongan untuk penyulitan GOST) kepada pem. Ia tidak begitu mudah, tetapi anda mahukannya dengan cepat.

Google telah datang untuk menyelamatkan sekali lagi. Dijumpai kegunaan seseorang yang baik hati. Saya memasangnya seperti yang tertulis dalam README - ia berfungsi. Saya mengajar bot untuk bekerja dengan utiliti dan mendapat penukaran hampir serta-merta.
Kami menjimatkan masa, saraf dan jam kerja

Menjelang masa pelaksanaan akhir, perintah telah dikeluarkan untuk menukar kepada format penyulitan baharu - gost-2012. Seingat saya, utiliti pada masa itu hanya berfungsi dengan GOST lama (2001), mungkin ia adalah utiliti lain yang serupa dari orang lain yang baik, saya tidak ingat dengan tepat.
Selepas peralihan kepada GOST baharu, kefungsian bot telah dialih keluar atas sebab keselamatan. Melaksanakannya dalam bekas buruh pelabuhan.

Dockerfile, sekiranya sesiapa memerlukannya:

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

Untuk menukar, anda perlu meletakkan bekas asal (direktori seperti xxx.000) dalam direktori /srv/in, dan bawa pem siap ke /srv/out.

Untuk menukar:

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

Suatu hari, Oracle DBA yang sangat hebat, dengan banyak pengalaman dalam pentadbiran dan pembangunan DBMS, mendapat pekerjaan di syarikat kami. Dan dia serta-merta menghadapi masalah menyambung ke pelayan DBMS dengan ssh: dia tidak tahu di mana atau bagaimana untuk menyambung, akses tidak diterangkan dengan jelas, atau dia tidak boleh memajukan sesuatu yang dia perlukan kepada dirinya sendiri. Baiklah, kami berbesar hati untuk membantu, kami memberitahunya cara untuk menyambung, dan memajukan Pengurus Perusahaan kepadanya. Tetapi perkara masih tidak berjaya dengan ssh. Salah seorang rakan sekerja saya menerangkannya secara ringkas: DBA baka tulen :) Kami memutuskan bahawa jika kami perlu mengubah suai sesuatu pada pelayan, kami akan melakukannya sendiri.

EM kadangkala ranap di bawah beban berat, dan untuk memulakannya semula... anda perlu menyambung melalui ssh dan memulakan semula melalui terminal. "Pentadbir mahir dalam hal ini," rakan sekerja baharu kami memutuskan. Beban berat pada DBMS adalah perkara biasa bagi kami, dan permintaan untuk memulakan semula EM juga adalah perkara biasa. Kemudian senario yang sama: ketegangan, kerengsaan dan mencari penyelesaian kepada masalah itu. Jadi dalam sembang kumpulan yang sama arahan berikut muncul: /emstop dan /emstart.

Kami menjimatkan masa, saraf dan jam kerja

/ bunuh

Sekiranya terdapat persaingan yang kuat pada pangkalan data, dan ini kadang-kadang berlaku, adalah perlu untuk memunggah pangkalan data dengan cepat. Cara terpantas adalah untuk mematikan proses yang bermasalah... Untuk melakukan ini, sambungkan melalui ssh, bunuh -9... Bot akan membantu!

Kami menjimatkan masa, saraf dan jam kerja

Alexey menghargai pasukan itu dan memberikannya nama yang mesra - "Kilyalka" atau pistol.
Suatu hari, selepas melihat bagaimana Alexey mencuba dan menderita, memasukkan /membunuh xxx setiap kali untuk setiap proses, saya memutuskan untuk menambah "berbilang laras" pada senjata kami:

Kami menjimatkan masa, saraf dan jam kerja

Itu lebih baik! Segala-galanya untuk anda, Alexey, kerja sahaja, sayang!

Sememangnya, pasukan yang begitu penting adalah terhad akses oleh user_id - "kalis mudah". Melihat bagaimana Lesha dengan cekap membunuh proses pada pelayan pangkalan data, beberapa orang cuba memasukkan arahan dengan nombor proses rawak, tetapi anda tidak boleh menipu bot pintar saya, dia segera menolak.

/log amaran

Nah, untuk berjaga-jaga, saya membuat arahan:
/alertlog <bilangan baris> β€” dapatkan bilangan baris alertlog yang ditentukan
Bot menarik log amaran dan menghantarnya ke perkhidmatan kami, seperti pastebin, dipanggil pyste, dan menghantar pautan ke tampal ke sembang permintaan.

/cek

Seterusnya datang permintaan untuk memantau prestasi sebenar aplikasi kami. Sehingga kini, sokongan teknikal projek mengumpul data ini secara manual. Tak kisahlah! Penguji berani kami telah membangunkan kes ujian untuk ini. Log ujian yang terhasil tidak begitu mudah dibaca; pengguna yang tidak berpengalaman akan mengambil masa yang lama untuk memahami dan tidak pasti bahawa dia akan menyerlahkan maklumat yang diperlukan. Dan kami tidak suka melakukan dengan tangan kami apa yang kami tidak boleh lakukan dengan tangan kami... Tugas baharu untuk bot!

Kami menjimatkan masa, saraf dan jam kerja

Arahan /checks memaparkan menu yang ringkas dan jelas; kali ini orang kami belajar cara menggunakan arahan ini tanpa arahan!

Apabila anda memilih item yang diingini, bukannya menu, pemberitahuan tentang permulaan ujian muncul, supaya pengguna yang tidak sabar tidak menjalankan ujian kami 100500 kali:

Kami menjimatkan masa, saraf dan jam kerja

Bergantung pada item menu yang dipilih, ujian khusus dilancarkan dari rangkaian kami, iaitu dari mesin tempat bot hidup (jmeter diprakonfigurasikan di sana, ujian yang diperlukan terletak...) atau terus dari pusat data (dari a mesin yang disediakan di sebelah aplikasi), untuk mengecualikan sambungan rangkaian apabila menguji kelewatan, atau mengurangkannya ke tahap minimum.

Selepas melengkapkan ujian dan menerima log, bot menghuraikannya dan menghasilkan keputusan dalam bentuk "boleh dibaca manusia":

Kami menjimatkan masa, saraf dan jam kerja

Pengumpulan metrik

Fungsi telah tiba dan pengurus projek yang berminat telah menerima fungsi sedemikian untuk wilayah mereka. Dan seorang Pengurus Projek yang penuh belas kasihan berkata: "Saya mahu mempunyai statistik masa!" Seseorang daripada CIT memberitahunya bahawa adalah mudah untuk memantau semua ini dalam Zabbix. Zabbix, jadi Zabbix...

Saya fikir saya perlu bersedia untuk keperluan untuk meniru penyelesaian... Saya meletakkan idea itu ke dalam bekas buruh pelabuhan. Dalam bekas, jmeter dilancarkan mengikut jadual (sekali setiap 10 minit), meletakkan log di tempat tertentu, php menghuraikannya dan memaparkan data yang diperlukan dalam bentuk halaman web. Zabbix, menggunakan kunci web.page.get, menerima halaman ini, kerap memilih data yang diperlukan untuk elemen bergantung tertentu dan membina graf.

Kami menjimatkan masa, saraf dan jam kerja

Saya fikir ia ternyata tidak buruk. Dengan memerhati graf, kita, pertama sekali, melihat anggaran kelajuan aplikasi, dan jika puncak dikesan pada graf, kita tahu lebih kurang di mana "palam" itu berada. Mudah sahaja. Setakat ini ia ternyata hanya mendapat permintaan untuk satu wilayah, tetapi saya bersedia untuk menirunya untuk mereka yang berminat.

Pembangunan aplikasi

Statistik tentang tugasan yang serupa baru-baru ini telah menimbulkan lebih banyak idea untuk memudahkan dan memudahkan kerja. Pada sesetengah projek, pada pelayan aplikasi, terdapat keperluan untuk memasang bekas Crypto Pro utama, terdapat banyak daripada mereka, dan tandatangan digital tamat tempoh dari semasa ke semasa. Kadang-kadang 2 tugas tiba sehari. Tetapi saya menganggap tidak selamat untuk menggunakan bot untuk tujuan ini dan memutuskan bahawa saya akan mencipta fungsi secara langsung dalam aplikasi. Sememangnya dengan kebenaran dan menyemak hak akses. Jika anda mempunyai keistimewaan yang diperlukan, item menu tambahan akan tersedia untuk bekerja dengan tandatangan digital, pemasangan, pemadaman, melihat maklumat, dll. Fungsi ini sedang dibangunkan. Ternyata, ini tidak begitu sukar, anda hanya perlu membaca sedikit arahan yang sedia ada, lihat contoh kod, tanya rakan sekerja yang lebih berpengalaman dalam pembangunan, dan kemudian lakukannya. Semasa proses penyelidikan, idea muncul untuk menambah aplikasi. Saya tidak akan membuat rancangan Napoleon - ada pembangunan, biarkan semua orang memikirkan urusan mereka sendiri. Tetapi walaupun ia menarik, saya melakukannya sendiri.

Rancangan

Seperti yang saya katakan, banyak idea yang berbeza dilahirkan untuk menggunakan bot kami dan bukan sahaja - secara umum, katakan, idea untuk "mata automasi", banyak daripada mereka telah dilupakan, kerana saya tidak mempunyai masa untuk menuliskannya. Sekarang saya cuba menulis semua yang terlintas di fikiran, dan saya mengesyorkan agar orang lain melakukan perkara yang sama.

Tetapi Alexey tidak lupa untuk memberikan hasratnya. Daripada yang terkini:
/kill_sql SQL_ID β€” bunuh semua sesi dengan permintaan SQL_ID ini
/kill_block - membunuh sesi menyekat akar
/show_em β€” tunjukkan gambar prestasi EM
Dia seorang yang licik, dia ingin menjahit DBA dari telefonnya =)

Inilah cara kami bekerja untuk kepentingan Tanah Air!

Bagaimanakah anda melepaskan diri daripada tugasan rutin dan tidak menarik?

Saya harap bacaan itu ternyata menarik, dan mungkin juga berguna kepada seseorang, dan saya tidak sempat membosankan pembaca... Semoga berjaya kepada kita semua.

Sumber: www.habr.com

Tambah komen