1. 引言
前面主要讲解了服务认证架构的设计,有兴趣的童鞋可以参考下:
- 《微服务轮子项目(03) - 服务认证架构设计(有网络隔离)》
- 《微服务轮子项目(04) - 服务认证架构设计(无网络隔离)》
- 《微服务轮子项目(05) - 服务认证架构设计(token自动续签)》
- 《微服务轮子项目(06) - 服务认证架构设计(URL级权限控制)》
使用如下几张图总结(下图与本文无关,主要是总结前面章节讲解的内容,可以直接跳过):
- 有网络隔离:
- 无网络隔离(优化前):
- 无网络隔离(优化后):
- token自动续签:
- url级别权限控制:
2. 企业级日志解决方案设计
下面先附上一张解决方案图:
说明:
- filebeat:部署在每台应用服务器、数据库、中间件中,负责日志抓取与聚合日志
- 日志聚合:把多行日志合并成一条,例如exception的堆栈信息等
- logstash:通过各种filter结构化日志信息,并把字段transform成对应的类型
- elasticsearch:负责存储和查询日志信息
- kibana:通过ui展示日志信息、还能生成饼图、柱状图等
3. ELK常见部署架构
3.1 Logstash作为日志收集器
这种架构是比较原始的部署架构,在各应用服务器端分别部署一个Logstash组件,作为日志收集器,然后将Logstash收集到的数据过滤、分析、格式化处理后发送至Elasticsearch存储,最后使用Kibana进行可视化展示,这种架构不足的是:Logstash比较耗服务器资源,所以会增加应用服务器端的负载压力。
3.2 Logstash作为日志收集器
该架构与第一种架构唯一不同的是:应用端日志收集器换成了Filebeat,Filebeat轻量,占用服务器资源少,所以使用Filebeat作为应用服务器端的日志收集器,一般Filebeat会配合Logstash一起使用,这种部署方式也是目前最常用的架构。
3.3 引入缓存队列的部署架构
该架构在第二种架构的基础上引入了Kafka消息队列(还可以是其他消息队列),将Filebeat收集到的数据发送至Kafka,然后在通过Logstasth读取Kafka中的数据,这种架构主要是解决大数据量下的日志收集方案,使用缓存队列主要是解决数据安全与均衡Logstash与Elasticsearch负载压力。
4 总结
以上三种架构总结:
- 第一种部署架构由于资源占用问题,现已很少使用
- 目前使用最多的是第二种部署架构
- 至于第三种部署架构个人觉得没有必要引入消息队列,除非有其他需求,因为在数据量较大的情况下,
Filebeat
使用压力敏感协议向Logstash
或Elasticsearch
发送数据。如果Logstash
正在繁忙地处理数据,它会告知Filebeat
减慢读取速度。拥塞解决后,Filebeat
将恢复初始速度并继续发送数据。