一、ELK技术栈概述
ELK是Elasticsearch、Logstash、Kibana三个开源软件的组合,常用于日志收集、存储、分析和可视化。Elasticsearch负责数据存储与检索,Logstash处理数据采集与转换,Kibana提供可视化界面。单机部署适用于开发测试、小型项目或资源受限环境,能快速验证ELK功能。
二、部署前环境准备
1. 系统要求
推荐使用CentOS 7/8或Ubuntu 20.04 LTS,需满足:4核CPU、8GB内存、50GB以上磁盘空间(生产环境需更高配置)。关闭防火墙或开放9200(ES)、5601(Kibana)、5044/9600(Logstash)端口。
2. 安装依赖工具
# CentOS示例sudo yum install -y java-11-openjdk-devel wget curl# Ubuntu示例sudo apt update && sudo apt install -y openjdk-11-jdk wget curl
验证Java环境:java -version,确保版本≥11。
三、分步安装ELK组件
1. 安装Elasticsearch
# 下载并安装GPG密钥wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -# 添加APT仓库(Ubuntu)echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.listsudo apt update && sudo apt install -y elasticsearch
修改配置文件/etc/elasticsearch/elasticsearch.yml:
cluster.name: single-node-clusternode.name: node-1network.host: 0.0.0.0 # 允许远程访问(测试用,生产需限制IP)discovery.type: single-node # 单机模式path.data: /var/lib/elasticsearchpath.logs: /var/log/elasticsearch
启动服务:
sudo systemctl daemon-reloadsudo systemctl enable --now elasticsearch
验证:curl -X GET "localhost:9200",返回JSON信息即成功。
2. 安装Logstash
sudo apt install -y logstash
配置输入输出管道(示例:收集系统日志并输出到ES):
创建文件/etc/logstash/conf.d/system-logs.conf:
input {file {path => "/var/log/syslog"start_position => "beginning"sincedb_path => "/dev/null"}}filter {grok {match => { "message" => "%{SYSLOGTIMESTAMP:timestamp} %{SYSLOGHOST:hostname} %{DATA:program}(?:\[%{POSINT:pid}\])?: %{GREEDYDATA:message}" }}}output {elasticsearch {hosts => ["http://localhost:9200"]index => "system-logs-%{+YYYY.MM.dd}"}}
测试配置:
sudo -u logstash /usr/share/logstash/bin/logstash --path.settings /etc/logstash -f /etc/logstash/conf.d/system-logs.conf
启动服务:
sudo systemctl enable --now logstash
3. 安装Kibana
sudo apt install -y kibana
修改配置/etc/kibana/kibana.yml:
server.host: "0.0.0.0"elasticsearch.hosts: ["http://localhost:9200"]i18n.locale: "zh-CN" # 可选:中文界面
启动服务:
sudo systemctl enable --now kibana
访问http://服务器IP:5601,首次登录需设置索引模式(如system-logs-*)。
四、性能优化与安全加固
1. 内存配置
修改/etc/elasticsearch/jvm.options,设置堆内存为系统内存的50%且不超过32GB:
-Xms4g-Xmx4g
2. 安全配置
启用X-Pack基础安全(需Elasticsearch 7.x+):
# 生成密码sudo /usr/share/elasticsearch/bin/elasticsearch-setup-passwords auto
在Kibana配置中添加认证:
elasticsearch.username: "kibana_system"elasticsearch.password: "生成的密码"
3. 日志轮转
配置/etc/logrotate.d/elasticsearch:
/var/log/elasticsearch/*.log {dailymissingokrotate 14compressdelaycompressnotifemptycreate 640 elasticsearch elasticsearchsharedscriptspostrotatesystemctl restart elasticsearch > /dev/null 2>&1 || trueendscript}
五、常见问题解决方案
1. Elasticsearch启动失败
- 错误:
max virtual memory areas vm.max_map_count [65530] is too low - 解决:
sudo sysctl -w vm.max_map_count=262144echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf
2. Logstash无数据输入
- 检查文件权限:
sudo chown logstash:logstash /var/log/syslog - 验证Grok模式:使用Grok Debugger测试正则表达式。
3. Kibana无法连接ES
- 检查ES是否运行:
curl -X GET "localhost:9200" - 验证网络配置:确保
elasticsearch.hosts指向正确IP和端口。
六、扩展建议
- 数据备份:使用Elasticsearch Snapshot API定期备份索引。
- 监控告警:集成Prometheus+Grafana监控ELK集群状态。
- 升级方案:单机测试通过后,可扩展为多节点集群(需配置master-eligible节点和分片策略)。
通过以上步骤,开发者可在Linux单机环境下快速部署ELK,实现日志的集中管理与可视化分析。实际生产中需根据业务规模调整资源配置和安全策略。