Ein Fabric-Anwendungsfall, mit dem der Serverstatus nach einer Warnung überprüft werden kann, anstatt mit geringer Kenntnis zu automatisieren.
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
...
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
...
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'
...
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))
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