当前位置:

首页 > 编程开发 > 如何用ELK堆栈分析Ubuntu Node.js日志

如何用ELK堆栈分析Ubuntu Node.js日志

本文目录

    聊到ELK堆栈,很多人第一反应是“重”。但把它用来处理Node.js日志,其实非常顺手。只要前期把格式配置好,后面的分析效率会高得多。下面分步骤来,一步一步把整个链路跑通。 1. 前置准备:配置Node.js日志格式 ELK想要高效解析日志,前提是数据得是结构化的。所以第一步,先把Node.js日志

    聊到ELK堆栈,很多人第一反应是“重”。但把它用来处理Node.js日志,其实非常顺手。只要前期把格式配置好,后面的分析效率会高得多。下面分步骤来,一步一步把整个链路跑通。

    1. 前置准备:配置Node.js日志格式

    ELK想要高效解析日志,前提是数据得是结构化的。所以第一步,先把Node.js日志弄成JSON格式,这步相当关键。推荐用winston库,它原生支持JSON输出,配置起来很顺手。

    如何用ELK堆栈分析Ubuntu Node.js日志

    来看一个配置示例:

    // logger.js
    const winston = require('winston');
    const logger = winston.createLogger({
        level: 'info',
        format: winston.format.combine(
            winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), // 添加时间戳
            winston.format.json() // 输出JSON格式
        ),
        transports: [
            new winston.transports.Console(), // 输出到控制台(调试用)
            new winston.transports.File({ filename: '/var/log/nodejs/app.log' }) // 输出到文件(ELK收集用)
        ]
    });
    module.exports = logger;
    

    然后在应用中引入:

    const logger = require('./logger');
    logger.info('Application started', { port: 3000 }); // 示例日志(包含额外字段)
    logger.error('Database connection failed', { error: 'ECONNREFUSED' });
    

    JSON格式的好处很直接:Logstash解析起来几乎无痛。timestamp和level是ELK分析的基础,业务相关的附加字段(比如port、error)后续可以很方便地拿来做过滤和可视化。

    2. 安装ELK堆栈(Ubuntu 22.04+)

    2.1 安装Java(ELK依赖)

    sudo apt update
    sudo apt install openjdk-17-jdk -y
    java -version # 验证安装(需显示17.x版本)
    

    2.2 安装Elasticsearch

    wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.10.0-amd64.deb
    sudo dpkg -i elasticsearch-8.10.0-amd64.deb
    sudo systemctl enable elasticsearch
    sudo systemctl start elasticsearch
    curl -X GET 'localhost:9200' # 验证(返回集群信息即成功)
    

    2.3 安装Kibana

    wget https://artifacts.elastic.co/downloads/kibana/kibana-8.10.0-amd64.deb
    sudo dpkg -i kibana-8.10.0-amd64.deb
    sudo systemctl enable kibana
    sudo systemctl start kibana
    

    访问http://<服务器IP>:5601,就能看到Kibana的Web界面。默认情况下没有认证,生产环境务必记得配置密码。

    3. 配置Logstash收集Node.js日志

    3.1 创建Logstash配置文件

    sudo mkdir -p /etc/logstash/conf.d
    sudo nano /etc/logstash/conf.d/nodejs.conf
    

    写入下面的内容,注意根据实际路径调整:

    input {
        file {
            path => "/var/log/nodejs/app.log" # Node.js日志文件路径
            start_position => "beginning" # 首次配置设置为beginning,后续改为end
            sincedb_path => "/dev/null" # 忽略sincedb文件(避免重复读取)
            codec => "json" # 解析JSON格式日志
        }
    }
    filter {
        # 可选:提取日志中的额外字段(如port、error)
        grok {
            match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:loglevel} %{GREEDYDATA:message}" }
        }
        date {
            match => ["timestamp", "yyyy-MM-dd HH:mm:ss"] # 统一日志时间格式
            target => "@timestamp" # 映射到Elasticsearch的@timestamp字段
        }
    }
    output {
        elasticsearch {
            hosts => ["localhost:9200"] # Elasticsearch地址
            index => "nodejs-logs-%{+YYYY.MM.dd}" # 按日期分索引,比如nodejs-logs-2025.10.11
        }
        stdout { codec => rubydebug } # 控制台输出(调试用,生产环境可注释掉)
    }
    

    3.2 启动Logstash

    sudo systemctl enable logstash
    sudo systemctl start logstash
    

    检查日志看看有没有异常:

    sudo journalctl -u logstash -f
    

    如果看到Pipeline started,说明配置没问题了。

    4. 在Kibana中分析日志

    4.1 创建索引模式

    1. 打开Kibana(http://<服务器IP>:5601),进入Stack Management > Index Patterns。
    2. 点击Create index pattern,输入nodejs-logs-*(匹配Logstash输出的索引名称)。
    3. 选择@timestamp作为时间过滤字段,点击Create index pattern。

    4.2 可视化分析

    4.2.1 查看日志级别分布

    1. 进入Visualize Library,点击Create visualization。
    2. 选择Vertical Bar图表类型,索引模式选择nodejs-logs-*。
    3. 在Metrics栏选择Count(计数),Buckets栏选择X-axis。
    4. 在X-axis配置中,选择Terms聚合,字段选择loglevel.keyword(日志级别)。
    5. 点击Save,命名为Log Level Distribution。

    4.2.2 查看错误日志趋势

    1. 创建新的可视化,选择Line图表类型。
    2. Metrics栏选择Count,Buckets栏选择X-axis。
    3. X-axis配置:Date Histogram聚合,字段选择@timestamp,间隔选择Daily(每日)。
    4. 添加Split Line子聚合:Terms,字段选择loglevel.keyword(区分不同级别)。
    5. 点击Save,命名为Error Trend。

    4.2.3 创建仪表盘

    1. 进入Dashboard,点击Create dashboard。
    2. 点击Add,选择刚才创建的Log Level Distribution和Error Trend可视化。
    3. 调整布局后点击Save,命名为Node.js Logs Dashboard。

    4.3 搜索特定日志

    在Kibana顶部导航栏输入Discover,选择nodejs-logs-*索引模式,就可以开始搜索了:

    • 简单搜索:输入loglevel: "error",所有错误日志一览无余。
    • 高级搜索:用KQL(Kibana Query Language),比如@timestamp >= "now-1h" AND loglevel: "error",就能定位最近1小时的错误。

    5. 优化建议

    • 日志轮转:用logrotate防止日志撑满磁盘。

      sudo nano /etc/logrotate.d/nodejs
      

      写入:

      /var/log/nodejs/*.log {
          daily
          missingok
          rotate 7
          compress
          notifempty
          create 0640 root adm
      }
      
    • 敏感信息过滤:在Logstash的filter里加上mutate插件,把密码、信用卡号这样的字段直接移除:

      filter {
          mutate {
              remove_field => ["password", "credit_card"]
          }
      }
      
    • 性能优化:如果应用流量大,用Filebeat代替Logstash的file输入插件,能显著降低服务器压力。

    整套流程跑通之后,Node.js日志的收集、存储、分析和可视化就全在掌控之中了。排查问题、监控应用状态,都会变得顺手很多。

    本文内容来源于网友投稿,如有侵权请联系删除。
    作者最新文章
    编程开发 Ubuntu
    相关文章 更多
    链表删除节点的时间复杂度是多少及其详细分析
    链表删除节点的时间复杂度是多少及其详细分析

    详细分析链表删除节点的时间复杂度,深入探讨单链表与双向链表在不同已知前提下的查找与删除开销,并结合完整代码与清晰图解进行对比总结。

    codex如何配置模型参数及文件设置教程
    codex如何配置模型参数及文件设置教程

    想知道如何让AI写出的代码更贴合你的习惯?本文手把手教你在VS Code中调整Codex相关模型参数,通过修改配置文件优化温度值和令牌限制,解决代码建议不准确或响应慢的问题。

    Claude Code AI编程工具实力揭秘与编程助手实测
    Claude Code AI编程工具实力揭秘与编程助手实测

    通过实测展示Claude Code在终端中如何理解自然语言指令、自动修改代码文件并处理复杂编程任务,帮助开发者评估其实际辅助能力。

    winforms教程自学入门与基础开发步骤详解
    winforms教程自学入门与基础开发步骤详解

    本教程详细讲解如何使用Visual Studio创建WinForms项目,通过添加按钮和标签控件并编写点击事件代码,实现一个基础的计数器功能,适合C#初学者快速上手Windows窗体应用开发。

    Cursor自动补全设置教程教你快速开启代码补全功能
    Cursor自动补全设置教程教你快速开启代码补全功能

    详解Cursor编辑器中自动补全功能的开启与优化设置,涵盖Tab触发机制、上下文窗口调整及模型切换,帮助开发者解决补全延迟、干扰大等问题,提升编码流畅度。

    pandas的数据格式怎么转换和设置方法教程
    pandas的数据格式怎么转换和设置方法教程

    详解Pandas中数据格式转换的核心方法,包括astype强制转换、to_numeric容错处理及日期解析技巧,解决常见类型错误并提升数据处理效率。

    VS Code中文设置方法 简体语言包安装与切换教程
    VS Code中文设置方法 简体语言包安装与切换教程

    详细介绍在Visual Studio Code中安装Chinese (Simplified)语言包的方法,包括通过扩展市场搜索、安装及自动重启切换至简体中文界面的完整步骤,帮助开发者快速将编辑器本地化。

    cursor安装过程无法更改安装位置的解决方法
    cursor安装过程无法更改安装位置的解决方法

    针对Cursor安装包默认锁定C盘且无路径选择界面的问题,提供通过手动移动文件并创建目录联结(Symbolic Link)的解决方案,实现将软件安装在其他磁盘分区。

    rust下载安装教程详解及Windows环境配置方法
    rust下载安装教程详解及Windows环境配置方法

    详解Windows系统下Rust语言的安装步骤,重点解析rustup工具链管理机制,解决环境变量配置错误及MSVC链接器缺失问题,提供可复制的命令验证方法与常见报错的因果排查思路。

    vs code怎么配置 chat实用设置教程步骤
    vs code怎么配置 chat实用设置教程步骤

    详解VS Code中Chat插件的安装与核心配置步骤,重点解决API连接失败、响应慢等常见问题,通过优化上下文设置提升代码生成质量,适合希望集成AI辅助工具的开发者阅读。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    macOS软件
    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    Mac软件 更多
    Blender
    Blender
    Windows、macOS 和 Linux

    Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。

    灵活计算器
    灵活计算器
    macOS/iOS/Android

    灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

    赤友清理大师
    赤友清理大师
    macOS

    赤友清理大师是一款为 Mac 设计的智能清理优化工具,可精准扫描垃圾、大文件、重复文件等,释放磁盘空间。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

    WINDOWS 更多
    Blender
    Blender
    Windows、macOS 和 Linux

    Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。

    Windows 10
    Windows 10
    Windows

    Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

    极度公式
    极度公式
    Windows/macOS/Linux

    极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。