温馨提示×

Linux Syslog与ELK Stack的结合

小樊
34
2025-11-19 03:18:23
栏目: 智能运维

Linux Syslog与ELK Stack集成实践指南

一 架构与端口规划

  • 采集链路建议:Linux 主机使用 rsyslog/syslog-ng 发送日志 → Logstash Syslog 输入插件(UDP/TCP 514)Beats/Filebeat 514Elasticsearch 存储 → 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 工作线程,避免丢日志与查询抖动。

0