[PYTHON] Da die Warnung ausgegeben wurde, erhielt ich die Serverinformationen mit geringer Kenntnis von Fabric

Überblick

Ein Fabric-Anwendungsfall, mit dem der Serverstatus nach einer Warnung überprüft werden kann, anstatt mit geringer Kenntnis zu automatisieren.

Nehmen Sie die Festplattennutzung

Das Ergebnis von 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
...

Nehmen Sie die CPU-Last zu einem bestimmten Zeitpunkt

Das Ergebnis der Angabe der Zeit mit -s und -e von 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
...


Nehmen Sie die Statistiken zu Apache access_log

Zähle access_log gut mit cut oder 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'
...

Zusammenfassung

Wenn Sie eine andere Option von sar, ps, free angeben, was auch immer Sie möchten, Es scheint, dass Sie normalerweise die Stelle überprüfen können, an der Sie den Server betreten, und den Befehl drücken können.

Als Punkt

Der eigentliche Code sieht folgendermaßen aus:

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))


Gedicht

Aus verschiedenen Gründen ist es schwierig, den Server zu betreten, und es ist schwierig, den Server automatisch zu verwalten. (Tatsächlich gibt es viele Dinge, die man über Automatisierung nachdenken sollte, und wenn es bereits einen Mechanismus gibt, ist es ziemlich schwierig, ihn daran anzupassen.)

Also vorerst, was ich normalerweise über die Konsole mache Ich habe versucht, es zu automatisieren, oder ich habe versucht, solche Stoffe zu verwenden.

Es ist auch die Rede von geringer Automatisierung.

Ich sehe ein Tutorial wie Stoff, man kann ziemlich viel machen! Ich habe nicht gedacht, dass es bestimmte Anwendungsfälle gibt, also habe ich sie zusammengefasst.

Übrigens, für die Überwachung scheinen fließend und norikra nützlich zu sein, also verwenden wir sie Sehen Sie sich das Anwendungsprotokoll an. Chefkoch - Überwachungstool der nächsten Generation Sensu-Referenz --Qiita Ich denke, Sie sollten sich den Serverstatus ansehen.

Es gibt jedoch Zeiten, in denen Sie nicht das haben, was Sie für so etwas wollen ... Außerdem betritt mein Finger reflexartig den Server und drückt einen Befehl, um ihn direkt zu überprüfen ...

Außerdem ist Serverspec zu bewusst, sobald es sich um Fabric handelt. Ich bin eher an Python gewöhnt (oder besser gesagt an den Server-Shell-Befehl, wie er ist). Es ist jedoch sehr praktisch, einfach ssh und Befehle einfach zu drücken.

das ist alles.

Recommended Posts

Da die Warnung ausgegeben wurde, erhielt ich die Serverinformationen mit geringer Kenntnis von Fabric
Holen Sie sich die neuesten AMI-Informationen mit der AWS CLI
Holen Sie sich swagger.json mit Flask-RESTX (Flask-RESTPlus), ohne den Server zu starten
Holen Sie sich die ID einer GPU mit geringer Speichernutzung
[Python x Zapier] Erhalten Sie Warninformationen und benachrichtigen Sie mit Slack
Informationen erhalten Sie mit zabbix api
Holen Sie sich Alembic-Informationen mit Python
PhytoMine-I hat versucht, mit Python die genetischen Informationen der Pflanze zu erhalten