当前位置: 首页 > news >正文

ELK 9.2.0 安装部署手册

ELK 9.2.0 安装部署手册

📋 目录

    1. 环境准备
    1. 系统优化
    1. 安装部署
    • 3.1 安装 Elasticsearch

    • 3.2 安装 Kibana

    • 3.3 安装 Logstash

    1. 项目工程集成
    1. 数据清理策略

1. 环境准备

🖥️ 系统信息

  • 操作系统CentOS Linux release 7.9.2009 (Core)

  • 服务器IP10.28.21.213

  • 安装目录/opt/elk

📦 安装包下载

组件下载地址
Elasticsearchelasticsearch-9.2.0-x86_64.rpm
Kibanakibana-9.2.0-x86_64.rpm
Logstashlogstash-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单节点安装
http://www.dtcms.com/a/606156.html

相关文章:

  • 代码统计网站wordpress设置在新页面打开空白
  • 网站开发的流程 知乎设计培训网站建设
  • Qt 的字节序转换
  • QT Quick QML项目音乐播放器17----自定义Notification通知、请求错误提示、Loading加载中提示
  • 【Qt】AddressSanitizer 简介
  • Linux(麒麟)服务器离线安装单机Milvus向量库
  • Qt Widgets和Qt Qucik在开发工控触摸程序的选择
  • 毕业设计网站做几个图片设计素材
  • 网站设计计划深圳分销网站设计公司
  • word套打工具根据高度动态分页
  • 华清远见25072班单片机基础学习day3
  • docker安装Kubernetes
  • 湖科大教书匠每日一题(09.06~09.17)
  • HT71778:便携式音频设备的高效升压转换核心
  • 适合代码新手做的网站深圳市保障性住房申请官网
  • git的命令操作手册
  • 直播录制工具(支持 40 + 平台批量录制与自动监控)
  • 国际品牌的广州网站建设派代网
  • 商城网站开发实训报告外加工订单网
  • 6、Python中的异常处理
  • DNS配置作业
  • C++11:lambda表达式,包装器
  • 方圆网 网站建设营销策略包括哪些内容
  • 勇闯前后端:后端(Python)——Week1
  • 百度伐谋正式发布!“自我演化”超级智能体,为产业难题寻找“全局最优解”
  • 什么是分布式?什么是微服务?什么是集群?什么是单体?这些都是什么?又有什么关联?
  • SQL 实战:用户访问 → 下单 → 支付全流程转化率分析
  • wordpress数据库修改主题seo体系网站的建设及优化
  • 批量更新 JAR 内配置文件的通用 Bash 脚本
  • 第四十一篇:正则表达式(Regex)终极指南:语法、re模块与实战案例