log.io:浏览器端实时日志监管系统(2)log.io 技术架构
- UID
- 1066743
|
log.io:浏览器端实时日志监管系统(2)log.io 技术架构
log.io 技术架构Node.js 和 socket.iolog.io 的技术基础是 Node.js 和 socket.io,当下 Node.js 是一门非常火的技术,它扩展了 JavaScript 的边界,使其能够实现很多后端语言的功能。Node 替代了浏览器作为 JavaScript 的运行容器,使得 JavaScript 可以实现 Web 服务器,操作文件系统,访问网络等等功能。log.io 的服务器是用 Node.js 实现的。在此之上,socket.io 完成了数据的实时同步,我们知道,一般浏览器端通过 ajax 请求从后端取得数据,而 socket.io 可以发现后端数据的变化,然后把数据及时的发送到浏览器上。log.io 的数据同步则是用这项技术实现的。
HarvesterHarvester,收割器,完成的是数据采集,通过 TCP 端口发送到 log.io 服务器,默认是 28777,服务器通过 socket.io 将增量日志信息同步到浏览器。可以看到,如果没有收割器,log.io 没有任何输出信息,当然,可以有多个收割器同时工作向 log.io 服务器输入信息,它们的关系如图 2 所示。
图 2. 收割器、服务器、浏览器关系示意图Node 和 Stream由于 log.io 可以监管多个日志文件的变化情况,所以每个用户都可以选择自己关心的日志文件。每个 Stream(流) 作为一个通道实时发送日志的监测信息,在这里,可以把一个 Stream 想象成一个广播电台,实时的发送广播信息,用户通过勾选流来说明正在收听。Node(节点) 是 Stream 的管理容器,一个 Node 可以包含多个 Stream,当 Node 删除的时候,归属于它的 Stream 都将被删除。这里采用 Node 包装的主要原因是,用户可能想要知道一个 Node 下的所有信息,只需要在浏览器端勾选 Node,所有从属的 Stream,都会被监管。如图 3 所示:
图 3. 选择 test2 节点,所有从属的流被选中TCP 接口如图 2,收割器和服务器端的接口是 TCP。在这里,我们可以通过手动向服务器发送信息来模拟一个收割器,用来说明 TCP 接口的 API 和使用方法。
1. 我们用 telnet 来发送 TCP 信息。
1
2
3
4
| [root@symfred1 ~]# telnet localhost 28777
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
|
2. 创建一个 node, 这里会创建一个空的流 (stream)
3. 创建一个 node, 绑定 s1,s2 两个流
4. 在 node 上添加一个流 s3
5. 删除一个 stream, 这里必须指定 stream 所属的 node
6. 在 test2 的 s2 上面添加一条日志,如图示 4。
1
| +log|s2|test2|info|this is a message
|
图 4. 发送一条日志更新信息 |
|
|
|
|
|