Sparen Sie Zeit, Nerven und Arbeitsstunden

Unsere Projekte sind in der Regel regional und Kunden in der Regel Ministerien. Neben dem öffentlichen Sektor nutzen aber auch private Organisationen unsere Systeme. Es gibt praktisch keine Probleme mit ihnen.

Die Hauptprojekte sind also regional und manchmal gibt es Probleme mit ihnen. Zum Beispiel sind unsere wertvollen Benutzer mit der Leistung in Regionen ab 20.000 im Begriff, neue Funktionen für Produktserver bereitzustellen. Es ist ein Schmerz ...

Mein Name ist Ruslan und ich bin daran beteiligt, die Informationssysteme der BARS Group zu eskortieren und einen Killer-Bot für brutale serielle Datenbankadministratoren zu entwickeln . Fasten ist nichts für schwache Nerven - viele Buchstaben und Bilder.



/ awr


Einige unserer Anwendungen laufen unter Oracle DBMS. Es gibt Projekte im PostgreSQL-DBMS. Oracle hat eine wunderbare Sache - das Sammeln von Statistiken über die Belastung des DBMS, die die vorhandenen Probleme hervorheben und sogar Empfehlungen zur Beseitigung geben - Automatic Workload Repository (AWR). Zu einem bestimmten Zeitpunkt (nämlich zum Zeitpunkt des Schmerzes) baten die Entwickler ständig darum, AWR-Berichte für die Leistungsanalyse zu sammeln . Wir gingen ehrlich zum DBMS-Server, sammelten Berichte, zogen sie zu uns und schickten sie zur Analyse an die Produktion. Einmal nach dem 5. begann es sich zu belasten ... nach dem 10. - um Irritationen zu verursachen ...

Eines Tages äußerte einer meiner Kollegen die Idee, dass alles, was mehr als einmal gemacht wird, automatisiert werden sollte. Um ehrlich zu sein, habe ich bis zum Moment des Ärgers nicht darüber nachgedacht und versucht, alles zu automatisieren, was automatisiert werden kann, aber oft war es nicht gefragt und eher eine Forschung als eine angewandte.

Und dann dachte ich: "Administratoren werden nicht benötigt, um einen Bericht zu erstellen ..." . Um einen Bericht zu sammeln, müssen Sie schließlich das SQL-Skript @ $ ORACLE_HOME / rdbms / admin / awrrpt.sql ausführen und den Bericht vom Server zu uns nehmen ... Oh ja, wir lassen die Entwicklung nicht in den Verkauf gehen.

Dann habe ich die notwendigen Informationen gegoogelt, auf Testbasis eine Funktion aus dem Artikel erstellt, das Skript und ein Wunder gezogen - der Bericht wurde gesammelt und kann lokal gespeichert werden. Erstellte Funktionen, bei denen häufig AWR-Berichte benötigt wurden, und erklärte den Entwicklern, wie sie verwendet werden sollen.

Um diese Zeit habe ich in meiner Freizeit nach einem Gespräch mit @BotFather einen Telegramm-Bot für mich erstellt, nur zum Spaß. Ich habe dort eine einfache Funktion vermasselt - um die aktuelle Zeit, die Wechselkurse und das Wetter anzuzeigen, und ihm beigebracht, meiner Frau (damals ein Mädchen) nach einem Zeitplan Komplimente zu schicken. Vielleicht war das Versenden von Komplimenten zu dieser Zeit die gefragteste Funktion meines Bots, schätzte meine Frau.

Damit. Die Entwickler schreiben uns in Telegramm, wir senden ihnen einen Bericht in Telegramm ... Aber was ist, wenn sie nicht an uns, sondern an den Bot schreiben? In der Tat wird es für alle besser sein, der Bericht wird schneller und vor allem von uns eingehen. So entstand für meinen Bot die Idee der ersten begehrten Funktionalität.

Ich habe mit der Implementierung begonnen. Ich habe es getan, wie ich es geschafft habe, in PHP (tatsächlich ist unsere Anwendung in PHP, ich verstehe es mehr als Python). Der Encoder ist so lala von mir, dass ich meinen Code nicht zeige :) Der

