Nou ekonomize tan, nè ak èdtan moun

Pwojè nou yo anjeneral rejyonal, ak kliyan yo anjeneral ministè. Men, anplis sektè piblik, òganizasyon prive yo sèvi ak sistèm nou yo tou. Pratikman pa gen pwoblèm ak yo.

Se konsa, pwojè prensipal yo se rejyonal, epi pafwa gen pwoblèm ak yo. Pou egzanp, ak pèfòmans, lè nan rejyon yo gen plis pase 20k nan itilizatè presye nou yo pandan peryòd la nan woule soti nouvo fonksyonalite sou sèvè pwodwi yo. Se yon doulè...

Non mwen se Ruslan e mwen sipòte sistèm enfòmasyon BARS Group ak devlope yon bot asasen pou DBA seri vyolan. Pòs sa a se pa pou moun ki fèb nan kè - gen yon anpil nan lèt ak foto.

Nou ekonomize tan, nè ak èdtan moun

/awr

Kèk nan aplikasyon nou yo kouri sou Oracle DBMS. Genyen tou pwojè sou DBMS PostgreSQL. Oracle gen yon bèl bagay - kolekte estatistik sou chaj la sou DBMS la, ki mete aksan sou pwoblèm ki deja egziste e menm fè rekòmandasyon pou eliminasyon - Automatic Workload Repository (AWR). Nan yon pwen (savwa nan moman doulè), devlopè yo toujou ap mande pou kolekte Rapò AWR pou analiz pèfòmans. Nou onètman te ale nan sèvè a DBMS, kolekte rapò, te mennen yo ba nou epi voye yo nan pwodiksyon pou analiz. Apre 5yèm fwa li te vin anmèdan... apre 10yèm lan li te vin enèvan...

Youn nan kòlèg mwen yo yon fwa te eksprime lide ke tout bagay ki fèt plis pase yon fwa yo ta dwe otomatize. Jiska moman sa a nan iritasyon, yo dwe onèt, mwen pa t 'panse sou li epi yo te eseye otomatize tout bagay ki ta ka otomatize, men souvan li pa t' nan demann e li te plis nan yon rechèch olye ke yon nati aplike.

Apre sa, mwen te panse: "Admin yo pa bezwen pou jenere yon rapò...". Apre yo tout, kolekte yon rapò vle di egzekite script sql @$ORACLE_HOME/rdbms/admin/awrrpt.sql epi pran rapò a soti nan sèvè a nan plas ou ... Oh wi, nou pa pèmèt devlopman pou pwodiksyon an.

Lè sa a, mwen Googled enfòmasyon ki nesesè yo, kreye fonksyon an nan atik la sou baz tès la, kouri script la ak mirak - rapò a te konpile epi yo ka sove lokalman. Te kreye fonksyon kote rapò AWR yo te souvan bezwen epi li te di devlopè yo kijan pou yo itilize yo.

Nan tan sa a, nan tan lib mwen an, apre m fin pale ak @BotFather, mwen te kreye yon bot Telegram pou tèt mwen, jis pou plezi. Mwen vise nan yon fonksyonalite senp la - montre tan aktyèl la, to echanj, move tan, te anseye li voye konpliman bay madanm mwen (Lè sa a, mennaj) sou yon orè. Petèt, nan moman sa a, voye konpliman se te fonksyonalite ki pi popilè nan bot mwen an, ak madanm mwen te apresye li.

Se konsa. Devlopè yo ekri nou nan Telegram, nou voye yon rapò ba yo nan Telegram... E si yo pa ekri nou, men yon bot? Apre yo tout, li pral pi bon pou tout moun, rapò a pral resevwa pi vit, ak pi enpòtan an, kontoune nou. Men ki jan lide premye fonksyonalite popilè pou bot mwen an te fèt.

