在多台计算机上搜索日志

时间:2009-04-02 21:54:03

标签: logging production-environment

有没有人知道一个好的工具,它允许你拖拽和搜索分布在一组机器上的日志文件。我们有多个Web服务器和应用服务器,逐个挖掘每个服务器上的日志是一件痛苦的事。

5 个答案:

答案 0 :(得分:1)

您可以使用以下bash脚本(如果您可以ssh到远程计算机并具有对日志文件的读取权限)

(echo“machine1”; ssh machine1 tail / var / log / messages; echo“machine2”; ssh machine2 tail / var / log / messages;)|少

答案 1 :(得分:1)

我不知道安装/配置的工作量有多少,但我听说过splunk的一些好消息。 YMMV。

答案 2 :(得分:0)

您可以使用fabric来拖出多个主机并grep所有结果:

$ fab -P -u 'USER' -p 'PASSWORD' --linewise -H host1,host2,host3 -- tail -f /path/to/my/log.log | grep ERROR

答案 3 :(得分:0)

Splunk非常有效地聚合日志文件以进行搜索并将结果显示为按时间点击计数的图表,但它也很昂贵。我最近了解了Kibana这是splunk的开源替代品。

答案 4 :(得分:0)

您可以使用一个小的Shell脚本来实现:

  • 定义您的参数:
machines=("user@address1" "user@address2" "user@address3")
log_files=("/path/to/application.log" "/path2/to2/application.log" "/path3/to3/application.log" "/path4/to4/application.log")
  • 拖尾每台机器并等待中断:
#!/bin/bash

pids_arr=()
for ((i=0;i<${#machines[@]};++i)); do
    ssh "${machines[$i]}" "tail -f ${log_files[$i]}" & pids_arr+=("$!")
done

pids="${pids_arr[*]}"
trap "kill -9 $pids" SIGINT SIGKILL
for pid in ${pids}; do wait $pid; done
trap - SIGINT SIGKILL

额外:如果您不想查看作业监视器日志,可以使用:

job_mon=${-//[^m]/} ; set +m

(...)

sleep 0 ; if [[ -n "$job_mon" ]]; then set -m; else set +m; fi