Hemat waktu, saraf dan jam kerja

Proyek kami biasanya regional, dan pelanggan, biasanya kementerian. Tetapi, selain sektor publik, organisasi swasta juga menggunakan sistem kami. Praktis tidak ada masalah dengan mereka.

Jadi, proyek-proyek utama bersifat regional, dan terkadang ada masalah dengan mereka. Misalnya, dengan kinerja, ketika di kawasan dari 20k pengguna kami yang berharga berada dalam periode meluncurkan fungsionalitas baru ke server produk. Sangat menyebalkan ...

Nama saya Ruslan dan saya terlibat dalam mengawal sistem informasi BARS Group dan mengembangkan bot pembunuh untuk serial DBA brutal . Puasa bukan untuk orang yang lemah hati - banyak surat dan gambar.



/ awr


Beberapa aplikasi kami berjalan pada Oracle DBMS. Ada proyek di DBMS PostgreSQL. Oracle memiliki hal yang luar biasa - mengumpulkan statistik tentang beban pada DBMS, yang menyoroti masalah yang ada dan bahkan memberikan rekomendasi untuk eliminasi - Automatic Workload Repository (AWR). Pada satu titik (yaitu, pada saat kesakitan), pengembang terus-menerus diminta untuk mengumpulkan laporan AWR untuk analisis kinerja . Kami dengan jujur ​​pergi ke server DBMS, mengumpulkan laporan, menyeretnya kepada kami dan mengirimkannya untuk dianalisis untuk produksi. Sekali setelah tanggal 5 mulai tegang ... setelah tanggal 10 - menyebabkan iritasi ...

Suatu hari, salah satu kolega saya menyatakan ide bahwa segala sesuatu yang dilakukan lebih dari satu kali harus otomatis. Sampai saat jengkel, sejujurnya, saya tidak memikirkannya dan mencoba mengotomatiskan segala sesuatu yang dapat diotomatisasi, tetapi seringkali itu tidak diminati dan lebih banyak penelitian daripada diterapkan.

Dan kemudian saya berpikir: "Admin tidak diperlukan untuk menghasilkan laporan ..." . Lagi pula, mengumpulkan laporan berarti menjalankan skrip sql @ $ ORACLE_HOME / rdbms / admin / awrrpt.sql dan mengambil laporan dari server untuk diri kami sendiri ... Oh ya, kami tidak membiarkan pengembangannya dijual.

Kemudian saya mencari informasi yang diperlukan di Google, membuat fungsi dari artikel berdasarkan pengujian, menarik skrip dan keajaiban - laporan dikumpulkan dan dapat disimpan secara lokal. Membuat fungsi di mana laporan AWR sering dibutuhkan, memberi tahu pengembang cara menggunakannya.

Sekitar waktu ini, di waktu luang saya, setelah berbicara dengan @BotFather, saya membuat bot Telegram untuk diri saya sendiri, hanya untuk bersenang-senang. Saya mengacaukan fungsi sederhana di sana - untuk menunjukkan waktu saat ini, nilai tukar, cuaca, mengajarinya untuk mengirim pujian kepada istri saya (saat itu seorang gadis) sesuai jadwal. Mungkin pada saat itu mengirimkan pujian adalah fungsi bot saya yang paling dicari, istri saya menghargai.

Begitu. Pengembang menulis kepada kami di Telegram, kami mengirim laporan kepada mereka di Telegram ... Tetapi bagaimana jika mereka menulis bukan untuk kami, tetapi ke bot? Memang, akan lebih baik untuk semua orang, laporan akan diterima lebih cepat, dan yang paling penting, oleh kami. Jadi ide fungsionalitas yang dicari pertama kali lahir untuk bot saya.

Saya mulai implementasi. Saya melakukannya, seperti yang saya lakukan, dalam PHP (sebenarnya aplikasi kami menggunakan PHP, saya memahaminya lebih dari Python). Encoder dari saya adalah begitu-begitu, jadi saya tidak akan menunjukkan kode saya :)

Bot hidup di jaringan perusahaan kami, ia memiliki akses ke proyek-proyek tertentu, termasuk database target. Agar tidak repot dengan parameter dalam perintah atau menu, saya mengacaukan fungsi ini ke obrolan grup dengan pemberitahuan pemantauan. Jadi bot segera tahu di mana basis data untuk mengumpulkan laporan.

Setelah menerima perintah dari bentuk / awr N, di mana N adalah jumlah jam penuh di mana laporan diperlukan (secara default - 1 jam), bahkan selama seminggu, jika database belum dimulai kembali, bot segera mulai berfungsi, mengumpulkan laporan, menerbitkannya sebagai halaman web dan di sana (hampir di sana) memberikan tautan ke laporan yang sangat dibutuhkan.

