Wir sparen Zeit, Nerven und Arbeitsstunden

Unsere Projekte sind in der Regel regional und die Auftraggeber sind in der Regel Ministerien. Aber neben dem öffentlichen Sektor nutzen auch private Organisationen unsere Systeme. Mit ihnen gibt es praktisch keine Probleme.

Die Hauptprojekte sind also regional und manchmal gibt es Probleme damit. Zum Beispiel mit der Leistung, wenn es in Regionen mehr als 20 unserer wertvollen Benutzer während der Einführung neuer Funktionen auf Produktservern gibt. Es ist ein Schmerz…

Mein Name ist Ruslan und ich unterstütze die Informationssysteme der BARS Group und Entwicklung eines Killer-Bots für gewalttätige Serien-Datenbankadministratoren. Dieser Beitrag ist nichts für schwache Nerven – es gibt viele Briefe und Bilder.

Wir sparen Zeit, Nerven und Arbeitsstunden

/awr

Einige unserer Anwendungen laufen auf Oracle DBMS. Es gibt auch Projekte auf dem PostgreSQL-DBMS. Oracle hat eine wunderbare Sache – das Sammeln von Statistiken über die Auslastung des DBMS, die bestehende Probleme hervorhebt und sogar Empfehlungen zur Beseitigung gibt – Automatic Workload Repository (AWR). Irgendwann (nämlich im Moment des Schmerzes) forderten die Entwickler ständig zum Sammeln auf AWR-Berichte zur Leistungsanalyse. Wir gingen ehrlich zum DBMS-Server, sammelten Berichte, brachten sie zu uns und schickten sie zur Analyse an die Produktion. Nach dem 5. Mal wurde es nervig... nach dem 10. wurde es irritierend...

Einer meiner Kollegen hat einmal die Idee geäußert, dass alles, was mehr als einmal erledigt wird, automatisiert werden sollte. Ehrlich gesagt habe ich bis zu dem Moment der Irritation nicht darüber nachgedacht und versucht, alles zu automatisieren, was automatisiert werden konnte, aber oft war es nicht gefragt und hatte eher einen Forschungs- als einen angewandten Charakter.

Und dann dachte ich: „Administratoren sind nicht erforderlich, um einen Bericht zu erstellen …“. Schließlich bedeutet das Sammeln eines Berichts, dass Sie das SQL-Skript @$ORACLE_HOME/rdbms/admin/awrrpt.sql ausführen und den Bericht vom Server zu Ihnen übertragen müssen ... Oh ja, wir erlauben keine Entwicklung für die Produktion.

Dann habe ich die notwendigen Informationen gegoogelt, die Funktion aus dem Artikel auf der Testbasis erstellt, das Skript ausgeführt und ein Wunder – der Bericht wurde kompiliert und kann lokal gespeichert werden. Erstellte Funktionen dort, wo AWR-Berichte häufig benötigt wurden, und erklärte Entwicklern, wie sie diese verwenden.

Ungefähr zu dieser Zeit, in meiner Freizeit, habe ich nach einem Gespräch mit @BotFather nur zum Spaß einen Telegram-Bot für mich erstellt. Ich habe dort eine einfache Funktionalität eingebaut – die aktuelle Uhrzeit, die Wechselkurse und das Wetter anzeigen und ihm beigebracht, meiner Frau (damals Freundin) nach einem Zeitplan Komplimente zu senden. Vielleicht war das Versenden von Komplimenten damals die beliebteste Funktion meines Bots, und meine Frau schätzte das.

Also. Entwickler schreiben uns per Telegram, wir senden ihnen einen Bericht per Telegram... Was ist, wenn sie nicht an uns, sondern an einen Bot schreiben? Schließlich wird es für alle besser sein, die Meldung wird schneller eingehen und vor allem an uns vorbeigehen. So entstand die Idee der ersten beliebten Funktionalität für meinen Bot.

Ich habe mit der Umsetzung begonnen. Ich habe es, so gut ich konnte, in PHP gemacht (unsere Anwendung selbst ist in PHP, ich kenne mich damit besser aus als in Python). Ich bin kein guter Programmierer, deshalb werde ich dir meinen Code nicht zeigen :)

