`
cvu
  • 浏览: 108250 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

Log Monitor - 把分散在各台server上的log集中起来monitor

    博客分类:
  • ruby
阅读更多
公司的系统很分散,monitor log很费劲。写了一个ruby程序,让所有的log集中在一个地方。试用以后,系统维护的工夫可以少很多,还可以在用户报告之前发现问题。效果不错。

主要原理就是用net/ssh登录各台server,tail -f那些log,捕捉sysout(channel.on_data),然后加一些辅助信息(比如[module]-[file]-orignal log)输出。

以前也用过chainsaw等工具,不方便的地方在于:只能monitor log4j;不能集成在一个output里。

这个ruby程序只有几十行,如果以后要加一些auto mail,垂直log等功能也很灵活。还有些说明与窍门都一一分享在code comments里。

### license: http://creativecommons.org/licenses/by-sa/2.5/deed.zh
### by: caoweiyuan#gmail.com
require 'net/ssh'

require 'yaml'
modules = YAML.load(File.open('modules.conf'))
### sample config
# engine-1:
#   username: admin
#   password: ******
#   logs:
#     /opt/apps/production/tomcat/logs/app.log:
#       name: [module-1]
#       greps:
#         error.log: 
#           - ERROR
#         info.log: 
#           - INFO

def do_grep(name, line, greps)
  log = "[#{name}] - #{line}"
  
  # default output to screen
  puts log
  
  # grep patterns to sepecific files
  for log_file, patterns in greps
    pattern = (patterns.class == Array) ? patterns.join("|") : patterns
    File.open('log/' + log_file, 'a') {|f| f.puts log} if line =~ /#{pattern}/
    # TODO: auto mail for errors
    # TODO: horizontal log for different products, and delete after each process over.
  end
end

def do_tail( session, log_file, log_conf )
  session.open_channel do |channel|
    channel.on_data do |ch, data|
      data.each_line do |line|
        do_grep log_conf['name'], line, log_conf['greps']
      end
    end
    channel.exec "tail -1f #{log_file}"
  end
end

for key, value in modules
  t = Thread.new(key, value) do |host, host_conf|
    Net::SSH.start( host, host_conf['username'], host_conf['password'] ) do |session|
      puts "#{host} logged in."
      for log_file, log_conf in host_conf['logs']
        puts "start watching #{log_file}"
        # open channels for multiple log files
        do_tail session, log_file, log_conf
      end # log
      session.loop # important: loop to keep reading channel outputs
    end # session
  end # thread
end # host

# TODO: implement a formal deamon
loop do
  # deamonize
  sleep 1
end



最后,还有一点要分享的,这种方式不支持windows openssh,如果log在windows机器上,要装cygwin。还有,vmware的windows装了cygwin也不行,sshd开不了,如果有高手知道原因和方案,请不吝赐教。
分享到:
评论

相关推荐

    logMonitor-master

    "logMonitor-master"就是这样一个针对分布式日志进行集中监控管理的解决方案,它在实际业务中被广泛采用,提供了异常监控以及自动邮件预警等功能,帮助运维人员实时查看服务器日志信息,从而快速定位并解决问题。...

    log_monitor日志监控

    log_level: log monitor的日志级别 启动 ./bin/log_monitor [conf_file_path] 查看 (1) 在控制台就可以看到系统实时的qps以及每一秒中接口的平均耗时情况 (2) 通过浏览器访问 http://${ip}:{http_port}/show.html

    活动日志监控log-monitor.zip

    $reader = new \Jenner\LogMonitor\Reader\Reader('/var/log/messages'); $filter = new Jenner\LogMonitor\Filter\ExceptionFilter(); $notify = new \Jenner\LogMonitor\Notification\EchoNotification()...

    LogMonitor-0.0.3.exe

    LogMonitor安装包

    前端开源库-redux-devtools-log-monitor

    安装完成后,在Redux store配置中添加DevTools的中间件,并选择`logMonitor`作为显示器。这样,当应用运行时,就会在浏览器的开发者工具中看到这个日志监视器。 此外,Redux DevTools不仅限于`log-monitor`,还有...

    dubbo-monitor-simple-2.0.0-assembly.tar.gz

    总结起来,dubbo-monitor-simple-2.0.0-assembly.tar.gz是Dubbo监控中心的一个完整部署包,通过解压、配置、启动三个步骤,可以在本地或服务器上搭建起一个功能完善的监控平台。对于大型分布式系统而言,监控中心的...

    LogMonitor-0.0.1.exe

    Qt开发的日志监控软件。支持子目录监控

    store-log-monitor, @ngrx/store devtools和 Angular的日志监视器.zip

    store-log-monitor, @ngrx/store devtools和 Angular的日志监视器 @ngrx/store-log-monitor 用于 Angular 2和 @ngrx/store-devtools的 redux-devtools-log-monitor端口设置从 npm 安装 @ngrx/store-log

    Python库 | django-http-monitor-0.2.1.tar.gz

    总结起来,`django-http-monitor-0.2.1`是Python Django开发中的得力助手,它提供了一种简单且灵活的方式来监控和调试HTTP请求。通过集成这个库,开发者可以快速定位问题,提升开发效率,确保应用的稳定性和性能。...

    File-Monitor-1.00.tar.gz

    标题中的"File-Monitor-1.00.tar.gz"是一个软件包的名字,它采用的是Linux/Unix系统中常见的归档和压缩格式`.tar.gz`。这个格式是通过先使用`tar`命令将多个文件或目录打包成一个单一的`.tar`文件,然后再用`gzip`...

    PyPI 官网下载 | azure-cli-monitor-0.2.9.tar.gz

    `PyPI`上的`azure-cli-monitor-0.2.9.tar.gz`文件是一个包含`azure-cli-monitor`库源码的压缩包,它使得开发者能够使用Python命令行接口与Azure Monitor服务交互。通过安装这个库,用户可以轻松地监控和管理他们的...

    HTTP-Log-Monitor

    hits = {value},在 {time} 触发”每当总流量在过去 2 分钟内平均再次低于该值时,添加另一条详细说明警报恢复时间的消息确保超过警报阈值时显示的所有消息保持可见由于历史原因在页面上。为警报逻辑 解释您将如何...

    GTK+ System log monitor-开源

    GTK+ System Log Monitor是一款开源软件,它利用GTK+工具包为X-Window系统提供了一个简洁而功能丰富的多记录日志监视器。这个监视器的主要目标是帮助用户方便地跟踪、管理和理解系统的运行状态,通过实时显示来自不...

    Log Explorer for SQL Server v4.22

    服务器端代理是保存在SQLServer主机中的一个只读存储过程,他的作用是接受客户端请求,读取在线事物日志块并通过网络传给客户端软件,由客户端软件来读取这些原始的数据块来完成Log Explore所提供的所有功能。...

    AutoBahn Log monitor-开源

    AutoBahn Log Monitor是一款开源的日志监控工具,专为Unix系统设计,旨在提供实时的日志分析功能,以检测和响应可能的系统安全威胁。这款工具基于反应式编程模型,能够高效地处理大量的日志数据流,并及时对异常行为...

    Log Explorer for SQL Server v4.22 含注册机

    服务器端代理是保存在SQLServer主机中的一个只读存储过程,他的作用是接受客户端请求,读取在线事物日志块并通过网络传给客户端软件,由客户端软件来读取这些原始的数据块来完成Log Explore所提供的所有功能。...

    mqtt-log-monitor:一个超级简单的工具,用于监控日志文件的变化并将其发布到 MQTT

    安装 npm install -g mqtt-log-monitor用法 mqtt-log-monitor [-r] [-p port] [-h host] -f file -t topic在哪里: -p (--port) 是要发布到的代理的端口-h (--host) 是代理的主机名-f (--file) 是要监控的文件-t (--...

    SB EventLog Monitor-开源

    SB EventLog Monitor正在监视和合并Windows EventLogs。 使用VBS和WMI或Windows代理从服务器收集事件。 事件是使用PHP和YOUR规则解析的,并存储在MySQL数据库中。 支持电子邮件警报。

    Secure Remote Log Monitor-开源

    Secure Remote Log Monitor(SRLM)项目提供了客户端和服务器实用程序,这些实用程序可以通过不受信任的网络将来自多个系统的应用程序或系统日志文件收集到中央服务器上,以进行分析和处理。

Global site tag (gtag.js) - Google Analytics