CAT分布式监控系统(二):CAT埋点方案 项目接入CAT监控说明

2024-04-12 05:48

本文主要是介绍CAT分布式监控系统(二):CAT埋点方案 项目接入CAT监控说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 CAT分布式监控系统(二):CAT埋点方案  项目接入CAT监控说明

 

本文概要:

             前面《CAT监控功能介绍》已经介绍了CAT监控系统是什么、能做什么;

             而本文主要是基于自己编写的CAT采集端埋点SDK,来说明CAT埋点方案,以及项目中如何接入CAT监控。

 

1、配置/data/appdatas/cat/client.xml

    说明:
            client.xml是配置CAT服务端地址的,这样监控数据才能发送到服务端。

            如果该配置文件不存在,(就算配置了后面的配置项)CAT监控不会启用,会打印出warn级别的日志:

                    CAT Monitor Disabled: CAT client configuration file does not exist!


            
    LINUX环境下:
            创建目录,并分配权限:
                    [root@tjy ~]# mkdir -p /data/appdatas/cat
                    [root@tjy ~]# chmod 777 /data/ -R
            配置client.xml文件:
                    [root@tjy ~]# ll /data/appdatas/cat/client.xml 
                    -rw-r--r-- 1 root root 360 7月  26 16:06 /data/appdatas/cat/client.xml
                    [root@tjy ~]#
                    [root@tjy ~]# cat !$
                    cat /data/appdatas/cat/client.xml
                    <?xml version="1.0" encoding="utf-8"?>

                    <config mode="client" xmlns:xsi="http://www.w3.org/2001/XMLSchema" xsi:noNamespaceSchemaLocation="config.xsd">
                        <servers>
                            <server ip="cat.xxx.cn" port="2250" http-port="8250"/>
                            <server ip="cat.xxx.cn" port="2251" http-port="8251"/>
                            <server ip="cat.xxx.cn" port="2252" http-port="8252"/>
                        </servers>
                    </config>
    
    WINDOWS环境下:
            同样的,在程序运行盘下创建盘下的/data/appdatas/cat目录,目录中配置client.xml。
            注意:如果tomcat安装D盘,eclipse安装F盘,在eclipse中用tomcat运行程序,应该创建F:/data/appdatas/cat
    
    配置可以加入CAT的开关,用于关闭CAT消息发送,将enabled改为false,如下表示将gc-pay这个项目关闭:
          <config mode="client">
            <servers>
                <server ip="cat.xxx.cn" port="2250" http-port="8250"/>
                <server ip="cat.xxx.cn" port="2251" http-port="8251"/>
                <server ip="cat.xxx.cn" port="2252" http-port="8252"/>
            </servers>
            <domain id="gc-pay" enabled="false"/>
        </config>   

2、pom.xml引入CAT客户端SDK依赖

            <dependency>
              <groupId>com.tjy</groupId>
              <artifactId>my-cat-client</artifactId>
              <version>1.1.0</version>
            </dependency>
    
    说明:
            my-cat-client是我们自己编写的SDK,版本可能会变化,查看最新版本:
                     my-cat-client版本说明
            
            my-cat-client SDK依赖了原CAT客户端cat-client,关于cat-client下载仓库:
                    公司私有仓库已有:Index of /groups/public/com/dianping/cat/cat-client/2.0.0
                            cat-client-2.0.0.jar
                            是基于Build-Jdk: 1.7.0_71
                            
                    如需要公有云仓库,cat提供的公有云仓库配置:
                          <repositories>
                            <repository>
                               <id>central</id>
                               <name>Maven2 Central Repository</name>
                               <layout>default</layout>
                               <url>http://repo1.maven.org/maven2</url>
                            </repository>
                            <repository>
                               <id>unidal.releases</id>
                               <url>http://unidal.org/nexus/content/repositories/releases/</url>
                            </repository>
                         </repositories>
                         <pluginRepositories>
                            <pluginRepository>
                               <id>central</id>
                               <url>http://repo1.maven.org/maven2</url>
                            </pluginRepository>
                            <pluginRepository>
                               <id>unidal.releases</id>
                               <url>http://unidal.org/nexus/content/repositories/releases/</url>
                            </pluginRepository>
                         </pluginRepositories>         