Mwen te kòmanse aplikasyon. Mwen te fè li, jan mwen te kapab, nan PHP (aplikasyon nou an li menm se nan PHP, mwen plis vèrs nan li pase nan Python). Mwen pa yon bon kodè, kidonk mwen pa pral montre w kòd mwen an :)

Bot la ap viv sou rezo antrepriz nou an epi li gen aksè a sèten pwojè, ki gen ladan baz done sib. Nan lòd pa deranje ak paramèt nan ekip la oswa meni, mwen te ajoute fonksyonalite sa a nan chat gwoup la ak notifikasyon siveyans. Nan fason sa a bot la imedyatman konnen ki baz done kolekte rapò a.

Lè w te resevwa yon kòmandman tankou /awr N, kote N se kantite èdtan konplè pou yo bezwen yon rapò (pa default - 1 èdtan), menm pou yon semèn, si baz done a pa te rekòmanse, bot la imedyatman kòmanse travay, kolekte rapò a, pibliye li kòm yon paj wèb epi imedyatman (prèske la) bay yon lyen nan rapò ki nesesè anpil.

Swiv lyen an ak isit la li ye, rapò a AWR:

Nou ekonomize tan, nè ak èdtan moun

Kòm espere, devlopè yo fè fas ak jenerasyon rapò sa yo, ak kèk menm remèsye nou.

Èske w gen apresye konvenyans nan ekip la, manadjè pwojè ki soti nan lòt rejyon yo te vle menm bagay la, depi yo resevwa pi plis nan men kliyan an epi yo enkyete sou pèfòmans nan ak disponiblite nan sistèm yo. Mwen te ajoute bot la nan lòt chat. Yo toujou sèvi ak li, e mwen byen kontan sou li.

Apre sa, kòlèg CIT yo te jwenn enfòmasyon sou fason nou kolekte rapò epi yo te vle fè li tou. Mwen pa t ajoute yo nan chat nou yo, mwen te kreye yon chat separe ak jenerasyon an nan rapò sou yon orè ak sou demann.

/pgBadger

Nou gen lòt aplikasyon tou nan PHP an konjonksyon avèk PostgreSQL. Mwen aplike koleksyon rapò pgBadger pou moun ki nan bezwen lè l sèvi avèk menm prensip la - nan gwoup chat. Okòmansman yo te itilize li, men apre yo te sispann. Fonksyonalite a te koupe kòm nesesè.

/devwa

Depatman nou an gen orè lannwit epi, kòmsadwa, gen yon orè. Li nan Google Sheets. Li pa toujou pratik pou chèche yon lyen, louvri yon tablo, gade pou tèt ou... Youn nan ansyen kòlèg mwen yo te jwe tou ak bot Telegram li a epi li te prezante l nan chat depatman nou an. notifikasyon sou kòmansman chanjman devwa pou anplwaye depatman yo. Bot la analize orè a, detèmine moun ki nan sèvis la pa dat aktyèl la epi, dapre orè a oswa sou demann, rapòte ki moun ki an sèvis jodi a. Li te tounen gwo ak pratik. Se vre, mwen pa t vrèman renmen fòma mesaj yo. Epitou, pou anplwaye nan yon lòt depatman (pa egzanp, BC "Medisin"), enfòmasyon sou moun ki nan sèvis nan lòt direksyon pa vrèman nesesè, men ou bezwen konnen ki moun ki nan sèvis nan "Medisin" nan ka ta gen pwoblèm. Mwen deside "prete" fonksyonalite a, men chanje sa mwen pa t renmen. Mwen te fè yon fòma mesaj pratik pou tèt mwen ak lòt moun, retire enfòmasyon ki pa nesesè.

/tnls

Apre yo fin eseye automatisation lè l sèvi avèk yon bot Telegram, anpil lide diferan parèt, men mwen te vle fè bagay ki nesesè yo. Mwen deside dirije estatistik sou demann yo. Pou jwenn aksè nan pwojè kliyan nou yo, nou te aplike yon sa yo rele "sèvè so" oswa sèvè transmisyon. Koneksyon VPN yo leve sou li, Lè sa a, pò aplikasyon, baz done ak lòt transmisyon oksilyè yo voye nan rezo lokal nou an atravè ssh, pou aksè fasil nan pwojè yo nan anplwaye nou yo, san pwoblèm ak koneksyon VPN. Tout sa ou bezwen fè se etabli yon koneksyon VPN nan rezo antrepriz nou an.