Der Bot lebt in unserem Unternehmensnetzwerk und hat Zugriff auf bestimmte Projekte, einschließlich Zieldatenbanken. Um mich nicht mit Parametern im Team oder Menü herumzuärgern, habe ich diese Funktionalität zum Gruppenchat mit Überwachungsbenachrichtigungen hinzugefügt. Auf diese Weise weiß der Bot sofort, aus welcher Datenbank er den Bericht abrufen muss.

Einen Befehl erhalten haben wie /awr N, wobei N die Anzahl der vollen Stunden ist, für die ein Bericht benötigt wird (standardmäßig 1 Stunde), selbst für eine Woche, wenn die Datenbank nicht neu gestartet wurde, beginnt der Bot sofort mit der Arbeit, sammelt den Bericht und veröffentlicht ihn als Webseite und stellt sofort (fast genau dort) einen Link zum dringend benötigten Bericht bereit.

Folgen Sie dem Link und hier ist er, der AWR-Bericht:

Wir sparen Zeit, Nerven und Arbeitsstunden

Wie erwartet haben die Entwickler diese Berichtserstellung gemeistert und einige haben sich sogar bei uns bedankt.

Projektmanager aus anderen Regionen schätzten den Komfort des Teams und wollten dasselbe, da sie am meisten vom Kunden erhalten und sich Sorgen um die Leistung und Verfügbarkeit der Systeme machen. Ich habe den Bot zu anderen Chats hinzugefügt. Sie verwenden es immer noch und ich bin froh darüber.

Später erfuhren Kollegen vom CIT, wie wir Meldungen sammeln, und wollten das auch tun. 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 auch andere Anwendungen in PHP in Verbindung mit PostgreSQL. Die Sammlung von pgBadger-Berichten für Bedürftige habe ich nach dem gleichen Prinzip umgesetzt – in Gruppenchats. Zuerst benutzten sie es, aber dann hörten sie auf. Die Funktionalität wurde als unnötig herausgeschnitten.

/Pflicht

Unsere Abteilung hat Nachtschichten und dementsprechend einen Zeitplan. Es ist in Google Sheets. Es ist nicht immer bequem, nach einem Link zu suchen, ein Diagramm zu öffnen und selbst zu suchen ... Einer meiner ehemaligen Kollegen spielte auch mit seinem Telegram-Bot und führte ihn in den Chat unserer Abteilung ein Benachrichtigungen über den Beginn der Dienstschicht für Abteilungsmitarbeiter. Der Bot analysiert den Dienstplan, ermittelt den Diensthabenden anhand des aktuellen Datums und meldet entsprechend dem Dienstplan oder auf Anfrage, wer heute Dienst hat. Es ist großartig und praktisch geworden. Es stimmt, mir gefiel das Format der Nachrichten nicht wirklich. Auch für Mitarbeiter einer anderen Abteilung (z. B. BC „Medizin“) sind Informationen über die Diensthabenden in anderen Richtungen nicht unbedingt erforderlich, Sie müssen jedoch wissen, wer im Falle von Problemen in „Medizin“ Dienst hat. Ich beschloss, die Funktionalität zu „ausleihen“, aber das zu ändern, was mir nicht gefiel. Ich habe ein für mich und andere bequemes Nachrichtenformat erstellt und unnötige Informationen entfernt.

/tnls

Nachdem ich die Automatisierung mithilfe eines Telegram-Bots ausprobiert hatte, kamen viele verschiedene Ideen auf, aber ich wollte unbedingt unbedingt notwendige Dinge tun. Ich beschloss, die Führung zu übernehmen Statistiken zu Anfragen. Um auf die Projekte unserer Kunden zuzugreifen, haben wir einen sogenannten „Jump-Server“ oder Weiterleitungsserver implementiert. Darauf werden VPN-Verbindungen aufgebaut, dann werden Anwendungsports, Datenbanken und andere Hilfsweiterleitungen per SSH an unser lokales Netzwerk weitergeleitet, um einen einfachen Zugriff auf die Projekte unserer Mitarbeiter zu ermöglichen, ohne Probleme mit VPN-Verbindungen. Sie müssen lediglich eine VPN-Verbindung zu unserem Firmennetzwerk einrichten.

