如何用ELK堆栈分析Ubuntu Node.js日志
导读:如何用ELK堆栈分析Ubuntu Node.js日志 1. 前置准备:配置Node.js日志格式 ELK堆栈处理结构化日志的效率更高,因此需要先将Node.js日志输出为JSON格式(推荐使用winston库)。以下是配置示例: // lo...
如何用ELK堆栈分析Ubuntu Node.js日志
1. 前置准备:配置Node.js日志格式
ELK堆栈处理结构化日志的效率更高,因此需要先将Node.js日志输出为JSON格式(推荐使用winston
库)。以下是配置示例:
// 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;
在Node.js应用中引入该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
查看Logstash日志确认是否正常:
sudo journalctl -u logstash -f
若出现Pipeline started
表示配置成功。
4. 在Kibana中分析日志
4.1 创建索引模式
- 打开Kibana(
http://< 服务器IP> :5601
),进入Stack Management > Index Patterns。 - 点击Create index pattern,输入
nodejs-logs-*
(匹配Logstash输出的索引名称)。 - 选择
@timestamp
作为时间过滤字段,点击Create index pattern。
4.2 可视化分析
4.2.1 查看日志级别分布
- 进入Visualize Library,点击Create visualization。
- 选择Vertical Bar图表类型,索引模式选择
nodejs-logs-*
。 - 在Metrics栏选择
Count
(计数),Buckets栏选择X-axis
。 - 在X-axis配置中,选择
Terms
聚合,字段选择loglevel.keyword
(日志级别)。 - 点击Save,命名为
Log Level Distribution
。
4.2.2 查看错误日志趋势
- 创建新的可视化,选择Line图表类型。
- Metrics栏选择
Count
,Buckets栏选择X-axis
。 - X-axis配置:
Date Histogram
聚合,字段选择@timestamp
,间隔选择Daily
(每日)。 - 添加Split Line子聚合:
Terms
,字段选择loglevel.keyword
(区分不同级别)。 - 点击Save,命名为
Error Trend
。
4.2.3 创建仪表盘
- 进入Dashboard,点击Create dashboard。
- 点击Add,选择刚才创建的
Log Level Distribution
和Error Trend
可视化。 - 调整布局后点击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
输入插件,减轻服务器负担。
通过以上步骤,即可用ELK堆栈实现Ubuntu Node.js日志的收集、存储、分析和可视化,帮助快速定位问题、监控应用状态。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何用ELK堆栈分析Ubuntu Node.js日志
本文地址: https://pptw.com/jishu/724108.html