安装 log.io 实时日志监控工具

日志是个好东西,对技术人员来说写日志能纪录成长,分享经验;对机器来说纪录日志能及时发现错误,为日后的排错提供信息。如果还在一台机器上用 tail -f 监听单个日志或者用 multitail 监听多个日志也太 out 了,我们需要一种工具能纪录上百台机器、不同类型的日志,并最好能汇集到一个界面里方便查看,最好还是实时的。log.io 就是这样一个实时日志监控工具,采用 node.js + socket.io 开发,使用浏览器访问,每秒可以处理超过5000条日志变动消息。有一点要指出来的是 log.io 只监视日志变动并不存储日志,不过这个没关系,我们知道日志存储在哪个机器上。

和其他的监控工具一样,log.io 也采用服务器-客户端的模式。log.io 由两部分组成:server 和 harvester, server 运行在机器 A(服务器)上监视和纪录其他机器发来的日志消息;log harvester 运行在机器 B(客户端)上用来监听和收集机器 B 上的日志改动,并将改动发送给机器 A,每个需要纪录日志的机器都需要一个 harvester.

在机器 A 和 B 上

因为 log.io 基于 node.js,所以在服务器和客户端都要安装 node.js,这里采用编译安装的办法,首先安装需要的依赖包:

$ sudo apt-get install g++ make git libssl-dev pkg-config

下载 node.js 源代码,编译并安装:

$ wget http://nodejs.org/dist/v0.8.14/node-v0.8.14.tar.gz
$ tar zxvf node-v0.8.14.tar.gz
$ cd node-v0.8.14/ 
$ ./configure
$ make
$ sudo make install

安装 NPM:

$ curl https://npmjs.org/install.sh | sudo sh 

安装 log.io(包含了 log server 和 log harvester)

$ sudo npm config set unsafe-perm true 
$ sudo npm install -g --prefix=/usr/local log.io

在机器 A 上启动 server

$ sudo log.io server start

在机器 B 上配置和启动 harvester

server 用来监听各个机器发来的日志消息,harvester 用来把本机的日志发给 server,所以 harvester 配置的时候需要指定 server 的主机地址(或域名)。如何告诉 harvester 哪些日志需要监控呢?log_file_paths 就是指定日志路径的地方。下面的配置是 harvester 把 auth.log 和 harvester.log 这两个日志的改动发送给 server:

$ sudo vi /etc/log.io/harvester.conf
exports.config = {
  // Log server host & port
  server: {
    host: 'log.vpsee.com', // 也可以用 IP 地址
    port: 8998,
  },

  // Watch the following log files, defined by label:path mappings
  log_file_paths: {
    logio_auth: '/var/log/auth.log',
    logio_harvester: '/var/log/log.io/harvester.log',
  },

  instance_name : 'log_node_1'
}

启动 harvester:

$ sudo log.io harvester start

测试

打开浏览器访问 log server 所在的机器 A,域名是 log.vpsee.com(也可以用 IP 地址),端口是 8998(注:为了隐私和保护内部信息,文章里面出现的 IP、域名、密码以及任何敏感信息都是处理过的,所以这里的 log.vpsee.com 是参考用的、是打不开的,囧,下面还有人留言问为啥打不开~):

log.io

评论 (24 Comments)

  1. 的确很强大

  2. logstash 比这个应该更好些,每秒最少可以收集几万条 log。

  3. 嗯,考虑过 logstash,有点太强大太重,不过它能从日志收集 metrics 输出到 graphite 这个功能很喜欢,我们监控用的是 graphite.

  4. 图太小了看不清,还以为log.vpsee.com:8998可以对外访问呢

  5. 学习了

  6. 骗人
    log.vpsee.com:8998
    根本打不开

  7. @teng
    囧,老兄,为了隐私和内部信息,文章里面出现的所有 IP 地址和域名、密码以及任何敏感信息都是修改过的。

  8. 兄弟,io对监控的日志文件是不是有权限或格式限制?我让它显示nova的日志不能显示,但能显示syslog或message日志文件

  9. 你好vpsee,看了你的文章对我启发很大,但是我按你说的步骤操作到“log.io server start”,系统提示我:“Starting Log.io server…
    could not open session
    Done.”

  10. 呵呵,问题解决了。是我的系统设了安全限制,对passwd文件做了限制,我修改了设置,重新执行“npm install -g –prefix=/usr/local log.io”后,顺利创建了logio用户,程序也正常启动了。

  11. ->日志是个好东西,对技术人员来说写日志能纪录成长,分享经验;对机器来说纪录日志能及时发现错误,为日后的排错提供信息。

    非常同意啊

  12. 我目前还是很out的,用tail -f 看下日志;不过,我不知做服务器监控的,偶尔就tail一下。。 收藏一下,过几天不忙了,再实际学习一下log.io

  13. 这个我测试过,性能有待优化,只能处理1-5G的日志,日志太大,整机负载会比较高。还影响其他正常业务。

  14. 能不能做到被收集的日志名是动态的在查看时再指定,因为日志很多,而且为了不出现巨大日志文件,也会按时存储。

  15. 这个是需要目测是么?能不能根据关键字符串比如error来将搜集到的高亮或者发送报警给指定信箱?

  16. log.io和logstash的主要区别是
    log.io不存储日志,主要是为了实时监控;
    logstash可以存储日志,并且从日志中挖掘信息。

  17. 为毛log.vpsee.com:8998打不开啊。是不是挂了

  18. 有没有不是npm的安装方法?需要查看的服务器不能连接外网

  19. 要是能支持Kafka消息队列的输入,并能将日志导出的话就好了

  20. 他这个日志能不能做灵活一点的 就是支持匹配

  21. 这个日志文件只能写死 有点不够灵活

  22. server 和 harvester 可以装在一个服务器上吗
    就只是监听本服务器的日志

  23. 网页能打开,但是什么都没显示,只有左侧,中间什么都没有

  24. 嗯,考虑过 logstash,有点太强大太重,不过它能从日志收集 metrics 输出到 graphite 这个功能很喜欢,我们监控用的是 graphite.

发表评论