Estatistik demann yo montre ke souvan, apre youn nan tinèl yo echwe (nan ka pwoblèm rezo a, akòz yon delè, pou egzanp), moun kontakte nou sou restorasyon aksè nan pwojè a. Nan pifò ka yo, jis rekòmanse koneksyon an ase ak tout bagay anfòm. Ann fè li tèt ou. Men kòmandman an:
Nou ekonomize tan, nè ak èdtan moun

Ou "tonbe nan" nan atik la meni vle, chwazi pwojè ou a, rete tann yon minit ak tout moun kontan ak satisfè ...

Lè yo resevwa yon kòmandman, ak yon ti mouvman nan bytes yo ak Bits, bot la konekte ak sèvè a voye, konnen davans ki transmisyon bezwen yo dwe rekòmanse, epi fè travay li - retabli koneksyon an nan pwojè a. Mwen te ekri enstriksyon pou ou ka rezoud pwoblèm sa yo tèt ou. Epi moun yo te kontakte nou sèlman si zouti yo bay la pa t travay...

/ecp_to_pem

Plis estatistik te montre ke li se souvan nesesè konvèti EDS Crypto Pro nan fòma pem(Sèvi64) pou plizyè entegrasyon, e nou gen anpil ladan yo. Objektif Travay la: pran yon veso, kopye li nan yon òdinatè Windows ak sèvis piblik la P12FromGostCSP enstale (peye, nan chemen an), konvèti li nan pfx, ak Lè sa a, konvèti pfx lè l sèvi avèk OpenSSL (ak sipò pou chifreman GOST) nan pem. Li pa trè pratik, men ou vle li nan menen nan dwèt ou.

Google te vin pote sekou ankò. Jwenn itilite yon moun kalite. Mwen rasanble li jan sa ekri nan README a - li te travay. Mwen te anseye bot la pou travay ak sèvis piblik la epi mwen te resevwa yon konvèsyon prèske enstantane.
Nou ekonomize tan, nè ak èdtan moun

Nan moman aplikasyon final la, yo te bay yon lòd pou chanje nan yon nouvo fòma chifreman - gost-2012. Osi lwen ke mwen sonje, sèvis piblik la nan moman sa a sèlman te travay ak ansyen GOST la (2001), petèt li te yon lòt sèvis piblik menm jan an soti nan yon lòt moun kalite, mwen pa sonje egzakteman.
Apre tranzisyon an nan nouvo GOST la, fonksyonalite bot la te retire pou rezon sekirite. Aplike li nan yon veso Docker.

Dockerfile, nan ka nenpòt moun ki bezwen li:

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

Pou konvèti, ou bezwen mete veso orijinal la (anyè tankou xxx.000) nan anyè /srv/in, epi pran pem fini a nan /srv/out.

Pou konvèti:

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

Yon jou, yon DBA Oracle trè fre, ki gen anpil eksperyans nan administrasyon ak devlopman DBMS, te jwenn yon travay nan konpayi nou an. Apre sa, li imedyatman te gen pwoblèm pou konekte ak sèvè DBMS yo ak ssh: li pa konnen ki kote oswa ki jan yo konekte, aksè a pa klèman dekri, oswa li pa ka voye yon bagay li bezwen pou tèt li. Oke, nou kontan ede, nou te di l 'ki jan yo konekte, epi voye l' Enterprise Manager. Men, bagay yo toujou pa t 'travay soti ak ssh. Youn nan kòlèg mwen yo eksplike li tou senpleman: yon DBA ras :) Nou deside ke si nou bezwen ajiste yon bagay sou sèvè a, nou pral fè li tèt nou.

