Linux Syslog与ELK Stack集成实践指南
一 架构与端口规划
- 采集链路建议:Linux 主机使用 rsyslog/syslog-ng 发送日志 → Logstash Syslog 输入插件(UDP/TCP 514) 或 Beats/Filebeat 514 → Elasticsearch 存储 → Kibana 可视化。
- 端口与协议:
- Syslog 常用端口:514/UDP、514/TCP(生产建议优先 TCP 或配合 TLS)。
- Beats 常用端口:5044/TCP(Logstash 的 Beats 输入)。
- 索引命名:按日滚动,如 syslog-%{+YYYY.MM.dd},便于生命周期管理与检索。
二 快速落地步骤
- 步骤1 配置 Linux 主机发送 Syslog
- 使用 rsyslog 发送(示例为 UDP,生产建议 TCP/TLS):
- 编辑 /etc/rsyslog.conf 或 /etc/rsyslog.d/50-default.conf,添加:
- . @<logstash_ip>:514 # UDP
- . @@<logstash_ip>:514 # TCP
- 重启服务:sudo systemctl restart rsyslog
- 如需在 Logstash 所在主机接收远程 Syslog,可启用本地 rsyslog 监听(UDP/TCP 514),再转发至 Logstash。
- 步骤2 部署并配置 Logstash 接收 Syslog
- 示例(Syslog 输入插件,监听 514):
- input {
syslog { port => 514 type => “syslog” }
}
filter {
可按需添加 grok/date 等解析
}
output {
elasticsearch {
hosts => [“http://<es_host>:9200”]
index => “syslog-%{+YYYY.MM.dd}”
}
}
- 启动:sudo systemctl start logstash(或按环境使用命令行启动)。
- 步骤3 部署并配置 Elasticsearch 与 Kibana
- Elasticsearch:确保集群运行并可达(如单节点示例配置 discovery.type: single-node)。
- Kibana:配置 server.host: “0.0.0.0”,连接 Elasticsearch;访问 http://<kibana_host>:5601。
- 步骤4 在 Kibana 创建索引模式并验证
- 进入 Management → Stack Management → Index Patterns,创建 syslog-*,时间字段选 @timestamp。
- 在 Discover 查看日志;可用 logger “Test log message” 产生测试日志。
三 可选方案与对比
| 方案 |
采集路径 |
优点 |
注意点 |
| Logstash Syslog 输入插件 |
rsyslog → Logstash(:514) → ES |
原生解析、灵活过滤 |
需 root 或 CAP_NET_BIND_SERVICE 才能监听 514;建议启用 TLS |
| Beats/Filebeat → Logstash |
rsyslog → Filebeat(:514) → Logstash(:5044) → ES |
Beat 轻量、资源占用低、易扩展 |
需正确配置 Filebeat 输入与 Logstash 的 Beats 输入 |
| rsyslog 本地文件 → Filebeat |
rsyslog 写文件 → Filebeat 读取 → Logstash → ES |
避免直接占用 514,便于多路复用 |
需正确设置 rsyslog 文件权限与 Filebeat 路径/权限 |
- 若选择 Filebeat 方案,示例要点:
- Filebeat 输入(示例):
- filebeat.inputs:
- type: syslog
port: 514
protocol: udp
- Logstash 输入:
- input { beats { port => 5044 } }
四 解析与安全加固
- 日志解析建议
- 使用 grok 解析常见 Syslog 格式,配合 date 将时间写入 @timestamp,示例:
- filter {
grok { match => { “message” => “%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:loglevel} %{GREEDYDATA:message}” } }
date { match => [ “timestamp”, “ISO8601” ] target => “@timestamp” }
}
- 针对 auth、kern、daemon 等 facility 可编写细化模式,提高可读性与可检索性。
- 安全与优化
- 加固传输:启用 SSL/TLS(Logstash 与 ES、Beats 与 Logstash 之间),限制来源 IP,开启防火墙。
- 权限与端口:监听 514 通常需要管理员权限;若不便以 root 运行 Logstash,可改用 Beats/Filebeat 方案或设置端口转发。
- 性能与容量:按日索引、设置 ILM(索引生命周期管理)、合理分配 ES 堆内存 与 Logstash 工作线程,避免丢日志与查询抖动。