搭建监控日志系统

在微服务或者集群架构中,一次请求的调用会跨多个服务(web,mysql,feign等)、多个模块(用户模块,商品模块等)、多个容器(用户模块可能有多个实例),这个时候去定位问题,通过传统的登陆服务节点逐一查看日志的方式,就会效率很低。分布式调用链就是为了解决以上几个问题而生,和jdbc接口规范一样,OpenTracing 是分布式调用链的一个轻量级的标准化层,提供统一规范。

1. prometheus

1.1什么是prometheus

Prometheus是一个开源的系统监控和报警系统,基于谷歌的borgemon使用go语言开发,使用TSDB数据库,所以支持云原生,现在已经加入到CNCF基金会,成为继k8s之后第二个在CNCF托管的项目,在kubernetes容器管理系统中,通常会搭配prometheus进行监控,同时也支持多种exporter采集数据,还支持pushgateway进行数据上报,Prometheus性能足够支撑上万台规模的集群。

1.2prometheus特点

  • 灵活的查询语言(PromQL):可以对采集的metrics指标进行加法,乘法,连接等操作;
  • 内置时间序列(pime series)数据库:Prometheus;外置的远端存储通常会用:InfluxDB、openTsDB等
  • 基于HTTP的pull(拉取)方式采集时间序列数据
  • 支持作为数据源接入Grafana
  • 做高可用,可以对数据做异地备份,联邦集群,部署多套prometheus,pushgateway上报数据

1.3prometheus适用场景

1.Prometheus是一款指际监控系统,不适合存储事件及日志等;它更多地展示的是趋势性的监控,而非精准数据;
2. Prometheus认为只有最近的监控数据才有查询的需要,其本地存储的设计初衷只是保存短期(例如一个月)数据,因而不支持针对大量的历史数据进行存储;若需要存储长期的历史数据,建议基于远端存储机制将数据保存于InfluxDB或openTsDB等系统中;
3. Prometheus的集群机制成熟度不高,可基于Thanos(和灭霸是一个单词)实现Prometheus集群的高可用及联邦集群

2. ELK

2.1什么是elk

ELK是Elasticsearch(ES) , Logstash, Kibana的结合,是一个主流的开源日志收集的解决方案,其中:
Elasticsearch(ES):开源分布式搜索引擎,提供搜集、分析、存储数据功能。用户将数据提交到 Elasticsearch 数据库中。通过分词控制器对对应的语句进行分词。将分词结果和权重(原始数据和分词内容的匹配度)一起存储,当用户搜索数据时,根据权重对搜索结果进行排名和打分(分数越高,匹配度就越高),最终将结果呈现给用户
Logstash:日志搜集、分析、过滤,支持大量数据获取。其自带输入(input)、过滤语法(grok)、输出(output)三部分。其输入有两种方式:①由各beat采集器输入,经过滤后输出到ES ②本机数据输入,经过滤后输出到ES。
Kibana:提供日志分析友好的 Web 界面。数据存储到ES中后,可以在Kibana页面上增删改查,交互数据,并生成各种维度表格、图形。
ES详细介绍
Kibana详细介绍
Logstash介绍

2.2elk适用场景

适合按照索引数据进行数据分析和聚合,查看明细数据,定位具体的错误日志和信息

3. skywalking

3.1如何自动采集日志

SkyWalking 采用了插件化(skywalking-plugin.def 文件,针对不同调用开发不同的plugin去做增强)+javaagent(Skywalking Agent) 的形式来实现了 Span 数据的自动采集。
这样可以做到对代码的无侵入性,插件化意味着可插拔,扩展性好(后文会介绍如何定义自己的插件)。

3.2分布式唯一id如何传递的

如果只是在网关中传递,我们知道使用ThreadLocale就可以实现,但是存在tomcat基于netty导致nio线程复用的问题,所以skywalking在跨进程调用之前,当前进程会通过 inject()方法将当前 Context 的全部内容注入到指定的 ContextCarrier,然后才能将当前 Context 的信息发送出去。当跨进程调用的接收方接收请求后,会通过 extract()方法将收到的 Context 从 ContextCarrier 中提取出来
参考DUBBO的plugin实现:
在这里插入图片描述
指定切面,切点,要对哪个类的哪个方法进行增强
在这里插入图片描述
intercepter具体处理逻辑

在这里插入图片描述

3.3TraceId 如何保证全局唯一

SkyWalking 采用的是Snowflow 算法,为了防止时间回拨的问题,判断当前时间小于上次记录的最小时间,就进行随机数处理。具体分布式唯一id算法可以参考本篇文章
在这里插入图片描述

3.4skywalking集成和使用

集成springboot和使用经验
按需使用,一般是使用skywalking agent进行log日志上报和追加traceId,日志分析查看还是Kibana,监控也单独搭建和配置,不用默认ui,支持性较少,指标不完善

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值