Bot lebt in unserem Unternehmensnetzwerk und hat Zugriff auf bestimmte Projekte, einschließlich Zieldatenbanken. Um mich nicht mit den Parametern im Befehl oder im Menü zu beschäftigen, habe ich diese Funktionalität mit einem Gruppenchat mit Überwachungsbenachrichtigungen verknüpft. So weiß der Bot sofort, in welcher Datenbank der Bericht erfasst werden soll.

Nachdem Sie einen Befehl des Formulars / awr N erhalten habenWenn N die Anzahl der vollen Stunden ist, für die ein Bericht benötigt wird (standardmäßig - 1 Stunde), selbst wenn die Datenbank nicht neu gestartet wird, beginnt der Bot sofort mit der Arbeit, sammelt den Bericht, veröffentlicht ihn als Webseite und genau dort (fast) genau dort) gibt einen Link zu einem dringend benötigten Bericht.

Wir folgen dem Link und hier ist der AWR-Bericht:



Wie erwartet haben die Entwickler diese Berichtsgenerierung bewältigt, jemand hat sich sogar bedankt.

Nachdem Projektmanager aus anderen Regionen die Bequemlichkeit des Teams geschätzt hatten, wollten sie dasselbe, weil sie vor allem vom Kunden Luli erhalten, die sich um die Leistung und Verfügbarkeit der Systeme sorgen. Anderen Chats wurde ein Bot hinzugefügt. Sie benutzen es immer noch und ich bin froh darüber.

Später schrieben Kollegen vom CIT darüber, wie wir Berichte sammeln, sie wollten es auch. Ich habe sie nicht zu unseren Chats hinzugefügt, sondern einen separaten Chat mit der Erstellung von Berichten nach Zeitplan und auf Anfrage erstellt.

/ pgBadger


Wir haben andere Anwendungen in PHP in Verbindung mit PostgreSQL. Implementierung der Sammlung des pgBadger-Berichts für Bedürftige nach demselben Prinzip - in Gruppenchats. Zuerst benutzten sie es, aber dann hörten sie auf. Funktionsausschnitt als unnötig.

/ Pflicht


In unserer Abteilung gibt es Nachtschichten und dementsprechend gibt es einen Zeitplan. Es ist in Google Tables. Es ist nicht immer bequem, nach einem Link zu suchen, einen Zeitplan zu öffnen, sich selbst zu überzeugen ... Einer der ehemaligen Kollegen spielte auch mit seinem Telegramm-Bot und führte in den Chat unserer Abteilungsbenachrichtigungen über den Beginn einer Dienstschicht für die Abteilungsmitarbeiter ein.Der Bot analysiert den Zeitplan, bestimmt die Telefonzentrale anhand des aktuellen Datums und meldet gemäß Zeitplan oder auf Anfrage, wer heute im Dienst ist. Es stellte sich heraus, großartig, bequem. Das Nachrichtenformat hat mir zwar nicht wirklich gefallen. Für Mitarbeiter einer anderen Abteilung (z. B. Business Center „Medizin“) sind Informationen zum Dienst in anderen Bereichen nicht unbedingt erforderlich. Sie müssen jedoch wissen, wer bei Problemen in „Medizin“ im Dienst ist. Ich beschloss, die Funktionalität auszuleihen, aber zu ändern, was mir nicht gefiel. Ich habe ein Nachrichtenformat für mich und andere erstellt und redundante Informationen entfernt.

/ tnls


Nach dem „Test des Stiftes“ der Automatisierung durch den Telegramm-Bot tauchten viele verschiedene Ideen auf, aber ich wollte die unbedingt notwendigen Dinge tun. Ich beschloss, Statistiken über Berufungen zu führen. Um auf die Projekte unserer Kunden zugreifen zu können, haben wir den sogenannten „Hop Server“ oder den Forwarding Server implementiert. Es werden VPN-Verbindungen hergestellt und dann über ssh Anwendungsports, Datenbanken und andere Zusatzprüfungen an unser lokales Netzwerk weitergeleitet, um den Zugriff auf die Projekte unserer Mitarbeiter ohne Probleme mit VPN-Verbindungen zu erleichtern. Es reicht aus, eine VPN-Verbindung zu unserem Unternehmensnetzwerk herzustellen.