Die Statistik der Anfragen hat gezeigt, dass es häufig nach dem Ausfall eines der Tunnel (z. B. bei Netzwerkproblemen aufgrund einer Zeitüberschreitung) zu Kontakten mit uns kommt, um den Zugriff auf das Projekt wiederherzustellen. In den meisten Fällen genügt ein Neustart der Verbindung und alles ist in Ordnung. Machen wir es selbst. Hier ist der Befehl:
Wir sparen Zeit, Nerven und Arbeitsstunden

Sie „fallen durch“ in den gewünschten Menüpunkt, wählen Ihr Projekt aus, warten eine Minute und alle sind glücklich und zufrieden ...

Beim Empfang eines Befehls stellt der Bot mit einer leichten Bewegung der Bytes und Bits eine Verbindung zum Weiterleitungsserver her, weiß im Voraus, welche Weiterleitung neu gestartet werden muss, und erledigt seine Aufgabe – stellt die Verbindung zum Projekt wieder her. Ich habe Anweisungen geschrieben, damit Sie solche Probleme selbst lösen können. Und die Leute kontaktierten uns nur, wenn das bereitgestellte Tool nicht funktionierte ...

/ecp_to_pem

Weitere Statistiken zeigten, dass häufig eine Umstellung erforderlich ist EDS Crypto Pro im PEM-Format(Base64) für verschiedene Integrationen, und wir haben ziemlich viele davon. Aufgabe: Nehmen Sie einen Container, kopieren Sie ihn auf einen Windows-Computer mit installiertem Dienstprogramm P12FromGostCSP (übrigens kostenpflichtig), konvertieren Sie ihn in pfx und konvertieren Sie dann pfx mit OpenSSL (mit Unterstützung für GOST-Verschlüsselung) in pem. Es ist zwar nicht sehr praktisch, aber Sie möchten es im Handumdrehen haben.

Google ist erneut zur Rettung gekommen. Gefunden der Nutzen einer netten Person. Ich habe es wie in der README-Datei beschrieben zusammengestellt – es hat funktioniert. Ich brachte dem Bot bei, mit dem Dienstprogramm zu arbeiten, und erzielte fast sofort eine Konvertierung.
Wir sparen Zeit, Nerven und Arbeitsstunden

Zum Zeitpunkt der endgültigen Implementierung wurde die Umstellung auf ein neues Verschlüsselungsformat – gost-2012 – angeordnet. Soweit ich mich erinnere, funktionierte das Dienstprogramm zu diesem Zeitpunkt nur mit dem alten GOST (2001), vielleicht war es ein anderes ähnliches Dienstprogramm von einer anderen netten Person, ich erinnere mich nicht genau.
Nach der Umstellung auf das neue GOST wurde die Funktionalität des Bots aus Sicherheitsgründen entfernt. Habe es in einem Docker-Container implementiert.

Dockerfile, falls es jemand 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 Originalcontainer (Verzeichnis wie xxx.000) im Verzeichnis /srv/in platzieren und das fertige PEM nach /srv/out übertragen.

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

Eines Tages bekam ein sehr cooler Oracle-DBA mit viel Erfahrung in der DBMS-Administration und -Entwicklung einen Job in unserem Unternehmen. Und er hatte sofort Probleme, sich mit ssh auf die DBMS-Server zu verbinden: Er weiß nicht, wo und wie er sich verbinden soll, der Zugang ist nicht klar beschrieben oder er kann etwas, das er braucht, nicht an sich selbst weiterleiten. Nun, wir helfen Ihnen gerne weiter, wir erklärten ihm, wie er eine Verbindung herstellen kann, und leiteten ihn an den Enterprise Manager weiter. Aber mit ssh hat es immer noch nicht geklappt. Einer meiner Kollegen hat es einfach erklärt: ein reinrassiger DBA :) Wir haben beschlossen, dass wir es selbst tun, wenn wir etwas am Server optimieren müssen.

