`

Log Monitor : 簡便的分散式 log 管理工具

阅读更多
JavaEye 的 CVU 版友最近發表了一篇 Log Monitor - 把分散在各台server上的log集中起来monitor 的程式,主要功能是可以將分散在各個機器的 Rails log 給集合起來。主要是使用 net-ssh 連到各個 server,然後將指定好的 log 給 tail -f 起來。經過試用後發現程式簡單方便修改,但是輸出目前為止又很堪用,實在感謝他。License 是 CC 2.5 姓名,相同方式


config 寫法
config出現在第六行裡面的 modules.conf ,Modules.conf 寫法如下

log 所在的 server ip or domain name:
__username:ssh 的使用者名稱
__password:ssh user 的 password
__logs:
____/log/所在/目錄/log檔名:
______name: [在 log monitor 顯示的名稱]
______greps:
________error.log:
__________- ERROR
________info.log:
__________- INFO

程式寫法
### 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
分享到:
评论

相关推荐

    log_monitor日志监控

    (1) 二进制包:下载工具包 log_monitor.tar.gz,并解压 (2) 源码编译:make 之后进行参数配置,可以拷贝现有的,各个参数说明如下: log_file=/data/nginx_logs/access.log log_reg=\[(.*) \+0800\] time_format=%d/%b/%Y:...

    logMonitor-master

    1. **日志收集**:logMonitor-master能够自动发现并连接到分布在网络中的各个服务器,实时抓取各个节点的日志信息。这通常通过安装在各节点上的代理程序实现,如Fluentd或Logstash,它们将日志数据转化为统一格式并...

    c++使用spdlog整合读取配置文件使用

    在`message`类中,我们可以使用` spdlog::register_logger()`和`spdlog::cfg::load_yaml_config()`来读取并应用配置: ```cpp void Message::init_from_yaml(const std::string& config_path) { try { auto yaml_...

    Log-Log4perl-1.36.tar.gz

    以上就是关于Log4perl的详细介绍,它是Perl日志管理的强大工具,提供了丰富的功能和高度的灵活性,适用于各种规模的项目。通过理解并熟练运用Log4perl,开发者可以更有效地调试和监控他们的Perl应用程序。

    log_monitor:监控日志

    用法作为RAILS插件创建config / log-monitor.yml monitor: target: /tmp/log/development.log words: - Completed 500 Internal Server Error - No route matchesmethod: file # ,console, email or webpostfile: /...

    Android代码-LogCollector:一个收集 app 输出日志的工具

    implementation 'com.ljuns:logcollector:' } 在 AndroidManifest.xml 中申请如下权限: 在 Application 的 onCreate() 方法中调用如下: LogCollector.getInstance(this).start(); 更多功能 可以根据日志...

    活动日志监控log-monitor.zip

    log-monitor 基于tail命令一个活动日志监控。使用示例:Just remember that when you call the start method, do not forget to call wait method. $reader = new \Jenner\Log... 标签:logmonitor

    Log4E:Log4j插件

    Log4E是一款专门为Java开发人员设计的Log4j插件,它扩展了Log4j的功能,使得在开发过程中,对日志的管理和使用更加便捷高效。Log4j是一款广泛使用的开源日志框架,允许开发者记录应用程序运行过程中的事件,便于调试...

    4种平台抓LOG方法汇总

    高通平台通常使用QXDM(Qualcomm eXtensible Diagnostic Monitor)工具,这是一个强大的诊断和测试工具。安装QXDM软件后,通过USB连接设备,选择相应的设备模型,即可捕获LOG数据。QXDM不仅可以获取系统LOG,还能...

    Java中的Graylog:微服务架构下的日志管理与分析

    在微服务架构中,服务的分布式特性使得日志管理变得复杂。Graylog作为一个强大的日志管理...通过本文的介绍,希望你能对Graylog在Java中的应用有一个全面的了解,并能够在实际工作中灵活运用这些工具来提升应用性能。

    xmljava系统源码-LogMonitor:监控有关应用程序或JavaEE的日志

    LogMonitor项目简介: 项目功能: 日志监控告警系统的主要功能: 帮助于开发者,针对于开发者开发的app或者客户端软件等各种应用的运行近况进行监控。可以查看应用的情况,了解详情,对于出发了开发者所设置的规则,...

    log-monitor:基于日志的统计qps和cost_time

    log_monitor 移至 如何使用? tail -f |grep --line-buffered |lm -s输出格式: log_time: 2019-10-28 10:36:18, QPS:10, avg_cost_time:22, max_cost_time:222log_time: 2019-10-28 10:36:20, QPS:1, avg_cost_time...

    kafka 解决log4j:ERROR Failed to rename错误解决办法错误的jar包

    log4j:ERROR Failed to rename

    C# 常用工具类 日志操作(log4net) 配置管理、字符串工具、DateTime工具、图片工具、文件工具、加密工具 等

    这些工具类通常包含对特定任务的封装,如日志记录、配置管理、字符串处理、日期时间操作、图像处理、文件操作以及安全相关的加密算法。下面将详细解释这些工具类的主要功能和应用场景。 1. **日志操作(log4net)**: ...

    log4j:ERROR Failed to rename

    解决log4j:ERROR Failed to rename, win系统占用文件无法改名字的问题

    log4j:ERROR Failed to rename错误解决办法

    在Tomcat6下使用Log4j记录日志,天创建新日志文件时(日志文件设置为:org.apache.log4j.DailyRollingFileAppender)报: log4j:ERROR Failed to rename错误; 网上查找了下原因,大概意思是日志文件始终被占有,所以...

    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 (--...

    C++基于LOG4CPP的使用封装库

    void CLogOper::logDebug(const std::string& msg) { log4cpp::Category& myCategory = log4cpp::Category::getInstance(std::string("MyCategory")); myCategory.debug(msg); } ``` 在Linux环境中,这个封装库...

    log4j2漏洞检测工具

    **Log4j2漏洞检测工具详解** 在当前的IT环境中,安全问题日益凸显,特别是针对开源组件的安全漏洞。Log4j2,一个广泛使用的Java日志框架,最近曝出的重大安全漏洞(CVE-2021-44228,被称为Log4Shell)引起了全球的...

    boost log 简单使用

    可以使用`boost::log::init_log()`函数,这一步可以配置全局日志设置,如日志级别、目标等。 2. **定义日志记录器(logger)**:创建一个logger对象,这是日志记录的核心。例如: ```cpp boost::log::sources::...

Global site tag (gtag.js) - Google Analytics