Die Statistik der Anrufe deutete darauf hin, dass sie häufig nach dem Fall eines der Tunnel (bei Netzwerkproblemen, z. B. durch Zeitüberschreitung) den Zugriff auf das Projekt wiederherstellen. In den meisten Fällen reicht es aus, nur die Verbindung neu zu starten, und alles wird gut. Lass es uns selbst machen. Hier ist der Befehl:


"Durchfallen" zum gewünschten Menüpunkt, wählen Sie Ihr Projekt aus, warten Sie eine Minute und alle sind glücklich und zufrieden ...

Wenn ein Befehl durch eine leichte Bewegung der Bytes und Bits empfangen wird, stellt der Bot eine Verbindung zum Weiterleitungsserver her und weiß im Voraus, welche Weiterleitung neu gestartet werden muss. und macht seinen Job - stellt die Verbindung zum Projekt wieder her. Ich habe Anweisungen geschrieben, um solche Probleme selbst zu lösen. Und wir wurden nur kontaktiert, wenn das bereitgestellte Tool nicht funktioniert ...

/ ecp_to_pem


Darüber hinaus haben Statistiken gezeigt, dass es häufig erforderlich ist, die digitale Signatur von Crypto Pro für verschiedene Integrationen in das PEM-Format ( Base64 ) zu konvertieren , und wir haben viele davon. Aufgabe: Sie nehmen den Container, kopieren ihn auf einen Windows-Computer mit installiertem P12FromGostCSP-Dienstprogramm (übrigens kostenpflichtig), konvertieren ihn in pfx und konvertieren pfx mit OpenSSL (mit Unterstützung für GOST-Verschlüsselung) in pem. Nicht sehr praktisch, aber ich möchte es auf Knopfdruck.

Google kam wieder zur Rettung. Fand den Nutzen einer freundlichen Person . Gesammelt, wie in README geschrieben - verdient. Er brachte dem Bot bei, mit dem Dienstprogramm zu arbeiten, und bekam fast sofort eine Konvertierung.


Zum Zeitpunkt der endgültigen Implementierung wurde der Befehl erteilt, auf ein neues Verschlüsselungsformat umzusteigen - gost-2012. Soweit ich mich erinnere, funktionierte das Dienstprogramm in diesem Moment nur mit dem alten GOST (2001). Vielleicht war es im Allgemeinen ein ähnliches Dienstprogramm eines anderen guten Menschen, an das ich mich nicht genau erinnere.
Nach dem Übergang zum neuen GOST wurde die Funktionalität des Bots aus Sicherheitsgründen entfernt. Implementierte es in einem Docker-Container.

Dockerfile, plötzlich wer braucht:
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


Zum Konvertieren müssen Sie den Quellcontainer (ein Verzeichnis der Form xxx.000) im Verzeichnis / srv / in ablegen und das fertige PEM in / srv / out abholen.

Umwandeln:

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


Einmal bekam unser Unternehmen einen sehr coolen Oracle-DBA mit mehr Erfahrung in der Verwaltung des DBMS und in der Entwicklung. Und es ist nicht sofort mit einer SSH-Verbindung zu den DBMS-Servern passiert: Entweder weiß es nicht, wo und wie eine Verbindung hergestellt werden soll, dann sind die Zugriffe nicht klar beschrieben, es ist unmöglich, etwas an sich selbst weiterzuleiten. Wir helfen Ihnen gerne weiter, haben darüber gesprochen, wie eine Verbindung hergestellt werden kann, und haben den Enterprise Manager dafür weitergeleitet. Aber mit ssh hat es immer noch nicht geklappt. Einer der Kollegen erklärte es einfach: DBA Vollblut :) Wir haben uns entschieden, wenn wir etwas auf dem Server festziehen müssen, werden wir es selbst tun.