Kami mengikuti tautan dan ini dia, laporan AWR:



Seperti yang diharapkan, para pengembang mengatasi pembuatan laporan ini, seseorang bahkan berterima kasih.

Setelah menghargai kenyamanan tim, manajer proyek dari daerah lain juga menginginkan hal yang sama, karena mereka sebagian besar menerima luli dari pelanggan yang khawatir tentang kinerja dan ketersediaan sistem. Menambahkan bot ke obrolan lain. Mereka masih menggunakannya, dan saya senang karenanya.

Kemudian, kolega dari CIT menulis tentang bagaimana kami mengumpulkan laporan, mereka juga menginginkannya. Saya tidak menambahkannya ke obrolan kami, saya membuat obrolan terpisah dengan pembuatan laporan sesuai jadwal dan permintaan.

/ pgadger


Kami memiliki aplikasi lain dalam PHP bersamaan dengan PostgreSQL. Menerapkan pengumpulan laporan pgBadger untuk mereka yang membutuhkan dengan prinsip yang sama - dalam obrolan grup. Awalnya mereka menggunakannya, tapi kemudian mereka berhenti. Potong fungsional sebagai tidak perlu.

/ tugas


Di departemen kami ada shift malam dan, karenanya, ada jadwal. Itu ada di tabel google. Tidak selalu nyaman untuk mencari tautan, membuka jadwal, mencari sendiri ... Salah satu mantan rekan kerja juga bermain dengan bot Telegram-nya dan memperkenalkan ke dalam obrolan pemberitahuan departemen kami tentang dimulainya pergantian tugas bagi karyawan departemen.Bot mem-parsing jadwal, menentukan petugas pada tanggal saat ini dan, sesuai dengan jadwal atau permintaan, melaporkan siapa yang bertugas hari ini. Ternyata hebat, nyaman. Benar, saya tidak terlalu suka format pesannya. Juga, untuk karyawan departemen lain (misalnya, pusat bisnis "Kedokteran"), informasi tentang personel tugas di bidang lain tidak benar-benar diperlukan, tetapi Anda perlu tahu siapa petugas jaga di "Kedokteran" jika ada masalah. Saya memutuskan untuk "meminjam" fungsionalitas, tetapi untuk mengubah apa yang tidak saya sukai. Saya membuat format pesan yang nyaman bagi diri saya dan orang lain, menghapus informasi yang berlebihan.

/ tnls


Setelah "uji pena" otomatisasi melalui bot Telegram, banyak ide berbeda muncul, tetapi saya ingin melakukan hal-hal yang sangat diperlukan. Saya memutuskan untuk membuat statistik pada banding. Untuk mengakses proyek-proyek pelanggan kami, kami telah mengimplementasikan apa yang disebut "server hop" atau server penerusan. Koneksi VPN dinaikkan di atasnya, kemudian melalui ssh, port aplikasi, database, dan probe tambahan lainnya diteruskan ke jaringan lokal kami untuk kenyamanan akses ke proyek karyawan kami, tanpa masalah dengan koneksi VPN. Cukup untuk mengatur koneksi VPN ke jaringan perusahaan kami.

Statistik panggilan menyarankan bahwa sering, setelah jatuhnya salah satu terowongan (dalam kasus masalah jaringan, oleh batas waktu, misalnya), mereka beralih ke untuk memulihkan akses ke proyek. Dalam kebanyakan kasus, hanya me-restart koneksi sudah cukup dan semuanya menjadi baik-baik saja. Mari kita lakukan sendiri. Berikut adalah perintah:


“Jatuh melalui” untuk item menu yang diinginkan, pilih proyek Anda, tunggu sebentar dan semua orang senang dan puas ...

Setelah menerima perintah, dengan gerakan sedikit yang byte dan bit, menghubungkan bot ke forwarding Server, mengetahui di muka yang kebutuhan forwarding di-restart, dan melakukan pekerjaannya - memulihkan koneksi ke proyek. Saya menulis instruksi untuk menyelesaikan masalah seperti itu sendiri. Dan kami dihubungi hanya jika alat yang disediakan tidak berfungsi ...

/ ecp_to_pem


Selanjutnya, statistik menunjukkan bahwa sering kali perlu untuk mengubah tanda tangan digital Crypto Pro ke format pem ( Base64 ) untuk berbagai integrasi, dan kami memiliki banyak dari mereka. Tugas: Anda mengambil wadah, menyalinnya ke komputer Windows dengan utilitas P12FromGostCSP diinstal (omong-omong, dibayar), mengonversinya menjadi pfx, dan mengonversi pfx menggunakan OpenSSL (dengan dukungan untuk enkripsi GOST) ke pem. Tidak terlalu nyaman, tetapi saya ingin itu dengan mengklik jari.