EM stürzt manchmal unter hoher Last ab und um es neu zu starten, müssen Sie eine Verbindung über SSH herstellen und über das Terminal neu starten. „Administratoren sind gut darin“, entschied unser neuer Kollege. Starke Belastungen des DBMS sind bei uns keine Seltenheit, auch Aufforderungen zum EM-Neustart kommen häufig vor. Dann das gleiche Szenario: Anspannung, Irritation und Suche nach einer Lösung für das Problem. In denselben Gruppenchats erschienen also die folgenden Befehle: /emstop und /emstart.

Wir sparen Zeit, Nerven und Arbeitsstunden

/ töten

Wenn es in der Datenbank starke Konkurrenz gibt, was manchmal vorkommt, ist es notwendig, die Datenbank schnell zu entladen. Der schnellste Weg besteht darin, den problematischen Prozess abzubrechen... Stellen Sie dazu eine Verbindung über ssh her, töten Sie -9... Der Bot wird helfen!

Wir sparen Zeit, Nerven und Arbeitsstunden

Alexey schätzte das Team und gab ihm einen liebevollen Namen - „Kilyalka“ oder eine Waffe.
Eines Tages, nachdem ich gesehen hatte, wie Alexey versuchte und litt, indem er für jeden der Prozesse jedes Mal /kill xxx eingab, beschloss ich, unserer Waffe „mehrläufig“ hinzuzufügen:

Wir sparen Zeit, Nerven und Arbeitsstunden

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

Natürlich war ein so wichtiges Team begrenzt Zugriff durch user_id – „narrensicher“. Als mehrere Leute sahen, wie Lesha Prozesse auf dem Datenbankserver geschickt beendet, versuchten sie, einen Befehl mit einer zufälligen Prozessnummer einzugeben, aber Sie können meinen Smart Bot nicht täuschen, er weigerte sich sofort.

/alertlog

Für alle Fälle habe ich den Befehl eingegeben:
/alertlog <Anzahl der Zeilen> – Rufen Sie die angegebene Anzahl von Alertlog-Zeilen ab
Der Bot ruft ein Alarmprotokoll ab und sendet es an unseren Dienst wie Pastebin, genannt Pyste, und sendet einen Link zum Einfügen an den Anfrage-Chat.

/kontrolliert

Als nächstes kam eine Anfrage Überwachung der tatsächlichen Leistung unserer Anwendung. Bisher wurden diese Daten vom technischen Support des Projekts manuell erfasst. Egal! Unsere tapferen Tester haben hierfür Testfälle entwickelt. Das resultierende Testprotokoll ist nicht sehr bequem zu lesen; ein unerfahrener Benutzer wird lange brauchen, um es zu verstehen, und ist nicht sicher, ob er die notwendigen Informationen hervorheben wird. Und wir tun nicht gerne mit unseren Händen, was wir mit unseren Händen nicht tun können ... Eine neue Aufgabe für den Bot!

Wir sparen Zeit, Nerven und Arbeitsstunden

Der Befehl /checks zeigt ein einfaches und eindeutiges Menü an; dieses Mal haben unsere Jungs gelernt, wie man diesen Befehl ohne Anweisungen verwendet!

Wenn Sie den gewünschten Punkt auswählen, erscheint anstelle eines Menüs eine Benachrichtigung über den Start des Tests, damit ungeduldige Benutzer unseren Test nicht 100500 Mal ausführen:

Wir sparen Zeit, Nerven und Arbeitsstunden

Je nach ausgewähltem Menüpunkt wird ein spezifischer Test aus unserem Netzwerk gestartet, und zwar von der Maschine, auf der der Bot lebt (dort ist jmeter vorkonfiguriert, die notwendigen Tests befinden sich...) oder direkt aus dem Rechenzentrum (von einem vorbereitete Maschine neben der Anwendung), um Netzwerkverbindungen beim Testen von Verzögerungen auszuschließen oder auf ein Minimum zu reduzieren.

Nach Abschluss des Tests und Erhalt des Protokolls analysiert der Bot es und gibt das Ergebnis in einer „für Menschen lesbaren“ Form aus:

