Gagnez du temps, des nerfs et des heures de travail

Nos projets sont généralement régionaux et les clients, généralement des ministères. Mais, en plus du secteur public, des organisations privées utilisent également nos systèmes. Il n'y a pratiquement aucun problème avec eux.

Donc, les principaux projets sont régionaux, et parfois il y a des problèmes avec eux. Par exemple, avec les performances, lorsque dans des régions à partir de 20 000, nos précieux utilisateurs sont dans la période de déploiement de nouvelles fonctionnalités sur les serveurs de produits. C’est une douleur ...

Je m’appelle Ruslan et je suis impliqué dans l’escorte des systèmes d’information du groupe BARS et dans le développement d’un robot tueur pour les DBAs en série brutaux . Le jeûne n'est pas pour les faibles de cœur - beaucoup de lettres et d'images.



/ awr


Certaines de nos applications fonctionnent sur Oracle DBMS. Il y a des projets sur le SGBD PostgreSQL. Oracle a une chose merveilleuse - la collecte de statistiques sur la charge du SGBD, qui met en évidence les problèmes existants et donne même des recommandations pour l'élimination - Automatic Workload Repository (AWR). À un moment donné (à savoir, au moment de la douleur), les développeurs ont constamment demandé à collecter des rapports AWR pour l'analyse des performances . Honnêtement, nous nous sommes rendus sur le serveur SGBD, avons collecté des rapports, nous les avons traînés et nous les avons envoyés pour analyse en production. Une fois après le 5, il a commencé à se fatiguer ... après le 10 - pour provoquer une irritation ...

Un jour, un de mes collègues a exprimé l'idée que tout ce qui est fait plus d'une fois devrait être automatisé. Jusqu'au moment de l'agacement, pour être honnête, je n'y ai pas pensé et j'ai essayé d'automatiser tout ce qui peut être automatisé, mais souvent ce n'était pas demandé et c'était plus une recherche qu'une application.

Et puis j'ai pensé: "Les administrateurs ne sont pas nécessaires pour générer un rapport ..." . Après tout, collecter un rapport, c'est exécuter le script sql @ $ ORACLE_HOME / rdbms / admin / awrrpt.sql et récupérer le rapport du serveur à nous-mêmes ... Oh oui, nous ne laissons pas le développement aller en vente.

Ensuite, j'ai recherché les informations nécessaires sur Google, créé une fonction à partir de l'article sur une base de test, tiré le script et un miracle - le rapport a été collecté et il peut être enregistré localement. A créé des fonctions où les rapports AWR étaient souvent nécessaires, a expliqué aux développeurs comment l'utiliser.

À cette époque, pendant mon temps libre, après avoir parlé avec @BotFather, j'ai créé un bot Telegram pour moi, juste pour le plaisir. J'ai foiré une simple fonctionnalité là-bas - pour montrer l'heure actuelle, les taux de change, la météo, lui ai appris à envoyer des compliments à ma femme (alors une fille) selon un horaire. Peut-être qu'à ce moment-là, envoyer des compliments était la fonctionnalité la plus recherchée de mon bot, ma femme a apprécié.

Donc. Les développeurs nous écrivent dans Telegram, nous leur envoyons un rapport dans Telegram ... Mais que se passe-t-il s'ils ne nous écrivent pas, mais au bot? En effet, ce sera mieux pour tout le monde, le rapport sera reçu plus rapidement, et surtout, par nous. L'idée de la première fonctionnalité recherchée est donc née pour mon bot.

J'ai commencé la mise en œuvre. Je l'ai fait, comme je l'ai géré, en PHP (en fait notre application est en PHP, je le comprends plus qu'en Python). L'encodeur vient de moi, donc je ne montrerai pas mon code :) Le

bot vit dans notre réseau d'entreprise, il a accès à certains projets, y compris les bases de données cibles. Afin de ne pas déranger les paramètres de la commande ou du menu, j'ai vissé cette fonctionnalité à un chat de groupe avec des notifications de surveillance. Le bot sait donc immédiatement sur quelle base de données collecter le rapport.

Ayant reçu une commande de la forme / awr N, où N est le nombre d'heures complètes pour lesquelles un rapport est nécessaire (par défaut - 1 heure), même pendant une semaine, si la base de données ne redémarre pas, le bot commence immédiatement à travailler, collecte le rapport, le publie en tant que page Web et juste là (presque ici) donne un lien vers un rapport bien nécessaire.

