forever 日志 按日期输出

package.json --scripts

"for": "forever -p ./logs -l logfile.log -o ./logs/outfile.log -e ./logs/errfile.log -a -n --pidFile pidFile.log start app.js”,
"for:restart": "forever -p ./logs -l logfile.log -o ./logs/outfile.log -e ./logs/errfile.log -a -n --pidFile pidFile.log restart app.js”,

代码

const schedule = require('node-schedule')
const fs = require('fs')
const moment = require('moment’)

schedule.scheduleJob({
        hour:0,
        minute: 3,
    }, () => {
        const dir = moment().format('YYYY-MM-DD-HH-mm')
        console.log('日志更新了')
        fs.mkdir(`./logs/${dir}`, () => {
            ['outfile', 'logfile', 'errfile'].map(itm => {
                const readerStream = fs.createReadStream(`./logs/${itm}.log`);
                let data = '';
                readerStream.setEncoding('UTF8');
                readerStream.on('data', chunk=> data += chunk);
                readerStream.on('end', () => {
                    let writerStream = fs.createWriteStream(`./logs/${dir}/${itm}.log`);
                    writerStream.write(data, 'UTF8');
                    writerStream.end();
                    writerStream.on('finish', () => {
                        writerStream = fs.createWriteStream(`./logs/${itm}.log`);
                        writerStream.write('');
                        writerStream.end();
                    });
                });
            })
        })
    })

<think>好的,我现在需要帮助用户配置Fluentd的aggregator将数据输出到Elasticsearch(ES)。用户之前询问过是否可以不用aggregator直接输出到ES,现在他们可能已经决定使用aggregator,并需要具体的配置指导。 首先,我需要回忆Fluentd的基本配置结构。用户提供的配置文件中,当前所有的匹配规则都是输出到标准输出(stdout)。他们的目标是将数据发送到ES,所以需要修改或添加一个新的<match>块,指定@type为elasticsearch。 接下来,我需要确定如何正确配置elasticsearch插件。可能需要检查是否已经安装了fluent-plugin-elasticsearch插件。如果用户没有安装,需要提示他们先安装。然后,配置ES的主机、端口、索引名称等参数。例如,host、port、logstash_format、logstash_prefix等选项的设置。 用户可能还需要了解如何批量提交数据以提高性能,比如使用buffer相关的配置,如chunk_limit_size、flush_interval等参数。这些参数控制数据缓冲和刷新的频率,对性能优化很重要。 此外,考虑到用户之前的问题,他们可能关心如何确保数据的可靠传输,比如重试机制。需要配置retry_limit、disable_retry_limit等参数,以及是否启用重试。 另外,用户提供的配置中有两个<match>块,一个处理fluentd.healthcheck,另一个匹配所有标签。需要确保新的ES输出配置不会与现有规则冲突。可能需要调整匹配模式,比如使用更具体的标签来区分数据流,或者调整<match>的顺序,因为Fluentd会按顺序处理匹配规则。 还需要考虑索引的命名规范,是否使用logstash_format来自动生成按日期滚动的索引,或者自定义索引名称。这可能涉及logstash_prefix和logstash_dateformat的设置。 最后,用户可能需要验证配置是否正确,比如建议他们重启Fluentd服务后检查日志是否有错误,或者使用测试数据验证ES是否成功接收到数据。同时,提醒他们在高负载环境下调整缓冲区设置和性能参数,以确保系统稳定。</think>#### Fluentd Aggregator 配置 Elasticsearch 输出指南(基于你的配置调整) --- ##### 当前配置分析(问题定位) 你的现有配置仅使用 `stdout` 输出,所有日志(`<match **>`)直接打印到控制台,未对接 ES。需添加 Elasticsearch 输出插件并优化聚合逻辑。 --- ##### 分步配置方案 ###### 1. **安装 Elasticsearch 插件** ```bash # 在 Fluentd 所在环境安装插件 fluent-gem install fluent-plugin-elasticsearch ``` ###### 2. **修改 `fluentd-output.conf` 配置** ```ruby # 健康检查日志输出到 stdout <match fluentd.healthcheck> @type stdout </match> # 其他日志通过 Aggregator 处理后写入 ES <match **> # 匹配所有非健康检查的日志 @type elasticsearch # 基础 ES 连接配置 hosts es-host:9200 # 替换为实际 ES 地址 user elastic # 如果启用安全认证 password your_password scheme https # 根据实际协议调整 # 索引命名规则(按日滚动) logstash_format true logstash_prefix myapp # 生成索引如 myapp-2024.07.15 # 批量写入优化 flush_interval 5s # 每 5 秒强制刷新一次缓冲区 chunk_limit_size 8MB # 每个批量请求最大 8MB buffer_chunk_limit 4MB buffer_queue_limit 128 # 容错配置 retry_forever true # 无限重试 disable_retry_limit true reconnect_on_error true </match> ``` --- ##### 关键配置解释 | 参数 | 作用说明 | |----------------------|--------------------------------------------------------------------------| | `logstash_format` | 自动生成按日期滚动的索引(需配合 `logstash_prefix`) | | `flush_interval` | 控制聚合器批量提交频率(时间窗口) | | `chunk_limit_size` | 单个批量请求的最大体积,避免 ES 拒绝大包 | | `buffer_*` 系列参数 | 控制内存/磁盘缓冲队列行为,防止数据丢失 | | `retry_forever` | 网络故障时持续重试,保障数据可靠性 | --- ##### 优化建议 1. **区分日志类型** 避免使用 `<match **>` 全匹配,建议按标签分类(例如 `<match app.logs>`) ,并为不同日志类型指定独立索引。 2. **模板映射预定义** 在 ES 中提前创建索引模板,避免自动推断字段类型错误: ```ruby template_name myapp_template template_file /path/to/your/template.json ``` 3. **性能瓶颈监控** 关注 Fluentd 的 `buffer_queue_length` 指标,若持续增长需调整 `flush_interval` 或扩容 ES。 --- ##### 验证步骤 1. **重启 Fluentd** ```bash fluentd -c your_config.conf ``` 2. **发送测试日志** ```bash echo '{"message":"test"}' | fluent-cat debug.log ``` 3. **检查 ES 数据** ```bash curl -XGET 'http://es-host:9200/myapp-*/_search?q=message:test' ``` --- ##### 完整配置示例 ```ruby <system> log_level info </system> <source> @type forward port 24224 </source> <match fluentd.healthcheck> @type stdout </match> <match **> @type elasticsearch hosts es-host:9200 user elastic password your_password logstash_format true logstash_prefix myapp flush_interval 5s chunk_limit_size 8MB buffer_chunk_limit 4MB buffer_queue_limit 128 retry_forever true </match> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值