Google kembali datang untuk menyelamatkan. Menemukan utilitas dari beberapa orang baik . Dikumpulkan, seperti yang ditulis dalam README - payah. Dia mengajarkan bot untuk bekerja dengan utilitas dan mendapat konversi hampir instan.


Pada saat implementasi akhir, perintah dikeluarkan untuk beralih ke format enkripsi baru - gost-2012. Sejauh yang saya ingat, utilitas pada saat itu hanya bekerja dengan GOST lama (2001), mungkin itu umumnya utilitas lain yang serupa dari orang baik lain, saya tidak ingat persis.
Setelah transisi ke GOST baru, fungsionalitas bot dihapus karena alasan keamanan. Diimplementasikan dalam wadah buruh pelabuhan.

Dockerfile, tiba-tiba yang membutuhkan:
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 mengonversi, Anda perlu menempatkan wadah sumber (direktori formulir xxx.000) di direktori / srv / in, dan mengambil pem yang sudah selesai di / srv / out.

Untuk mengubah:

 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 ketika, perusahaan kami mendapatkan Oracle DBA yang sangat keren, dengan lebih banyak pengalaman dalam mengelola DBMS dan dalam pengembangan. Dan itu tidak terjadi segera dengan koneksi ssh ke server DBMS: entah itu tidak tahu di mana harus terhubung dan bagaimana, maka akses tidak dijelaskan dengan jelas, tidak mungkin untuk meneruskan sesuatu ke dirinya sendiri. Kami senang membantu, berbicara tentang cara menyambungkan, dan meneruskan Enterprise Manager untuk itu. Tetapi dengan ssh itu masih tidak berhasil. Salah satu rekan menjelaskannya secara sederhana: DBA berdarah murni :) Kami memutuskan jika kami perlu mengencangkan sesuatu di server, kami akan melakukannya sendiri.

EM lumpuh karena beban berat, dan menyalakannya kembali ... Anda harus terhubung melalui ssh dan memulai kembali melalui terminal. "Admin tahu ini dengan baik," rekan baru kami memutuskan. Beban besar pada DBMS tidak jarang bersama kami, permintaan untuk memulai kembali EM juga sering. Kemudian skenario yang sama: ketegangan, iritasi dan mencari solusi untuk masalah tersebut. Jadi di grup yang sama, muncul obrolan perintah: / emstop dan / emstart.



/ bunuh


Dalam kasus persaingan yang kuat di pangkalan, dan ini kadang-kadang terjadi, Anda perlu membongkar basis data dengan cepat. Cara tercepat adalah dengan membunuh proses yang bermasalah ... Untuk melakukan ini, hubungkan melalui ssh, bunuh -9 ... Bot akan membantu!



Alexey menghargai tim dan memberinya nama penuh kasih sayang - "Kilyalka" atau senjata.
Suatu hari, setelah melihat bagaimana Alex berusaha dan menderita, setiap kali memasuki / membunuh xxx untuk setiap proses, saya memutuskan untuk menambahkan "multilateralisme" ke senjata kami:



Itu lebih baik! Segalanya untukmu, Alex, hanya bekerja, sayang!

Tentu saja, akses ke perintah penting seperti itu dibatasi oleh user_id - "perlindungan terhadap orang bodoh." Melihat bagaimana Lesha secara pintar memakukan proses pada server database, beberapa orang mencoba memasukkan perintah dengan nomor proses acak, tetapi Anda tidak bisa menipu bot pintar saya, dia langsung menolak.

/ alertlog


Nah, untuk berjaga-jaga, saya membuat perintah:
/ alertlog <jumlah baris> - dapatkan jumlah baris yang ditentukan alertlog'a
Bot menarik alertlog dan mengirimkannya ke layanan kami, seperti pastebin, disebut pyste, dan mengirimkan tautan ke tempel ke permintaan obrolan.

/ cek


Kemudian datang permintaan untuk memantau kinerja aplikasi kita yang sebenarnya. Sampai sekarang, dukungan teknis untuk proyek ini telah mengumpulkan data ini dengan tangan. Bukan kesepakatan! Penguji kami yang gagah berani telah mengembangkan kasus uji untuk ini. Log uji yang dihasilkan sangat tidak nyaman untuk dibaca, pengguna yang tidak berpengalaman akan mengerti untuk waktu yang lama dan bukan fakta bahwa ia akan menyoroti informasi yang diperlukan. Dan kami tidak ingin melakukan dengan tangan kami apa yang tidak bisa kami lakukan dengan tangan kami ... Tugas baru untuk bot!



Perintah / checking menampilkan menu langsung dan tidak ambigu, kali ini orang-orang kami belajar cara menggunakan perintah ini tanpa instruksi!