Nous suivons le lien et le voici, le rapport AWR:



Comme prévu, les développeurs ont fait face à cette génération de rapport, a même remercié quelqu'un.

Ayant apprécié la commodité de l'équipe, les chefs de projet des autres régions ont souhaité la même chose, car ils obtiennent surtout du luli du client soucieux des performances et de la disponibilité des systèmes. Ajout d'un bot à d'autres chats. Ils l'utilisent toujours, et je m'en réjouis.

Plus tard, des collègues du CIT ont écrit sur la façon dont nous collectons les rapports, ils le voulaient également. Je ne les ai pas ajoutés à nos chats, j'ai créé un chat séparé avec la génération de rapports sur un planning et sur demande.

/ pgBadger


Nous avons d'autres applications en PHP en collaboration avec PostgreSQL. Implémentation de la collecte du rapport pgBadger pour ceux qui en ont besoin sur le même principe - dans les chats de groupe. Au début, ils l'ont utilisé, mais ils se sont arrêtés. Découpe fonctionnelle inutile.

/ devoir


Dans notre département, il y a des quarts de nuit et, en conséquence, il y a un horaire. C'est dans google tables. Il n'est pas toujours pratique de rechercher un lien, d'ouvrir un horaire, de chercher par vous-même ... Un des anciens collègues a également joué avec son bot Telegram et a introduit des notifications sur le début d'un quart de travail pour les employés du département dans le chat de notre département .Le bot analyse le programme, détermine le préposé par la date du jour et, selon le programme ou sur demande, indique qui est en service aujourd'hui. Cela s'est avéré super, confortable. C'est vrai, je n'ai pas vraiment aimé le format du message. De plus, pour les employés d'un autre service (par exemple, le centre d'affaires «Médecine»), les informations sur le service dans d'autres domaines ne sont pas vraiment nécessaires, mais vous devez savoir qui est de service en «Médecine» en cas de problème. J'ai décidé «d'emprunter» la fonctionnalité, mais de changer ce que je n'aimais pas. J'ai créé un format de message pratique pour moi et pour les autres, en supprimant les informations redondantes.

/ tnls


Après le «test de plume» de l'automatisation via le bot Telegram, de nombreuses idées différentes sont apparues, mais je voulais faire les choses strictement nécessaires. J'ai décidé de tenir des statistiques sur les appels. Pour accéder aux projets de nos clients, nous avons mis en place ce que l'on appelle le «serveur hop» ou le serveur de transfert. Des connexions VPN y sont établies, puis via ssh, des ports d'application, des bases de données et d'autres sondes auxiliaires sont transmis à notre réseau local pour faciliter l'accès aux projets de nos employés, sans problèmes avec les connexions VPN. Il suffit de configurer une connexion VPN à notre réseau d'entreprise.

Les statistiques d'appels suggèrent que souvent, après la chute d'un des tunnels (en cas de problème de réseau, par timeout par exemple), ils se retournent pour rétablir l'accès au projet. Dans la plupart des cas, il suffit de redémarrer la connexion et tout se passe bien. Faisons-le vous-même. Voici la commande:


« Fall par » à l'élément de menu souhaité, sélectionnez votre projet, attendez une minute et tout le monde est heureux et satisfait ...

Quand une commande est reçue, par un léger mouvement de les octets et les bits, les connecte bot au serveur de transfert, sachant à l' avance les besoins d'expédition à redémarrer, et fait son travail - rétablit la connexion au projet. J'ai écrit des instructions pour résoudre ces problèmes par moi-même. Et nous n'avons été contactés que si l'outil fourni ne fonctionne pas ...

/ ecp_to_pem


De plus, les statistiques ont montré qu'il est souvent nécessaire de convertir la signature numérique Crypto Pro au format pem ( Base64 ) pour diverses intégrations, et nous en avons beaucoup. Tâche: vous prenez le conteneur, le copiez sur un ordinateur Windows avec l'utilitaire P12FromGostCSP installé (soit dit en passant, payé), le convertissez en pfx et convertissez pfx en utilisant OpenSSL (avec prise en charge du cryptage GOST) en pem. Pas très pratique, mais je le veux au clic d'un doigt.