EM pafwa fè aksidan anba chaj lou, epi rekòmanse li ... ou bezwen konekte via ssh ak rekòmanse nan tèminal la. "Admins yo bon nan sa a," nouvo kòlèg nou an te deside. Chaj lou sou DBMS yo pa estraòdinè pou nou, epi demann pou rekòmanse EM yo komen tou. Lè sa a, senaryo a menm: tansyon, iritasyon ak rechèch pou yon solisyon a pwoblèm nan. Se konsa, nan menm gwoup chat yo te parèt kòmandman sa yo: /emstop ak /emstart.

Nou ekonomize tan, nè ak èdtan moun

/touye

Si gen yon gwo konpetisyon sou baz done a, epi pafwa sa rive, li nesesè byen vit dechaje baz done a. Fason ki pi rapid la se touye pwosesis la pwoblèm... Pou fè sa, konekte via ssh, touye -9... Bot la ap ede!

Nou ekonomize tan, nè ak èdtan moun

Alexey te apresye ekip la e li te ba li yon non afeksyon - "Kilyalka" oswa yon zam.
Yon jou, apre mwen fin gade kijan Alexey te eseye ak soufri, antre nan /kill xxx chak fwa pou chak nan pwosesis yo, mwen deside ajoute "milti-barik" nan zam nou an:

Nou ekonomize tan, nè ak èdtan moun

Sa pi bon! Tout se pou ou, Alexey, jis travay, cheri!

Natirèlman, yon ekip enpòtan konsa te limite aksè pa user_id - "foolproof". Wè ki jan Lesha adrwatman touye pwosesis sou sèvè baz done a, plizyè moun te eseye antre nan yon lòd ak yon nimewo pwosesis o aza, men ou pa ka twonpe bot entelijan mwen an, li imedyatman refize.

/alertlog

Oke, jis nan ka, mwen te fè kòmandman an:
/alertlog <kantite liy> — jwenn kantite liy alertlog espesifye yo
Bot la rale yon alertlog epi voye li nan sèvis nou an, tankou pastebin, ki rele pyste, epi li voye yon lyen nan keratin nan chat la demann.

/cheks

Next te vin yon demann pou kontwole pèfòmans reyèl aplikasyon nou an. Jiska kounye a, sipò teknik pwojè kolekte done sa yo manyèlman. Pa gen pwoblèm! Testè vanyan nou yo te devlope ka tès pou sa. Jounal tès la ki kapab lakòz pa trè pratik pou li; yon itilizatè san eksperyans pral pran anpil tan pou konprann epi li pa sèten ke li pral mete aksan sou enfòmasyon ki nesesè yo. Epi nou pa renmen fè ak men nou sa nou pa ka fè ak men nou... Yon nouvo travay pou bot la!

Nou ekonomize tan, nè ak èdtan moun

Kòmandman /checks la montre yon meni ki senp epi ki klè; fwa sa a mesye nou yo te aprann kijan pou yo itilize kòmandman sa a san enstriksyon!

Lè ou chwazi atik ou vle a, olye de yon meni, yon notifikasyon sou kòmansman tès la parèt, pou itilizatè enpasyan pa kouri tès nou an 100500 fwa:

Nou ekonomize tan, nè ak èdtan moun

Tou depan de atik nan meni chwazi a, yo lanse yon tès espesifik nan rezo nou an, sètadi nan machin nan kote bot la ap viv (jmeter se pre-konfigirasyon la, tès ki nesesè yo sitiye ...) oswa dirèkteman nan sant done a (ki soti nan yon prepare machin akote aplikasyon an), yo nan lòd yo eskli koneksyon rezo lè tès reta, oswa diminye yo nan yon minimòm.

Apre li fin ranpli tès la epi li resevwa boutèy la, bot la analize li epi li pwodui rezilta a nan yon fòm "lizib pou moun":

