syslog-ng在日志收集和预处理中扮演了可靠、灵活且具备智能预处理能力的日志交通枢纽角色。①它通过缓冲机制、多线程处理和多种传输协议支持,确保高并发和网络不稳定下的日志传输可靠性;②具备日志过滤、重写和格式化为json的能力,减轻logstash负载;③可进行敏感信息脱敏和结构化处理,提升整个日志链效率与安全性。

在Linux系统上实现日志的实时监控,我个人认为,最行之有效且业界普遍推崇的方案,就是将强大的日志收集与转发工具
syslog-ng

要构建这套实时监控体系,核心在于数据流的打通与优化。
首先,我们需要在各个Linux服务器上部署
syslog-ng
syslog-ng

在Logstash端,它会作为日志的“中央处理器”。Logstash配置了特定的输入插件来接收来自
syslog-ng
grok
date
mutate
解析后的结构化数据,会被Logstash的输出插件发送到Elasticsearch集群。Elasticsearch作为分布式搜索引擎,负责高效地存储、索引和检索这些海量的日志数据。它的横向扩展能力意味着无论日志量有多大,都能保持高性能。

最后,Kibana登场了。Kibana是Elasticsearch的配套可视化工具,通过它,我们可以直观地探索Elasticsearch中的日志数据。你可以创建各种仪表板(Dashboards),实时展示错误率、特定事件的发生频率、用户行为模式等。Kibana的Discover界面允许你进行自由查询和过滤,而Visualize界面则能将数据转化为各种图表,比如折线图、柱状图、饼图等,帮助我们从宏观和微观层面理解系统运行状况。
坦白说,很多时候我们提到日志,第一反应可能是直接用Logstash或Filebeat去拉取。但当我真正深入到大规模生产环境的日志管理时,我发现
syslog-ng
在我看来,
syslog-ng
syslogd
syslog-ng
syslog-ng
更重要的是它的预处理能力。在日志发送到Logstash之前,
syslog-ng
syslog-ng
grok
配置Logstash来接收并处理
syslog-ng
grok
通常,Logstash会使用
syslog
syslog-ng
input {
syslog {
port => 5000
codec => plain { charset => "UTF-8" }
type => "syslog"
}
}
filter {
if [type] == "syslog" {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
add_tag => [ "syslog_parsed" ]
}
date {
match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
target => "@timestamp"
remove_field => [ "syslog_timestamp" ]
}
mutate {
convert => { "syslog_pid" => "integer" }
}
# 根据需要添加更多过滤规则,例如针对特定程序的日志解析
if "ssh" in [syslog_program] {
grok {
match => { "syslog_message" => "Accepted %{WORD:auth_method} for %{USER:user} from %{IPORHOST:src_ip} port %{NUMBER:src_port} %{WORD:protocol}" }
add_tag => [ "ssh_login" ]
}
}
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "syslog-%{+YYYY.MM.dd}"
}
stdout { codec => rubydebug } # 调试用
}这里面有几个关键点:
syslog
port
codec
grok
SYSLOGTIMESTAMP
SYSLOGHOST
grok
grok
date
syslog_timestamp
@timestamp
mutate
if
配置Logstash是一个持续优化的过程。随着新的日志源加入,你可能需要不断调整
grok
当我第一次接触Kibana的时候,感觉它就是个“万能仪表盘”,但真正用起来,才发现有些技巧能让它发挥更大的作用,不仅仅是“好看”,更是“好用”。
首先,最基础但也是最重要的,是熟练使用Discover界面。这里是你探索原始日志数据的地方。学会使用KQL(Kibana Query Language)或Lucene查询语法进行高效搜索和过滤,比如
level:error AND host:webserver01
其次,是有效利用Visualize界面创建多样化的图表。不要局限于默认的柱状图或折线图。例如:
创建可视化时,关键在于选择合适的聚合方式。比如,统计日志数量用
Count
Average
Max
Buckets
host.keyword
syslog_program.keyword
最后,将这些独立的图表组合成Dashboard(仪表板),是实现实时监控的核心。一个好的仪表板应该能在一瞥之间,让你对系统的整体健康状况有一个清晰的认识。你可以为不同的团队或不同的系统模块创建专属的仪表板。例如,一个“应用错误监控”仪表板可能包含错误日志趋势图、按错误类型分类的饼图、以及最新的错误日志列表。设置好自动刷新,你就可以实时看到日志的变化。
当然,Kibana本身也提供了简单的Alerting(告警)功能(通常在Elastic Stack的X-Pack组件中),你可以基于特定条件(如某个时间窗口内错误日志数量超过阈值)触发通知。这让监控从被动查看变为主动告警,真正实现了“实时”响应。但话说回来,告警策略的制定需要经验,过多的告警会造成“告警疲劳”,而太少的告警又可能错过关键问题。这是一个需要不断迭代和优化的过程。
以上就是Linux如何实现系统日志的实时监控?_Linuxsyslog-ng与ELK结合应用的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号