核心是打通“设备→Syslog服务器→Elasticsearch→Kibana”链路,关键在于每步的数据格式、传输协议和索引映射对齐:发送端结构化JSON日志,中转用Filebeat/Logstash而非rsyslog直连ES,ES中预设mapping确保timestamp为date、关键字段为keyword,并用Index Pattern在Kibana关联语义。

用 Syslog 把日志送进 Elasticsearch,核心是打通“设备产生日志 → Syslog 服务器收集 → Elasticsearch 存储与索引 → Kibana 查询分析”这条链路。关键不在复杂配置,而在每一步的数据格式、传输协议和索引映射是否对得上。
确保 Syslog 发送方输出结构化字段
原始 Syslog 消息多为纯文本,Elasticsearch 全文搜索效果差,还难做聚合分析。建议在发送端就加入关键字段(如 level、service、host、timestamp),或用 rsyslog 的 template 或 syslog-ng 的 template 功能格式化为 JSON。
- rsyslog 示例(/etc/rsyslog.d/99-elk.conf):
template(name="json-template" type="list") {
property(name="timestamp" dateFormat="rfc3339")
constant(value=", \"host\":\"") property(name="hostname") constant(value="\"")
constant(value=", \"level\":\"") property(name="syslogseverity-text") constant(value="\"")
constant(value=", \"message\":\"") property(name="msg" format="json") constant(value="\"}")
}
*.* @your-es-logstash-or-filebeat-host:514;json-template - 如果无法修改发送端,可在接收端(如 Logstash 或 Filebeat)用 grok 过滤器解析传统 Syslog 格式,但维护成本更高。
选择轻量、可控的日志中转方式
Syslog 协议本身不带重试、加密、队列等能力,直接往 Elasticsearch 写入风险高。推荐用 Filebeat 或 Logstash 做中间层,而非让 rsyslog 直连 ES。
- Filebeat 更轻量:启用 syslog input,监听 UDP/TCP 514 端口,自动解析 RFC3164/RFC5424 格式,并支持 TLS 加密、背压控制和失败重发。
- Logstash 更灵活:适合需复杂字段提取、条件路由或与其他数据源合并的场景;但资源开销大,部署前评估吞吐量。
- 避免用 rsyslog + omelasticsearch 插件直写 ES:插件稳定性弱,无内置缓冲,ES 不可用时日志易丢失。
在 Elasticsearch 中合理建模日志索引
默认动态映射可能把 IP 地址识别成 text,把时间戳识别成 keyword,导致无法范围查询或排序。应在索引创建时定义明确的 mapping。
- 提前创建 index template(例如匹配 syslog-*):
- timestamp 字段设为 date 类型,格式指定为 strict_date_optional_time||epoch_millis
- client_ip、service_name 等设为 keyword(用于聚合、精确匹配)
- message、details 等保留 text 类型,开启 standard 分词器 - 用 Index Pattern 在 Kibana 中关联字段语义:标记 @timestamp 为时间字段,启用日志时间轴视图。
- 按天滚动索引(如 syslog-2024.06.15),配合 ILM 策略自动删除旧数据或转入冷节点。
验证与调优要点
上线后别只看“有没有数据”,重点检查字段可查性、延迟和稳定性。
- 用 Kibana Dev Tools 查一条日志:
GET /syslog-*/_search?q=level:%22ERROR%22&size=1
确认 level 能精确匹配,timestamp 可参与 range 查询。 - 监控 Filebeat/Logstash 的 publish queue full 和 ES 的 bulk rejected 指标——说明写入速度超过 ES 承载能力,需调大 bulk size、增加 worker 数或优化 ES 集群配置。
- Syslog UDP 传输不可靠,关键系统建议改用 TCP + TLS;若必须用 UDP,请在 Filebeat 中启用 ignore_older 防止积压日志干扰实时性。

