Google est à nouveau venu à la rescousse. Trouvé l' utilité d'une personne aimable . Recueilli, comme écrit dans le fichier README - gagné. Il a appris au bot à travailler avec l'utilitaire et a obtenu une conversion presque instantanée.


Au moment de la mise en œuvre finale, un ordre a été émis pour passer à un nouveau format de cryptage - gost-2012. Pour autant que je m'en souvienne, l'utilitaire à ce moment-là ne fonctionnait qu'avec l'ancien GOST (2001), c'était peut-être généralement un autre utilitaire similaire d'une autre bonne personne, je ne me souviens pas exactement.
Après la transition vers le nouveau GOST, la fonctionnalité du bot a été supprimée pour des raisons de sécurité. L'implémenté dans un conteneur Docker.

Dockerfile, qui a soudainement besoin de:
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


Pour convertir, vous devez placer le conteneur source (un répertoire de la forme xxx.000) dans le répertoire / srv / in et récupérer le pem fini dans / srv / out.

Convertir:

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


Une fois, notre entreprise a obtenu un DBA Oracle très cool, avec plus d'expérience dans l'administration du SGBD et dans le développement. Et cela ne s'est pas produit tout de suite avec une connexion ssh aux serveurs SGBD: soit il ne sait pas où se connecter et comment, alors les accès ne sont pas clairement décrits, il est impossible de se transmettre quelque chose. Eh bien, nous sommes heureux de vous aider, avons parlé de la façon de vous connecter et avons transmis Enterprise Manager pour cela. Mais avec ssh, cela n'a toujours pas fonctionné. L'un des collègues l'a expliqué simplement: pur-sang DBA :) Nous avons décidé que si nous devions resserrer quelque chose sur le serveur, nous le ferions nous-mêmes.

EM se bloque sous une charge lourde et le redémarre ... vous devez vous connecter via ssh et redémarrer via le terminal. "Les administrateurs le savent bien", a décidé notre nouveau collègue. Les charges importantes sur le SGBD ne sont pas rares chez nous, les demandes de redémarrage EM sont également fréquentes. Puis le même scénario: tension, irritation et recherche d'une solution au problème. Ainsi, dans le même groupe de discussions, la commande: / emstop et / emstart est apparue.



/ tuer


En cas de forte concurrence à la base, et cela arrive parfois, vous devez décharger rapidement la base de données. Le moyen le plus rapide est de tuer le processus problématique ... Pour ce faire, connectez-vous via ssh, kill -9 ... Le bot vous aidera!



Alexey a apprécié l'équipe et lui a donné un nom affectueux - «Kilyalka» ou un pistolet.
Une fois, après avoir vu comment Alex essaye et souffre, chaque fois que vous entrez / tuez xxx pour chacun des processus, j'ai décidé d'ajouter du «multilatéralisme» à notre arme:



c'est mieux! Tout pour toi, Alex, travaille juste, mon cher!

Naturellement, l'accès à une commande aussi importante était limité par user_id - "protection contre le fou". Voyant comment Lesha clouait intelligemment les processus sur le serveur de base de données, plusieurs personnes ont essayé d'entrer une commande avec un numéro de processus aléatoire, mais vous ne pouvez pas tromper mon robot intelligent, il a immédiatement refusé.

/ alertlog


Eh bien, juste au cas oĂą, j'aurais fait une commande:
/ alertlog <nombre de lignes> - obtenir le nombre spécifié de lignes alertlog'a Le
bot extrait alertlog et l'envoie à notre service, tel que pastebin, appelé pyste, et envoie un lien vers la pâte pour le chat de demande.

/ chèques


Puis vint une demande de surveillance des performances réelles de notre application. Jusqu'à présent, le support technique du projet a collecté ces données à la main. Pas une affaire! Nos vaillants testeurs ont développé des cas de test pour cela. Le journal de test résultant n'est pas très pratique à lire, un utilisateur inexpérimenté comprendra longtemps et non le fait qu'il mettra en évidence les informations nécessaires. Et nous n'aimons pas faire de nos mains ce que nous ne pouvons pas faire de nos mains ... Une nouvelle tâche pour le bot!



La commande / checks affiche un menu simple et sans ambiguïté, cette fois, nos gars ont appris à utiliser cette commande sans instructions!

