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