为什么需要日志系统
你有没有遇到过这种情况:线上服务突然出问题,用户投诉不断,但你翻遍代码也找不到原因?这时候如果有一套完整的日志系统,就能快速定位请求在哪一步失败,是数据库超时还是接口返回异常。日志不是锦上添花,而是生产环境的“行车记录仪”。
选型: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 kibanaKibana 启动稍慢,等待几分钟后访问服务器的 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配置,日志收集系统"}