【微服务】Go进阶四 日志&指标&链路追踪

日志

日志级别

https://github.com/golang/glog,是 google 提供的一个不维护的日志库,glog 有其他语言的一些版本,对我当时使用 log 库有很大的影响。它包含如下日志级别:

  • Info
  • Warning
  • Error
  • Fatal(会中断程序执行)

还有类似 log4go,loggo,zap 等其他第三方日志库,他们还提供了设置日志级别的可见行,一般提供日志级别:

  • Trace
  • Debug
    Info
  • Warning
  • Error
  • Critical

Fatal

记录消息后,直接调用 os.Exit(1),这意味着:
  • 在其他 goroutine defer 语句不会被执行;
  • 各种 buffers 不会被 flush,包括日志的;
  • 临时文件或者目录不会被移除;
  • 不要使用 fatal 记录日志,而是向调用者返回错误。如果错误一直持续到 main.main。main.main 那就是在退出之前做处理任何清理操作的正确位置。

日志选型

一个完整的集中式日志系统,需要包含以下几个主要特点:

  • 收集-能够采集多种来源的日志数据;
  • 传输-能够稳定的把日志数据传输到中央系统;
  • 存储-如何存储日志数据;
  • 分析-可以支持 UI 分析;
  • 警告-能够提供错误报告,监控机制;

开源界鼎鼎大名 ELK stack,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。
新增了一个 FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat 占用资源少,适合于在各个服务器上搜集日志后传输给 Logstash,官方也推荐此工具。

1. Logstash + Elasticsearch

此架构由 Logstash 分布于各个节点上搜集相关日志、数据,并经过分析、过滤后发送给远端服务器上的 Elasticsearch 进行存储。
Elasticsearch 将数据以分片的形式压缩存储并提供多种 API 供用户查询,操作。用户亦可以更直观的通过配置 Kibana Web方便的对日志查询,并根据数据生成报表。
因为 logstash 属于 server 角色,必然出现流量集中式的热点问题,因此我们不建议使用这种部署方式,同时因为 还需要做大量 match 操作(格式化日志),消耗的 CPU 也很多,不利于 scale out。
在这里插入图片描述

2.Logstash Agent + Kafka + Logstash + Elasticsearch + Kibana

此种架构引入了消息队列机制,位于各个节点上的 Logstash Agent 先将数据/日志传递给 Kafka,并将队列中消息或数据间接传递给 Logstash,Logstash 过滤、分析后将数据传递给Elasticsearch 存储。最后由 Kibana 将日志和数据呈现给用户。因为引入了 Kafka,所以即使远端 Logstash server 因故障停止运行,数据将会先被存储下来,从而避免数据丢失。
更进一步的:
将收集端 logstash 替换为 beats,更灵活,消耗资源更少,扩展性更强。

在这里插入图片描述

在这里插入图片描述

阿里云日志

在集群内直接采集容器 stdout

日志系统:设计目标

接入方式收敛;
日志格式规范;
日志解析对日志系统透明;
系统高吞吐、低延迟;
系统高可用、容量可扩展、高可运维性;

日志系统:格式规范

JSON作为日志的输出格式:
time: 日志产生时间,ISO8601格式;
level: 日志等级,ERROR、WARN、 INFO、DEBUG;
app_id: 应用id,用于标示日志来源;
instance_id: 实例 id,用于区分同一应用不同实例,即 hostname;

在这里插入图片描述

日志系统 - 设计与实现

日志从产生到可检索,经历几个阶段:
生产 & 采集
传输 & 切分
存储 & 检索

日志系统:采集

logstash:
监听tcp/udp
适用于通过网络上报日志的方式

filebeat:
直接采集本地生成的日志文件
适用于日志无法定制化输出的应用

logagent:
物理机部署,监听unixsocket
日志系统提供各种语言SDK
直接读取本地日志文件

日志系统 - 切分

从kafka消费日志,解析日志,写入elasticsearch
bili-index: 自研,golang开发,逻辑简单,性能 高, 可定制化方便。
• 日志规范产生的日志(log agent收集)
logstash: es官方组件,基于jruby开发,功能强大, 资源消耗高,性能低。
• 处理未按照日志规范产生的日志(filebeat、logstash 收集),需配置各种日志解析规则。

日志系统 - 存储和检索

elasticsearch多集群架构:

  • 日志分级、高可用

单数据集群内:

  • master node + data node(hot/stale) + client node
  • 每日固定时间进行热->冷迁移
  • Index 提前一天创建,基于 template 进行mapping 管理
  • 检索基于 kibana

日志系统 - 容器日志采集

容器内应用日志采集:
基于 overlay2,直接从物理机上查找对应日志文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值