Lorsque vous sélectionnez l'élément souhaité, au lieu du menu, une notification apparaît sur le début du test afin que les utilisateurs impatients n'exécutent pas notre test 100500 fois:



En fonction de l'élément de menu sélectionné, un test spécifique est lancé depuis notre réseau, à savoir depuis la machine où réside le bot (jmeter y est pré-configuré, les tests nécessaires sont placés ...) ou immédiatement depuis le centre de données (depuis la machine préparée à côté de l'application), de sorte que lors du test éliminez les retards du réseau, ou minimisez-les.

Après avoir terminé le test et reçu le journal, le bot l'analyse et affiche le résultat sous une forme «lisible par l'homme»:



Collection de métriques


La fonctionnalité est «entrée» et les chefs de projet qui le souhaitent ont reçu une telle fonction pour leurs régions. Et un chef de projet compatissant a déclaré: "Je veux avoir des statistiques à temps!" Quelqu'un du CIT lui a dit qu'il serait pratique de surveiller tout cela dans Zabbix. Zabbix, donc Zabbix ... J'ai

pensé qu'il fallait se préparer à la nécessité de dupliquer la solution ... J'ai conçu l'idée dans un conteneur docker. Dans le conteneur, selon le calendrier (toutes les 10 minutes), jmeter est lancé, ajoute le journal à un endroit spécifique, php le parse et affiche les données nécessaires sous la forme d'une page Web. Zabbix utilise la clé web.page.get pour obtenir cette page, sélectionne régulièrement les données nécessaires pour certains éléments dépendants et construit un graphique.



Il semble que ce ne soit pas mal. En observant le graphique, nous voyons tout d'abord la vitesse approximative de l'application, et si des pics sont détectés sur le graphique, nous savons à peu près où se trouve le «bouchon». Tout est simple. Jusqu'à présent, il s'est avéré être en demande uniquement pour une région, mais je suis prêt à le reproduire pour ceux qui le souhaitent.

DĂ©veloppement d'applications


Il n'y a pas si longtemps, des statistiques sur des tâches du même type ont donné des idées pour simplifier et faciliter le travail. Sur certains projets, sur les serveurs d'applications, il est nécessaire d'installer les conteneurs de clés de Crypto Pro, ils sont nombreux et la signature numérique expirera avec le temps. Parfois, 2 tâches «volent» par jour. Mais j'ai considéré que l'utilisation du bot à ces fins n'était pas sûre et j'ai décidé de faire la fonctionnalité directement dans l'application. Naturellement avec autorisation et contrôle d'accès. Si vous disposez des privilèges nécessaires, un élément de menu supplémentaire sera disponible pour travailler avec les signatures numériques, l'installation, la suppression, l'affichage des informations, etc. ... Pour le moment, la fonctionnalité est en cours de développement. Il s'est avéré que ce n'est pas très difficile, vous devez lire un peu les instructions, regarder des exemples de code, demander à des collègues plus expérimentés en développement, et c'est parti.Au cours de la recherche, des idées sont apparues pour être ajoutées à la demande. Je ne construirai pas de plans napoléoniens - il y a du développement, laissez chacun faire ce qu'il veut. Mais pour l'instant c'est intéressant - je le fais moi-même.

Des plans


Comme je l'ai dit, de nombreuses idées différentes sont nées pour utiliser notre bot et pas seulement - en général, disons, des idées de «points d'automatisation», beaucoup d'entre elles ont été oubliées, car je n'ai pas eu le temps de les écrire. Maintenant, j'essaie d'écrire tout ce qui me vient à l'esprit et je recommande aux autres de faire de même.

Mais Alex n'oublie pas de jeter sa Wishlist. Parmi ces derniers:
/ kill_sql SQL_ID - tue toutes les sessions avec une telle requĂŞte SQL_ID
/ kill_block - tue la session de blocage racine
/ show_em - montre une image de performance EM
Trick, veut assembler DBA depuis le téléphone =)

C'est ainsi que nous travaillons pour le bien de la patrie!

Et comment vous épargnez-vous des tâches routinières et inintéressantes?

J'espère que la lecture s'est avérée intéressante, et peut-être même utile à quelqu'un, et je n'ai pas réussi à fatiguer le lecteur ... Bonne chance à nous tous.

All Articles