Wir sparen Zeit, Nerven und Arbeitsstunden

Sammlung von Metriken

Die Funktionalität ist angekommen und interessierte Projektmanager haben eine solche Funktion für ihre Regionen erhalten. Und ein mitfühlender Projektmanager sagte: „Ich möchte Zeitstatistiken haben!“ Jemand vom CIT sagte ihr, dass es praktisch wäre, dies alles in Zabbix zu überwachen. Zabbix, also Zabbix...

Ich dachte, ich müsste mich auf die Notwendigkeit vorbereiten, die Lösung zu replizieren ... Ich habe die Idee in einen Docker-Container gepackt. Im Container wird jmeter nach einem Zeitplan (einmal alle 10 Minuten) gestartet, das Protokoll an einem bestimmten Ort abgelegt, PHP analysiert es und zeigt die erforderlichen Daten in Form einer Webseite an. Zabbix empfängt diese Seite mithilfe des Schlüssels web.page.get, wählt regelmäßig die erforderlichen Daten für bestimmte abhängige Elemente aus und erstellt ein Diagramm.

Wir sparen Zeit, Nerven und Arbeitsstunden

Ich denke, es ist nicht schlecht geworden. Durch die Betrachtung des Diagramms sehen wir zunächst die ungefähre Geschwindigkeit der Anwendung, und wenn im Diagramm Spitzen erkannt werden, wissen wir ungefähr, wo sich der „Stecker“ befindet. Es ist einfach. Bisher hat sich herausgestellt, dass es nur in einer Region gefragt ist, aber ich bin bereit, es für Interessierte zu reproduzieren.

Anwendungsentwicklung

Statistiken zu ähnlichen Aufgaben geben in letzter Zeit Anlass zu weiteren Ideen zur Arbeitsvereinfachung und -erleichterung. Bei einigen Projekten müssen auf Anwendungsservern wichtige Crypto Pro-Container installiert werden, es gibt viele davon und die digitale Signatur läuft mit der Zeit ab. Manchmal kommen 2 Aufgaben pro Tag an. Ich hielt es jedoch für unsicher, einen Bot für diese Zwecke zu verwenden, und beschloss, die Funktionalität direkt in der Anwendung zu erstellen. Selbstverständlich mit Autorisierung und Überprüfung der Zugriffsrechte. Wenn Sie über die erforderlichen Berechtigungen verfügen, steht Ihnen ein zusätzlicher Menüpunkt zum Arbeiten mit digitalen Signaturen, zum Installieren, Löschen, Anzeigen von Informationen usw. zur Verfügung. Die Funktionalität befindet sich derzeit in der Entwicklung. Wie sich herausstellte, ist dies nicht sehr schwierig. Sie müssen nur die vorhandenen Anweisungen ein wenig lesen, sich Codebeispiele ansehen, Kollegen mit mehr Erfahrung in der Entwicklung fragen und es dann tun. Während des Rechercheprozesses entstanden Ideen, die zur Anwendung hinzugefügt werden sollten. Ich werde keine napoleonischen Pläne machen – es gibt Entwicklung, jeder soll sich um seine eigenen Angelegenheiten kümmern. Aber obwohl es interessant ist, mache ich es selbst.

Pläne

Wie gesagt, es wurden viele verschiedene Ideen für die Verwendung unseres Bots geboren und nicht nur – im Allgemeinen, sagen wir, Ideen für „Automatisierungspunkte“, viele davon wurden vergessen, da 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 Alexey vergisst nicht, seine Wünsche zu äußern. Aus dem Neuesten:
/kill_sql SQL_ID – Beenden Sie alle Sitzungen mit dieser SQL_ID-Anfrage
/kill_block - Beenden Sie die Root-Blockierungssitzung
/Zeig es ihnen – ein Bild der EM-Leistung zeigen
Er ist ein schlauer Kerl, er will DBA von seinem Handy aus nähen =)

So arbeiten wir zum Wohle des Mutterlandes!

Wie entledigen Sie sich routinemäßiger und uninteressanter Aufgaben?

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

Source: habr.com

Kommentar hinzufügen