温馨提示×

CentOS Syslog与ELK Stack集成实践

小樊
34
2025-11-25 20:45:08
栏目: 智能运维

架构与方案选型

  • 推荐在 CentOS 7/8 上采用 rsyslog 作为 Syslog 代理,将系统日志通过 UDP/TCP 514 发送到 Logstash,再由 Elasticsearch 存储、Kibana 可视化。若需更高可靠性与缓冲,可在 Logstash 前引入 Kafka 作为消息队列。小规模或测试环境可将 Elasticsearch、Logstash、Kibana 部署在同一台主机;生产环境建议分离部署并开启认证与 TLS。ELK 7.x 为常用稳定版本,部署前准备 Java 11+ 环境。

服务端 Logstash 配置

  • 启用 Syslog 输入(示例为 UDP,生产建议优先 TCP 并使用证书):
input {
  udp {
    port => 514
    type => "system-syslog"
    codec => plain { charset => "UTF-8" }
  }
}
filter {
  # 解析常见内核/系统日志
  grok {
    match => { "message" => "%{SYSLOGTIMESTAMP:timestamp} %{SYSLOGHOST:hostname} %{DATA:program}(?:\[%{POSINT:pid}\])?: %{GREEDYDATA:message}" }
    overwrite => ["message"]
  }
  date {
    match => ["timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss", "ISO8601"]
    target => "@timestamp"
  }
  # 可选:按设施/优先级丰富字段
  mutate {
    add_field => { "facility" => "%{syslog_facility}" }
    add_field => { "severity" => "%{syslog_severity}" }
  }
}
output {
  elasticsearch {
    hosts => ["http://127.0.0.1:9200"]
    index => "syslog-%{+YYYY.MM.dd}"
    user => "elastic"
    password => "YourStrongPassword"
  }
  stdout { codec => rubydebug }  # 调试用
}
  • 若使用 Logstash syslog 输入插件(部分版本内置),可将 input 替换为:
input {
  syslog { port => 514 type => "system-syslog" }
}
  • 权限与端口:Linux 非 root 进程无法监听 1024 以下端口。若坚持使用 514,需以 root 运行 Logstash,或改用 >1024(如 1514)并在防火墙放行对应端口。示例(不建议生产):修改 systemd 服务,将 User=root 后重载并重启 Logstash。

客户端 rsyslog 配置

  • 启用远程发送(UDP 示例,服务端 IP 为 192.0.2.10):
# /etc/rsyslog.conf 或 /etc/rsyslog.d/50-remote.conf
*.*     @192.0.2.10:514
  • 如需可靠传输,改用 TCP(示例端口 1514):
*.*     @@192.0.2.10:1514
  • 重启 rsyslog 生效:
systemctl restart rsyslog
  • 防火墙放行(示例为 firewalld):
firewall-cmd --permanent --add-port=514/udp
firewall-cmd --permanent --add-port=1514/tcp
firewall-cmd --reload
  • 如需仅转发特定设施(如本地审计日志),可使用 local6
local6.info    @@192.0.2.10:1514
  • 验证:在客户端执行 logger -p local6.info "test syslog message",在服务端 Logstash 控制台或 Kibana 中查看是否入库。

Kibana 可视化与索引管理

  • 访问 http://:5601,进入 Stack Management > Index Patterns,创建索引模式(如 syslog-* 或 syslog-%{+YYYY.MM.dd}),时间字段选择 @timestamp
  • Discover 中查看与检索日志,按主机、程序、级别等字段筛选;后续可在 Visualize LibraryDashboard 构建错误趋势、来源分布等图表。

生产优化与安全加固

  • 可靠性与缓冲:在 Logstash 启用 持久化队列(queue.type: persisted),在日志洪峰时避免数据丢失;必要时引入 Kafka 作为缓冲层,解耦采集与存储。
  • 安全:为 Elasticsearch 启用 基础认证/TLS,为 Kibana 配置 HTTPS角色权限控制;仅开放必要端口(如 514/1514、9200、5601),并限制来源网段。
  • 性能与容量:Elasticsearch 分片数按节点与数据量规划(常见为每 GB 堆内存 1–2 分片,单节点堆不超过 32GB),合理设置 JVM 与刷新间隔;为索引设置 ILM(Index Lifecycle Management)Curator 自动滚动与清理策略,控制存储成本。

0