EM stürzt unter starker Last ab und startet es neu ... Sie müssen eine Verbindung über ssh herstellen und über das Terminal neu starten. "Administratoren wissen das gut", entschied unser neuer Kollege. Große Belastungen des DBMS sind bei uns keine Seltenheit, auch Anfragen zum Neustart von EM sind häufig. Dann das gleiche Szenario: Spannung, Irritation und die Suche nach einer Lösung für das Problem. In derselben Gruppe erschienen also Chats mit dem Befehl: / emstop und / emstart.



Ich töte


Bei starker Konkurrenz an der Basis, und dies passiert manchmal, müssen Sie die Datenbank schnell entladen. Der schnellste Weg ist, den problematischen Prozess zu beenden ... Um dies zu tun, verbinden Sie sich über ssh, töten Sie -9 ... Der Bot wird helfen!



Alexey schätzte das Team und gab ihm einen liebevollen Namen - "Kilyalka" oder eine Waffe.
Einmal, nachdem ich gesehen hatte, wie Alex es versucht und leidet, entschied ich mich jedes Mal, wenn ich xxx für jeden der Prozesse betrete / tötete, unserer Waffe „Multilateralismus“ hinzuzufügen:



Das ist besser! Alles für dich, Alex, arbeite einfach, Liebes!

Natürlich wurde der Zugriff auf einen so wichtigen Befehl durch user_id - "Schutz gegen den Narren" - eingeschränkt. Als Lesha sah, wie geschickt Prozesse auf dem Datenbankserver ausgeführt wurden, versuchten mehrere Personen, einen Befehl mit einer zufälligen Prozessnummer einzugeben, aber Sie können meinen intelligenten Bot nicht täuschen. Er lehnte dies sofort ab.

/ alertlog


Nun, nur für den Fall, ich habe einen Befehl gegeben:
/ alertlog <Anzahl der Zeilen> - Die angegebene Anzahl der Zeilen abrufen alertlog'a Der
Bot ruft das Alertlog ab und sendet es an unseren Dienst, z. B. Pastebin, genannt pyste, und sendet einen Link zum Einfügen an den Anforderungs-Chat.

/ prüft


Dann kam eine Anfrage, um die tatsächliche Leistung unserer Anwendung zu überwachen. Bisher hat der technische Support des Projekts diese Daten von Hand gesammelt. Kein Deal! Unsere tapferen Tester haben hierfür Testfälle entwickelt. Das resultierende Testprotokoll ist nicht sehr bequem zu lesen, ein unerfahrener Benutzer wird es lange verstehen und nicht die Tatsache, dass er die erforderlichen Informationen hervorhebt. Und wir machen nicht gerne mit unseren Händen, was wir nicht mit unseren Händen machen können ... Eine neue Aufgabe für den Bot!



Der Befehl / tests zeigt ein einfaches und eindeutiges Menü an. Diesmal haben unsere Jungs gelernt, wie man diesen Befehl ohne Anweisungen verwendet!

Wenn Sie anstelle des Menüs das gewünschte Element auswählen, wird eine Benachrichtigung über den Start des Tests angezeigt, damit ungeduldige Benutzer unseren Test nicht 100500 Mal ausführen:



Abhängig vom ausgewählten Menüpunkt wird ein bestimmter Test von unserem Netzwerk aus gestartet, und zwar von der Maschine, auf der sich der Bot befindet (jmeter ist dort vorkonfiguriert, die erforderlichen Tests werden platziert ...) oder sofort vom Rechenzentrum (von der vorbereiteten Maschine neben der Anwendung), so dass beim Testen Beseitigen Sie Netzwerkverzögerungen oder minimieren Sie sie.

Nach Abschluss des Tests und Erhalt des Protokolls analysiert der Bot es und zeigt das Ergebnis in einer für Menschen lesbaren Form an:



Metriksammlung


