搭建监控日志系统

news/2024/10/31 1:26:06/

在微服务或者集群架构中,一次请求的调用会跨多个服务(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,支持性较少,指标不完善


http://www.ppmy.cn/news/83083.html

相关文章

Unity之OpenXR+XR Interaction Toolkit 安装和配置

前言 XR Interaction Toolkit 是Unity基于OpenXR标准,发布的一套XR工具,目的是方便我们快速接入XR相关的SDK,并且做到兼容不同VR设备的目的,目前流行的VR设备如Oculus,Metal,HTC Vive,Pico等统统都支持。 所以我们今天的目的就是把XR Interaction Toolkit从导入到配置,…

Elastic Learned Sparse Encoder 简介:Elastic 用于语义搜索的 AI 模型

作者:Aris Papadopoulos, Gilad Gal 寻找意义,而不仅仅是文字 我们很高兴地与大家分享,在 8.8 中,Elastic 提供开箱即用的语义搜索。语义搜索旨在根据文本的意图或含义进行搜索,而不是词汇匹配或关键字查询。与传统的…

C++11 call_once 和 once_flag

文章目录 一、简介二、原理2.1 示例2.2 call_once源码详解2.3 once_flag源码详解 三、Linux内核中的 DO_ONCE 机制 一、简介 std::call_once 和 std::once_flag 是 C11 中引入的线程安全的函数和类型,用于确保某个函数只被调用一次。 std::once_flag 是一个类型&a…

SpringBoot + Docker 实现一次构建到处运行

一、容器化部署的好处 Docker 作为一种新兴的虚拟化方式,它可以更高效的利用系统资源,不需要进行硬件虚拟以及运行完整操作系统等额外开销。 传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运行宿主内…

设计模式详解之工厂模式

作者:刘文慧 本文将着眼于工厂模式,从简单工厂模式、工厂方法模式和抽象工厂模式出发,展开学习和深入探讨。 ​ 一、概述 我们在进行软件开发时要想实现可维护、可扩展,就需要尽量复用代码,并且降低代码的耦合度&…

如何使用 VSCode 软件运行C代码

VSCode 的下载和扩展的配置可以参考文章:VSCode 的安装与插件配置。 VSCode 是很好用的编辑器,通过给其配置 MinGW-w64 插件就可以在它上面编译运行C代码了。 在没有配置 MinGW-w64 插件时,在 VSCode 中运行下面的代码后打印如下图所示。 这…

新一代数据湖存储技术Apache Paimon入门Demo

目录 前言 1. 什么是 Apache Paimon 一、本地环境快速上手 1、本地Flink伪集群 2、IDEA中跑Paimon Demo 2.1 代码 2.2 IDEA中成功运行 3、IDEA中Stream读写 3.1 流写 3.2 流读(toChangeLogStream) 二、进阶:本地(IDEA&…

【TI毫米波雷达笔记】IWR6843AOPEVM开箱功能测试

【TI毫米波雷达笔记】IWR6843AOPEVM开箱功能测试 我用的是IWR6843AOPEVM-G 相关资源可以在ti官网下载 要用的软件是 TI官方上位机 mmWave_Demo_Visualizer 可以用网页版 也可以用软件包 建议先上网页版看看版本支不支持对应的板子 网页版: dev.ti.com/gallery/…