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

  • 相关阅读:
    设计模式----单例模式
    C++ 派生类
    C++ 操作符
    构造,清理,拷贝和移动
    php的yii框架开发总结10
    php的yii框架开发总结9
    php的yii框架开发总结8
    php的yii框架开发总结7
    php的yii框架开发总结6
    php的yii框架开发总结5
  • 原文地址:https://www.cnblogs.com/harrychinese/p/dianping-cat-server-setup.html
Copyright © 2011-2022 走看看