Die Funktionalität wurde „eingegeben“ und die Projektmanager, die dies wünschen, haben eine solche Funktion für ihre Regionen erhalten. Und ein mitfühlender Projektmanager sagte: „Ich möchte Statistiken rechtzeitig haben!“ Jemand vom CIT sagte ihr, dass es bequem wäre, all dies in Zabbix zu überwachen. Zabbix, also Zabbix ...

Ich dachte, es wäre notwendig, sich auf die Notwendigkeit vorzubereiten, die Lösung zu duplizieren ... Ich entwarf die Idee in einem Docker-Container. Im Container wird gemäß dem Zeitplan (alle 10 Minuten) jmeter gestartet, das Protokoll an einer bestimmten Stelle hinzugefügt, von PHP analysiert und die erforderlichen Daten in Form einer Webseite angezeigt. Zabbix verwendet den Schlüssel web.page.get, um diese Seite abzurufen, wählt regelmäßig die erforderlichen Daten für bestimmte abhängige Elemente aus und erstellt ein Diagramm.



Es scheint, dass es nicht schlecht geworden ist. Wenn wir das Diagramm betrachten, sehen wir zunächst die ungefähre Geschwindigkeit der Anwendung. Wenn im Diagramm Spitzen festgestellt werden, wissen wir ungefähr, wo sich der „Stecker“ befindet. Alles ist einfach. Bisher hat sich herausgestellt, dass es nur für eine Region gefragt ist, aber ich bin bereit, es für diejenigen zu replizieren, die es wünschen.

Anwendungsentwicklung


Statistiken über Aufgaben des gleichen Typs haben vor nicht allzu langer Zeit Ideen zur Vereinfachung und Erleichterung der Arbeit hervorgebracht. Bei einigen Projekten auf Anwendungsservern müssen die wichtigsten Crypto Pro-Container installiert werden. Es gibt viele davon, und die digitale Signatur läuft mit der Zeit ab. Manchmal „fliegen“ 2 Aufgaben pro Tag. Ich hielt es jedoch für unsicher, den Bot für diese Zwecke zu verwenden, und entschied, dass ich die Funktionalität direkt in der Anwendung ausführen würde. Natürlich mit Autorisierung und Zugangskontrolle. Wenn Sie über die erforderlichen Berechtigungen verfügen, steht ein zusätzlicher Menüpunkt zum Arbeiten mit digitalen Signaturen, Installieren, Entfernen, Anzeigen von Informationen usw. zur Verfügung. Derzeit befindet sich die Funktionalität in der Entwicklung. Wie sich herausstellte, ist dies nicht sehr schwierig. Sie müssen die Anweisungen ein wenig lesen, sich Codebeispiele ansehen, erfahrenere Kollegen in der Entwicklung fragen und los geht's.Während des Forschungsprozesses tauchten Ideen für die Ergänzung der Anwendung auf. Ich werde keine napoleonischen Pläne aufbauen - es gibt Entwicklung, lassen Sie jeden sein eigenes Ding machen. Aber im Moment ist es interessant - ich mache es selbst.

Pläne


Wie gesagt, viele verschiedene Ideen wurden für die Verwendung unseres Bots geboren und nicht nur - im Allgemeinen, sagen wir, Ideen für „Automatisierungspunkte“, viele davon wurden vergessen, weil ich keine Zeit hatte, sie aufzuschreiben. Jetzt versuche ich, alles aufzuschreiben, was mir in den Sinn kommt, und ich empfehle anderen, dasselbe zu tun.

Aber Alex vergisst nicht, seine Wunschliste zu werfen. Von letzterem:
/ kill_sql SQL_ID - alle Sitzungen mit einer solchen SQL_ID-Abfrage beenden
/ kill_block - die Root-Blocking-Sitzung
beenden / show_em - ein Performance-Bild anzeigen EM
Trick, DBA-Stich vom Telefon aus = =

So arbeiten wir zum Wohl des Mutterlandes!

Und wie retten Sie sich vor routinemäßigen und uninteressanten Aufgaben?

Ich hoffe, die Lektüre erwies sich als interessant und vielleicht sogar für jemanden nützlich, und ich hatte keine Zeit, den Leser zu ermüden ... Viel Glück für uns alle.

All Articles