1. 为什么选择Rocky9部署ELK堆栈?
如果你正在寻找一个稳定、高效的日志分析解决方案,ELK堆栈(Elasticsearch + Logstash + Kibana)绝对是首选。而Rocky Linux 9作为RHEL的完美替代品,提供了长期支持和企业级稳定性,两者结合简直是运维人员的黄金搭档。
我去年接手公司日志系统改造时,就选择了这个组合。当时我们面临几个痛点:日志分散在几十台服务器上,排查问题要一台台登录查看;日志格式不统一,分析起来特别费劲;历史日志保存困难,经常需要的时候找不到。ELK堆栈完美解决了这些问题,而Rocky9则让整个系统运行得异常稳定。
ELK堆栈的三个组件各司其职:
- Elasticsearch:负责存储和检索日志数据,就像个超级图书馆
- Logstash:负责收集、过滤和转发日志,相当于图书管理员
- Kibana:提供可视化界面,让我们能直观地分析日志,好比是图书馆的查询终端
2. 环境准备与基础配置
2.1 系统要求检查
在开始之前,建议使用至少4GB内存的服务器。我刚开始用2GB内存的测试机,Elasticsearch直接罢工了。运行以下命令检查系统资源:
free -h df -h如果内存不足,可以修改Elasticsearch的JVM参数,后面会讲到具体方法。另外确保服务器能正常访问外网,因为需要下载安装包。
2.2 Java环境安装
ELK全家桶都依赖Java,Rocky9默认仓库提供了OpenJDK。我测试过JDK 11和17都可以,这里选择安装11:
sudo dnf install java-11-openjdk-devel安装完成后验证版本:
java -version如果显示类似"openjdk 11.0.xx"就说明成功了。这里有个小技巧:设置JAVA_HOME环境变量,很多工具会用到:
echo "export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))" >> ~/.bashrc source ~/.bashrc3. Elasticsearch安装与调优
3.1 安装Elasticsearch
首先导入Elasticsearch的GPG密钥:
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch创建仓库配置文件。注意我们这里选择7.x版本,因为8.x改动较大,7.x更稳定:
sudo tee /etc/yum.repos.d/elastic.repo <<EOF [elasticsearch] name=Elasticsearch repository for 7.x packages baseurl=https://artifacts.elastic.co/packages/7.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md EOF安装Elasticsearch:
sudo dnf install elasticsearch3.2 关键配置调整
编辑配置文件前先备份是个好习惯:
sudo cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak然后修改主要配置:
sudo vi /etc/elasticsearch/elasticsearch.yml找到并修改以下参数:
- cluster.name: 给你的集群起个有意义的名字
- node.name: 节点名称,可以用主机名
- network.host: 0.0.0.0 (如果要远程访问)
- discovery.type: single-node (单节点模式)
内存设置也很重要,编辑JVM选项:
sudo vi /etc/elasticsearch/jvm.options根据服务器内存调整:
- Xms和Xmx设置为相同值,建议不超过物理内存的50%
- 比如4GB内存的服务器可以设置为1g
3.3 启动与验证
启动服务并设置开机自启:
sudo systemctl daemon-reload sudo systemctl enable elasticsearch sudo systemctl start elasticsearch检查状态:
sudo systemctl status elasticsearch验证是否正常运行:
curl -X GET "localhost:9200"如果看到包含"you Know, for Search"的JSON响应,说明安装成功。
4. Logstash配置实战
4.1 安装Logstash
同样先创建仓库文件:
sudo tee /etc/yum.repos.d/logstash.repo <<EOF [logstash] name=Elastic repository for 7.x packages baseurl=https://artifacts.elastic.co/packages/7.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md EOF安装Logstash:
sudo dnf install logstash4.2 配置日志收集管道
Logstash的强大之处在于灵活的管道配置。我们先创建一个简单的测试配置:
sudo tee /etc/logstash/conf.d/test.conf <<EOF input { file { path => "/var/log/messages" start_position => "beginning" } } filter { grok { match => { "message" => "%{SYSLOGTIMESTAMP:timestamp} %{SYSLOGHOST:hostname} %{DATA:program}(?:\[%{POSINT:pid}\])?: %{GREEDYDATA:message}" } } date { match => [ "timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] } } output { elasticsearch { hosts => ["http://localhost:9200"] index => "syslog-%{+YYYY.MM.dd}" } stdout { codec => rubydebug } } EOF这个配置会:
- 监控/var/log/messages文件
- 使用grok解析标准的系统日志格式
- 将日志发送到Elasticsearch并创建按日期划分的索引
4.3 启动与测试
启动Logstash服务:
sudo systemctl enable logstash sudo systemctl start logstash查看日志确认是否正常运行:
journalctl -u logstash -f如果看到成功解析的日志输出,说明管道配置正确。
5. Kibana可视化配置
5.1 安装Kibana
安装过程类似:
sudo dnf install kibana5.2 基础配置
编辑Kibana配置文件:
sudo vi /etc/kibana/kibana.yml修改以下参数:
- server.host: "0.0.0.0" (允许远程访问)
- server.name: 设置一个有意义的名称
- elasticsearch.hosts: ["http://localhost:9200"]
5.3 启动与访问
启动服务:
sudo systemctl enable kibana sudo systemctl start kibana检查状态:
sudo systemctl status kibana默认端口是5601,访问http://服务器IP:5601 就能看到Kibana界面。
6. 日志分析实战技巧
6.1 创建索引模式
首次登录Kibana后,需要创建索引模式:
- 进入Management > Stack Management
- 选择Index Patterns > Create index pattern
- 输入"syslog-*"作为模式名称
- 选择@timestamp作为时间字段
6.2 简单查询示例
在Discover页面可以尝试以下查询:
- 搜索特定程序日志:program:"sshd"
- 查找错误日志:message:error
- 时间范围筛选:右上角时间选择器
6.3 可视化仪表板
创建可视化图表的基本步骤:
- 进入Visualize > Create visualization
- 选择图表类型(如柱状图、饼图等)
- 选择"syslog-*"索引模式
- 配置指标和桶(如按program字段分组统计)
7. 性能优化与问题排查
7.1 常见性能问题
我在生产环境中遇到过几个典型问题:
- Elasticsearch内存不足:表现为频繁GC或节点离线
- Logstash管道阻塞:输入速度大于处理能力
- 磁盘IO瓶颈:日志量太大导致写入延迟
7.2 优化建议
针对这些问题可以采取以下措施:
- 给Elasticsearch分配更多内存(但不超过物理内存的50%)
- 增加Logstash工作线程数:
增加-Xms和-Xmx值sudo vi /etc/logstash/jvm.options - 使用SSD存储Elasticsearch数据
- 合理设置索引生命周期管理(ILM)
7.3 监控方案
建议部署Elasticsearch自带的监控功能:
- 在Kibana中进入Stack Monitoring
- 启用监控数据收集
- 设置告警规则(如节点离线、磁盘空间不足等)
8. 安全加固措施
8.1 基础安全配置
生产环境必须考虑安全性:
- 为Elasticsearch和Kibana配置密码:
sudo /usr/share/elasticsearch/bin/elasticsearch-setup-passwords auto - 启用HTTPS:
- 为Kibana配置SSL证书
- 在elasticsearch.yml中启用安全选项
8.2 网络访问控制
建议采取以下措施:
- 使用防火墙限制访问IP
- 配置Nginx反向代理增加安全层
- 定期审计用户权限
我在实际部署中发现,合理的安全配置虽然增加了初始复杂度,但能避免很多潜在风险。特别是当系统暴露在公网时,基础的安全措施绝对不能省略。