A fabric use case that can be used to check the server status after an alert, rather than automating with low awareness.
The result of 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
...
The result of specifying the time with -s and -e of 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
...
Count access_log nicely with cut or 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'
...
If you specify another option of sar, ps, free, whatever you like, It seems that you can usually check the place where you enter the server and hit the command.
As a point
The actual code looks like the following.
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))
Due to various reasons, it is difficult to enter the server and it is difficult to manage the server automatically. (In fact, there are many things to think about automation, and if there is already an existing mechanism, it is quite difficult to adapt it to it.)
So for the time being, what I usually do over the console I tried to automate it, or I tried using fabric like that.
There is also talk of low automation.
I see a tutorial like fabric, you can do quite a lot! I didn't think there were any specific use cases, so I summarized them.
By the way, for monitoring, fluentd and norikra seem to be useful, so let's use them Look at the application log. chef --Next generation monitoring tool Sensu reference --Qiita I think you should check the server status.
However, there are times when you don't have what you want for that kind of thing ... In addition, my finger reflexively enters the server and hits a command to check it directly ...
Also, serverspec is too conscious, so once it is fabric. I'm more used to python (or rather, the server shell command as it is). However, it's quite convenient to just ssh and hit commands easily.
that's all.
Recommended Posts