快速成长期应用架构实践 (4):日志收集

叁叁肆2018-11-14 18:38

欢迎访问网易云社区,了解更多网易技术产品运营经验。


4.1.4 日志收集


日志,一组随时间增加的有序记录,是开发人员最熟悉的一种数据。通常,日志可以 用来搜索查看关键状态、定位程序问题,以及用于数据统计、分析等。 


日志也是企业生产过程中产生的伟大财富。日志可以用来进行商业分析、用户行为判 断和企业战略决策等,良好地利用日志可以产生巨大的价值。所以,日志的收集不管是在 开发运维还是企业决策中都十分重要。


1. 第三方数据收集服务


在日志收集领域内,目前已经存在了种类繁多的日志收集工具,比较典型的有:rsyslog、 syslog-ng、Logstash、FacebookScribe、ClouderaFlume、Fluentd 和 GraylogCollector 等。


rsyslog 是 syslog 的增强版,Fedora、Ubuntu、RHEL6、CentOS6、Debian 等诸多 Linux 发行版都已使用 rsyslog 替换 syslog 作为默认的日志系统。rsyslog 采用 C 语言实现,占用 的资源少,性能高。专注于安全性及稳定性,适用于企业级别日志记录需求。rsyslog 可以 传输 100 万+/s(日志条数)的数据到本地目的地。即使通过网络传输到远程目的地,也能 达到几万至几十万条/每秒的级别。rsyslog 默认使用 inotify 实现文件监听(可以更改为 polling 模式,实时性较弱),实时收集日志数据。


rsyslog 支持实时监听日志文件、支持通配符匹配目录下的所有文件(支持输出通配符 匹配的具体文件名) 、支持记录文件读取位置、支持文件 Rotated、支持日志行首格式判断 (多行合并成一行) 、支持自定义 tag、支持直接输出至 file/mysql/kafka/elasticsearch 等、支 持自定义日志输出模板,以及支持日志数据流控。


syslog-ng 具有开源、可伸缩和可扩展等特点,使用 syslog-ng,你可以从任何来源收集 日志,以接近实时的处理,输出到各种各样的目的源。syslog-ng 灵活地收集、分析、分类 和关联日志,存储和发送到日志分析工具。syslog-ng 支持常见的输入,支持 BSDsyslog (RFC3164)、RFC5424 协议、JSON 和 journald 消息格式。数据提取灵活,内置一组解析器, 可以构建非常复杂事情。简化复杂的日志数据,syslog-ng patterndb 可以转化关联事件为一 个统一格式。支持数据库存储,包括 SQL(MySQL,PostgreSQL,Oracle)、 MongoDB 和 Redis。syslog-ng 支持消息队列,支持高级消息队列协议(AMQP)和面向简单的文本消 息传递协议(STOMP)与更多的管道。syslog-ng 设计原则主要包括更好消息过滤粒度和 更容易在不同防火墙网段转发信息。前者能够进行基于内容和优先权/facility 的过滤。后 者支持主机链,即使日志消息经过了许多计算机的转发,也可以找出原发主机地址和整 个转发链。


Logstash 是一个开源的服务器端数据处理管道,采集多种数据源的数据,转换后发送到指定目的源。数据通常以各种格式分散在许多孤立系统上。Logstash 支持种类丰富的 inputs,以事件的方式从各种源获取输入,包括日志、Web 应用、数据存储设备和 AWS 服 务等。在数据流从源到存储设备途中,Logstash 过滤事件,识别字段名,以便结构化数据, 更有利于数据分析和创造商业价值。除了 Elasticsearch,Logstash 支持种类丰富的 outputs, 可以把数据转发到合适的目的源。表 4-2 是几个典型产品的特性对比。




2. 技术选型


由于日志收集的需求并非很复杂,此类工具大体上比较相似,用户只需要根据其特性 选择合适自己需求的产品。
通常来说,对于日志收集客户端资源占用要求较高的,可以选择 C 语音开发的 rsyslog、 syslog-ng。对于易用性要求较高,可以选择 Logstash、Beats。对于日志收集后接入的后端 有特殊需求,可以参考 Fluentd 是否可以满足。如果公司用的是 Java 技术栈,可以选用 Cloudera Flume。 


文章节选自《云原生应用架构实践》 网易云基础服务架构团队 著 


网易云计算基础服务深度整合了 IaaSPaaS 及容器技术,提供弹性计算、DevOps 工具链及微服务基础设施等服务,帮助企业解决 IT、架构及运维等问题,使企业更聚焦于业务,是新一代的云计算平台。点击可免费试用