1. 为什么选择独立部署 Elastic Agent 8.0
在大多数场景下,使用Fleet管理的Elastic Agent确实是最佳选择,它能自动处理代理升级、配置分发等繁琐工作。但真实生产环境中,我们总会遇到一些特殊需求:比如严格的内网隔离环境、需要深度定制采集逻辑、或者对第三方服务调用有严格限制的场景。这时候独立部署模式就成了刚需。
我去年负责过一个金融行业的项目,他们的安全合规要求禁止任何形式的中心化管理工具接入生产环境。当时就是靠着独立部署方案,成功实现了日志和指标的采集。这种模式最大的特点是完全自主可控,所有配置都保存在本地,不依赖任何外部管理服务。
独立部署适合以下三类典型场景:
- 无外网环境:比如军工、金融等隔离网络,根本无法连接Fleet服务器
- 定制化需求:需要修改默认采集逻辑,比如添加自定义字段解析规则
- 资源受限环境:老旧设备跑不动完整的Fleet管理组件
但要注意,选择独立部署就意味着你要自己处理以下问题:
- 手动管理所有Agent的版本升级
- 每个节点的配置都需要单独维护
- 故障排查完全靠自己
2. 准备部署环境
2.1 硬件与软件要求
根据官方文档和我的实测经验,Elastic Agent 8.0对系统资源的要求比7.x版本略有提升。这里给出一个生产环境推荐配置:
| 组件 | 最低要求 | 推荐配置 |
|---|---|---|
| CPU | 2核 | 4核 |
| 内存 | 2GB | 4GB |
| 磁盘空间 | 500MB | 1GB |
| 操作系统 | Linux内核3.10+ | Linux内核4.14+ |
特别提醒:如果你要采集的是高频日志(比如每秒超过1000条的Nginx访问日志),建议把内存调整到8GB以上。我在一个电商项目中就遇到过因为内存不足导致日志丢失的情况。
2.2 下载安装包
官方提供了多种格式的安装包,我的建议是:
- Linux服务器优先选择tar.gz格式,方便后续升级
- Windows环境用zip包
- 如果必须用deb/rpm,记得修改systemd配置增加内存限制
下载命令示例(国内用户建议加上代理参数):
# Linux curl -L -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-8.0.1-linux-x86_64.tar.gz # macOS curl -L -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-8.0.1-darwin-x86_64.tar.gz # Windows wget https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-8.0.1-windows-x86_64.zip -OutFile elastic-agent-8.0.1-windows-x86_64.zip解压后目录结构是这样的:
elastic-agent-8.0.1-linux-x86_64/ ├── data/ # 运行时数据 ├── elastic-agent # 主程序 ├── elastic-agent.yml # 主配置文件 ├── fleet.yml # Fleet相关配置 └── README.md3. 配置数据采集
3.1 生成初始配置
新手最容易犯的错误就是直接手动编辑elastic-agent.yml。正确做法是先用Kibana生成基础配置:
- 登录Kibana进入Management > Fleet
- 创建新策略,命名为"standalone-policy"
- 添加需要的集成(比如Nginx、System等)
- 点击"Download policy"获取配置文件
这样生成的配置已经包含了:
- 正确的输出设置(Elasticsearch地址、证书等)
- 预配置的集成参数
- 必要的权限声明
3.2 自定义日志采集
以Nginx日志为例,默认配置可能不满足你的需求。需要修改如下部分:
inputs: - type: logfile id: nginx-access streams: - paths: - /var/log/nginx/access.log processors: - add_fields: fields: log_type: nginx_access - dissect: tokenizer: "%{clientip} %{ident} %{auth} [%{timestamp}] \"%{verb} %{request} HTTP/%{httpversion}\" %{status} %{size} \"%{referrer}\" \"%{agent}\"" field: "message" target_prefix: ""几个实用技巧:
- 使用
dissect替代grok提升性能 - 添加
log_type字段方便后续筛选 - 对于多行日志(如Java堆栈),要配置
multiline规则
3.3 安全认证配置
强烈建议使用API Key而不是用户名密码。创建步骤:
- 在Kibana执行:
POST /_security/api_key { "name": "elastic-agent-key", "role_descriptors": { "elastic-agent": { "cluster": ["monitor"], "indices": [ { "names": ["logs-*","metrics-*"], "privileges": ["auto_configure","create_doc"] } ] } } }- 将返回的encoded值填入配置:
outputs: default: type: elasticsearch hosts: ["https://es-node:9200"] api_key: "VnVhQ2ZHY0JD...dEpGVjo1NlJZQQ=="4. 服务化运行与管理
4.1 安装为系统服务
不同系统的服务化命令:
# Linux/macOS(tar包) sudo ./elastic-agent install # DEB sudo systemctl enable elastic-agent sudo systemctl start elastic-agent # Windows .\elastic-agent.exe install常见问题处理:
- 如果遇到证书错误,添加
--insecure参数 - 内存不足时修改service文件中的
LimitMEMLOCK=infinity - 日志输出到
/var/log/elastic-agent/(Linux)
4.2 日常维护命令
检查服务状态:
sudo elastic-agent status查看详细日志:
journalctl -u elastic-agent -f # systemd系统升级步骤:
- 下载新版本包
- 停止服务
- 替换二进制文件
- 对比合并配置变更
- 重启服务
5. 实战问题排查
5.1 数据未入库排查
按照这个顺序检查:
- 确认Agent服务状态正常
- 检查
/var/log/elastic-agent/下的日志 - 测试Elasticsearch连通性:
curl -k --api-key "API_KEY" https://es-node:9200/_cluster/health- 确认索引模板已创建:
curl -k --api-key "API_KEY" https://es-node:9200/_index_template/logs-nginx*5.2 性能调优建议
遇到高负载时调整这些参数:
agent: logging: level: warning # 降低日志级别 queue: mem: events: 4096 # 增大内存队列 flush: timeout: 5s min_events: 512对于Windows系统,还需要修改注册表:
reg add HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management /v LockPagesInMemory /t REG_DWORD /d 16. 进阶配置技巧
6.1 多租户隔离方案
在大规模部署时,可以通过标签实现租户隔离:
inputs: - type: logfile tags: ["tenant:A"] streams: - paths: ["/var/log/tenantA/*.log"] - type: logfile tags: ["tenant:B"] streams: - paths: ["/var/log/tenantB/*.log"]然后在Kibana中基于标签创建不同视图。我曾经用这个方案为一家SaaS公司实现了200+客户的日志隔离。
6.2 自定义集成开发
当官方集成不满足需求时,可以自己开发:
- 创建集成目录结构:
my-integration/ ├── manifest.yml ├── CHANGELOG.md └── agent/ └── config.yml- 编写采集逻辑(参考Filebeat模块)
- 打包为zip上传到Kibana
注意要定期检查集成包的兼容性,特别是在升级Elastic Stack时。