L'histoire de l'arrêt du service de production avec la commande hostname

Inspiré par un certain calendrier de l'Avent, je voudrais regretter ce que j'ai fait dans un environnement de production.

Travaux de production

C'est l'événement de ma deuxième année en tant que membre de la société. A cette époque, j'étais en charge de la maintenance du système BtoB fonctionnant sur l'environnement cloud. En tant que membre de la maintenance, je me souviens qu'il y avait deux infrastructures et trois applications. J'étais responsable de l'infrastructure et l'autre membre était le chef.

Ce jour-là, j'étais censé modifier les paramètres du middleware du serveur. J'ai dit au propriétaire du système qu'il n'y avait pas de panne. Par conséquent, il n'y a pas de passage à l'écran de maintenance ou à la notification de maintenance. Comme d'habitude, j'ai envoyé un mail au propriétaire pour me contacter pour démarrer le travail de production et commencer le travail de production. Nous procéderons selon la procédure vérifiée. Lorsque le changement de paramètre lui-même a été terminé et que l'opération a été confirmée, j'ai été informé que le service était en panne. .. .. Je ne sais pas ce qui s'est passé et je me souviens que ma tête est devenue blanche. J'ai demandé de l'aide au chef et le chef a commencé l'enquête. Puis, le chef a dit: "Le nom d'hôte est étrange."

↓ Nom d'hôte à ce moment

^i

Il l'a remarqué en regardant le nom d'hôte affiché à l'invite après s'être connecté au serveur. Au fait, je n'ai pas remarqué parce que je ne me déconnectais pas du serveur ni ne lançais une nouvelle invite.

Cause de l'échec

Si vous vérifiez l'historique, la commande suivante s'affiche. .. ..

hostname ^i

En tant que personne qui le comprend, j'ai réécrit le nom d'hôte. Je n'avais pas réalisé que j'avais réécrit le nom d'hôte en tapant par erreur "hostname -i" comme "hostname ^ i". Je ne savais pas à l'époque que la commande hostname était également une commande qui pouvait changer le nom d'hôte.

(Référence) commande hostname
Exemple d'exécution de commande La description
hostname Afficher le nom d'hôte
hostname -i Afficher l'adresse IP
hostname <string> Nom d'hôte<string>changer en

Reprise après sinistre

La modification du nom d'hôte avec la commande hostname devient invalide au redémarrage du système d'exploitation (retourne au nom d'hôte avant la modification). Par conséquent, le système d'exploitation a été redémarré et le nom d'hôte a été restauré. L'échec a été récupéré avec succès.

Pourquoi la tragédie s'est-elle produite?

-Vous avez tapé manuellement une commande qui ne figure pas dans le manuel de procédure. Seules les commandes minimales ont été décrites dans le manuel de procédure et les commandes de confirmation ont été omises. ・ Le travail a été réalisé par une seule personne. Il y avait aussi un problème de main-d'oeuvre, donc c'était essentiellement un travail d'un seul homme.

Qu'avez-vous fait pour éviter que la tragédie ne se reproduise?

Ce qui a été mis en œuvre comme mesure de prévention des récidives à l'époque -N'exécutez aucune commande autre que celles décrites dans le manuel de procédure. Décrivez toutes les procédures nécessaires telles que les commandes de confirmation. ・ Assurez-vous de copier et coller les commandes, pas à la main. Éliminez les erreurs de saisie de commande manuelle. -Utilisez des commandes qui n'affectent pas le système lors de la vérification. Évitez autant que possible d'utiliser des commandes susceptibles de modifier les paramètres. ・ Assurez-vous d'effectuer le travail par deux personnes et effectuez une double vérification. Sécurisez un système pour remarquer immédiatement les fautes de frappe. En répartissant les responsabilités entre les deux personnes, il y a de la place dans le cœur. Ce à quoi je peux penser maintenant -Automatiser le travail lui-même. Minimisez la marge d'intervention humaine et réduisez les erreurs humaines.

C'est tout pour moi. Merci pour la lecture.

Recommended Posts

L'histoire de l'arrêt du service de production avec la commande hostname
L'histoire de l'apprentissage profond avec TPU
L'histoire de la mauvaise lecture de la ligne d'échange de la commande supérieure
L'histoire de sys.path.append ()
À propos de la commande de service
L'histoire du partage de l'environnement pyenv avec plusieurs utilisateurs
L'histoire de la mise en œuvre du sujet Facebook Messenger Bot avec python
Obtenez UNIXTIME au début d'aujourd'hui avec une commande
Exécutons la commande à temps avec le bot discord
Vérifiez l'état de la mémoire du serveur avec la commande gratuite Linux
Vérifiez l'état de fonctionnement du serveur avec la commande Linux top
L'histoire de l'affichage d'images avec OpenCV ou PIL (uniquement)
L'histoire du rubyiste aux prises avec Python :: Dict data with pycall
L'histoire de la création d'un bot de boîte à questions avec discord.py
Une histoire coincée avec l'installation de la bibliothèque de machine learning JAX
L'histoire de ne pas pouvoir exécuter pygame avec pycharm
Le 14 mars est le jour du rapport de circonférence. L'histoire du calcul du ratio de circonférence avec python
L'histoire de la participation à AtCoder
L'histoire de la création d'un pilote standard pour db avec python.
L'histoire de la sortie du maître de planétarium au format pdf avec Pycairo
L'histoire du "trou" dans le fichier
L'histoire de la visualisation des balises Qiita populaires avec Bar Chart Race
Comment surveiller l'état d'exécution de sqlldr avec la commande pv
La commande hostname peut être multifonctionnelle
Frappez la commande supérieure avec htop
L'histoire du remontage du serveur d'application
L'histoire de l'exportation d'un programme
L'histoire de la création d'un module qui ignore le courrier avec python
L'histoire d'un capteur de stationnement en 10 minutes avec le kit de démarrage GrovePi +
L'histoire de la création d'un robot LINE pour le petit-déjeuner d'une université de 100 yens avec Python
L'histoire de la création d'une caméra sonore avec Touch Designer et ReSpeaker
L'histoire de la tentative de pousser SSH_AUTH_SOCK obsolète avec LD_PRELOAD à l'écran
L'histoire de l'utilisation de mysqlclient car PyMySQL ne peut pas être utilisé avec Django 2.2
L'histoire d'essayer de reconnecter le client
Demandez Pi avec la commande bc
L'histoire d'une erreur dans PyOCR
Alignez la taille de la barre de couleurs avec matplotlib
L'histoire de la mise en place de MeCab dans Ubuntu 16.04
Vérifier l'existence du fichier avec python
L'histoire de la fabrication d'un moule immuable
L'histoire de la manipulation des variables globales Python
Version Migemo de la commande: find ,: mfind
La troisième nuit de la boucle avec pour
L'histoire d'essayer deep3d et de perdre
Décodage du modèle LSTM de Keras.
La deuxième nuit de la boucle avec pour
Essayez de réécrire le fichier avec la commande less
L'histoire du traitement A du blackjack (python)
L'histoire du changement de pep8 en pycodestyle
Notez l'achèvement d'une commande chronophage
Compter le nombre de caractères avec écho
L'histoire de la création d'une application Web qui enregistre des lectures approfondies avec Django
Obtenez uniquement le code source du package PyPI avec pip à partir de la ligne de commande
L'histoire de la méthode d'apprentissage qui a acquis LinuC Niveau 1 avec seulement ping -t