仅列出特定字段的 Apache 实时监控脚本

仅列出特定字段的 Apache 实时监控脚本

我正在实时监控我的网站日志,但想创建一个脚本,仅在漂亮的列中显示以下内容。

正在使用的日志:/var/log/httpd/access_log(默认日志文件和设置)

主机名 - IP 地址 - 页面 - 日期和时间

当前通过终端使用的命令:tail -f /var/log/httpd/access_log | awk '{ print "hostname" $1 $7 $4 }'

我找到了一个创建了我想要做的事情的人,但他们没有回复我。这是我最终想要得到的屏幕截图

http://qph.cf.quoracdn.net/main-qimg-fde4d84bf459d14aff0ef930e4f8c7fe

还想将 netstat -anp | grep :80 | wc -l 合并到顶部的脚本中以显示当前连接数

我当前的输出是乱码,如下所示:

网页访问时间

没有分离等等...

我对脚本编程还很陌生,所以这对我来说都是新的,我花了一点时间才让 awk 为我工作,如果已经有关于这方面的文章,请分享

    #!/bin/sh

    # Define some variables#
    TAIL="/usr/bin/tail -f"
    # TAIL command can also be -10, -15, -20, -30
    LOG="/var/log/httpd/access_log"
    TOTAL=`netstat -pant | grep :80 | wc -l`
    TOTAL2=`netstat -pant | grep :443 | wc -l`
    echo "There are $TOTAL port 80 connections."
    echo "There are $TOTAL2 port 443 connections."
    uptime | awk '{print $8,$9,$10,$11,$12,$13,$14,$15}'

    #Let's do it#
    $TAIL $LOG | awk '{print$3 " " $8 " " $4 " " $6 " " $8 " " $9 " " $7}'

    #DONE

答案1

@Stephan 想把链接放到原始问题中吗?

用户157574

您很可能希望使用带有列的 printf 或 tput。对我来说,使用这些是可行的,尽管我意识到它不是实时的:

less access_log | grep 05/Feb/2013 | awk '{print $1,$4,$7;}'

less access_log | grep 05/Feb/2013 | awk '{ x = $2 " " $4 " " $7 ; printf "%-15s %-20s \n", $1, x, $7}'

编辑:

您可以尝试更改此版本:

#!/bin/bash
ACCESSLOG="/var/log/apache2/access_log"
TOTAL=`netstat -pant | grep :80 | wc -l`

echo "There are a total of $TOTAL port 80 connections."
uptime | awk '{print $8,$9,$10,$11,$12}'

tail -5 $ACCESSLOG | grep "05/Feb/2013" | awk '{ x = $2 " " $4 " " $7 ; printf "%-15s %-20s \n", $1, x, $7}'

您可以将其编辑为 tail -f 以使其处于活动状态,或者编辑为 tail -5、-10、-20 等。

答案2

最近,我开发了一个开源工具(脚本)来做你想做的事情,叫做httpdmon

它是用 PHP 编写的,因此很容易定制(尽管欢迎您在 Github 上询问更多功能)。

以下是屏幕截图:

httpdmon 运行中

相关内容