[PYTHON] Depuis que l'alerte a été émise, j'ai obtenu les informations du serveur avec une faible connaissance avec Fabric

Aperçu

Un cas d'utilisation de fabric qui peut être utilisé pour vérifier l'état du serveur après une alerte, plutôt que pour l'automatisation avec une faible connaissance

Prenez l'utilisation du disque

Le résultat de df -h.

fabfile.py


...
def df_stat():
	with hide('everything', 'status'):
		print green(run("df -h"))
...

python



$ fab df_stat -H server1,server2
[server1] Executing task 'df_stat'
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        20G  2.8G   16G  15% /
devtmpfs        240M     0  240M   0% /dev
tmpfs           246M     0  246M   0% /dev/shm
tmpfs           246M   29M  217M  12% /run
tmpfs           246M     0  246M   0% /sys/fs/cgroup
[server2] Executing task 'df_stat'
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        20G  2.8G   16G  15% /
devtmpfs        240M     0  240M   0% /dev
...

Prendre la charge du processeur à un moment spécifié

Le résultat de la spécification de l'heure avec -s et -e de sar -u, -q

fabfile.py


...
def cpu_stat(start_time, end_time):
	with hide('everything', 'status'):
		print green(run("sar -q -s " + start_time + " -e " + end_time))
		print green(run("sar -u -s " + start_time + " -e " + end_time))
...

python



$ fab cpu_stat:start_time="08:50:00",end_time="09:10:00" -H server1,server2,server3
[server1] Executing task 'cpu_stat'
08:50:01 AM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
08:51:01 AM         1       116      0.00      0.01      0.05         0
08:52:01 AM         1       116      0.00      0.01      0.05         0
08:53:01 AM         1       116      0.00      0.01      0.05         0
08:54:01 AM         1       116      0.00      0.01      0.05         0
...
08:50:01 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
08:51:01 AM     all      0.08      0.00      0.07      0.02      0.00     99.83
08:52:01 AM     all      0.07      0.00      0.05      0.00      0.00     99.88
08:53:01 AM     all      0.03      0.00      0.05      0.00      0.00     99.92
08:54:01 AM     all      0.08      0.00      0.03      0.00      0.00     99.88
08:55:01 AM     all      0.05      0.00      0.05      0.00      0.00     99.90
08:56:01 AM     all      0.07      0.00      0.05      0.02      0.00     99.87
...
[server2] Executing task 'cpu_stat'
08:50:01 AM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
08:51:01 AM         1       116      0.00      0.01      0.05         0
...


Prenez les statistiques d'Apache access_log

Comptez bien access_log avec cut ou sort | unic -c.

fabfile.py


...
def access_log_report(hour):
	base = "/var/log/hoge/logs/"
	with cd(base):
		with hide('everything', 'status'):
			ip_cmd = "cat access_log |grep `date +%Y`:" + hour + ":| cut -f 1 -d ' ' | sort | uniq -c | sort -nr | head -10"
			contents_cmd = "cat access_log |grep `date +%Y`:" + hour + ":| cut -f 7 -d ' ' | sort | uniq -c | sort -nr | head -10"
			
			print "#### top ip"
			ip = run(ip_cmd, shell_escape=False)
			print ip
			print "#### top contents"
			contents = run(contents_cmd, shell_escape=False)
			print contents
...

python



$ fab access_log_report:hour=17 -H server1,server2
[server1] Executing task 'access_log_report'
#### top ip
      20 XXX.XXX.XXX.XXX
      10 YYY.YYY.YYY.YYY
#### top contents
      15 /
      15 /hoge
[server2] Executing task 'access_log_report'
...

Résumé

Si vous spécifiez une autre option de sar, ps, gratuit, comme vous le souhaitez, Il semble que vous puissiez généralement vérifier l'endroit où vous entrez dans le serveur et appuyez sur la commande.

Comme un point

Le code réel ressemble à ceci:

fabfile.py



from fabric.colors import *
from fabric.api import run, env, hide

env.warn_only=True

def access_log_report(hour):
	base = "/var/log/hoge/logs/"
	with cd(base):
		with hide('everything', 'status'):
			ip_cmd = "cat access_log |grep `date +%Y`:" + hour + ":| cut -f 1 -d ' ' | sort | uniq -c | sort -nr | head -10"
			contents_cmd = "cat access_log |grep `date +%Y`:" + hour + ":| cut -f 7 -d ' ' | sort | uniq -c | sort -nr | head -10"
			
			print "#### top ip"
			ip = run(ip_cmd, shell_escape=False)
			print ip
			print "#### top contents"
			contents = run(contents_cmd, shell_escape=False)
			print contents

def df_stat():
	with hide('everything', 'status'):
		print green(run("df -h"))

def cpu_stat(start_time, end_time):
	with hide('everything', 'status'):
		print green(run("sar -q -s " + start_time + " -e " + end_time))
		print green(run("sar -u -s " + start_time + " -e " + end_time))


poème

Pour diverses raisons, il est difficile d'accéder au serveur et il est difficile de gérer le serveur automatiquement. (En fait, il y a beaucoup de choses à penser sur l'automatisation, et s'il existe déjà un mécanisme, il est assez difficile de l'adapter.)

Donc pour le moment, ce que je fais habituellement sur la console J'ai essayé de l'automatiser, ou j'ai essayé d'utiliser du tissu comme ça.

On parle aussi de faible automatisation.

Je vois un tutoriel comme du tissu, vous pouvez en faire pas mal! Je ne pensais pas qu'il y avait des cas d'utilisation spécifiques, alors je les ai résumés.

Au fait, pour le monitoring, fluentd et norikra semblent être utiles, alors utilisons-les Regardez le journal des applications. chef - Outil de surveillance de nouvelle génération Sensu Reference --Qiita Je pense que vous devriez regarder l'état du serveur.

Cependant, il y a des moments où vous n'avez pas ce que vous voulez pour ce genre de chose ... De plus, mon doigt entre par réflexe dans le serveur et frappe une commande pour le vérifier directement ...

De plus, serverspec est trop conscient, donc une fois qu'il est fabric. Je suis plus habitué à python (ou plutôt à la commande shell serveur telle quelle). Cependant, il est assez pratique de simplement ssh et d'appuyer facilement sur les commandes.

c'est tout.

Recommended Posts

Depuis que l'alerte a été émise, j'ai obtenu les informations du serveur avec une faible connaissance avec Fabric
Obtenez les dernières informations AMI avec l'AWS CLI
Obtenez swagger.json avec Flask-RESTX (Flask-RESTPlus) sans démarrer le serveur
Obtenez l'identifiant d'un GPU avec une faible utilisation de la mémoire
[Python x Zapier] Obtenez des informations d'alerte et notifiez avec Slack
Obtenir des informations avec l'API Zabbix
Obtenez des informations sur l'alambic avec Python
PhytoMine-I a essayé d'obtenir les informations génétiques de la plante avec Python