将您的Node.js应用程序日志存储到Minio

将您的Node.js应用程序日志存储到Minio

日志记录仍然是开发人员关注的主要问题之一。通常,各种组件(如Web服务器,数据库)会将日志存储在不同的位置。当出现问题时,开发人员需要四处寻找相关的日志。

将您的应用程序日志自动存储在预定义的位置不是很好。您可以使用Fluentd和Minio做到这一点。在本文中,我们将介绍如何设置Fluentd和Minio以从Node.js应用程序自动创建日志并将其存储在Minio服务器上。但首先,简要介绍Fluentd。

快速说明,本文中我将使用Ubuntu 15.10进行演示。如果使用其他操作系统,请使用相应的Fluentd命令。您可以从我在任何相关位置添加的链接中找到该信息。

流利的

Fluentd是一个开源数据收集平台,可让您统一数据收集过程。通过在两者之间提供统一的日志记录层它使数据源与后端系统脱钩,从而使开发人员可以轻松地将日志从各种应用程序生成和存储到其首选位置。

开始吧

首先,让我们从Node.js应用程序创建日志并将其存储到本地文件系统。成功完成后,我们将继续将日志文件存储目标设置为Minio服务器。

  • 安装Fluentd- 您可以安装稳定的Fluentd发行版,称为td-agent(由支持Fluentd的公司Treasure Data提供)或基于Ruby的守护程序。如果您感到困惑,请在此处阅读Fluentd和td-agent之间的区别

我正在使用Ubuntu 15.10,并使用以下命令安装了td-agent

curl -L https://toolbelt.treasuredata.com/sh/install-ubuntu-trusty-td-agent2.sh | sh

如果使用其他平台,则需要使用相应的脚本。在此处阅读详细的安装说明

成功安装后,您应该能够使用以下命令启动Fluentd守护程序

$ /etc/init.d/td-agent start

使用检查状态

$ /etc/init.d/td-agent status

修改Fluentd配置文件 -现在让我们设置Fluentd正向输入插件,以接受来自Node.js应用程序的日志。请注意,插件本身包含在核心中,因此我们只需要编辑配置文件。打开文件“ /etc/td-agent/td-agent.conf”并设置源标签如下

  <source>
  @type forward
  port 24224
  bind 0.0.0.0
</source>

在这里,我们只是将输入类型设置为forward,端口设置为24224以侦听传入的连接。请注意,这仅应在专用网络中使用,因为在Internet上打开端口24224将使您的系统容易受到攻击。对于公共网络,请考虑使用in_secure_plugin

  • 配置Node.js应用程序以将日志发送到Fluentd  —现在,我们将了解如何记录来自Node.js应用程序的事件。为此,您需要在Node.js应用程序中包括fluent-logger作为依赖项。在我的示例应用程序中,我这样做是这样的:

ackage.json

{
  "name": "node-example",
  "version": "0.0.1",
  "dependencies": {
    "express": "2.5.9",
    "fluent-logger": "0.1.0"
  }
}

接下来,我调用logger.configure()logger.emit()来设置Web应用程序中的日志记录。

app.js

var express = require('express');
var app = express.createServer(express.logger());

var logger = require('fluent-logger');
logger.configure('fluentd.test', {host: 'localhost', port: 24224});

app.get('/', function(request, response) {
  logger.emit('follow', {from: 'userA', to: 'userB'});
  response.send('Hello World!');
});
var port = process.env.PORT || 3000;
app.listen(port, function() {
  console.log("Listening on " + port);
});

此示例应用程序将记录器配置为将日志发送到本地主机端口24224(与Fluentd config期望的端口相同),然后,每当访问“ /”时,都会生成一条日志条目,内容为“从userA到userB”。

通过运行以下命令执行节点模块后,可以在浏览器上通过http:// localhost:3000访问此应用程序

$ node app.js

如果一切正常,则应该可以访问/var/log/td-agent/td-agent.log中的日志。

我们还只有一半。在接下来的步骤中,我们将看到如何设置Minio服务器和客户端,然后配置Fluentd将日志存储到我们自己的Minio服务器。

  • 设置Minio  —现在,我们将设置自己的Minio服务器,该服务器将用作Node.js应用程序生成的所有日志的宿主。此处下载Minio服务器和Minio客户端然后导航至下载了应用程序并键入以下内容的文件夹

$ chmod +x minio
$ ./minio --help
$ ./minio server <Folder_That_You_Wish_To_Be_Root>

这将生成访问密钥和秘密密钥,您将需要这些密钥才能登录到Minio服务器。

接下来,配置Minio Client:

$ chmod 755 mc
$ ./mc config host add myminio http://localhost:9000 <Access_Key> <Secret_Key>

然后使用Minio客户端创建存储桶,这将成为Fluentd入站日志的目标。(您也可以通过Minio服务器Web界面执行此操作。)

$ mc mb myminio/NodeAppLogs
  • 设置Fluentd以将日志发送到Minio  —最后,我们将配置Fluentd,以使其将日志发送到Minio服务器而不是本地文件系统。为此,您需要在此处打开“ /etc/td-agent/td-agent.conf”可用的Fluentd配置文件(与我们在第二步中编辑的文件相同)。打开文件后,查找标记并将其替换为

 <match>
 @type s3
 aws_key_id <minio_access_key>
 aws_sec_key <minio_secret_key>
 s3_bucket <target_bucket>
 s3_endpoint <minio_server_URL>
 path logs/
 force_path_style true
 buffer_path /var/log/td-agent/s3
 time_slice_format %Y%m%d%H%M
 time_slice_wait 10m
 utc
 buffer_chunk_limit 256m
</match>

您只需要更改minio_access_keyminio_secret_keytarget_bucketminio_server_URL字段。完成后,保存文件并重新启动Fluentd by

$ sudo /etc/init.d/td-agent restart

如果一切正常,您将可以在Minio服务器中查看Node.js日志


1_KnohBV5vG3qiMxmw1mtv3A.png
我的Node.js应用程序登录Minio服务器



当您使用它时,请帮助我们了解您的用例以及如何更好地帮助您!填写我们最好的Minio部署表格(只需不到一分钟的时间),并有机会在Minio网站上亮相,并向Minio社区展示您的Minio私有云设计。


上一篇 下一篇