手把手elasticsearch学习之Elastic Agent采集数据
Elastic Agent 是运行在数据源终端(服务器、容器、终端设备等)上的轻量级客户端,通过「Policy(策略)」驱动,实现数据的采集、预处理、加密传输,最终将数据发送至 Elasticsearch(或 Logstash、Kafka 等中间件),同时支持接收来自 Fleet(集中管理组件)的配置更新、版本升级、状态监控等指令,实现大规模 Agent 集群的轻量化运维。
Elastic Agent 是 Elastic Stack 9.3.0 版本中核心的数据采集组件,定位为「轻量级、统一化、可扩展」的全场景数据采集器,用于替代传统的 Beats 系列(Filebeat、Metricbeat 等)工具,实现单一 Agent 采集日志、指标、链路追踪、安全事件等多种数据类型,同时支持集中化管理与灵活扩展,完美适配本地化部署(堆叠/无服务器)、独立网络等多种场景,是 ES 9.3.0 本地化部署中数据导入架构的首选采集入口。
一、Elastic Agent 核心详述(ES 9.3.0 版本)
1.1 核心定义
Elastic Agent 是运行在数据源终端(服务器、容器、终端设备等)上的轻量级客户端,通过「Policy(策略)」驱动,实现数据的采集、预处理、加密传输,最终将数据发送至 Elasticsearch(或 Logstash、Kafka 等中间件),同时支持接收来自 Fleet(集中管理组件)的配置更新、版本升级、状态监控等指令,实现大规模 Agent 集群的轻量化运维。
ES 9.3.0 版本的 Elastic Agent 重点优化了本地化部署适配性,解决了旧版本中独立模式配置繁琐、堆叠部署兼容性差、空气间隙环境离线更新困难等问题,同时增强了与 ES 9.3.0 集群的通信效率、数据预处理性能,以及与 Logstash、Kafka 等组件的联动稳定性。
1.2 核心特性(ES 9.3.0 版本专属优化)
-
单一Agent 多数据采集:无需在终端部署多个采集工具(如 Filebeat 采集日志、Metricbeat 采集指标),Elastic Agent 可通过加载不同的「集成包」,同时采集日志、系统指标、应用指标、链路追踪数据、安全事件等,大幅降低终端部署与运维成本。
-
双重管理模式适配:支持「Fleet 管理模式」(大规模部署首选)和「独立模式」(小规模/边缘节点部署),两种模式可平滑切换,适配本地化不同规模的部署需求;ES 9.3.0 优化了 Fleet 与 Agent 的通信稳定性,减少内网环境下的连接中断问题。
-
丰富集成包开箱即用:官方提供数百种集成包(如 Nginx、MySQL、Linux 系统、K8s、Docker 等),适配主流数据源,无需手动编写采集配置,导入集成包即可完成采集策略配置,ES 9.3.0 新增多种工业设备、专有软件的集成包,进一步扩大适配范围。
-
本地化部署深度适配:支持离线安装、离线升级(适配空气间隙环境),可通过配置文件指定本地化镜像源、代理地址,解决内网/隔离环境下的部署难题;同时支持与本地化 ES 集群、Logstash 集群、Kafka 集群的无缝联动,支持 TLS 内网加密传输、API Key 本地化认证。
-
轻量级低资源占用:运行内存通常在 100-300MB 之间,CPU 占用率低于 5%,支持资源配额限制,适配边缘节点、轻量服务器等资源受限的本地化场景;ES 9.3.0 优化了 Agent 的资源调度逻辑,减少空闲状态下的资源消耗。
-
高可用与故障自愈:支持数据本地缓存(避免网络波动导致的数据丢失),断网后自动缓存数据,网络恢复后自动续传;支持自动重启、异常状态上报,可在 Kibana 中实时监控 Agent 运行状态,ES 9.3.0 新增 Agent 故障自动重连、配置自动回滚功能。
-
版本专属优化:ES 9.3.0 中 Elastic Agent 默认启用 OTel 运行时处理系统指标,提升指标采集效率;支持多 Agent 密钥合并加载,简化大规模部署的密钥管理;优化了诊断信息收集功能,可快速定位本地化部署中的采集故障。
1.3 工作原理
Elastic Agent 的工作流程分为「配置驱动→数据采集→预处理→传输→状态反馈」5个环节,核心依赖「Policy(策略)」和「集成包」,具体流程如下(贴合 ES 9.3.0 本地化部署场景):
-
策略下发:管理员在 Kibana(本地化部署)中创建 Agent Policy,选择需要的集成包(如 Linux 系统集成),配置采集规则(如日志路径、指标采集频率)、输出目标(如本地化 ES 集群地址)、安全配置(如 TLS 加密、API Key),通过 Fleet 发送至所有关联的 Elastic Agent(Fleet 管理模式);独立模式下,直接通过本地配置文件加载策略。
-
数据采集:Elastic Agent 加载策略后,通过集成包对应的采集模块,从终端数据源采集数据(如读取 /var/log/messages 系统日志、通过命令行采集 CPU/内存指标),ES 9.3.0 中新增采集任务优先级设置,可保障核心数据的采集及时性。
-
预处理:采集数据后,Agent 按照策略中的配置,完成数据清洗、字段提取、格式转换、脱敏等预处理操作(如提取日志中的 IP 地址、时间戳,过滤无效日志),无需依赖 Logstash 即可完成基础预处理,减少传输压力。
-
数据传输:预处理后的结构化数据,通过 HTTPS/TCP 协议,加密传输至目标组件(本地化 ES 集群、Logstash、Kafka 等);支持批量传输、断点续传,网络波动时自动缓存数据(默认缓存 72 小时,可自定义),ES 9.3.0 优化了传输链路的容错性,减少数据传输丢失。
-
状态反馈:Elastic Agent 实时向 Fleet(或本地日志)上报自身运行状态(如采集成功率、传输状态、资源占用),管理员可在 Kibana 中实时查看所有 Agent 的状态,异常时(如采集失败、传输中断)自动报警,ES 9.3.0 支持自定义报警规则,适配本地化运维需求。
1.4 核心组件
-
Elastic Agent 客户端:运行在终端的核心采集程序,负责数据采集、预处理、传输、状态上报,是部署在每个数据源终端的核心组件,支持 Linux、Windows、MacOS、容器等多种运行环境,ES 9.3.0 支持容器化部署时的宿主机数据挂载采集。
-
Fleet Server:集中管理 Agent 的核心组件,部署在本地化网络中,负责下发策略、接收 Agent 状态、管理 Agent 版本升级、分发集成包,支持水平扩展,可管理数千台 Agent 终端;ES 9.3.0 中 Fleet Server 支持离线部署,无需连接 Elastic Cloud,完美适配本地化隔离环境。
-
Policy(策略):Agent 运行的核心配置文件,包含采集规则、集成包配置、输出目标、安全配置、资源限制等,可通过 Kibana 可视化配置(Fleet 模式)或手动编写 YAML 文件(独立模式),ES 9.3.0 支持策略版本管理,可实现配置的回滚与对比。
-
集成包(Integrations):预定义的采集模板,包含数据源的采集规则、字段映射、可视化仪表盘,官方提供数百种集成包,可直接导入使用,也可自定义集成包适配专有数据源;ES 9.3.0 支持集成包的离线导入,适配空气间隙环境。
-
Kibana 管理界面:Elastic Agent 的可视化管理入口,用于创建/编辑策略、管理 Agent 终端、查看采集状态、配置报警、导入集成包,本地化部署的 Kibana 9.3.0 新增 Agent 批量操作功能,简化大规模运维。
二、Elastic Agent 实操例子(ES 9.3.0 本地化部署,详实可落地)
以下所有例子均基于「ES 9.3.0 本地化堆叠部署」场景,涵盖「独立模式」「Fleet 管理模式」,覆盖系统日志、应用日志、数据库指标、自定义数据4类常见采集场景,每个例子包含「准备工作→实操步骤→验证方法→注意事项」,可直接照搬落地。
实例1:独立模式(小规模部署)- 采集 Linux 系统日志(CentOS 8)并直连 ES 9.3.0
1. 准备工作
-
终端环境:CentOS 8 服务器(2核4G,内网可访问本地化 ES 9.3.0 集群),关闭防火墙(或开放 ES 集群 9200 端口、Agent 本地端口)。
-
软件准备:下载 ES 9.3.0 版本 Elastic Agent 离线安装包(适配 Linux x86_64),下载地址:https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-9.3.0-linux-x86_64.tar.gz(可提前下载至本地,上传至 CentOS 服务器)。
-
ES 环境:本地化 ES 9.3.0 集群已启动,创建名为「linux-system-logs-9.3.0」的索引(可手动创建,或让 Agent 自动创建),开启 API Key 认证(可选,增强安全性)。
-
权限准备:CentOS 服务器创建 elastic-agent 用户,授予 /var/log 目录读取权限(避免采集日志时权限不足)。
2. 步骤
- 安装 Elastic Agent(离线部署)
`# 1. 上传安装包至 /opt 目录,解压
cd /opt
tar -xzvf elastic-agent-9.3.0-linux-x86_64.tar.gz
cd elastic-agent-9.3.0-linux-x86_64
2. 创建独立模式配置文件(elastic-agent.yml),自定义配置输出目标与采集规则
cat > elastic-agent.yml << EOF
agent:
mode: standalone # 启用独立模式,不依赖 Fleet
monitoring:
enabled: true
logs: true
metrics: true
output.elasticsearch:
hosts: [“http://192.168.1.100:9200”] # 本地化 ES 9.3.0 集群地址(内网IP)
username: “elastic” # ES 集群用户名
password: “Elastic@123” # ES 集群密码(替换为自己的密码)
若启用 API Key 认证,替换 username/password 为以下配置
api_key: “your-es-api-key”
index: “linux-system-logs-9.3.0” # 数据写入的 ES 索引
inputs:
- type: filestream # 日志采集类型(ES 9.3.0 推荐使用 filestream 替代旧版 log)
id: linux-system-logs
name: linux-system-logs
paths:- /var/log/messages # 采集系统日志路径
- /var/log/secure # 采集安全日志路径
processors: - add_fields: # 新增自定义字段,便于后续筛选
fields:
host_ip: “192.168.1.101” # 终端内网IP
host_name: “centos-8-server” # 终端主机名
target: “”
EOF
3. 安装并启动 Elastic Agent(以服务方式运行)
sudo ./elastic-agent install --path.config /opt/elastic-agent-9.3.0-linux-x86_64/elastic-agent.yml
4. 查看 Agent 运行状态,确认启动成功
sudo systemctl status elastic-agent
若启动失败,查看日志排查:sudo journalctl -u elastic-agent -f
`
- 配置 ES 索引模板(可选,确保数据结构化存储)
# 1. 登录 ES 集群节点,创建索引模板(适配系统日志字段) curl -X PUT "http://192.168.1.100:9200/_index_template/linux-system-logs-template" -H "Content-Type: application/json" -u elastic:Elastic@123 -d '{ "index_patterns": ["linux-system-logs-9.3.0*"], # 匹配索引名 "template": { "settings": { "number_of_shards": 1, "number_of_replicas": 0 }, "mappings": { "properties": { "message": {"type": "text"}, # 日志内容 "host_ip": {"type": "ip"}, # 终端IP "host_name": {"type": "keyword"}, # 终端主机名 "@timestamp": {"type": "date"}, # 采集时间戳 "log.file.path": {"type": "keyword"} # 日志文件路径 } } } }'
3. 验证方法
-
查看 Agent 采集状态:在 CentOS 终端执行
sudo elastic-agent status,若显示「Running」且「Inputs」状态为「Healthy」,说明采集正常。 -
查看 ES 数据写入:登录 ES 集群,执行以下命令,若返回数据条数大于0,说明数据已成功写入 ES。
`curl -X GET “http://192.168.1.100:9200/linux-system-logs-9.3.0/_count” -u elastic:Elastic@123
查看具体日志数据
curl -X GET “http://192.168.1.100:9200/linux-system-logs-9.3.0/_search?q=*” -u elastic:Elastic@123 -H “Content-Type: application/json”
`
- Kibana 可视化验证:登录本地化 Kibana 9.3.0,进入「Discover」页面,创建索引模式「linux-system-logs-9.3.0*」,即可查看采集到的系统日志,筛选、搜索正常。
4. 注意事项
-
ES 9.3.0 中,Elastic Agent 推荐使用「filestream」类型采集日志,替代旧版的「log」类型,支持断点续读、日志轮转适配,避免日志丢失。
-
独立模式下,若修改采集策略,需修改 elastic-agent.yml 配置文件,重启 Agent 生效:
sudo systemctl restart elastic-agent。 -
避免权限问题:确保 elastic-agent 用户拥有日志目录的读取权限,若采集失败,可临时使用 root 用户启动 Agent 排查(生产环境不推荐)。
-
ES 9.3.0 已知问题:若 Agent 日志级别设置为「warn」,会导致 Agent 异常,需修改配置文件中日志级别为「info」或「error」。
实例2:Fleet 管理模式(大规模部署)- 采集 Nginx 访问日志(Docker 部署)并转发至 Logstash
1. 准备工作
-
环境准备:本地化 ES 9.3.0 集群、Kibana 9.3.0、Logstash 9.3.0 已部署完成,且内网互通;Fleet Server 已部署(集成在 Kibana 9.3.0 中,无需单独部署,仅需启用)。
-
终端环境:Ubuntu 22.04 服务器(Docker 已安装),运行 Nginx 容器(挂载日志目录至宿主机 /var/log/nginx),内网可访问 Fleet Server(Kibana 地址)、Logstash 集群。
-
软件准备:Elastic Agent 9.3.0 离线安装包(Ubuntu x86_64),Nginx 集成包(可在 Kibana 中离线导入)。
-
权限准备:Ubuntu 服务器授予 elastic-agent 用户 Docker 访问权限、宿主机 /var/log/nginx 目录读取权限。
2. 实操步骤
- 启用 Fleet Server(Kibana 中操作)
`# 1. 登录本地化 Kibana 9.3.0(地址:http://192.168.1.102:5601),用户名/密码:elastic/Elastic@123
2. 进入「Management」→「Fleet」→「Fleet Server」,点击「Enable Fleet Server」
3. 配置 Fleet Server 地址(内网IP:http://192.168.1.102:8220),启用 TLS 加密(可选,内网可关闭)
4. 生成 Enrollment Token(用于 Agent 注册到 Fleet),保存 Token(后续使用)
`
- 创建 Agent Policy(Kibana 中操作)
`# 1. 进入「Management」→「Fleet」→「Agent policies」,点击「Create agent policy」
2. 名称:nginx-access-logs-policy,描述:采集 Nginx 访问日志并转发至 Logstash
3. 添加集成包:搜索「Nginx」,导入官方 Nginx 集成包(ES 9.3.0 兼容版本)
4. 配置 Nginx 集成:
- 采集类型:Logs(访问日志+错误日志)
- 访问日志路径:/var/log/nginx/access.log(宿主机路径,对应 Docker 挂载路径)
- 错误日志路径:/var/log/nginx/error.log
- Nginx 日志格式:默认(或自定义,需与 Nginx 配置一致)
5. 配置输出目标:选择「Logstash」,添加 Logstash 集群地址:http://192.168.1.103:5044(内网IP)
6. 配置预处理:提取日志中的 IP、请求路径、状态码等字段(集成包默认已配置,可自定义)
7. 保存 Policy,关联之前生成的 Enrollment Token
`
- 安装 Elastic Agent 并注册到 Fleet(Ubuntu 终端操作)
`# 1. 上传 Elastic Agent 9.3.0 安装包至 /opt 目录,解压
cd /opt
tar -xzvf elastic-agent-9.3.0-linux-x86_64.tar.gz
cd elastic-agent-9.3.0-linux-x86_64
2. 注册 Agent 到 Fleet(使用之前保存的 Enrollment Token)
sudo ./elastic-agent enroll --url=http://192.168.1.102:8220 --enrollment-token=your-enrollment-token
3. 安装并启动 Agent(以服务方式运行)
sudo ./elastic-agent install
4. 查看 Agent 状态,确认注册成功且 Policy 加载正常
sudo elastic-agent status
查看 Agent 与 Fleet 的连接状态:sudo elastic-agent status | grep Fleet
`
- 配置 Nginx 容器(确保日志挂载正常)
`# 1. 启动 Nginx 容器,挂载日志目录至宿主机
docker run -d --name nginx-test -p 80:80 -v /var/log/nginx:/var/log/nginx nginx:latest
2. 验证 Nginx 日志生成:访问 Nginx(http://192.168.1.104),查看宿主机日志
cat /var/log/nginx/access.log
确认有访问日志生成,格式与集成包配置一致
`
- 配置 Logstash(接收 Agent 数据并转发至 ES)
`# 1. 登录 Logstash 9.3.0 节点,修改配置文件 /etc/logstash/conf.d/nginx-agent.conf
cat > /etc/logstash/conf.d/nginx-agent.conf << EOF
input {
beats {
port => 5044 # 监听 5044 端口,接收 Elastic Agent 数据(与 Agent Policy 中配置一致)
}
}
filter {
预处理 Nginx 日志(提取字段,与 Agent 预处理互补)
grok {
match => { “message” => “%{IPORHOST:client_ip} %{USER:ident} %{USER:auth} [%{HTTPDATE:timestamp}] “%{WORD:method} %{URIPATHPARAM:request} HTTP/%{NUMBER:http_version}” %{NUMBER:status:int} %{NUMBER:body_bytes_sent:int} “%{URI:referrer}” “%{DATA:user_agent}”” }
}
date {
match => [ “timestamp”, “dd/MMM/yyyy:HH:mm:ss Z” ]
target => “@timestamp”
}
}
output {
elasticsearch {
hosts => [“http://192.168.1.100:9200”] # 本地化 ES 9.3.0 集群地址
index => “nginx-access-logs-9.3.0” # 写入 ES 的索引
user => “elastic”
password => “Elastic@123”
}
stdout { codec => rubydebug } # 可选,控制台输出,用于调试
}
EOF
2. 重启 Logstash 服务,使配置生效
sudo systemctl restart logstash
查看 Logstash 状态,确认启动成功:sudo systemctl status logstash
`
3. 验证方法
-
Fleet 状态验证:登录 Kibana→Fleet→Agents,查看 Agent 状态为「Healthy」,Policy 为「nginx-access-logs-policy」,无异常报警。
-
Logstash 调试验证:查看 Logstash 日志,确认接收 Agent 数据正常,无报错。
`sudo journalctl -u logstash -f
若看到「rubydebug」输出的 Nginx 日志,说明 Logstash 接收正常
`
- ES 数据验证:执行以下命令,查看 ES 中是否有 Nginx 日志数据。
`curl -X GET “http://192.168.1.100:9200/nginx-access-logs-9.3.0/_count” -u elastic:Elastic@123
访问 Nginx 多次后,数据条数应持续增加
`
- Kibana 可视化验证:进入 Kibana→Discover,创建索引模式「nginx-access-logs-9.3.0*」,可查看、筛选 Nginx 访问日志的 client_ip、request、status 等字段;同时可使用 Nginx 集成包自带的仪表盘,查看访问量、状态码分布等可视化数据。
4. 注意事项
-
Fleet 管理模式下,修改采集策略无需重启 Agent,仅需在 Kibana 中编辑 Policy 并保存,Agent 会自动同步配置(默认每 30 秒同步一次,可自定义同步频率)。
-
Nginx 日志格式必须与 Agent 集成包配置一致,否则会导致字段提取失败,建议使用 Nginx 默认日志格式,或在集成包中自定义匹配规则。
-
Docker 部署的 Nginx,需确保日志目录挂载至宿主机,且 Agent 能访问宿主机的挂载目录,避免采集不到日志。
-
Logstash 与 Agent 的通信端口(5044)需开放,避免防火墙拦截;ES 9.3.0 中,Agent 与 Logstash 通信支持 TLS 加密,可在 Policy 中配置。
实例3:隔离网络- 采集 MySQL 指标并直连 ES 9.3.0
1. 准备工作
-
环境准备:完全隔离的内网环境(无外部网络访问),本地化 ES 9.3.0 集群、Kibana 9.3.0 已离线部署,MySQL 8.0 数据库(运行在隔离内网中)。
-
终端环境:CentOS 7 服务器(MySQL 所在节点),无公网访问权限,内网可访问 ES 集群。
-
软件准备:Elastic Agent 9.3.0 离线安装包、MySQL 集成包离线文件(提前从官方下载,上传至隔离内网)、Agent 离线升级包(可选)。
-
权限准备:MySQL 创建只读用户(用于 Agent 采集指标),CentOS 服务器授予 elastic-agent 用户 MySQL 客户端访问权限。
2. 实操步骤
- MySQL 配置(创建采集用户)
`# 1. 登录 MySQL 8.0 数据库
mysql -u root -pRoot@123456
2. 创建只读用户 elastic_agent,授权采集指标权限
CREATE USER ‘elastic_agent’@‘localhost’ IDENTIFIED BY ‘Agent@123’;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON . TO ‘elastic_agent’@‘localhost’;
FLUSH PRIVILEGES;
EXIT;
3. 验证用户权限:登录测试
mysql -u elastic_agent -pAgent@123 -e “SHOW GLOBAL STATUS;”
能正常返回状态信息,说明权限正常
`
- 离线导入 MySQL 集成包(Kibana 中操作)
`# 1. 登录隔离内网的 Kibana 9.3.0
2. 进入「Management」→「Fleet」→「Integrations」,点击「Import integration」
3. 上传提前下载的 MySQL 集成包离线文件(.zip 格式,适配 ES 9.3.0)
4. 确认集成包导入成功,查看集成包详情(包含指标采集模块)
`
- 安装 Elastic Agent(离线部署,独立模式)
`# 1. 将 Elastic Agent 9.3.0 离线安装包上传至 CentOS 7 服务器 /opt 目录,解压
cd /opt
tar -xzvf elastic-agent-9.3.0-linux-x86_64.tar.gz
cd elastic-agent-9.3.0-linux-x86_64
2. 创建独立模式配置文件(elastic-agent.yml),配置 MySQL 指标采集
cat > elastic-agent.yml << EOF
agent:
mode: standalone
monitoring:
enabled: true
logs: true
metrics: true
output.elasticsearch:
hosts: [“http://192.168.2.100:9200”] # 隔离内网 ES 9.3.0 集群地址
username: “elastic”
password: “Elastic@123”
index: “mysql-metrics-9.3.0” # 指标数据写入 ES 索引
inputs:
- type: mysql/metrics # MySQL 指标采集类型(集成包提供)
id: mysql-metrics
name: mysql-metrics
hosts: [“tcp(127.0.0.1:3306)/”] # MySQL 连接地址(本地节点)
username: “elastic_agent” # 之前创建的 MySQL 只读用户
password: “Agent@123”
metricsets: # 采集的指标类型- status # MySQL 全局状态指标(连接数、QPS、TPS 等)
- innodb # InnoDB 引擎指标(缓存命中率、锁等待等)
- schema # 数据库表结构指标(可选)
period: 10s # 采集频率(每 10 秒采集一次)
processors:
- add_fields:
fields:
mysql_host: “192.168.2.101” # MySQL 节点内网IP
mysql_port: 3306
target: “”
EOF
3. 离线安装并启动 Agent
sudo ./elastic-agent install --path.config /opt/elastic-agent-9.3.0-linux-x86_64/elastic-agent.yml
4. 查看 Agent 运行状态,确认采集正常
sudo systemctl status elastic-agent
`
- ES 索引模板配置(离线操作)
# 1. 登录 ES 集群节点(隔离内网),创建 MySQL 指标索引模板 curl -X PUT "http://192.168.2.100:9200/_index_template/mysql-metrics-template" -H "Content-Type: application/json" -u elastic:Elastic@123 -d '{ "index_patterns": ["mysql-metrics-9.3.0*"], "template": { "settings": { "number_of_shards": 1, "number_of_replicas": 0 }, "mappings": { "properties": { "mysql.status.connections.current": {"type": "integer"}, # 当前连接数 "mysql.status.questions": {"type": "integer"}, # QPS "mysql.innodb.buffer_pool.hit_ratio": {"type": "float"}, # InnoDB 缓存命中率 "mysql_host": {"type": "ip"}, "mysql_port": {"type": "integer"}, "@timestamp": {"type": "date"} } } } }'
3. 验证方法
-
Agent 状态验证:执行
sudo elastic-agent status,确保「mysql-metrics」输入状态为「Healthy」,无采集错误。 -
ES 指标验证:执行以下命令,查看 MySQL 指标数据是否写入 ES,且字段正确。
`curl -X GET “http://192.168.2.100:9200/mysql-metrics-9.3.0/_search?q=*” -u elastic:Elastic@123 -H “Content-Type: application/json”
查看返回结果,确认包含 connections.current、questions 等指标字段
`
- Kibana 可视化验证:登录 Kibana→Discover,创建索引模式「mysql-metrics-9.3.0*」,查看指标数据;进入「Dashboards」,导入 MySQL 集成包自带的仪表盘,可查看 QPS、连接数、缓存命中率等可视化图表,实时监控 MySQL 运行状态。
4. 注意事项
-
空气间隙环境中,所有软件(Agent、集成包、ES、Kibana)均需离线部署,禁止在线下载,集成包需提前下载适配 ES 9.3.0 的版本,避免版本不兼容。
-
MySQL 用户权限需严格控制,仅授予采集指标所需的最小权限(PROCESS、REPLICATION CLIENT、SELECT),避免权限过高导致安全风险。
-
采集频率可根据 MySQL 负载调整,负载较高时可延长至 30s/次,避免采集操作影响 MySQL 性能。
-
Agent 离线升级:需提前下载 Agent 9.3.0 升级包,上传至隔离内网,执行
sudo elastic-agent upgrade --file /opt/elastic-agent-upgrade-9.3.0.tar.gz完成升级,无需重启服务。
实例4:自定义采集 - 采集自定义业务接口日志(JSON 格式)并直连 ES 9.3.0
1. 准备工作
-
环境准备:本地化 ES 9.3.0 集群,业务服务器(CentOS 8),业务接口日志为 JSON 格式,存储路径为 /var/log/business/api.log。
-
日志格式:业务接口日志为标准 JSON,包含字段:requestId、interfaceName、requestTime、responseTime、status、clientIp、requestParams。
-
软件准备:Elastic Agent 9.3.0 离线安装包(CentOS x86_64)。
-
权限准备:授予 elastic-agent 用户 /var/log/business 目录读取权限。
2. 实操步骤
- 准备自定义业务日志(模拟日志生成)
`# 1. 在业务服务器上创建日志目录,生成模拟 JSON 日志
mkdir -p /var/log/business
cat > /var/log/business/api.log << EOF
{“requestId”:“req-20240501-001”,“interfaceName”:“/api/user/login”,“requestTime”:“2024-05-01 10:00:00”,“responseTime”:50,“status”:200,“clientIp”:“192.168.1.200”,“requestParams”:{“username”:“test”,“password”:“123456”}}
{“requestId”:“req-20240501-002”,“interfaceName”:“/api/user/info”,“requestTime”:“2024-05-01 10:01:00”,“responseTime”:30,“status”:200,“clientIp”:“192.168.1.201”,“requestParams”:{“userId”:“1001”}}
{“requestId”:“req-20240501-003”,“interfaceName”:“/api/order/create”,“requestTime”:“2024-05-01 10:02:00”,“responseTime”:120,“status”:500,“clientIp”:“192.168.1.202”,“requestParams”:{“orderNo”:“ORD20240501001”,“amount”:100}}
EOF
2. 配置日志轮转(可选,避免日志文件过大)
cat > /etc/logrotate.d/business-api << EOF
/var/log/business/api.log {
daily
rotate 7
compress
missingok
notifempty
}
EOF
`
- 安装 Elastic Agent 并配置自定义采集(独立模式)
`# 1. 上传 Agent 安装包至 /opt 目录,解压
cd /opt
tar -xzvf elastic-agent-9.3.0-linux-x86_64.tar.gz
cd elastic-agent-9.3.0-linux-x86_64
2. 创建配置文件(elastic-agent.yml),配置 JSON 日志采集
cat > elastic-agent.yml << EOF
agent:
mode: standalone
monitoring:
enabled: true
logs: true
metrics: true
output.elasticsearch:
hosts: [“http://192.168.1.100:9200”] # 本地化 ES 9.3.0 集群地址
username: “elastic”
password: “Elastic@123”
index: “business-api-logs-9.3.0” # 业务日志索引
inputs:
- type: filestream
id: business-api-logs
name: business-api-logs
paths:- /var/log/business/api.log # 自定义业务日志路径
parsers: - json: # 解析 JSON 格式日志,自动提取字段
keys_under_root: true # 将 JSON 字段提取到根节点
add_error_key: true # 解析失败时添加错误字段
target: “”
processors: - add_fields: # 新增业务标识字段
fields:
business: “user-center” # 业务模块名称
environment: “production” # 环境标识
target: “” - remove_field: # 删除无用字段(可选)
fields: [“requestParams.password”] # 脱敏,删除密码字段
EOF
- /var/log/business/api.log # 自定义业务日志路径
3. 安装并启动 Agent
sudo ./elastic-agent install --path.config /opt/elastic-agent-9.3.0-linux-x86_64/elastic-agent.yml
4. 查看 Agent 运行状态
sudo systemctl status elastic-agent
`
- ES 索引模板配置(适配 JSON 字段)
# 1. 登录 ES 集群,创建索引模板 curl -X PUT "http://192.168.1.100:9200/_index_template/business-api-template" -H "Content-Type: application/json" -u elastic:Elastic@123 -d '{ "index_patterns": ["business-api-logs-9.3.0*"], "template": { "settings": { "number_of_shards": 1, "number_of_replicas": 0 }, "mappings": { "properties": { "requestId": {"type": "keyword"}, # 请求ID,关键字类型(支持精确查询) "interfaceName": {"type": "keyword"}, # 接口名称 "requestTime": {"type": "date", "format": "yyyy-MM-dd HH:mm:ss"}, # 请求时间 "responseTime": {"type": "integer"}, # 响应时间(ms) "status": {"type": "integer"}, # 接口状态码 "clientIp": {"type": "ip"}, # 客户端IP "requestParams": {"type": "object"}, # 请求参数(JSON 对象) "business": {"type": "keyword"}, # 业务模块 "environment": {"type": "keyword"}, # 环境标识 "@timestamp": {"type": "date"} } } } }'
3. 验证方法
-
Agent 状态验证:执行
sudo elastic-agent status,确认「business-api-logs」输入状态为「Healthy」,无 JSON 解析错误。 -
ES 数据验证:执行以下命令,查看业务日志是否写入 ES,且字段提取正确、密码字段已脱敏。
`curl -X GET “http://192.168.1.100:9200/business-api-logs-9.3.0/_search?q=*” -u elastic:Elastic@123 -H “Content-Type: application/json”
查看返回结果,确认 requestParams.password 字段已删除,其他字段正常提取
`
- Kibana 验证:登录 Kibana→Discover,创建索引模式「business-api-logs-9.3.0*」,可按 interfaceName、status、clientIp 等字段筛选日志;可创建自定义仪表盘,查看各接口的调用量、响应时间、错误率等指标,用于业务监控与问题排查。
4. 注意事项
-
自定义 JSON 日志采集时,需确保日志格式规范,避免 JSON 语法错误,否则会导致解析失败,解析失败的日志会添加 error 字段,便于排查。
-
敏感字段脱敏:通过 processors 中的 remove_field 字段,删除密码、身份证等敏感信息,避免数据泄露,符合数据合规要求。
-
日志轮转:建议配置日志轮转,避免日志文件过大,Agent 的 filestream 类型支持日志轮转自动适配,无需额外配置。
-
若业务日志为非 JSON 格式(如自定义分隔符),可使用 grok 解析器,在 parsers 中配置 grok 匹配规则,提取字段。
三、Elastic Agent 部署核心注意事项(ES 9.3.0 本地化)
-
版本一致性:Elastic Agent 必须与 ES、Kibana、Logstash 保持 9.3.0 版本一致,否则会出现兼容性问题(如策略同步失败、数据传输异常、集成包无法加载)。
-
资源限制:根据终端资源情况,配置 Agent 的资源配额(内存、CPU),避免 Agent 占用过多资源,影响终端业务运行;ES 9.3.0 可通过 elastic-agent.yml 配置 resources 字段限制资源。
-
安全配置:本地化部署中,Agent 与 ES、Fleet、Logstash 的通信建议启用 TLS 加密,使用 API Key 或用户名密码认证,避免内网数据泄露;空气间隙环境需加强终端权限管控,禁止无关用户访问 Agent 配置文件与日志。
-
故障排查:Agent 采集/传输失败时,优先查看 Agent 日志(默认路径:/var/log/elastic-agent/),或执行
sudo elastic-agent diagnostics collect
更多推荐



所有评论(0)