分享

业务日志收集方案

 WindySky 2019-02-28

起因:

我们线上的业务通常会部署到10几台或者几十台机器上,线上的日志如果用salt执行命令远程的grep已经是越来越不方便了,所以我们决定对日志进行统一收集,管理

1. 选择方案

我们业务日志不算特别的多,因此不想方案过于复杂,并且公司内部已经有ES和kafaka集群 

因此可以选方案有 

1) rsyslog + kafka + elasticsearch 

2)fluentd + kafka + elasticsearch 

我最终选择了方案1: 

a) 由于公司的服务器主要是centos, 默认已经安装了rsyslog 

b) Fluentd是JRuby开发的,而rsyslog是二进制程序 

以前有过logstash的使用经历,当日志量较大时,logstash会把CPU打的很高

感受:rsyslog的功能其实非常强大, 

它所有配置都是从某个input获取数据再发送到output(和logstask很像) 

支持: 

1) 文件 –> kafka 

2) 文件 –> elasticsearch 

3) tcp/udp –> 文件 

4)文件 –> 其它主机(TCP/UDP) 

input 和 output 是可以任意组合的 

如果你不想搭建Elasticsearch和Kafka,完全可以把所有日志收集到某个文件服务器 

然后在这台文件服务器上再使用logrotate,完全可以满足日常的开销

kafka只是用来做缓冲的,如果日志没有明显的波峰,可以不使用kafka

2. 实施

2.1 统一日志字段

我们多个业务项目,并且有Golang、Python等多种语言,为了保证,入ES的数据格式一致,我们统一了日志的字段,如下 

* 所有字段都是比选的,如果没有请留成空字符串*

字段类型是否必填说明备注

servicestring业务标识使用英文字符和下划线,中划线

namestringlogger名称

levelstring日志级别ERROR/INFO/DEBUG/WARNING

pathnamestring文件全路径

linenoint在文件中的行号如果没有, 给默认值-1

msgstring消息体

task_idstring任务ID

log_datestring日志时间ES上的字段类型为datetime

2017-01-01T00:00:00+0800

不同的业务和项目之间通过service字段区分

也就是我们要求业务在打日志的时候以JSON格式打印到文件中,并包含以上字段,这样就可以很方便的被Rsyslog收集并,写入Kakfa队列,最后再入到ES中。 

注意 程序可以打2份日志,一份按原来格式入文件,一份以JSON格式写文件供rsyslog使用

范例

这里给一个Python 的范例项目供大家参考 

https://github.com/vearne/json_log

2.2 Rsyslog的安装和配置

1)安装

查看版本 

rsyslogd -version 

rsyslog 需要 v8.7.x以后的版本 

安装rsyslogd 

yum install rsyslog 

yum install rsyslog-kafka 

默认安装的版本就已经是8.30.0

2) 添加配置文件

在/etc/rsyslog.d中添加各自的配置文件

# import modules

module(load="imfile")

module(load="omkafka")

# 将日志文件中的数据原样输出到kafaka topic中

template(name="our_json" type="string" string="%msg%\n")

# 指定处理规则

ruleset(name="kafka_devops") {

    action (

        type="omkafka"

        template="our_json"

        topic="devops"

        broker=["192.168.2.100:9092"]

        errorFile="/var/log/kafka_error.log"

    )

    stop

}

# 输入 

# File 为待监测的文件,如果文件发生变化

# rsyslog 会把变化的部分发送到kafka相应的topic中

input(type="imfile" Tag="" File="/tmp/test.log" Ruleset="kafka_devops")

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

3) 重启rsyslog 使配置生效

/etc/init.d/rsyslog restart

1

2.3 kafka日志入ES

2.4 kibana

3. 总结

本文描述了完整的日志收集过程, 希望对大家有帮助

参考资料

1.日志系列–程序日志处理挑战与方案 

2.Docker日志收集最佳实践

--------------------- 

作者:woshiaotian 

来源:CSDN 

原文:https://blog.csdn.net/woshiaotian/article/details/78488642 

版权声明:本文为博主原创文章,转载请附上博文链接!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多