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