Rocky 9 单机安装elastic-9.1.5
ELK日志平台搭建
- 一、ELK介绍
- 二、系统初始化检查
- 1. 版本兼容性检查
- 2. 系统初始化
- 三、安装包提前下载
- 三、elasticsearch安装
- 1. 目录结构介绍
- 2. 配置修改
- 3. 启动elasticsearch
- 三、kibana安装
- 1. 目录结构介绍
- 2. 配置修改
- 3. 启动kibana
- 四、kibana 连接到elasticsearch
- 1. 两边使用http方式连接
- 1.1. kibana 使用内置用户的方式连接到elasticsearch(与token二选一)
- 2. 两边使用https方式连接
- 2.1. 为为kibana创建自签名证书
- 2.2. 配置修改,使用token注册的方式连接到es(适用于ES和kibana新安装)
- 2,3, 配置修改使用内置用户的方式连接到es (适用于配置文件已经修改过)
- 五、Logstash 安装
- 1. 简介
- 2. 安装Logstash
- 2.1. 安装Filebeat将日志输出指向Logstash
- 2.1.1. Filebeat简介
- 2.1.2. Filebeat工作原理
- 2.1.3 安装Filebeat
- 六、配置视图查看日志
一、ELK介绍
文档地址:https://elastic.ac.cn/docs/get-started/the-stack
什么是 Elastic Stack?它是一套快速且高度可扩展的组件——Elasticsearch、Kibana、Beats、Logstash 等——它们共同使您能够安全地从任何来源、任何格式的数据,然后搜索、分析和可视化它。
二、系统初始化检查
1. 版本兼容性检查
查看官网: https://www.elastic.co/support/matrix
2. 系统初始化
建议将系统最低配置为2c8g
hostnamectl set-hostname elastic-server
systemctl disable firewalld --now
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
swapoff -a && sed -i "s/^[^#]*swap*/#&/g" /etc/fstab
elasticsearch用户创建,并赋予sudo权限
groupadd elasticsearch
useradd elasticsearch
useradd -g elasticsearch elasticsearch
echo "elasticsearch" | passwd --stdin elasticsearch
echo "elasticsearch ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/elasticsearch
内核参数调整
echo "
# 设置elasticsearch用户进程能打开的最大文件句柄
elasticsearch - nofile 65535
# 设置elasticsearch用户进程锁定使用物理内存
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
# 设置elasticsearch 用户进程创建的最大线程数
elasticsearch soft nproc 4096
elasticsearch hard nproc 4096
# 不限制elasticsearch用户创建文件的大小
elasticsearch soft fsize unlimited
elasticsearch hard fsize unlimited
" >> /etc/security/limits.conf
# 重新登录shell终端生效
echo "
# 设置个进程可创建的最大内存映射区域数量
vm.max_map_count=262144
# 设置tcp重传个数
net.ipv4.tcp_retries2=5
" >> /etc/sysctl.conf
# 立即生效
sysctl -p
三、安装包提前下载
mkdir /opt/ELK && cd /opt/ELK
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-9.1.5-linux-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/kibana/kibana-9.1.5-linux-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/logstash/logstash-9.1.5-linux-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/logstash/logstash-9.1.5-linux-x86_64.tar.gz
for i in $(ls *.gz);do tar -zxf $i;done
chown elasticsearch.elasticsearch * -R
su elasticsearch
三、elasticsearch安装
1. 目录结构介绍
cd elasticsearch-9.1.5
LICENSE.txt # 授权许可
NOTICE.txt # 版权声明
README.asciidoc # 官方文档说明
bin # 二进制文件目录
config # 配置文件目录
jdk # 内置JDK目录
lib # 依赖库目录
logs # 日志文件目录
modules # 内置模块目录
plugins # 插件目录
2. 配置修改
创建自定义jvm.options参数文件
touch config/jvm.options.d/custom_jvm.options
config/jvm.options.d/custom_jvm.options
:
# 统一内存堆栈大小
-Xms2g
-Xmx2g# 使用G1 垃圾回收
-XX:+UseG1GC# es 运行时产生的临时可执行文件
-Djava.io.tmpdir=/home/elasticsearch/es/tmp# 指定gc参数及日志文件存放地址
-Xlog:gc*,gc+age=trace,safepoint:file=/home/elasticsearch/es/logs/gc.log:utctime,level,pid,tags:filecount=32,filesize=64m# JVM 内存溢出时,将日志文件写入指的目录下
-XX:HeapDumpPath=/home/elasticsearch/es/HeapDump
目录创建:
mkdir -pv /home/elasticsearch/es/tmp
mkdir -pv /home/elasticsearch/es/HeapDump
config/elasticsearch.yml
:
# 声明es是单节点部署
discovery.type: single-node# 节点名称
node.name: es-standalone# 设置日志和数据存储目录,建议是设置到es目录外,应为es升级会删除数据
path.data: /home/elasticsearch/es/data
path.logs: /home/elasticsearch/es/logs# 锁定es必须使用物理内存
bootstrap.memory_lock: true# 设置网络接口和端口绑定
network.host: 0.0.0.0
http.port: 9200# 设置是否允许使用通配符删除索引
action.destructive_requires_name: false# 客户端通过http接口发送给 Elasticsearch 的请求体最大值
http.max_content_length: 100mb
目录创建:
mkdir -pv /home/elasticsearch/es/data
mkdir -pv /home/elasticsearch/es/logs
将elasticsearch-9.1.5目录递归授权elasticsearch用户权限:
chown elasticsearch.elasticsearch /opt/ELK/elasticsearch-9.1.5 -R
chown elasticsearch.elasticsearch /home/elasticsearch -R
3. 启动elasticsearch
./bin/elasticsearch -d
后台启动,必须使用普通用户启动,使用root用户会报错
./bin/elasticsearch
✅ Elasticsearch security features have been automatically configured!
✅ Authentication is enabled and cluster connections are encrypted.ℹ️ Password for the elastic user (reset with `bin/elasticsearch-reset-password -u elastic`):p*fDrWv-izHsIy0BTA3Rℹ️ HTTP CA certificate SHA-256 fingerprint:f17df9b55b2aca45666b6d731bef11d60fd2f10d36393174b94457946e1a71cfℹ️ Configure Kibana to use this cluster:
• Run Kibana and click the configuration link in the terminal when Kibana starts.
• Copy the following enrollment token and paste it into Kibana in your browser (valid for the next 30 minutes):eyJ2ZXIiOiI4LjE0LjAiLCJhZHIiOlsiMTkyLjE2OC4yNS4yNTA6OTIwMCJdLCJmZ3IiOiJmMTdkZjliNTViMmFjYTQ1NjY2YjZkNzMxYmVmMTFkNjBmZDJmMTBkMzYzOTMxNzRiOTQ0NTc5NDZlMWE3MWNmIiwia2V5Ijoic1JSRENwb0I3S2lzUHdrX0FRMWs6cEZleUdvMTVxcVpCb25zUHo2VS14QSJ9ℹ️ Configure other nodes to join this cluster:
• Copy the following enrollment token and start new Elasticsearch nodes with `bin/elasticsearch --enrollment-token <token>` (valid for the next 30 minutes):eyJ2ZXIiOiI4LjE0LjAiLCJhZHIiOlsiMTkyLjE2OC4yNS4yNTA6OTIwMCJdLCJmZ3IiOiJmMTdkZjliNTViMmFjYTQ1NjY2YjZkNzMxYmVmMTFkNjBmZDJmMTBkMzYzOTMxNzRiOTQ0NTc5NDZlMWE3MWNmIiwia2V5Ijoic3hSRENwb0I3S2lzUHdrX0FRMW06QXJOUGZBOXk1ZFlwZG4tR2d4VWd5USJ9If you're running in Docker, copy the enrollment token and run:`docker run -e "ENROLLMENT_TOKEN=<token>" docker.elastic.co/elasticsearch/elasticsearch:9.1.5`
-
Elasticsearch security features have been automatically configured!
: 已经自动开启ssl安全访问 -
Authentication is enabled and cluster connections are encrypted.
: 已开启访问认证必须,集群安全连接,超级管理员账号密码:elastic/p*fDrWv-izHsIy0BTA3R
bin/elasticsearch-reset-password -u elastic
# 重置随机密码
bin/elasticsearch-reset-password -u elastic -i
# 交互输入密码 -
eyJ2ZXIiOiI4LjE0LjAiLCJhZHIiOlsiMTkyLjE2OC4yNS4yNTA6OTIwMCJdLCJmZ3IiOiJmMTdkZjliNTViMmFjYTQ1NjY2YjZkNzMxYmVmMTFkNjBmZDJmMTBkMzYzOTMxNzRiOTQ0NTc5NDZlMWE3MWNmIiwia2V5Ijoic3hSRENwb0I3S2lzUHdrX0FRMW06QXJOUGZBOXk1ZFlwZG4tR2d4VWd5USJ9
: 注册令牌、Kibana 启动后输入这串令牌,自动完成与Elasticsearch 安全连接、使用./bin/elasticsearch-create-enrollment-token -s kibana
重置令牌
查看自动生成的配置:
#----------------------- BEGIN SECURITY AUTO CONFIGURATION -----------------------
#
# The following settings, TLS certificates, and keys have been automatically
# generated to configure Elasticsearch security features on 17-10-2025 10:29:00
#
# --------------------------------------------------------------------------------# Enable security features
xpack.security.enabled: true # 开启安全特性总开关xpack.security.enrollment.enabled: true # 启用 “节点 / 组件自动注册” 功能,简化注册流程# Enable encryption for HTTP API client connections, such as Kibana, Logstash, and Agents
xpack.security.http.ssl:enabled: true # 开启ssl访问,强制使用https访问keystore.path: certs/http.p12 # 指定证书和私钥的文件路径# Enable encryption and mutual authentication between cluster nodes
xpack.security.transport.ssl: enabled: true # 开启集群节点内ssl访问、强制使用加密通道,默认端口9300verification_mode: certificate # 仅检查证书是否可信keystore.path: certs/transport.p12 # 当前节点证书和私钥存储路径truststore.path: certs/transport.p12 # 当前节点信任的其他节点的证书存储路径
#----------------------- END SECURITY AUTO CONFIGURATION ------------------------
默认需要输入密码:内置超级管理员:
elastic
密码可以通过:bin/elasticsearch-reset-password -u elastic -i
手动设置
访问https://IP:9090端口:
提交数据测试:
curl -k -u elastic:Elastic@2025 -X POST "https://localhost:9200/user/_doc" -H "Content-Type: application/json" -d '
{"name": "张三","age": 30,"email": "zhangsan@example.com","hobby": ["篮球", "阅读"]
}
'
{"_index":"user","_id":"sC_w8ZkBdPSb__2kdERW","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":0,"_primary_term":1}
获取数据:
curl -k -u elastic:Elastic@2025 "https://localhost:9200/user/_doc/sC_w8ZkBdPSb__2kdERW?pretty"
{"_index" : "user","_id" : "sC_w8ZkBdPSb__2kdERW","_version" : 1,"_seq_no" : 0,"_primary_term" : 1,"found" : true,"_source" : {"name" : "张三","age" : 30,"email" : "zhangsan@example.com","hobby" : ["篮球","阅读"]}
}
三、kibana安装
1. 目录结构介绍
cd kibana-9.1.5/
LICENSE.txt
NOTICE.txt
README.txt
bin # 二进制执行文件目录
config # 配置文件路径
data # 数据文件目录
logs # 日志存放目录
node # Node.js 运行环境和第三方包
node_modules # Node.js 运行环境和第三方包
package.json # 包的清单和版本
plugins # 插件目录
src # Elasticsearch的 ava源代码目录
x-pack # 扩展功能目录,Elastic Stack 高级功能
2. 配置修改
config/kibana.yml
:
# =================== System: Kibana Server ===================
# 接口地址和端口号
server.port: 5601
server.host: "0.0.0.0" # 允许所有IP访问
# 公网域名(若通过域名访问,建议配置,如 "https://kibana.example.com")
# server.publicBaseUrl: ""
# 限制客户端请求体大小(5MB,合理,避免大请求攻击)
server.maxPayload: 5242880
# Kibana服务名(自定义,便于识别)
server.name: "kibana-server"
# =================== System: Logging ===================
# 日志级别(info 适合生产,平衡信息量和性能)
logging.root.level: info
# 日志输出器(仅保留滚动文件配置,支持按大小轮转)
logging.appenders.default:type: rolling-filefileName: logs/kibana.log # 日志路径,当前路径下policy:type: size-limitsize: 100mb # 单文件100MBstrategy:type: numericmax: 10 # 保留10个历史文件(总约1GB)layout:type: json # JSON格式,便于日志分析
# =================== System: Other ===================
# 自定义数据目录
path.data: data # 数据路径(当前目录下的data)
# 性能指标采样间隔/ms
ops.interval: 5000
# 界面语言
i18n.locale: "zh-CN"
# PID文件路径(系统标准目录,更规范)
# pid.file: kibana.pid # pid文件路径
# =================== Saved Objects: Migrations ===================
# 迁移配置(生产环境优化)
migrations.batchSize: 500 # 单批迁移500个对象,降低内存压力
migrations.maxBatchSizeBytes: 90mb # 小于ES的http.max_content_length(默认100mb)
migrations.retryAttempts: 15 # 重试次数
3. 启动kibana
启动kibana
./bin/kibana
i Kibana has not been configured.Go to http://0.0.0.0:5601/?code=419317 to get started.
目前已经启动成功,还未连接到elasticsearch
四、kibana 连接到elasticsearch
1. 两边使用http方式连接
由于elasticsearch默认是使用https访问、但是kibana 默认是使用http访问,所以会产生跨域
修改elasticsearch配置
/opt/ELK/elasticsearch-9.1.5/config/elasticsearch.yml
:
# 禁用https访问,重启启动elasticsearch
xpack.security.http.ssl:enabled: falsekeystore.path: certs/http.p12
1.1. kibana 使用内置用户的方式连接到elasticsearch(与token二选一)
kibana_system内置用户仅用于es和kibana连接使用,不能登录kibana
为内置用户kibana_system生成密码
-i
交互式设置密码
./bin/elasticsearch-reset-password -u kibana_system -b
D1loXTZ7b=_VZc*JeZv+
生成的密码
Password for the [kibana_system] user successfully reset.
New value: D1loXTZ7b=_VZc*JeZv+
创建 Kibana 密钥库,将 kibana_system 密码添加到 Kibana 密钥库
# 创建密码库
./bin/kibana-keystore create
# kibana_system 用户的密码添加到 Kibana 密钥库
./bin/kibana-keystore add elasticsearch.password # D1loXTZ7b=_VZc*JeZv+
新添加kibana配置
config/kibana.yml
:
# =================== System: Elasticsearch ===================
# 连接es的地址
elasticsearch.hosts: ["http://localhost:9200"]
# 内置账号密码信息
elasticsearch.username: "kibana_system"
elasticsearch.password: "D1loXTZ7b=_VZc*JeZv+"
# 间隔多久向es发送心跳检测
elasticsearch.pingTimeout: 1500
# Kibana 向es发送业务请求时的超时时间
elasticsearch.requestTimeout: 30000
# Kibana 与 ES 之间的最大并发 socket 连接数
elasticsearch.maxSockets: 1024
# Kibana 与 ES 连接是否启用压缩
elasticsearch.compression: false
重新启动kibana。
访问kibana
账号
elastic
密码bin/elasticsearch-reset-password -u elastic -i
设置的
http://ip:5601/
2. 两边使用https方式连接
2.1. 为为kibana创建自签名证书
elasticsearch配置如下:
/opt/ELK/elasticsearch-9.1.5/config/elasticsearch.yml
:
# 声明es是单节点部署
discovery.type: single-node# 节点名称
node.name: es-standalone# 设置日志和数据存储目录,建议是设置到es目录外,应为es升级会删除数据
path.data: /home/elasticsearch/es/data
path.logs: /home/elasticsearch/es/logs# 锁定es必须使用物理内存
bootstrap.memory_lock: true# 设置网络接口和端口绑定
network.host: 0.0.0.0
http.port: 9200# 设置是否允许使用通配符删除索引
action.destructive_requires_name: false# 客户端通过http接口发送给 Elasticsearch 的请求体最大值
http.max_content_length: 100mb#----------------------- BEGIN SECURITY AUTO CONFIGURATION -----------------------
#
# The following settings, TLS certificates, and keys have been automatically
# generated to configure Elasticsearch security features on 22-10-2025 05:51:11
#
# --------------------------------------------------------------------------------# Enable security features
xpack.security.enabled: truexpack.security.enrollment.enabled: true# Enable encryption for HTTP API client connections, such as Kibana, Logstash, and Agents
xpack.security.http.ssl:enabled: truekeystore.path: certs/http.p12# Enable encryption and mutual authentication between cluster nodes
xpack.security.transport.ssl:enabled: trueverification_mode: certificatekeystore.path: certs/transport.p12truststore.path: certs/transport.p12
#----------------------- END SECURITY AUTO CONFIGURATION -------------------------
创建ssl目录
mkdir /opt/ELK/kibana-9.1.5/ssl && cd /opt/ELK/kibana-9.1.5/ssl
创建自签名证书
# 创建CA 私钥
openssl genrsa -out ca.key 2048
# 创建CA 自签名证书、即CA 根证书
openssl req -x509 -new -nodes -key ca.key -sha256 -days 36500 -out ca.crt -subj "/C=CN/ST=FUJIAN/L=XIAMEN/O=elastic/CN=elastic"
# 创建服务器 私钥
openssl genrsa -out kibana-server.key 2048
# 创建证书请求
openssl req -new -key kibana-server.key -out kibana-server.csr -subj "/C=CN/ST=FUJIAN/L=XIAMEN/O=elastic-server/CN=elastic-server"
# 使用CA 私钥对证书请求进行签名,并生成kibana-server.crt 证书、信任ca.crt 根证书
openssl x509 -req -in kibana-server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out kibana-server.crt -days 36500
2.2. 配置修改,使用token注册的方式连接到es(适用于ES和kibana新安装)
这里并没有配置elasticsearch的连接地址和公钥路径,下面通过elasticsearch生成的注册token来完成剩下的配置。
Kibana 证书路径配置需要注意
/opt/ELK/kibana-9.1.5/config/kibana.yml
:
# =================== System: Kibana Server ===================
# 接口地址和端口号
server.port: 5601
server.host: "0.0.0.0" # 允许所有IP访问
# 公网域名(若通过域名访问,建议配置,如 "https://kibana.example.com")
# server.publicBaseUrl: ""
# 限制客户端请求体大小(5MB,合理,避免大请求攻击)
server.maxPayload: 5242880
# Kibana服务名(自定义,便于识别)
server.name: "kibana-server"
# =================== System: Logging ===================
# 日志级别(info 适合生产,平衡信息量和性能)
logging.root.level: info
# 日志输出器(仅保留滚动文件配置,支持按大小轮转)
logging.appenders.default:type: rolling-filefileName: logs/kibana.log # 日志路径,当前路径下policy:type: size-limitsize: 100mb # 单文件100MBstrategy:type: numericmax: 10 # 保留10个历史文件(总约1GB)layout:type: json # JSON格式,便于日志分析
# =================== System: Other ===================
# 自定义数据目录
path.data: data # 数据路径(当前目录下的data)
# 性能指标采样间隔/ms
ops.interval: 5000
# 界面语言
i18n.locale: "zh-CN"
# PID文件路径(系统标准目录,更规范)
# pid.file: kibana.pid # pid文件路径
# =================== Saved Objects: Migrations ===================
# 迁移配置(生产环境优化)
migrations.batchSize: 500 # 单批迁移500个对象,降低内存压力
migrations.maxBatchSizeBytes: 90mb # 小于ES的http.max_content_length(默认100mb)
migrations.retryAttempts: 15 # 重试次数
# 新增配置
server.ssl.enabled: true
server.ssl.certificate: /opt/ELK/kibana-9.1.5/ssl/kibana-server.crt
server.ssl.key: /opt/ELK/kibana-9.1.5/ssl/kibana-server.key
启动kibana:
./bin/kibana
i Kibana has not been configured.Go to https://0.0.0.0:5601/?code=807789 to get started.
elasticsearch创建用于连接kibana的token
/opt/ELK/elasticsearch-9.1.5/bin/elasticsearch-create-enrollment-token -s kibana
eyJ2ZXIiOiI4LjE0LjAiLCJhZHIiOlsiMTkyLjE2OC4yNS4xMjk6OTIwMCJdLCJmZ3IiOiJmYjQyNjE1YTg5ZmNmMjBhNGZhODc3Nzk3NDNkODc5MjU5NTQ2ZmZjMDNmMzA5MDA1NzMwYjkwYmFiNmRmZWVkIiwia2V5IjoibXVCbi1aa0JJcXRIS3RJSDFYWHo6SzJPRFB6LVhuRmhUNkJvcHZjdngxdyJ9
访问kibana,配置es 生成的token,点击配置
通过./bin/kibana-verification-code
获取验证码
查看kibana新增的配置:
config/kibana.yml
:
# This section was automatically generated during setup.
elasticsearch.hosts: [https://192.168.25.129:9200]
elasticsearch.serviceAccountToken: AAEAAWVsYXN0aWMva2liYW5hL2Vucm9sbC1wcm9jZXNzLXRva2VuLTE3NjA4MjY2OTgxMzU6RXNoc1EyRWhRY3l5bFJjWXlaR3dlUQ
elasticsearch.ssl.certificateAuthorities: [/opt/ELK/kibana-9.1.5/data/ca_1760826698955.crt]
xpack.fleet.outputs: [{id: fleet-default-output, name: default, is_default: true, is_default_monitoring: true, type: elasticsearch, hosts: [https://192.168.25.129:9200], ca_trusted_fingerprint: fb42615a89fcf20a4fa87779743d879259546ffc03f309005730b90bab6dfeed}]
- elasticsearch.hosts: es连接地址
- elasticsearch.serviceAccountToken :es创建访问kibana的token
- elasticsearch.ssl.certificateAuthorities: es CA 根证书路径,验证es是否合法
- xpack.fleet.outputs:配置 Kibana 中 Fleet 功能的默认输出(Output),用于定义 Elastic Agent 采集的数据发送到哪个 Elasticsearch 集群。
- ca_trusted_fingerprint:快速验证 CA 根证书合法性
2,3, 配置修改使用内置用户的方式连接到es (适用于配置文件已经修改过)
内置kibana_system用户密码创建配置
上面已经有了操作步骤
# 在ES生成kibana_system密码
./bin/elasticsearch-reset-password -u kibana_system -b
kibana完整配置如下:
config/kibana.yml
:
# =================== System: Kibana Server ===================
# 接口地址和端口号
server.port: 5601
server.host: "0.0.0.0" # 允许所有IP访问
# 公网域名(若通过域名访问,建议配置,如 "https://kibana.example.com")
# server.publicBaseUrl: ""
# 限制客户端请求体大小(5MB,合理,避免大请求攻击)
server.maxPayload: 5242880
# Kibana服务名(自定义,便于识别)
server.name: "kibana-server"
# =================== System: Logging ===================
# 日志级别(info 适合生产,平衡信息量和性能)
logging.root.level: info
# 日志输出器(仅保留滚动文件配置,支持按大小轮转)
logging.appenders.default:type: rolling-filefileName: logs/kibana.log # 日志路径,当前路径下policy:type: size-limitsize: 100mb # 单文件100MBstrategy:type: numericmax: 10 # 保留10个历史文件(总约1GB)layout:type: json # JSON格式,便于日志分析
# =================== System: Other ===================
# 自定义数据目录
path.data: data # 数据路径(当前目录下的data)
# 性能指标采样间隔/ms
ops.interval: 5000
# 界面语言
i18n.locale: "zh-CN"
# PID文件路径(系统标准目录,更规范)
# pid.file: kibana.pid # pid文件路径
# =================== Saved Objects: Migrations ===================
# 迁移配置(生产环境优化)
migrations.batchSize: 500 # 单批迁移500个对象,降低内存压力
migrations.maxBatchSizeBytes: 90mb # 小于ES的http.max_content_length(默认100mb)
migrations.retryAttempts: 15 # 重试次数
# =================== System: Elasticsearch ===================
# 连接es的地址
elasticsearch.hosts: ["https://localhost:9200"]
# 内置账号密码信息
elasticsearch.username: "kibana_system"
elasticsearch.password: "TPnCiXfXAzs2m464PeAm"
# 间隔多久向es发送心跳检测
elasticsearch.pingTimeout: 1500
# Kibana 向es发送业务请求时的超时时间
elasticsearch.requestTimeout: 30000
# Kibana 与 ES 之间的最大并发 socket 连接数
elasticsearch.maxSockets: 1024
# Kibana 与 ES 连接是否启用压缩
elasticsearch.compression: false
# =================== System: Kibana Server (Optional) ===================
server.ssl.enabled: true
server.ssl.certificate: /opt/ELK/kibana-9.1.5/ssl/kibana-server.crt
server.ssl.key: /opt/ELK/kibana-9.1.5/ssl/kibana-server.key
# elasticsearch CA根证书
elasticsearch.ssl.certificateAuthorities: [ "/opt/ELK/elasticsearch-9.1.5/config/certs/http_ca.crt" ]
启动:
./bin/kibana
访问:
五、Logstash 安装
1. 简介
文档地址:https://www.elastic.co/docs/reference/logstash/getting-started-with-logstash
Logstash 是一个开源数据收集引擎,Logstash 可以动态统一来自不同来源的数据,并将数据进行整形发送到ES,为后续的检索、分析和可视化奠定基础。
2. 安装Logstash
所有发行版本下载:https://www.elastic.co/downloads/past-releases?product=logstash
参数文档参考:https://www.elastic.co/docs/reference/logstash/config-setting-files
cd logstash-9.1.5
目录结构:
CONTRIBUTORS:
Gemfile
Gemfile.lock
JDK_VERSION
LICENSE.txt
NOTICE.TXT
bin # 二进制可执行文件目录
config # 配置文件目录
data # 数据存储目录
jdk # jdk目录
lib #
logs # log文件目录
logstash-core # Logstash 的核心代码目录
logstash-core-plugin-api # Logstash 插件开发的 API 接口目录
vendor # 存储 Logstash 依赖的第三方库和预安装插件,是服务运行的 “依赖库仓库”
x-pack # 存储 Logstash 的 X-Pack 扩展功能相关文件
logstash主配置文件修改:
config/logstash.yml
:
# ========================= 基础服务配置 =========================
# 节点名称:标识当前 Logstash 节点
node.name: "logstash-server"
# 日志配置:运行日志存储路径
path.logs: "/opt/ELK/logstash-9.1.5/logs"# ========================= 性能优化配置 =========================
# 管道工作线程:4 核 CPU 适配(根据实际核心数调整)
pipeline.workers: 4
# 管道批处理大小:一次性处理 1000 条数据(平衡吞吐量与延迟)
pipeline.batch.size: 1000
# 批处理延迟:数据不足 1000 条时,等待 50ms 后处理(避免空等)
pipeline.batch.delay: 50# 持久化队列:避免宕机丢失数据(生产必配)
queue.type: "persisted"
# 队列存储路径:独立存储,便于管理(绝对路径)
path.queue: "/opt/ELK/logstash-9.1.5/data/queue"
# 队列最大磁盘占用:10GB(根据磁盘剩余空间调整)
queue.max_bytes: "10gb"
# Checkpoint 配置:保障数据不重复、不丢失
queue.checkpoint.acks: 1024 # 每处理 1024 条数据记录 checkpoint(避免重复输出)
queue.checkpoint.writes: 1024 # 每写入 1024 条数据记录 checkpoint(避免重复写入)
queue.checkpoint.interval: 1000 # 每 1000 毫秒强制记录 checkpoint(双重保障)
# ========================= 路径配置 =========================
# 数据存储路径:插件缓存、临时数据等(绝对路径)
path.data: "/opt/ELK/logstash-9.1.5/data"
提前创建密码库、将ES的账号密码添加到密码库的变量中:
# 创建密码库
./bin/logstash-keystore create
# 将ES的账号密码添加到变量中
./bin/logstash-keystore add ES_USER # elastic
./bin/logstash-keystore add ES_PASSWORD # Elastic@2025
配置管道:
config/pipelines.yml
:
- pipeline.id: first-pipelinepath.config: "/opt/ELK/logstash-9.1.5/config/first-pipeline.conf"
创建管道文件:
/opt/ELK/logstash-9.1.5/config/first-pipeline.conf
:
# ========================= 输入模块(Input)=========================
# 功能:通过 Beats 输入插件,接收 Filebeat/Metricbeat 等 Beats 组件发送的日志数据
# 场景:适用于采集服务器本地日志、应用日志(需在目标服务器部署 Filebeat,配置输出到当前 Logstash 的 5044 端口)
input {beats {# 监听端口:Beats 组件与 Logstash 通信的默认端口,需与 Filebeat 配置的 output.logstash.port 保持一致port => "5044"#标签标识数据来源,便于后续过滤tags => ["filebeat-input", "server-logs"]}
}# ========================= 过滤模块(Filter)=========================
# 功能:将 Beats 采集的非结构化日志(如 Apache 原始日志)转换为结构化数据,同时补充地理位置信息
filter {# 1. Grok 插件:按预定义模式解析日志字段,提取关键信息(如客户端 IP、请求路径、响应状态码)grok {# match:指定解析规则——对 "message" 字段(原始日志内容)使用 "%{COMBINEDAPACHELOG}" 预定义模式# %{COMBINEDAPACHELOG} 是 Logstash 内置的 Apache 组合日志模式,可自动提取 clientip(客户端 IP)、timestamp(访问时间)、request(请求路径)、status(响应码)等 10+ 字段match => { "message" => "%{COMBINEDAPACHELOG}"}# 添加 tag_on_failure 标记解析失败的日志,便于后续筛选异常日志tag_on_failure => ["grok_parse_error"]}# 2. GeoIP 插件:基于 Grok 解析出的 "clientip" 字段,匹配 IP 对应的地理位置信息geoip {# source:指定用于匹配地理位置的字段(此处用 Grok 解析出的 "clientip" 字段,即客户端 IP)source => "clientip"# target:指定地理位置信息的存储字段(所有地理数据会存入 "geoip" 字段下,如 geoip.country_name、geoip.city_name、geoip.location 经纬度)target => "geoip"# database:指定 GeoIP 数据库文件路径(此处使用 Logstash 安装时自带的 GeoLite2-City.mmdb 数据库,无需额外下载)# 注意:若后续升级 Logstash 或 geoip 插件,此路径可能变化,需重新确认数据库位置database => "/opt/ELK/logstash-9.1.5/vendor/bundle/jruby/3.1.0/gems/logstash-filter-geoip-7.3.1-java/vendor/GeoLite2-City.mmdb"}# 3. 将日志中的时间字段(timestamp)同步到 Logstash 的默认时间字段date {match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]target => "@timestamp" # 显式指定将解析后的时间写入 @timestamp 字段(可选,默认就是这个)timezone => "Asia/Shanghai" # 明确指定时区(避免时区转换错误,尤其服务器时区非东八区时)
}
}# ========================= 输出模块(Output)=========================
# 功能:将过滤后的结构化数据(含地理位置)输出到 Elasticsearch,用于后续 Kibana 可视化分析、日志检索
output {elasticsearch {# hosts:Elasticsearch 集群节点地址(支持单节点或多节点,多节点用逗号分隔,如 ["https://ip1:9200", "https://ip2:9200"])hosts => [ "https://192.168.25.129:9200" ]# user/password:Elasticsearch 登录凭证(通过 Logstash 密钥库引用变量,避免明文暴露,需提前用 ./bin/logstash-keystore add ES_USER/ES_PASSWORD 添加)user => "${ES_USER}"password => "${ES_PASSWORD}"# ssl_verification_mode:SSL 证书验证模式("none" 表示跳过证书验证,仅适用于测试环境;生产环境需改为 "full" 并配置 ssl.certificate_authorities 指定 CA 证书路径)ssl_verification_mode => "none"# index:指定数据写入 Elasticsearch 的索引名,%{+YYYY.MM.dd} 表示按「年.月.日」自动生成索引(如 logstash-2025.10.22),便于按时间分片管理和查询index => "logstash-%{+YYYY.MM.dd}"}
}
启动logstash
./bin/logstash
2.1. 安装Filebeat将日志输出指向Logstash
文档地址:https://www.elastic.co/docs/reference/beats/filebeat
配置参考:https://www.elastic.co/docs/reference/beats/filebeat/configuring-howto-filebeat
2.1.1. Filebeat简介
Filebeat是一个轻量级的日志收集器,将日志收集发送到ES或Logstash 。
2.1.2. Filebeat工作原理
当 Filebeat启动后,Filebeat 为每个需要收集的日志文件创建一个收集器,每个收集器读取新内容的单个日志,并将新的日志数据发送到 libbeat,libbeat 聚合事件并将聚合数据发送到 Filebeat 配置的Logstash 或者ES进行索引。
2.1.3 安装Filebeat
所有发行版下载:https://www.elastic.co/downloads/past-releases?product=filebeat
# 使用root启动filebeat避免访问文件权限不够
sudo chown root.root filebeat-9.1.5-linux-x86_64 -R
cd filebeat-9.1.5-linux-x86_64
目录布局:
LICENSE.txt
NOTICE.txt
README.md
fields.yml # 定义 Filebeat 采集数据时的字段规范,用于统一数据格式,方便后续在ES 中检索和分析。
filebeat # 二进制文件
filebeat.reference.yml # 参考配置文件
filebeat.yml # 主配置文件
kibana # 存放与 Kibana 集成的资源
module # 预定义的日志类型采集模板,针对特定应用日志的解析规则
modules.d # 通过在该目录下创建模块的启用配置文件,可快速开启对应模块的日志采集。
配置修改:
filebeat.yml
:
filebeat.inputs:
# Filebeat 核心功能:定义从哪些文件采集日志,每个 input 对应一个日志源- type: filestreamid: messagesenabled: truepaths:- /var/log/messages # 读取的日志路径encoding: utf-8ignore_older: 24h # 忽略24小时前的日志start_position: end # 从文件末尾开始读取tags: ["test","elastic-server"] # 添加标签# 核心:自动添加IP(host.ip)
processors:- add_host_metadata:matchers:- ip:private: truepublic: false# 定义采集到的日志发送到哪里,这里配置发送到 Logstash 进行后续处理
output.logstash:hosts: ["localhost:5044"] # Logstash 地址和端口(必填,格式:["IP:端口"],多节点用逗号分隔,如 ["192.168.25.130:5044", "192.168.25.131:5044"])ssl.enabled: false # 是否启用 SSL 加密通信(true=启用,false=禁用;若 Logstash 配置了 SSL 证书,这里需设为 true 并配置证书路径)max_retries: 3 # 日志发送失败后的最大重试次数(-1 表示无限重试,直到成功;3 表示失败后重试 3 次,仍失败则丢弃,平衡可靠性和资源消耗)retry_backoff: 1s # 重试间隔时间(每次发送失败后,等待 1 秒再重试,避免频繁重试占用网络资源,可按需调整为 2s、5s)bulk_max_size: 2048 # 批量发送的最大日志条数(默认 2048,表示积累 2048 条日志后一次性发送到 Logstash,减少网络请求次数,提升效率)# 日志量大可适当调大(如 4096),日志量小可调小(如 1024)worker: 2 # 并发发送日志的工作线程数(默认 1,2 表示用 2 个线程同时发送,多核服务器可适当增加,提升发送速度,建议不超过 CPU 核心数)logging.level: info # 日志级别(可选:trace > debug > info > warn > error > fatal,info 表示只记录常规运行信息和错误,debug 用于排查问题,平时用 info 即可)
logging.to_files: true # 是否将自身日志写入文件(true=写入文件,false=只输出到控制台,生产环境建议设为 true,方便后续查看历史日志)
logging.files:path: /opt/ELK/filebeat-9.1.5-linux-x86_64/logs # Filebeat 自身日志的存储路径(需确保 Filebeat 有读写权限,建议放在 /var/log 下,符合 Linux 日志存储规范)name: filebeat # 日志文件名前缀(最终日志文件名为 filebeat、filebeat.1、filebeat.2 等,按轮转规则生成)keepfiles: 7 # 日志文件的保留天数(默认 7,即保留最近 7 天的日志,超过 7 天的自动删除,避免日志文件占用过多磁盘空间)permissions: 0600 # 日志文件的权限(Linux 文件权限,0600 表示仅文件所有者(root 或 filebeat 用户)可读可写,其他用户无权限,保护日志安全,避免敏感信息泄露)
./filebeat -e -c filebeat.yml -d “publish” 调试启动,将日志输出打印到控制台、默认是输出到logs下
启动filebeat :
sudo ./filebeat
filebeat将日志发给logstash、logstas将日志发送给ES、通过自定义索引来标识logstas的数据,logstas配置中自定义索引是:logstash-%{+YYYY.MM.dd}
:
curl -k -u elastic:Elastic@2025 'https://localhost:9200/_cat/indices?v'
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size dataset.size
green open .internal.alerts-transform.health.alerts-default-000001 FTKD_0GaSgmpMmCMJcpjXg 1 0 0 0 249b 249b 249b
green open .internal.alerts-observability.logs.alerts-default-000001 GrQWRl2TReizdoK2Uf09NA 1 0 0 0 249b 249b 249b
green open .internal.alerts-observability.uptime.alerts-default-000001 hJGBwPAbRVyEijaIqU-W1g 1 0 0 0 249b 249b 249b
green open .internal.alerts-ml.anomaly-detection.alerts-default-000001 dh4f_6QOTRuxVSkRB1qFpQ 1 0 0 0 249b 249b 249b
green open .internal.alerts-observability.slo.alerts-default-000001 jQ_PUE9EQxae5G3TYUB5UQ 1 0 0 0 249b 249b 249b
green open .internal.alerts-default.alerts-default-000001 6d6FRvfKTB6alMgLRaVmZQ 1 0 0 0 249b 249b 249b
green open .internal.alerts-streams.alerts-default-000001 QMyl1EQgTGGmxyOTOmu3HA 1 0 0 0 249b 249b 249b
green open .internal.alerts-observability.apm.alerts-default-000001 caD3ptu9TFiS2l0I45RhuQ 1 0 0 0 249b 249b 249b
green open .internal.alerts-security.attack.discovery.alerts-default-000001 EaiClRuVRbqmyRn6LIjL2g 1 0 0 0 249b 249b 249b
green open .internal.alerts-observability.metrics.alerts-default-000001 yclJp6g3ROCYnZ5-iTCB2w 1 0 0 0 249b 249b 249b
yellow open logstash-2025.10.22 TKFDOPMyRhWH8cyIVyddmw 1 1 2263 0 954.3kb 954.3kb 954.3kb
green open .internal.alerts-ml.anomaly-detection-health.alerts-default-000001 cZC5naKkRHOGz9uH0be1fA 1 0 0 0 249b 249b 249b
green open .internal.alerts-observability.threshold.alerts-default-000001 AClALAx6QDy699lEo0PZsQ 1 0 0 0 249b 249b 249b
green open .internal.alerts-security.alerts-default-000001 p-p8-JIVQ4y35_n8-ZEchg 1 0 0 0 249b 249b 249b
green open .internal.alerts-dataset.quality.alerts-default-000001 k6OS2AB4R3Wes0wahWrFPQ 1 0 0 0 249b 249b 249b
green open .internal.alerts-stack.alerts-default-000001 _L0ihtwNRy6RlkZS_v-npg 1 0 0 0 249b 249b 249b
.internal
开头的是ES 集群内部用于存储自身运行元数据、监控数据或系统配置的 “系统索引”
logstash-2025.10.22
:logstash已经将数据发给了ES
查看索引中的数据:
curl -u elastic:Elastic@2025 -k "https://localhost:9200/logstash-2025.10.22/_search?size=20&pretty"
六、配置视图查看日志
登录kibana。
Management --> 数据视图 --> 创建视图 --> 索引模式选择:logstash-* --> 保存数据到视图
可以看到日志了。