openEuler 22.03 LTS 部署 ELK(Elasticsearch+Logstash+Kibana)完整教程

一、环境准备(必做基础配置)

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 中查看日志
  1. 浏览器访问http://服务器IP:5601,进入 Kibana 界面。
  2. 左侧菜单进入 Management → Stack Management → Index Patterns
  3. 点击 Create index pattern ,输入索引匹配规则(如system-logs-*),点击 Next step
  4. 选择时间字段(如@timestamp),点击 Create index pattern
  5. 左侧菜单进入 Discover ,即可看到/var/log/messages中的系统日志。

六、常见问题排查

  1. Elasticsearch 启动失败

    • 查看日志:tail -f /data/elk/es_logs/elk-cluster.log
    • 常见原因:内存不足(编辑/usr/local/elasticsearch/config/jvm.options,调小-Xms-Xmx为 1G)、权限不足(确保es用户拥有目录权限)。
  2. Kibana 无法访问

    • 检查防火墙是否开放 5601 端口,服务器安全组是否放行。
    • 查看日志:tail -f /var/log/elk/kibana.log,确认是否连接 ES 成功。
  3. Logstash 无日志输出

    • 检查输入文件路径是否正确(/var/log/messages是否存在)。
    • 查看 Logstash 日志:tail -f /var/log/elk/logstash.log,排查过滤规则错误。

通过以上步骤,即可在欧拉 Linux 上完成 ELK 的部署。如需采集应用日志(如 Java 应用、Nginx),只需修改 Logstash 的input.path为应用日志路径即可.

相关推荐
go_bai2 小时前
Linux-线程
linux·开发语言·c++·经验分享·笔记
小坏讲微服务2 小时前
Spring Cloud Alibaba 2025.0.0 整合 ELK 实现日志
运维·后端·elk·spring cloud·jenkins
清浅儿2 小时前
Linux权限知识点
linux·运维·服务器
kyle~2 小时前
Linux---文件控制<fcntl.h> (file control, fcntl)
linux·运维·服务器
落日漫游2 小时前
Ansible变量全解析:优化自动化流程的关键
linux·服务器·网络
头发还没掉光光2 小时前
Linux多线程之自旋锁与读写锁
linux·运维·算法
百***48932 小时前
Nginx实现接口复制
运维·nginx·junit
爱喝矿泉水的猛男3 小时前
MacOS彻底清除docker及image
运维·docker·容器
HalvmånEver3 小时前
Linux:基础开发工具(四)
linux·运维·服务器·开发语言·学习·makefile