一、环境准备(必做基础配置)
1. 系统要求
- 服务器配置:建议 2 核 4G 以上(最低 1 核 2G,生产环境需更高配置)
- 系统版本:openEuler 22.03 LTS(已测试兼容)
- 权限:使用
root用户操作(后续会创建专用用户)
2. 安装依赖(JDK 11)
ELK 7.x 及以上版本必须依赖 JDK 11,欧拉系统可通过dnf安装:
# 检查是否已安装JDK
java -version
# 若未安装,执行以下命令
dnf install -y java-11-openjdk java-11-openjdk-devel
# 配置JAVA_HOME环境变量
echo "export JAVA_HOME=/usr/lib/jvm/java-11-openjdk" >> /etc/profile
source /etc/profile # 生效配置
# 验证JDK安装成功(显示版本信息)
java -version
3. 系统优化(解决 ELK 启动限制)
(1)关闭 SELinux(ELK 对 SELinux 兼容性较差)
# 临时关闭(立即生效)
setenforce 0
# 永久关闭(重启后生效)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
(2)开放必要端口
ELK 需要以下端口通信:
-
Elasticsearch:9200(HTTP)、9300(节点间通信)
-
Kibana:5601(Web 界面)
-
Logstash:5044(接收日志,如 Filebeat 数据)
启动防火墙(若未启动)
systemctl start firewalld
systemctl enable firewalld开放端口并永久生效
firewall-cmd --zone=public --add-port=9200/tcp --permanent
firewall-cmd --zone=public --add-port=5601/tcp --permanent
firewall-cmd --zone=public --add-port=5044/tcp --permanent重新加载防火墙规则
firewall-cmd --reload
(3)优化内核参数(Elasticsearch 必需)
# 编辑内核配置文件
vim /etc/sysctl.conf
# 添加以下内容(按i进入编辑模式,编辑后按Esc+:wq保存)
vm.max_map_count=262144 # Elasticsearch需要的虚拟内存映射数(必须设置)
fs.file-max=655360 # 系统最大文件描述符数量
# 使配置生效
sysctl -p
(4)调整用户资源限制(避免文件句柄不足)
# 编辑限制配置文件
vim /etc/security/limits.conf
# 添加以下内容(允许所有用户打开更多文件和进程)
* soft nofile 65536 # 软限制:最多打开65536个文件
* hard nofile 65536 # 硬限制:最多打开65536个文件
* soft nproc 4096 # 软限制:最多4096个进程
* hard nproc 4096 # 硬限制:最多4096个进程
(5)创建数据和日志目录
# 统一存储ELK数据和日志
mkdir -p /data/elk/{es_data,es_logs,ls_data,ls_logs,kb_logs}
mkdir -p /var/log/elk
# 赋予读写权限(后续会指定给专用用户)
chmod -R 775 /data/elk /var/log/elk
二、安装 Elasticsearch(日志存储核心)
Elasticsearch 是分布式搜索引擎,负责存储和索引日志数据。
1. 下载并解压安装包
# 版本选择7.17.0(稳定版,与欧拉兼容)
ELK_VERSION="7.17.0"
ES_URL="https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${ELK_VERSION}-linux-x86_64.tar.gz"
# 下载到/tmp目录
wget -P /tmp $ES_URL
# 解压到/usr/local目录
tar -zxvf /tmp/elasticsearch-${ELK_VERSION}-linux-x86_64.tar.gz -C /usr/local/
# 重命名为elasticsearch(简化路径)
mv /usr/local/elasticsearch-${ELK_VERSION} /usr/local/elasticsearch
2. 创建专用用户(禁止 root 启动 ES)
Elasticsearch 默认禁止使用root用户启动,需创建专用用户:
# 创建es用户
useradd es
# 赋予ES目录和数据目录权限给es用户
chown -R es:es /usr/local/elasticsearch /data/elk /var/log/elk
3. 配置 Elasticsearch
编辑主配置文件elasticsearch.yml:
# 进入配置目录
cd /usr/local/elasticsearch/config
# 编辑配置文件
vim elasticsearch.yml
添加以下核心配置(覆盖默认值,按实际需求调整):
cluster.name: elk-cluster # 集群名称(单节点也需配置)
node.name: node-1 # 节点名称(单节点直接用node-1)
path.data: /data/elk/es_data # 数据存储路径(之前创建的目录)
path.logs: /data/elk/es_logs # 日志存储路径
network.host: 0.0.0.0 # 允许所有IP访问(默认只允许本地)
http.port: 9200 # HTTP访问端口
discovery.seed_hosts: ["127.0.0.1"] # 单节点配置(集群需填其他节点IP)
cluster.initial_master_nodes: ["node-1"] # 初始主节点(单节点填当前节点名)
bootstrap.memory_lock: false # 测试环境关闭(生产环境建议开启,需额外配置)
4. 启动 Elasticsearch
# 切换到es用户(必须非root)
su - es
# 后台启动(-d表示后台运行)
/usr/local/elasticsearch/bin/elasticsearch -d
# 退出es用户,回到root
exit
5. 验证 Elasticsearch 启动成功
# 等待30秒左右(首次启动较慢),执行以下命令检查状态
curl http://localhost:9200
若返回类似以下信息,说明启动成功:
json
{
"name" : "node-1",
"cluster_name" : "elk-cluster",
"cluster_uuid" : "xxxxxxx",
"version" : {
"number" : "7.17.0",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "xxxxxxx",
"build_date" : "2022-01-28T08:36:04.875279988Z",
"build_snapshot" : false,
"lucene_version" : "8.11.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
三、安装 Logstash(日志采集与过滤)
Logstash 负责采集日志、清洗过滤(如提取关键字),再输出到 Elasticsearch。
1. 下载并解压安装包
ELK_VERSION="7.17.0"
LS_URL="https://artifacts.elastic.co/downloads/logstash/logstash-${ELK_VERSION}-linux-x86_64.tar.gz"
# 下载到/tmp
wget -P /tmp $LS_URL
# 解压到/usr/local
tar -zxvf /tmp/logstash-${ELK_VERSION}-linux-x86_64.tar.gz -C /usr/local/
# 重命名
mv /usr/local/logstash-${ELK_VERSION} /usr/local/logstash
2. 配置 Logstash(采集系统日志示例)
Logstash 通过配置文件定义 "输入→过滤→输出" 流程,创建一个基础配置:
# 进入Logstash配置目录
cd /usr/local/logstash/config
# 创建配置文件(如logstash.conf)
vim logstash.conf
添加以下内容(采集/var/log/messages系统日志,输出到 ES):
input {
# 输入:从文件采集日志
file {
path => "/var/log/messages" # 欧拉系统日志路径
start_position => "beginning" # 从文件开头开始读取
sincedb_path => "/data/elk/ls_data/sincedb" # 记录读取位置(避免重复采集)
}
}
filter {
# 过滤:用grok提取日志中的时间、主机、消息内容
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:log_time} %{HOSTNAME:host} %{GREEDYDATA:log_message}" }
}
}
output {
# 输出:发送到Elasticsearch
elasticsearch {
hosts => ["localhost:9200"] # 本地ES地址
index => "system-logs-%{+YYYY.MM.dd}" # 按日期创建索引(如system-logs-2023.10.01)
}
# 同时输出到控制台(调试用,生产可删除)
stdout { codec => rubydebug }
}
3. 启动 Logstash
# 后台启动(指定配置文件)
nohup /usr/local/logstash/bin/logstash -f /usr/local/logstash/config/logstash.conf > /var/log/elk/logstash.log 2>&1 &
4. 验证 Logstash 启动成功
# 查看进程是否存在
ps aux | grep logstash | grep -v grep
# 查看日志(无报错即为正常)
tail -f /var/log/elk/logstash.log
四、安装 Kibana(日志可视化界面)
Kibana 是 Web 界面工具,用于查询、分析和可视化 Elasticsearch 中的日志。
1. 下载并解压安装包
ELK_VERSION="7.17.0"
KB_URL="https://artifacts.elastic.co/downloads/kibana/kibana-${ELK_VERSION}-linux-x86_64.tar.gz"
# 下载到/tmp
wget -P /tmp $KB_URL
# 解压到/usr/local
tar -zxvf /tmp/kibana-${ELK_VERSION}-linux-x86_64.tar.gz -C /usr/local/
# 重命名
mv /usr/local/kibana-${ELK_VERSION} /usr/local/kibana
2. 配置 Kibana(连接 Elasticsearch)
# 进入配置目录
cd /usr/local/kibana/config
# 编辑配置文件
vim kibana.yml
添加以下核心配置:
server.host: "0.0.0.0" # 允许外部访问(默认只允许本地)
server.port: 5601 # Web访问端口
elasticsearch.hosts: ["http://localhost:9200"] # 连接的ES地址
kibana.index: ".kibana" # Kibana自身数据存储的ES索引
logging.dest: "/data/elk/kb_logs/kibana.log" # Kibana日志路径
3. 授权 Kibana 目录(非 root 用户启动)
# 赋予es用户权限(与ES同用户,避免权限问题)
chown -R es:es /usr/local/kibana
4. 启动 Kibana
# 切换到es用户
su - es
# 后台启动
nohup /usr/local/kibana/bin/kibana > /var/log/elk/kibana.log 2>&1 &
# 退出es用户
exit
5. 验证 Kibana 启动成功
# 等待30秒左右,访问Web界面(替换为服务器IP)
# 浏览器打开:http://服务器IP:5601
若显示 Kibana 登录界面(7.x 版本默认无需登录),说明启动成功。
五、验证 ELK 日志流转(关键测试)
1. 确认 ES 中已生成日志索引
# 查看ES中的索引(应包含system-logs-当前日期)
curl http://localhost:9200/_cat/indices?v
2. 在 Kibana 中查看日志
- 浏览器访问
http://服务器IP:5601,进入 Kibana 界面。 - 左侧菜单进入 Management → Stack Management → Index Patterns。
- 点击 Create index pattern ,输入索引匹配规则(如
system-logs-*),点击 Next step。 - 选择时间字段(如
@timestamp),点击 Create index pattern。 - 左侧菜单进入 Discover ,即可看到
/var/log/messages中的系统日志。
六、常见问题排查
-
Elasticsearch 启动失败:
- 查看日志:
tail -f /data/elk/es_logs/elk-cluster.log - 常见原因:内存不足(编辑
/usr/local/elasticsearch/config/jvm.options,调小-Xms和-Xmx为 1G)、权限不足(确保es用户拥有目录权限)。
- 查看日志:
-
Kibana 无法访问:
- 检查防火墙是否开放 5601 端口,服务器安全组是否放行。
- 查看日志:
tail -f /var/log/elk/kibana.log,确认是否连接 ES 成功。
-
Logstash 无日志输出:
- 检查输入文件路径是否正确(
/var/log/messages是否存在)。 - 查看 Logstash 日志:
tail -f /var/log/elk/logstash.log,排查过滤规则错误。
- 检查输入文件路径是否正确(
通过以上步骤,即可在欧拉 Linux 上完成 ELK 的部署。如需采集应用日志(如 Java 应用、Nginx),只需修改 Logstash 的input.path为应用日志路径即可.

