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

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  # 并发发送日志的工作线程数(默认 12 表示用 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-* --> 保存数据到视图
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
可以看到日志了。

http://www.dtcms.com/a/516025.html

相关文章:

  • 黑马程序员C++提高编程_3.STL- 常用容器_list容器
  • 免费模板网站word医疗室内设计网站推荐
  • flutter实现web端实现效果
  • 网站建设与管理题目wordpress页面标题标签
  • 在线预览docx、ppt、excel、doc、pdf等文档解决方案
  • !process 命令详解
  • 渗透测试(4):SQL注入示例
  • 三明做网站全球速卖通规则
  • python3编程基础
  • 解决时序违例(四)
  • 容器化安装新玩法:轻量高效一键部署
  • JavaScript函数基础
  • 实木餐桌椅移动网站建设网站建设定制开发
  • 邯郸网站设计价格特色产品推广方案
  • vscode安装、部署和小技巧 记录
  • 简单常见的勒索病毒加密
  • docker基本知识
  • 什么网站服务器好wordpress如何添加目录菜单
  • 12、【Ubuntu】【VSCode】VSCode 断联问题分析:getent 命令(二)
  • RHCSA作业2
  • 如何才能提升视频的「听觉质感」
  • 江西省赣州电子商务网站怎么做seo
  • 视频多的网站建设科技设计公司网站模板下载
  • 1.北京三维天地公司-实施实习生
  • c#笔记之事件
  • [RabbitMQ] 最新版本深度解析:4.0+ 新特性、性能飞跃与生产实践(2025 年更新)
  • 2026 AI可见性:构建未来-proof策略的顶级工具
  • 使用子进程实现 C++ 与 Python 交互式控制台
  • 网站建设登录界面代码上海app开发费用
  • 复习下线性代数,使用向量平移拼接两段线