手把手教你部署一套实用的日志系统

{"title":"手把手教你部署一套实用的日志系统","content":"

为什么需要日志系统

你有没有遇到过这种情况:线上服务突然出问题,用户投诉不断,但你翻遍代码也找不到原因?这时候如果有一套完整的日志系统,就能快速定位请求在哪一步失败,是数据库超时还是接口返回异常。日志不是锦上添花,而是生产环境的“行车记录仪”。

选型:ELK 还是轻量方案

ELK(Elasticsearch + Logstash + Kibana)功能强大,适合中大型项目。但如果只是个人项目或小团队,用 Filebeat + Elasticsearch + Kibana 搭配更轻便。本文以这个组合为例,部署一套能用、好用的日志系统。

环境准备

准备一台 Linux 服务器(Ubuntu 20.04 示例),内存建议 4GB 以上。先安装 Java,因为 Elasticsearch 是基于 Java 的:

sudo apt update
sudo apt install openjdk-11-jdk -y

验证是否安装成功:

java -version

安装 Elasticsearch

下载并添加 Elastic 签名密钥:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt install apt-transport-https -y
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
sudo apt update

安装 Elasticsearch:

sudo apt install elasticsearch -y

修改配置文件:

sudo nano /etc/elasticsearch/elasticsearch.yml

确保以下配置项正确:

network.host: 0.0.0.0
http.port: 9200
discovery.type: single-node

保存后启动服务:

sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch

等一分钟左右,执行:

curl http://localhost:9200

能看到 JSON 回应就说明运行正常。

安装 Kibana

继续在同一台机器安装 Kibana:

sudo apt install kibana -y

配置文件路径:

sudo nano /etc/kibana/kibana.yml

设置:

server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]

启用并启动:

sudo systemctl enable kibana
sudo systemctl start kibana

Kibana 启动稍慢,等待几分钟后访问服务器的 5601 端口,比如 http://your-server-ip:5601,看到 Kibana 页面就说明成功了。

收集日志:Filebeat 部署

在需要收集日志的应用服务器上安装 Filebeat。比如你的 Web 服务跑在另一台机器上:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-beats.list
sudo apt update
sudo apt install filebeat -y

配置 Filebeat 发送到 Elasticsearch:

sudo nano /etc/filebeat/filebeat.yml

修改输出部分:

output.elasticsearch:
hosts: ["你的Elasticsearch服务器IP:9200"]

启用 Nginx 或系统日志模块(根据实际需求):

filebeat modules enable system
filebeat modules enable nginx

启动 Filebeat:

sudo systemctl enable filebeat
sudo systemctl start filebeat

在 Kibana 中查看日志

回到 Kibana 页面,进入 "Discover" 菜单,点击 "Create index pattern",输入 filebeat-*,选择 @timestamp 作为时间字段。保存后就能实时看到从各台服务器传来的日志了。

你可以按关键词过滤,比如搜索 error 查看所有错误,也可以按主机、路径、响应码筛选。点进去一条日志,能看到完整的上下文信息,比翻文本日志快多了。

一些实际使用建议

别一上来就堆一堆高级功能。先保证关键服务的日志能集中查看。比如你有个 Python Flask 应用,确保它的 error 日志被写入 syslog,Filebeat 就能自动采集。

如果服务器在内网,注意安全。不要把 Elasticsearch 和 Kibana 直接暴露在公网,可以用 Nginx 做反向代理加密码,或者走内网隧道。

这套系统搭完,下次线上报错,打开 Kibana 几秒定位问题,你会感谢现在的自己。”,"seo_title":"日志系统部署教程|手把手搭建 ELK 替代方案","seo_description":"一步步教你部署 Filebeat + Elasticsearch + Kibana 日志系统,适合个人和小团队,快速定位线上问题,告别盲调bug。","keywords":"日志系统部署教程,elk部署,filebeat使用,elasticsearch安装,kibana配置,日志收集系统"}