3、配置domain

    说明:
            也就是应用的名称,当有监控数据上传到CAT后,一会就可以在CAT页面上看到该名称的应用。
            当在CAT页面选择该应用后,就可以看到该应用所有服务实例的监控数据。
            因为跟踪ID的前缀就是配置的domain。
    
    配置:
          在项目工程里resources资源文件META-INF下,注意是src/main/resources/META-INF/文件夹,而不是webapps下的那个META-INF,添加app.properties文件;
          app.properties文件里配置domain,如:
                    app.name=my-project-name

4、开启CAT监控–@EnableCatClient

        在Spring容器能扫描到的地方配置注解@EnableCatClient,开启CAT监控。
        如Spring Boot程序,可以在如下配置:
                @SpringBootApplication
                @EnableCatClient
                public class ServiceRibbonApplication {
                    ......
                }
        
        CAT监控延时初始化说明:
                @EnableCatClient默认禁用CAT监控延时初始化,即在程序启动时初始化。
                因为延时初始化可能会在第一次监控请求时触发初始化,导致该请求响应时间大大增加。
                
                建议保持默认禁用该功能。
                如果启用请配置:
                        @EnableCatClient(lazyInit=true)

5、跨服务全链路跟踪功能

        @EnableCatClient开启CAT监控后,会有跨服务全链路跟踪功能。
        暂时支持该功能的通信组件如下:
                Spring Cloud Ribbon、Spring Cloud Feign(不兼容Sleuth)、Dubbo RPC

6、Servlet容器HTTP访问监控功能

        @EnableCatClient开启CAT监控后,默认启用对Servlet容器(Tomcat)的HTTP URL访问监控功能。
        用来记录外部的URL访问。
        
        禁用配置:
            建议默认开启该功能。
            如果没有用到Servlet容器(如tomcat)运行应用程序,或应用程序对外不提供URL访问,可以禁用该功能,只需要配置:
                    @EnableCatClient(enableCatFilter=false)

7、方法调用监控

        @EnableCatClient开启CAT监控后,可以用以下两种方法来指定需要监控的方法调用。

        7-1、包路径方法监控

                @EnableCatClient提供methodMonitorPackages参数来设置包路径方法监控。
                可设置多个包路径,如:
                        @EnableCatClient(methodMonitorPackages={"com.tjy.test.web", "com.tjy.test.service"})
                        
                        "com.tjy.test.web"和"com.tjy.test.service"包路径及其子包路径中的所有公开(public)方法将获得监控。
                
                默认值为一个无效的包路径,即默认不设置的情况下,不监控任何方法。

 

               另外,方法调用异常时,仅记录异常状态(名称),不记录详细的异常信息。

                如果需要记录异常堆栈信息,可以用下面的注解方法监控。

        

        7-2、注解方法监控

                @CatMethodMonitor注解可标识指定目标方法进行监控。
                @CatMethodMonitor可以标注在实现类上,或实现类的方法上;暂时不支持标注在接口及其方法上的监控。
                
                @CatMethodMonitor有一个参数isRecordException,用来指示是否记录方法抛出的异常堆栈信息。
                默认仅记录异常状态(名称),不记录详细的异常信息。
                如果不配置Servlet容器HTTP访问监控功能的情况下,建议在外部访问的Controller层启用该参数,以记录抛出的异常堆栈信息:
                        @CatMethodMonitor(isRecordException=true)