Nou ekonomize tan, nè ak èdtan moun

Koleksyon metrik

Fonksyonalite a te rive ak manadjè pwojè ki enterese yo te resevwa yon fonksyon konsa pou rejyon yo. Ak yon Manadjè Pwojè konpasyon te di: "Mwen vle gen estatistik tan!" Yon moun nan CIT te di li ke li ta bon pou kontwole tout bagay sa yo nan Zabbix. Zabbix, donk Zabbix...

Mwen te panse ke mwen te bezwen prepare pou bezwen an repwodui solisyon an ... Mwen mete lide a nan yon veso docker. Nan veso a, jmeter lanse sou yon orè (yon fwa chak 10 minit), mete boutèy la nan yon sèten kote, php analize li epi montre done ki nesesè yo nan fòm lan nan yon paj entènèt. Zabbix, lè l sèvi avèk kle web.page.get la, resevwa paj sa a, regilyèman chwazi done ki nesesè pou sèten eleman depandan epi li bati yon graf.

Nou ekonomize tan, nè ak èdtan moun

Mwen panse ke li te tounen soti pa mal. Lè nou obsève graf la, nou, premyèman, wè vitès apwoksimatif aplikasyon an, epi si yo detekte pik sou graf la, nou konnen apeprè kote "plòg" la ye. Li senp. Jiskaprezan li te tounen soti nan demann sèlman pou yon rejyon, men mwen pare yo repwodui li pou moun ki enterese.

Devlopman aplikasyon

Estatistik sou travay menm jan an dènyèman te bay plis lide pou senplifye ak fasilite travay. Sou kèk pwojè, sou sèvè aplikasyon yo, gen yon bezwen enstale resipyan kle Crypto Pro, gen anpil nan yo, ak siyati dijital la ekspire sou tan. Pafwa 2 travay rive yon jou. Men, mwen konsidere li pa an sekirite pou itilize yon bot pou rezon sa yo epi mwen deside ke mwen ta kreye fonksyonalite a dirèkteman nan aplikasyon an. Natirèlman ak otorizasyon ak tcheke dwa aksè. Si w gen privilèj ki nesesè yo, yon lòt atik meni ap disponib pou travay ak siyati dijital, enstalasyon, efase, gade enfòmasyon, elatriye. Fonksyonalite a ap devlope kounye a. Kòm li te tounen soti, sa a se pa trè difisil, ou jis bezwen li enstriksyon yo ki deja egziste yon ti kras, gade nan egzanp kòd, mande kòlèg ki gen plis eksperyans nan devlopman, ak Lè sa a, fè li. Pandan pwosesis rechèch la, lide parèt pou ajoute nan aplikasyon an. Mwen pa pral fè plan Napoleon - gen devlopman, kite tout moun okipe pwòp biznis yo. Men, pandan ke li enteresan, mwen fè li tèt mwen.

Plan

Kòm mwen te di, anpil lide diferan te fèt pou itilize bot nou an epi pa sèlman - an jeneral, ann di, lide pou "pwen automatisation", anpil nan yo te bliye, paske mwen pa t 'gen tan ekri yo. Koulye a, mwen eseye ekri tout sa ki vin nan tèt ou, epi mwen rekòmande ke lòt moun fè menm bagay la.

Men, Alexey pa bliye bay volonte li. Soti nan dènye a:
/kill_sql SQL_ID — touye tout sesyon yo ak demann SQL_ID sa a
/kill_block - touye sesyon an bloke rasin
/montre_em — montre yon foto pèfòmans EM
Li se yon nèg sounwa, li vle koud DBA nan telefòn li =)

Men ki jan nou travay pou benefis Matènèl la!

Ki jan ou debarase tèt ou de travay woutin ak san enterè?

Mwen espere ke lekti a te vin enteresan, e petèt menm itil pou yon moun, e mwen pa t gen tan anwiye lektè a... Bon chans pou nou tout.

Sous: www.habr.com

Add nouvo kòmantè