Linux单机环境快速部署ELK:从零搭建日志分析平台

一、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. 安装依赖工具

  1. # CentOS示例
  2. sudo yum install -y java-11-openjdk-devel wget curl
  3. # Ubuntu示例
  4. sudo apt update && sudo apt install -y openjdk-11-jdk wget curl

验证Java环境:java -version,确保版本≥11。

三、分步安装ELK组件

1. 安装Elasticsearch

  1. # 下载并安装GPG密钥
  2. wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
  3. # 添加APT仓库(Ubuntu)
  4. echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
  5. sudo apt update && sudo apt install -y elasticsearch

修改配置文件/etc/elasticsearch/elasticsearch.yml

  1. cluster.name: single-node-cluster
  2. node.name: node-1
  3. network.host: 0.0.0.0 # 允许远程访问(测试用,生产需限制IP)
  4. discovery.type: single-node # 单机模式
  5. path.data: /var/lib/elasticsearch
  6. path.logs: /var/log/elasticsearch

启动服务:

  1. sudo systemctl daemon-reload
  2. sudo systemctl enable --now elasticsearch

验证:curl -X GET "localhost:9200",返回JSON信息即成功。

2. 安装Logstash

  1. sudo apt install -y logstash

配置输入输出管道(示例:收集系统日志并输出到ES):
创建文件/etc/logstash/conf.d/system-logs.conf

  1. input {
  2. file {
  3. path => "/var/log/syslog"
  4. start_position => "beginning"
  5. sincedb_path => "/dev/null"
  6. }
  7. }
  8. filter {
  9. grok {
  10. match => { "message" => "%{SYSLOGTIMESTAMP:timestamp} %{SYSLOGHOST:hostname} %{DATA:program}(?:\[%{POSINT:pid}\])?: %{GREEDYDATA:message}" }
  11. }
  12. }
  13. output {
  14. elasticsearch {
  15. hosts => ["http://localhost:9200"]
  16. index => "system-logs-%{+YYYY.MM.dd}"
  17. }
  18. }

测试配置:

  1. sudo -u logstash /usr/share/logstash/bin/logstash --path.settings /etc/logstash -f /etc/logstash/conf.d/system-logs.conf

启动服务:

  1. sudo systemctl enable --now logstash

3. 安装Kibana

  1. sudo apt install -y kibana

修改配置/etc/kibana/kibana.yml

  1. server.host: "0.0.0.0"
  2. elasticsearch.hosts: ["http://localhost:9200"]
  3. i18n.locale: "zh-CN" # 可选:中文界面

启动服务:

  1. sudo systemctl enable --now kibana

访问http://服务器IP:5601,首次登录需设置索引模式(如system-logs-*)。

四、性能优化与安全加固

1. 内存配置

修改/etc/elasticsearch/jvm.options,设置堆内存为系统内存的50%且不超过32GB:

  1. -Xms4g
  2. -Xmx4g

2. 安全配置

启用X-Pack基础安全(需Elasticsearch 7.x+):

  1. # 生成密码
  2. sudo /usr/share/elasticsearch/bin/elasticsearch-setup-passwords auto

在Kibana配置中添加认证:

  1. elasticsearch.username: "kibana_system"
  2. elasticsearch.password: "生成的密码"

3. 日志轮转

配置/etc/logrotate.d/elasticsearch

  1. /var/log/elasticsearch/*.log {
  2. daily
  3. missingok
  4. rotate 14
  5. compress
  6. delaycompress
  7. notifempty
  8. create 640 elasticsearch elasticsearch
  9. sharedscripts
  10. postrotate
  11. systemctl restart elasticsearch > /dev/null 2>&1 || true
  12. endscript
  13. }

五、常见问题解决方案

1. Elasticsearch启动失败

  • 错误max virtual memory areas vm.max_map_count [65530] is too low
  • 解决
    1. sudo sysctl -w vm.max_map_count=262144
    2. echo "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和端口。

六、扩展建议

  1. 数据备份:使用Elasticsearch Snapshot API定期备份索引。
  2. 监控告警:集成Prometheus+Grafana监控ELK集群状态。
  3. 升级方案:单机测试通过后,可扩展为多节点集群(需配置master-eligible节点和分片策略)。

通过以上步骤,开发者可在Linux单机环境下快速部署ELK,实现日志的集中管理与可视化分析。实际生产中需根据业务规模调整资源配置和安全策略。