8、SQL执行监控

       从my-cat-client V1.0.0版本开始支持Mybatis3执行SQL(时间、异常)情况的监控。

       只要配置提供的Mybtis插件:

              com.tjy.monitor.catclient.mybatis.CatMybatisSqlMonitorPlugin

        

       配置参考:

              1、Spring Boot方式(Java配置)

                     推荐使用这种集成方式:

                            Spring Boot + Mybatis + Druid(数据库连接池)

                            注意:

                                   这种方式必须引用mybatis-spring-boot-starter,才能使用下面的配置类直接返回插件拦截器,否则不生效。

                                   这种方式可以不用配置Mybitas SqlSessionFactory;

                                   也可以不配置DataSource,但建议另外引用配置Druid。

                     配置类:

                            @Configuration

                            public class CatMonitorConfiguration {

                                @Bean

                                 public Interceptor paginationInterceptor() {

                                      CatMybatisSqlMonitorPlugin plugin = new CatMybatisSqlMonitorPlugin();

                                      return plugin;

                                 }

                            }               

              2、XML文件(mybatis-conf.xml)配置方式

                        <!-- CAT监控插件 -->

                        <plugins>

                          <plugin interceptor="com.tjy.monitor.catclient.mybatis.CatMybatisSqlMonitorPlugin">

                          </plugin>

                        </plugins>             

              3、Mybitas SqlSessionFactory配置方式

                     如果没有mybatis-conf.xml配置文件,可以把插件配置到Mybitas SqlSessionFactory里。

                     XML配置如下:

                            <!-- 配置mybitas SqlSessionFactory Bean -->

                            <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

                                ......(dataSource配置等等)

                                <!-- CAT监控插件 -->

                                <property name="plugins">

                                    <array>

                                        <bean class="com.tjy.monitor.catclient.mybatis.CatMybatisSqlMonitorPlugin">

                                        </bean>

                                    </array>

                                </property>

                            </bean>

                     Java配置如下:

                             @Bean

                             public SqlSessionFactoryBean createSqlSessionFactory() {

                                 SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();

                                 ......(dataSource配置等等)

                                 // CAT监控插件

                                 Interceptor[] plugins = { new CatMybatisSqlMonitorPlugin() };

                                 sqlSessionFactoryBean.setPlugins( plugins );

                                 return sqlSessionFactoryBean;

                             }

