ELK 9.2.0 安装部署手册
ELK 9.2.0 安装部署手册
📋 目录
-
- 环境准备
-
- 系统优化
-
- 安装部署
-
3.1 安装 Elasticsearch
-
3.2 安装 Kibana
-
3.3 安装 Logstash
-
- 项目工程集成
-
- 数据清理策略
1. 环境准备
🖥️ 系统信息
-
操作系统:
CentOS Linux release 7.9.2009 (Core) -
服务器IP:
10.28.21.213 -
安装目录:
/opt/elk
📦 安装包下载
| 组件 | 下载地址 |
|---|---|
| Elasticsearch | elasticsearch-9.2.0-x86_64.rpm |
| Kibana | kibana-9.2.0-x86_64.rpm |
| Logstash | logstash-9.2.0-x86_64.rpm |
mkdir -p /opt/elk
cd /opt/elk
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-9.2.0-x86_64.rpm
wget https://artifacts.elastic.co/downloads/kibana/kibana-9.2.0-x86_64.rpm
wget https://artifacts.elastic.co/downloads/logstash/logstash-9.2.0-x86_64.rpm
💡 提示: 提前将安装包下载至
/opt/elk目录
2. 系统优化
🔧 资源限制配置
vim /etc/security/limits.conf
添加以下内容:
# 进程可以最大打开的文件数
* soft nofile 655350
* hard nofile 655350 # 进程可以创建的线程数
* soft nproc 102400
* hard nproc 409600# 允许进程锁定内存
* soft memlock unlimited
* hard memlock unlimited
参数说明:
-
soft: 警告阈值
-
hard: 强制限制阈值
-
nofile: 文件描述符数量限制
-
nproc: 进程数量限制
-
memlock: 内存锁定限制
🖥️ 系统内核参数
vim /etc/sysctl.conf
添加以下内容:
vm.max_map_count = 262145
fs.file-max = 655360
立即生效:
sysctl -p
参数说明:
-
max_map_count: 进程可拥有的虚拟内存区域数量 -
file-max: 系统可同时打开的文件数量
🔥 防火墙配置
# 禁用并关闭防火墙
systemctl disable firewalld
systemctl stop firewalld
⚠️ 注意: 生产环境建议开启指定端口而非完全关闭防火墙
3. 安装部署
3.1 安装 Elasticsearch
📥 安装命令
rpm -ivh /opt/elk/elasticsearch-9.2.0-x86_64.rpm
🔐 SSL 证书签发
/usr/share/elasticsearch/bin/elasticsearch-certutil cert \--name http \--ip 10.28.21.213,127.0.0.1 \--dns localhost,SHS-A-BASIC03 \--out /etc/elasticsearch/ssl.zip \--pem \--self-signed \--silent
参数详解:
| 参数 | 说明 |
|---|---|
--name http | 证书名称,用于 HTTP 服务 |
--ip | 绑定的 IP 地址列表 |
--dns | 绑定的主机名列表 |
--out | 证书输出路径 |
--pem | 输出 PEM 格式证书 |
--self-signed | 生成自签名证书 |
--silent | 静默模式,无交互提示 |
📁 证书部署
cd /etc/elasticsearch
mkdir -p /etc/elasticsearch/ssl
unzip -j /etc/elasticsearch/ssl.zip -d /etc/elasticsearch/ssl/
chown -R elasticsearch:elasticsearch ssl
chmod 600 ssl/*
⚙️ Elasticsearch 配置
tee /etc/elasticsearch/elasticsearch.yml << \EOF
# ================= Elasticsearch 基本配置 =================
# 集群名称,单节点也需要设置
cluster.name: "es-single-node"
# 节点名称,可自定义
node.name: "es"
# 节点角色,单节点通常同时承担 master、data、ingest
node.roles: ["master", "data", "ingest"]
# 单节点模式,避免选主冲突
discovery.type: single-node# ======================== 数据与日志 =======================
# 数据存储路径
path.data: /var/lib/elasticsearch
# 日志目录
path.logs: /var/log/elasticsearch# ======================== 安全与 SSL ======================
# 启用安全功能(用户认证、TLS/SSL 等)
xpack.security.enabled: true
# 启用 HTTP 层 TLS/SSL
xpack.security.http.ssl.enabled: true
# HTTP 层私钥
xpack.security.http.ssl.key: /etc/elasticsearch/ssl/http.key
# HTTP 层证书
xpack.security.http.ssl.certificate: /etc/elasticsearch/ssl/http.crt
# 启用 Transport 层 TLS/SSL(节点间通信,如果是单节点,可暂时关闭)
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
# 单节点,可使用自签证书
xpack.security.transport.ssl.key: /etc/elasticsearch/ssl/http.key
xpack.security.transport.ssl.certificate: /etc/elasticsearch/ssl/http.crt# ======================== 索引管理 ========================
# 索引生命周期管理(ILM)轮询周期
indices.lifecycle.poll_interval: 5m# ======================== 机器学习 ========================
# 禁用 ML 功能,减少资源消耗
xpack.ml.enabled: false# ======================== 网络设置 ========================
# Elasticsearch 绑定的 IP,可以访问的地址
network.host: 0.0.0.0
# HTTP 服务端口
http.port: 9200
EOF
⚠️ 重要: 由于 CentOS 7.9 的 GLIBC 版本过低限制,必须禁用机器学习模块
🚀 启动服务
systemctl daemon-reload
systemctl enable elasticsearch.service
systemctl start elasticsearch.service
🔑 密码配置
# 修改 elastic 用户密码
/usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic -i# 修改 kibana_system 用户密码
/usr/share/elasticsearch/bin/elasticsearch-reset-password -u kibana_system -i# 修改 logstash_system 用户密码
/usr/share/elasticsearch/bin/elasticsearch-reset-password -u logstash_system -i
密码要求:
-
至少 8 个字符
-
包含大写字母、小写字母、数字
-
可包含特殊字符
✅ 验证安装
curl -u elastic:elastic账号的密码 -k https://10.28.21.213:9200
3.2 安装 Kibana
📥 安装命令
rpm -ivh /opt/elk/kibana-9.2.0-x86_64.rpm
🔐 证书配置
mkdir -p /etc/kibana/ssl
cp /etc/elasticsearch/ssl/http.crt /etc/kibana/ssl/http.crt
chown -R kibana:kibana /etc/kibana/ssl
chmod 600 /etc/kibana/ssl/*
⚙️ Kibana 配置
tee /etc/kibana/kibana.yml << \EOF
# ======================== 基础服务配置 ========================
# 绑定的主机地址,0.0.0.0 表示所有网卡都可访问
server.host: "0.0.0.0"
# Kibana Web 服务端口
server.port: 5601
# 服务器名称:用于HTTP响应头和日志标识(建议填写主机名或域名)
server.name: "kibana"# ======================== 国际化与界面优化 =====================
# 界面语言:中文(无需引号)
i18n.locale: zh-CN# ======================== Elasticsearch 连接配置 ==============
# ES地址:多节点用逗号分隔(如 ["https://es-01:9200", "https://es-02:9200"])
elasticsearch.hosts: ["https://localhost:9200"]
# es账号:使用内置 kibana_system 账号(最小权限原则)
elasticsearch.username: "kibana_system"
# es密码
elasticsearch.password: "kibana_system账号的密码"
# ES 连接超时:延长至 60s(适配大查询/慢响应场景)
elasticsearch.requestTimeout: 60000
# 最大并发连接:从 1024 下调至 512(避免占用过多系统资源)
elasticsearch.maxSockets: 512
# HTTP 压缩:保持开启(减少网络传输量)
elasticsearch.compression: true
# 证书权威机构指定 ES 证书
elasticsearch.ssl.certificateAuthorities: ["/etc/kibana/ssl/http.crt"]
# SSL 验证模式:生产环境强制 full(验证证书有效性+主机名匹配,防止中间人攻击)
# full:完全验证证书及主机名
# none:不验证证书
# certificate:只验证证书,不验证主机名
elasticsearch.ssl.verificationMode: full# ======================== 日志配置 ===========================
logging:appenders:# 将日志输出到文件file:type: filefileName: /var/log/kibana/kibana.log # 日志文件路径layout:type: json # JSON 格式,便于 ELK 采集root:appenders:- default # 控制台日志- file # 文件日志
# ======================== 生产环境增强配置 =====================
# PID文件:默认路径
pid.file: /run/kibana/kibana.pid
EOF
🚀 启动服务
systemctl daemon-reload
systemctl enable kibana
systemctl start kibana
🌐 访问测试
访问地址: http://10.28.21.213:5601/
3.3 安装 Logstash
📥 安装命令
rpm -ivh /opt/elk/logstash-9.2.0-x86_64.rpm
🔐 证书配置
mkdir -p /etc/logstash/ssl
cp /etc/elasticsearch/ssl/http.crt /etc/logstash/ssl/http.crt
chown -R logstash:logstash /etc/logstash/ssl
chmod 600 /etc/logstash/ssl/*
⚙️ Logstash 配置
tee /etc/logstash/logstash.yml << \EOF
# ================= 基础路径设置 =================
# 数据存放目录
path.data: /var/lib/logstash
# 日志存放目录
path.logs: /var/log/logstash# ================= Pipeline 配置 ===============
# 开启配置文件动态重载(当 pipeline 配置文件修改时自动生效)
config.reload.automatic: true
# 检查配置文件更新的间隔时间
config.reload.interval: 3s# ================= Elasticsearch 输出与安全 =====
# 是否启用 X-Pack 监控
xpack.monitoring.enabled: true
# 监控数据发送到的 Elasticsearch 主机(HTTPS 协议)
xpack.monitoring.elasticsearch.hosts: ["https://localhost:9200"]# 如果 Elasticsearch 配置了用户名和密码,请填入
xpack.monitoring.elasticsearch.username: "logstash_system"
xpack.monitoring.elasticsearch.password: "logstash_system账号的密码"# 如果 Elasticsearch 使用自签名证书,需要指定 CA 证书路径(PEM 格式)
xpack.monitoring.elasticsearch.ssl.certificate_authority: "/etc/logstash/ssl/http.crt"
# 如果只是测试环境、不验证 SSL 证书,可以使用下面这一行(生产环境不推荐)
# xpack.monitoring.elasticsearch.ssl.verification_mode: none# ================= 其他常用配置 ==================
# Logstash pipeline 配置文件路径(只会加载指定目录下的 .conf 文件)
path.config: /etc/logstash/conf.d/*.conf
# HTTP API 绑定地址,默认只允许本地访问,0.0.0.0 表示允许所有网卡访问
api.enabled: true
api.http.host: "0.0.0.0"
api.http.port: 9600
EOF
🔄 Pipeline 配置
tee /etc/logstash/conf.d/default.conf << \EOF
# ================= 输入插件 ===============
input {tcp {mode => "server" # 以 TCP 服务器模式监听客户端日志host => "0.0.0.0" # 监听所有网卡port => 4567 # 监听端口codec => json_lines # 每行 JSON 为一条日志}
}# ================= 过滤器 =================
filter {# 将日志中的 timestamp 字段解析为 Logstash 内置的 @timestampdate {match => ["timestamp", "yyyy-MM-dd HH:mm:ss.SSS"] # 指定时间格式target => "@timestamp" # 转换后存入 @timestamp# timezone => "Asia/Shanghai" # 可根据实际时区设置}# 如果日志中没有 app 字段,默认添加一个if ![app] {mutate {add_field => { "app" => "log" }}}# 将 app 字段格式化为索引名使用的简写mutate {# gsub 正则说明:# [^a-zA-Z0-9_-] → 匹配所有非字母、非数字、非下划线、非中划线的字符# 替换成 "-",保证生成的索引名合法gsub => ["app", "[^a-zA-Z0-9_-]", "-"]}
}# ================= 输出插件 =================
output {elasticsearch {hosts => ["https://localhost:9200"] # Elasticsearch 地址,HTTPS 协议user => "elastic" # 用户名password => "elastic账号的密码" # 密码ssl_enabled => true # 启用 SSLssl_certificate_authorities => "/etc/logstash/ssl/http.crt" # 自签名证书路径# 如果日志不完全符合 ECS 规范,禁用 ECS 兼容模式ecs_compatibility => disabled# 动态索引名,根据 app 字段生成# 例如 app=sz-yplus-gateway → 索引名:sz-yplus-gateway-2025.10.14index => "%{[app]}-%{+YYYY.MM.dd}"codec => json # 输出 JSON 格式action => "index" # 索引操作类型}
}
EOF
🚀 启动服务
systemctl daemon-reload
systemctl enable logstash
systemctl start logstash
4. 项目工程集成
📚 Maven 依赖
<!-- ELK Logstash 日志收集 -->
<dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>5.3</version>
</dependency>
⚙️ Logback 配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false"><!-- 配置属性 --><!-- LOG_DIR: 日志目录路径,默认为当前目录下的logs文件夹 --><property name="LOG_DIR" value="${LOG_PATH:-./logs}"/><!-- MAX_HISTORY: 日志文件最大保留历史数量,默认为15天 --><property name="MAX_HISTORY" value="7"/><!-- PATTERN_SCRIPT: 日志打印格式,包含时间、线程、级别、类、方法、行号、消息等信息 --><property name="PATTERN_SCRIPT" value="%date{yyyy/MM/dd HH:mm:ss.SSS} [%thread] [%-5level] [%c{24}.%M\(\) : %line] - %msg%n"/><!-- API_PATTERN_SCRIPT: API日志打印格式,仅包含时间、消息 --><property name="API_PATTERN_SCRIPT" value="%date{yyyy/MM/dd HH:mm:ss.SSS} # %msg%n"/><!-- LOGSTASH_ADDRESS: Logstash的地址和端口,用于日志收集 --><property name="LOGSTASH_ADDRESS" value="${LOGSTASH:-10.28.19.168:5042}"/><!-- 根据Spring配置文件中的profile设置不同的属性值 --><springProfile name="dev,test,test1,test2,test3"><property name="ENV" value="test"/></springProfile><springProfile name="uat,pre,sim"><property name="ENV" value="uat"/></springProfile><springProfile name="pro,prd"><property name="ENV" value="prd"/></springProfile><!-- 根据ENV属性设置应用名称 --><property name="APP" value="from-bamboo"/><!-- 控制台日志输出配置 --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>${PATTERN_SCRIPT}</pattern></encoder></appender><!-- 滚动文件日志输出配置,按天滚动 --><appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${LOG_DIR}/${APP}.%d{yyyy-MM-dd}.log</fileNamePattern><!-- 保留天数 --><maxHistory>${MAX_HISTORY}</maxHistory><cleanHistoryOnStart>true</cleanHistoryOnStart></rollingPolicy><encoder><pattern>${PATTERN_SCRIPT}</pattern></encoder></appender><!-- Logstash日志输出配置,用于将日志发送到Logstash --><appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"><!--可以访问的logstash日志收集端口--><destination>${LOGSTASH_ADDRESS}</destination><encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"><!--自定义字段,区分应用名称及节点名称--><customFields>{"app":"${APP}","env":"${ENV}","hostname":"${HOSTNAME}"}</customFields></encoder><!-- 过滤掉 TRACE 和 DEBUG 级别的日志--><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>INFO</level></filter></appender><!-- 异步日志输出配置,用于提高日志输出性能 --><appender name="ASYNC_STDOUT" class="ch.qos.logback.classic.AsyncAppender"><appender-ref ref="STDOUT"/><!-- 设置队列入队时非阻塞,当队列满时会直接丢弃日志,但是对性能提升极大 --><neverBlock>true</neverBlock><!-- 新增这行为了打印栈堆信息 --><includeCallerData>true</includeCallerData></appender><!-- 异步输出 --><appender name="ASYNC_ROLLING_FILE" class="ch.qos.logback.classic.AsyncAppender"><appender-ref ref="ROLLING_FILE"/><!-- 设置队列入队时非阻塞,当队列满时会直接丢弃日志,但是对性能提升极大 --><neverBlock>true</neverBlock><!-- 新增这行为了打印栈堆信息 --><includeCallerData>true</includeCallerData></appender><!-- 异步Logstash日志输出配置 --><appender name="ASYNC_LOGSTASH" class="ch.qos.logback.classic.AsyncAppender"><appender-ref ref="LOGSTASH"/><neverBlock>true</neverBlock><includeCallerData>true</includeCallerData></appender><!-- 根据不同的环境设置日志级别-本地环境和开发环境输出DEBUG级别日志--><springProfile name="dev,test,test1,test2,test3,sim,pre"><!-- print request url & parameter --><logger name="org.springframework.web.method.support.InvocableHandlerMethod" level="DEBUG"/><logger name="org.springframework.boot.SpringApplication" level="TRACE"/><!-- print transaction --><logger name="org.springframework.transaction.interceptor.TransactionInterceptor" level="TRACE"/><logger name="org.springframework.jdbc.support.JdbcTransactionManager" level="DEBUG"/><!-- print sql log , but for development debug --><logger name="com.zaxxer.hikari.HikariConfig" level="DEBUG"/><logger name="org.springframework.jdbc.core.JdbcTemplate" level="DEBUG"/><logger name="org.springframework.jdbc.core.StatementCreatorUtils" level="TRACE"/><logger name="org.apache.ibatis.logging.jdbc.BaseJdbcLogger" level="DEBUG"/><logger name="org.apache.ibatis.jdbc.ScriptRunner" level="DEBUG"/><logger name="java.sql.Connection" level="DEBUG"/><logger name="java.sql.Statement" level="DEBUG"/><logger name="java.sql.PreparedStatement" level="DEBUG"/></springProfile><!-- 根据不同的环境设置日志级别-生产环境输出INFO级别日志 --><springProfile name="prd,pro"><logger name="com.zaxxer.hikari.HikariConfig" level="DEBUG"/></springProfile><!-- 根日志配置,设置日志输出级别和对应的appender --><root level="WARN"><appender-ref ref="ASYNC_STDOUT"/><appender-ref ref="ASYNC_ROLLING_FILE"/><appender-ref ref="ASYNC_LOGSTASH"/></root>
</configuration>
5. 数据清理策略
📅 创建生命周期策略
PUT _ilm/policy/delete-after-15days
{"policy": {"phases": {"delete": {"min_age": "15d","actions": {"delete": {}}}}}
}
🔗 绑定索引模板
PUT _index_template/delete-after-15days-template
{"index_patterns": ["from-*"],"template": {"settings": {"index.lifecycle.name": "delete-after-15days","number_of_shards": 1,"number_of_replicas": 0}}
}
📋 现有索引绑定
# 一次性绑定所有 "from-" 前缀索引
PUT from-*/_settings
{"index.lifecycle.name": "delete-after-15days"
}
✅ 验证策略
GET from-bamboo-2025.11.13/_ilm/explain
🛠️ 其他命令
# 验证 ILM 服务是否运行正常
GET _ilm/status# 索引批量解绑所有策略(针对"from-"前缀的索引)
POST from-*/_ilm/remove# 删除策略
DELETE _ilm/policy/delete-after-15days
🎉 安装完成
至此,ELK 9.2.0 完整安装部署已完成,包括:
-
✅ Elasticsearch 搜索集群
-
✅ Kibana 可视化界面
-
✅ Logstash 数据管道
-
✅ 应用日志集成
-
✅ 自动数据清理策略
6.引用Reference
- CentOS8搭建nfs服务
- Kubernetes1.25.4版本安装
- kubeasz安装kubernetes1.25.5
- k8s一键安装redis单机版
- k8s一键安装mysql8单机版
- k8s部署springboot应用
- Docker安装及学习
- Docker制作springboot运行应用镜像
- Docker制作Java8环境镜像
- Docker安装Mysql5.7.31
- Docker安装Mysql8
- Elasticsearch单机版本安装
- Elasticsearch集群安装
- ELK 8.17.0 安装部署手册
- ELK 9.2.0 安装部署手册
- Docker安装ELK
- zookeeper集群安装
- Nginx日志切割
- RabbitMQ集群安装
- Docker安装RabbitMQ单机版
- springboot集成prometheus+grafana
- windows11安装android应用
- Windows下多个JDK版本快速切换
- MongoDB主从仲裁模式安装
- MongoDB单机版安装
- Redis集群安装
- Docker安装Nginx
- RabbitMQ单节点安装
