output 到 ES 是什么
Logstash 的 output 阶段决定每个事件写到哪去,写入 Elasticsearch 是最常见的一种:hosts 指定集群地址,index 或 data_stream 决定落点,认证信息与批量参数决定能不能写、写得快不快。这段配置是采集链路的最后一环,前面 filter 解析得再干净,这里参数写错或权限不足,日志同样进不了库,而且 Logstash 只会在日志里反复重试报错。
基本信息
| 适用平台 | Logstash 7.x / 8.x,插件 logstash-output-elasticsearch |
|---|---|
| 服务端口 | Elasticsearch 默认 9200(HTTPS 场景同端口) |
| 认证要求 | 写入账号需目标索引或别名的 create_doc 等权限 |
| 关键参数 | hosts、index/data_stream、user、password、manage_template |
典型使用场景
- 日志集中入库:把多台主机的应用日志统一写入日志集群
- 按天分索引:index 用日期表达式生成 applogs-2026.10.12 这类索引名
- 配合 ILM 写入:用 data_stream 或写别名接收,由生命周期策略滚动索引
- 补采历史数据:临时任务把归档日志批量导入,注意与实时索引区分
- 多集群分流:按环境或业务写入不同集群,避免测试数据混入生产
输出配置
输出配置
output {
elasticsearch {
hosts => ["https://es-node1:9200", "https://es-node2:9200"] # 多节点做故障切换
user => "logstash_writer"
password => "${LOGSTASH_ES_PASSWORD}" # 从环境变量或密钥文件注入
index => "applogs-%{+YYYY.MM.dd}" # 按天落索引
manage_template => false # 模板由平台侧统一管理
ssl_enabled => true
ssl_certificate_authorities => ["/etc/logstash/certs/ca.crt"]
}
}关键参数读法
| 参数 | 作用 | 写错的后果 |
|---|---|---|
| hosts | 目标集群地址列表 | 地址或端口错误时持续重试并积压队列 |
| index | 目标索引名或表达式 | 动态字段过多会撑出大量小索引 |
| user / password | 写入认证信息 | 权限不足时整批写入被拒 |
| manage_template | 是否由 Logstash 管理模板 | 多写入方各自建模板会互相覆盖字段类型 |
| data_stream | 写入数据流的开关 | 与 index 同时配置时行为不符合预期 |
写入账号按最小权限授权:只要目标索引或别名的写入与自动创建相关权限,不要直接给超级用户;索引名受通配限制时用索引模式授权。
按天分索引会让索引数量随时间线性增长,配合索引生命周期策略(ILM)滚动与删除;否则单是集群状态管理开销就会拖慢写入。