9、配置日志框架

        CAT支持Log4j、Log4j2、Logback的集成。
        属于可选功能,即对logger.xxx()有效,不影响CAT埋点API。
        
        功能说明:
                    1、仅上传包含异常的ERROR级别日志
                            ERROR级别,且需要包含异常堆栈信息,即Throwable对象,否则CAT不上传;
                            如这API打印的错误信息:
                                   org.slf4j.Logger.error(String msg, Throwable t)                
                          
                    
                    2、在一个messageTree内部,cat内部会针对同样的异常,如果连续调用两次logError(e),仅仅会上报第一份exception。
                            注意框架打印了一个Exception,如果业务包装此异常为new BizException(e),这样仍旧算两次异常,上报两份。        
                    
        测试:
                    如下在启动时打印日志测试:
                            logger.error("produce-01 error test...", new RuntimeException("need ThrowableInformation"));
                            Cat.getManager().setTraceMode(true);
                            logger.info("produce-01 starting...");
                    
                    CAT页面会看到如下信息
                            t10:19:26.145    System    MergeTree        
                              E10:19:26.145    RuntimeException    java.lang.RuntimeException    ERROR    produce-01 error test... java.lang.RuntimeException: need ThrowableInformation
                                                                                                                                                                    at com.test.producer.Produce1.main(Produce1.java:19)
                            T10:19:26.155    System    MergeTree         10ms         

        9-1、Log4j集成

            说明:
                    cat-client提供继承了Log4j.AppenderSkeleton的CatAppender,用来监控上传程序中log4j打印的日志。
            
            配置:            
                    在Log4j的配置文件中配置CatAppender;
                    
                    如上面说明中,没有开启traceMode的情况下,只记录包含异常堆栈信息的ERROR级别日志;
                    这样的话,建议在Root节点中添加此Appendar,业务程序的所有异常都通过记录到CAT中,方便看到业务程序的问题。
                    
                    如果需要info/warn级别的日志(开启traceMode),或需要控制ERROR日志;
                    可自定义细粒度控制,把catAppender添加到具体路径即可,下面只作参考。
                    
                    xml文件配置方式:
                        <appender name="catAppender" class="com.dianping.cat.log4j.CatAppender"></appender>
                            
                            <!--细粒度控制包的日志级别(参考) -->
                            <logger name="com.test" additivity="false">
                                <level value="debug" />
                                <appender-ref ref="log.console" />
                                <appender-ref ref="catAppender" />
                            </logger>
                            
                            <!--全局日志(参考) -->
                            <root>
                                <level value="info" />
                                <appender-ref ref="log.console" />
                                <appender-ref ref="catAppender"/>
                            </root>     
                    
                    properties文件配置方式:
                            log4j.appender.catAppender = com.dianping.cat.log4j.CatAppender
                            
                            #参考
                            log4j.logger.com.tjy.service = info,catAppender            

        9-2、Logback集成

            说明:
                    cat-client 2.0.0版本并没有支持,需要用master代码来编译;
                    但现在master代码的CatLogbackAppender,和log4j的CatAppender行为不一致(行为是指上面的"说明")。

                    所以,应该使用我们自己封装的SDK(gc-cat-client) 里的CatLogbackAppender,以获得一致的行为,类名如下:
                            com.tjy.monitor.catclient.logback.CatLogbackAppender
            
            配置:
                    有关说明同log4j。
                    
                    xml文件配置方式:
                        <appender name="CatAppender" class="com.tjy.monitor.catclient.logback.CatLogbackAppender"></appender>

                        <root level="info">
                            <appender-ref ref="CatAppender" />
                        </root>


10、页面配置

        对项目进行了以上配置,部署(测试)后就会有监控数据上传到我们的CAT服务器集群。
        这时需要对CAT服务页面上进行一些配置,以便我们能看到自己项目的监控数据、报表。
        
        访问地址:
                实时:http://192.168.1.52:8888/cat/r/t
                文档:http://192.168.1.52:8888/cat/r/home
                配置(帐号/密码都为admin):http://192.168.1.52:8888/cat/s/config
                全局报表:http://192.168.1.52:8888/cat/r/overload

       10-1、“项目基本信息”配置

                前面"配置domain"也说过,当项目刚开始接入有监控数据上传到CAT后,会在CAT“项目基本信息”配置页面上看到该名称的应用。
                “项目基本信息”配置页面配置页面:http://192.168.1.52:8888/cat/s/config?op=projects
                    注意:
                            直接在搜索框输入配置的项目domain的前面几个字符,应该可以在下拉框看到完整的项目domain,直接选择就可以了。
                            如果下拉框没有出现项目domain,说明接入配置有问题。

                            如下图所示:


                
                “项目基本信息”配置可以按页面上的说明填写,后期也可以更改的。        

        10-2、“项目分组配置”配置

                这里需要添加配置好的项目,否则在后面的“应用监控配置”-》“业务监控配置”页面就没无法选择自己的项目进行配置了。

        10-3、其他配置

                其他配置就看着配置吧,不太重要。
        
        页面配置好后,进入实时数据页面:http://192.168.1.52:8888/cat/r/t
        点击最上面的“全部”按键,出现的下拉框就会看到配置的所有项目。(也可以在输入框直接输入项目名称)

        如下图所示:


        
        当在选择自己的项目后,就可以看到该项目所有服务实例的监控数据了。
        更多功能说明请参考前面的《CAT监控功能介绍》。              

这篇关于CAT分布式监控系统(二):CAT埋点方案 项目接入CAT监控说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/896271

相关文章

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了