Saat Anda memilih item yang diinginkan, alih-alih menu, notifikasi muncul tentang awal pengujian sehingga pengguna yang tidak sabar tidak menjalankan pengujian kami 100500 kali:



Tergantung pada item menu yang dipilih, tes khusus diluncurkan dari jaringan kami, yaitu dari mesin tempat bot hidup (jmeter sudah dipra-konfigurasi di sana, tes yang diperlukan ditempatkan ...) atau langsung dari pusat data (dari mesin yang disiapkan di sebelah aplikasi), sehingga saat pengujian menghilangkan penundaan jaringan, baik, atau menguranginya.

Setelah menyelesaikan tes dan menerima log, bot mem-parsingnya dan menampilkan hasilnya dalam bentuk "yang bisa dibaca manusia":



Koleksi metrik


Fungsionalitas telah "masuk" dan manajer proyek yang ingin telah menerima fungsi seperti itu untuk wilayah mereka. Dan seorang Manajer Proyek yang penuh kasih berkata: "Saya ingin memiliki statistik tepat waktu!" Seseorang dari CIT mengatakan kepadanya bahwa akan lebih mudah untuk memantau semua ini di Zabbix. Zabbix, jadi Zabbix ...

Kupikir perlu mempersiapkan kebutuhan untuk menduplikasi solusinya ... Aku merancang ide dalam wadah buruh pelabuhan. Dalam wadah, sesuai dengan jadwal (setiap 10 menit), jmeter diluncurkan, menambahkan log di tempat tertentu, php mem-parsingnya dan menampilkan data yang diperlukan dalam bentuk halaman web. Zabbix menggunakan kunci web.page.get untuk mendapatkan halaman ini, secara teratur memilih data yang diperlukan untuk elemen dependen tertentu dan membuat grafik.



Tampaknya itu tidak buruk. Mengamati grafik, pertama-tama kita melihat perkiraan kecepatan aplikasi, dan jika puncak terdeteksi pada grafik, kita tahu kira-kira di mana “colokan” berada. Semuanya sederhana. Sejauh ini ternyata permintaan hanya untuk satu wilayah, tetapi saya siap untuk mereplikasi untuk mereka yang berharap.

Pengembangan aplikasi


Statistik pada tugas-tugas dari jenis yang sama belum lama ini memunculkan ide-ide untuk menyederhanakan dan memfasilitasi pekerjaan. Pada beberapa proyek, pada server aplikasi, ada kebutuhan untuk menginstal wadah utama Crypto Pro, ada banyak dari mereka, dan tanda tangan digital akan kedaluwarsa dari waktu ke waktu. Terkadang 2 tugas “terbang” per hari. Tetapi saya menganggap menggunakan bot untuk tujuan ini tidak aman dan memutuskan bahwa saya akan melakukan fungsi secara langsung dalam aplikasi. Wajar dengan otorisasi dan kontrol akses. Jika Anda memiliki hak istimewa yang diperlukan, item menu tambahan akan tersedia untuk bekerja dengan tanda tangan digital, instalasi, penghapusan, melihat informasi, dll ... Saat ini, fungsionalitas sedang dalam pengembangan. Ternyata, itu tidak terlalu sulit, Anda perlu membaca instruksi sedikit, melihat contoh kode, bertanya pada kolega yang lebih berpengalaman dalam pengembangan, dan begitulah.Dalam proses penelitian, muncul ide untuk ditambahkan ke aplikasi. Saya tidak akan membangun rencana Napoleon - ada pengembangan, biarkan semua orang melakukan hal mereka sendiri. Tetapi untuk sekarang, ini menarik - saya melakukannya sendiri.

Rencana


Seperti yang saya katakan, banyak ide yang berbeda lahir untuk menggunakan bot kami dan tidak hanya - secara umum, katakanlah, ide untuk "titik otomatisasi", banyak dari mereka dilupakan, karena saya tidak punya waktu untuk menuliskannya. Sekarang saya mencoba menuliskan semua yang terlintas dalam pikiran, dan saya merekomendasikan orang lain melakukan hal yang sama.

Namun Alex tidak lupa membuang Wishlist nya. Yang terakhir:
/ kill_sql SQL_ID - matikan semua sesi dengan query SQL_ID
/ kill_block - bunuh sesi blocking root
/ show_em - tampilkan gambar kinerja EM
Trick, ingin menjahit DBA dari telepon =)

Begitulah cara kami bekerja untuk kebaikan Motherland!

Dan bagaimana Anda menyelamatkan diri dari tugas rutin dan tidak menarik?

Saya harap bacaannya ternyata menarik, dan mungkin bahkan bermanfaat bagi seseorang, dan saya tidak punya waktu untuk membuat pembaca bosan ... Semoga beruntung bagi kita semua.

All Articles