zoukankan      html  css  js  c++  java
  • 点评cat系列-服务器开发环境部署

    我们有三种部署方式:
    1. docker 部署
    2. 采用官方的 war 包部署.
    3. 源码部署

    很显然 docker 部署是最简单的, 我尝试了多次, 都在 cat docker 容器镜像的编译过程失败了. 原因是: 镜像编译需要先编译 java 源码为 war 包, 这中间要从 maven 官网库下载很多 org.unidal 下的 jar 包, org.unidal 下的 jar 包已经升级到新版本, 而 cat 源码中 pom.xml 指定的仍是老版本, 导致下载失败. 这应该是官方最近在升级 3.0 版, 代码没有完全 align 好.

    显然, 源码部署暂时也行不通, 所以我采用了官方 war 包部署.

    ========================
    Docker 部署步骤
    ========================
    参考: https://github.com/dianping/cat/blob/master/cat-doc/posts/ch4-server/README.md
    官方并没提供已经编译好的 docker 镜像, 大致步骤如下:
    1. 从 github 上下载完整源码
    2. 将 docker/docker-compose.yml 文件中的汉字都删除, 否则之后的 docker-compose up 命令会报错.
    3. 运行 docker-compose up 命令, 该命令将完成:
        (1)cat docker 容器镜像的编译
        (2)mysql 镜像下载,
        (3) 启动 mysql 容器和 cat 容器.
    4. 第一次运行以后,数据库中没有表结构,需要通过下面的命令创建表
    docker exec <container_id> bash -c "mysql -uroot -Dcat < /init.sql"
    说明:<container_id> 需要替换为 cat 容器的真实 id. 通过 docker ps 可以查看到 mysql 容器 id


    ========================
    windows 下 war 包部署开发环境
    ========================
    准备工作: 配置好 jdk8 和 tomcat, 官方建议 tomcat 使用版本 7.*.或 8.0.

    步骤 1: 初始化 Mysql 数据库, 一套 CAT 集群需要部署一个数据库, 先新建一个名为 cat 数据库, 数据库编码使用 utf8mb4, 建表语句为 script/CatApplication.sql .

    步骤 2: 在 tomcat 程序运行盘下新建 /data/appdatas/cat 和 /data/applogs/cat 两个目录.


    步骤 3: [非必需] 配置 /data/appdatas/cat/client.xml, 其中 http-port 为 tomcat 端口, 我机器上是 8888 端口. 配置 client.xml 之后, 将监控本机的cat服务. 

    <?xml version="1.0" encoding="utf-8"?>
    <config mode="client">
        <servers>
            <server ip="127.0.0.1" port="2280" http-port="8888"/>
        </servers>
    </config>

    步骤 4: 配置/data/appdatas/cat/datasources.xml

    <?xml version="1.0" encoding="utf-8"?>
    <data-sources>
        <data-source id="cat">
            <maximum-pool-size>3</maximum-pool-size>
            <connection-timeout>1s</connection-timeout>
            <idle-timeout>10m</idle-timeout>
            <statement-cache-size>1000</statement-cache-size>
            <properties>
                <driver>com.mysql.jdbc.Driver</driver>
                <url><![CDATA[jdbc:mysql://127.0.0.1:3306/cat]]></url>  <!-- 请替换为真实数据库 URL 及 Port  -->
                <user>root</user>  <!-- 请替换为真实数据库用户名  -->
                <password>toor</password>  <!-- 请替换为真实数据库密码  -->
                <connectionProperties><![CDATA[useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&socketTimeout=120000]]></connectionProperties>
            </properties>
        </data-source>
    </data-sources>

    步骤 5: 下载编译好的 war 包, 此 war 是用 jdk8, 服务端请使用 jdk8 版本.
    http://cat.meituan.com/nexus/service/local/repositories/releases/content/com/dianping/cat/cat-home/3.0.0/cat-home-3.0.0.war

    步骤 6: 将下载的 war 文件重命名为 cat.war, 放入 tomcat 容器 webapps 根目录下, 并启动 tomcat.
    然后修改客户端的路由策略, 访问链接 http://127.0.0.1:8888/cat/s/config?op=routerConfigUpdate
    把下面的 xml 文件的 127.0.0.1 替换为你本机的实际的内网 IP,比如说 192.168.1.1, 然后重启 tomcat .

    <?xml version="1.0" encoding="utf-8"?>
    <router-config backup-server="127.0.0.1" backup-server-port="2280">
       <default-server id="127.0.0.1" weight="1.0" port="2280" enable="true"/>
       <network-policy id="default" title="default" block="false" server-group="default_group">
       </network-policy>
       <server-group id="default_group" title="default-group">
          <group-server id="127.0.0.1"/>
       </server-group>
    </router-config>

    步骤 7: 更改服务端配置
    访问链接 http://127.0.0.1:8888/cat/s/config?op=serverConfigUpdate
    说明:这个只需要更新一次,配置是保存在 mysql 的数据库里面.
    本机模式可直接复制以下内容,注意要修改 127.0.0.1 为实际的内网 IP,然后点击提交. 本配置已经将本机服务器 tag 下的  job-machine 和 alarm-machine 都可以配置为 true, 以便于 debug, 然后重启 tomcat. 需要说明的是 local mode, 是用于 cat 项目本身的开发,部署环境时置为false即可. 

    <?xml version="1.0" encoding="utf-8"?>
    <server-config>
       <server id="default">
          <properties>
             <property name="local-mode" value="false"/>
             <property name="job-machine" value="false"/>
             <property name="send-machine" value="false"/>
             <property name="alarm-machine" value="false"/>
             <property name="hdfs-enabled" value="false"/>
             <property name="remote-servers" value="127.0.0.1:8888"/>  <!-- 本机模式这个 IP 替换为 cat 拿到的内网 IP-->
          </properties>
          <storage  local-base-dir="/data/appdatas/cat/bucket/" max-hdfs-storage-time="15" local-report-storage-time="7" local-logivew-storage-time="7">
            <hdfs id="logview" max-size="128M" server-uri="hdfs://10.1.77.86/user/cat" base-dir="logview"/>
            <hdfs id="dump" max-size="128M" server-uri="hdfs://10.1.77.86/user/cat" base-dir="dump"/>
            <hdfs id="remote" max-size="128M" server-uri="hdfs://10.1.77.86/user/cat" base-dir="remote"/>
          </storage>
          <consumer>
             <long-config default-url-threshold="1000" default-sql-threshold="100" default-service-threshold="50">
                <domain name="cat" url-threshold="500" sql-threshold="500"/>
                <domain name="OpenPlatformWeb" url-threshold="100" sql-threshold="500"/>
             </long-config>
          </consumer>
       </server>
       <server id="127.0.0.1"> <!-- 本机模式这个 IP 替换为 cat 拿到的内网 IP,此 IP 是看 transaction 报表下 cat 的自己上报的 IP,用 127.0.0.1 是没用的.  -->
          <properties>
             <property name="job-machine" value="true"/>
             <property name="alarm-machine" value="true"/>
             <property name="send-machine" value="true"/>
          </properties>
       </server>
    </server-config>

    验证:
    http://127.0.0.1:8888/cat/
    3.0 版本默认密码: admin/admin
    2.0 版本密码: catadmin/catadmin

    ======================
    ClientConfig, RouterConfig 和 ServerConfig
    ======================
    Cat有三个重要配置, 分别是: ClientConfig, RouterConfig 和 ServerConfig, 分别代表客户端信息, 服务路由信息以及服务端配置信息.

    ClientConfig 配置(即client.xml 配置文件):
    每个客户端对应一组对服务器以及一个domain信息, 客户端默认从这组服务中的一个节点上拉取路由配置信息. 客户端的查询参数里带有domain信息, 服务端的路由配置里如果有相应的domain则返回相应domain下的一组server信息, 如果没有则返回default servers.
    返回的路由信息包含一组日志服务节点以及采样比例(sample), 日志服务节点包含权重, socket端口号以及id(ip). 采样比例是指客户端的cat日志多少次里抽样发送1次, 例如0.2则代表记录5次日志会忘服务端发送1次.

    RouterConfig 配置(通过 url 配置):
    客户端拉取到router信息后, 和router的日志server列表中第一个可用server之间建立netty channel, 并启动一个线程对channel进行维护. 对channel的维护主要包括:
    1. 比较服务端路由信息和客户端上次抓取的是否一致, 不一致则更新客户端router信息, 并重新建立新channel.
    2. 判断当前channel状态, 如果状态不正常, 则从router的server列表里重新找出一个能用的server建立channel.
    客户端拉取不到router信息时, 默认使用客户端下的server列表作为远程日志服务器组.

    ServerConfig 配置(通过 url 配置):
    ServerConfig主要用于服务端节点的职能描述, 主要有以下几类功能:
    1. 定义服务节点职能, 可以运行哪类任务, 以及是否可以发送告警信息和是否是hdfs存储节点.
    2. 通过consoleConfig定义相应报表数据的获取节点, 一般用于告警节点远程拉取所有节点的报表数据进行筛选.
    3. ConsumerConfig定义各种类型的事务时间阈值, 从名字可以看出来分别定义url, sql以及cache类型的事务时间的阈值, 超过这个时间会被认为是一个problem.


    ========================
    参考:
    ========================

    深入详解美团点评CAT跨语言服务监控(一) CAT简介与部署
    https://blog.csdn.net/caohao0591/article/details/80693289


    官方部署文档
    https://github.com/dianping/cat/blob/master/cat-doc/posts/ch4-server/README.md

  • 相关阅读:
    4 Apr 18 软件开发目录 logging模块的使用 序列化(Json, Pickle) os模块
    3 Apr 18 内置函数 列表生成式与生成器表达式 模块的使用之import 模块的使用之from…import…
    2 Apr 18 三元表达式 函数递归 匿名函数 内置函数
    30 Mar 18 迭代器 生成器 面向过程的编程
    29 Mar 18 函数 有参、无参装饰器
    28 Mar 18 函数
    27 Mar 18 函数的参数
    26 Mar 18 函数介绍
    23 Mar 18 文件处理
    22 Mar 18 补充数据类型+字符编码+文件处理
  • 原文地址:https://www.cnblogs.com/harrychinese/p/dianping-cat-server-setup.html
Copyright © 2011-2022 走看看