我们有三种部署方式:
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

点评cat系列-服务器开发环境部署的更多相关文章

  1. 【Xamarin开发 Android 系列 1】环境部署搭建

    原文:[Xamarin开发 Android 系列 1]环境部署搭建 开篇自然先扯一段,近几年移动互联网如果熊猫零食一样,蔓延迅速.楼主身为一个微软忠实的粉丝,无奈,老爹不给力.Silverlight开 ...

  2. 一个CentOS7的开发环境部署,包括防火墙|VPN|多IP多网关|HTTP代理服务器设置等

    http://www.lenggirl.com/code/centos7.html layout: post title: "一个CentOS7的开发环境部署,包括防火墙|VPN|HTTP代 ...

  3. 【J2EE】struts-2.3.16.3+apache-tomcat-8.0.9开发环境部署,“Hello World”的实现。

    1.在官网下载Struts2的开发包 下载链接如下: http://120.203.229.30/5ff/2bc79/5ff16ae8698e1c321758a8f03a1bc0939892bc79/ ...

  4. linux 下 ifcfg-eth0 配置/CentOS_minimal安装和开发环境部署

    CentOS_minimal安装和开发环境部署:http://www.th7.cn/system/lin/201305/39002.shtml 网络接口配置文件 [root@localhost ~]# ...

  5. 西秦的ACE-Python教程 一、Python本地开发环境部署

    西秦的ACE-Python教程 一.Python本地开发环境部署       西秦 级别: 论坛版主 发帖 1357 云币 2782 加关注 写私信   只看楼主 更多操作楼主  发表于: 10-10 ...

  6. Electron开发环境部署

    Electron开发环境部署 安装node.js 可以从node.js官方网站上获取安装包,并进行安装,安装完可以通过 ndoe -v 指令进行版本查看. 本文的开发环境为node.js 4.4.5. ...

  7. eclipse+hbase开发环境部署

    一.前言 1. 前提 因为hbase的运行模式是伪分布式,需要用到hdfs,所以在此之前,我已经完成了hadoop-eclipse的开发环境搭建,详细看另一篇文章:hadoop开发环境部署——通过ec ...

  8. Linux——Django 开发环境部署(二)python版本控制器pyenv

    python版本控制器pyenv 之前的 那篇是说明了django环境的site package完全独立出来了,但是使用的python解释器还是系统的,为了继续独立出来,甚至是达到ruby的rvm的自 ...

  9. Linux——Django 开发环境部署(一)

    Django 开发环境部署(一) 之所以 写这篇文章的原因在于django环境的确轻松搭建,之前Ubuntu上安装了,的确很轻松,但是后期我才知道随便做个环境出来很容易到了后面很麻烦,污 染了系统里的 ...

随机推荐

  1. 详解 CORS跨域的几种不同实现方式

    CORS 定义 CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing),它允许浏览器向跨源服务器,发出XMLHttpRequ ...

  2. springMVC使用HandlerMethodArgumentResolver 自定义解析器实现请求参数绑定方法参数

    http://blog.csdn.net/truong/article/details/30971317 http://blog.csdn.net/fytain/article/details/439 ...

  3. web框架开发-Django模型层(2)-多表操作

    很重要,都是精华 多表关系模型 一对一 一旦确定表关系是一对一,在两张表中的任意一张表中建立关联字段+Unique 一对多 一旦确定表关系是一对多,创建关联字段在多的表中 多对多 一旦确定表关系是多对 ...

  4. 19.java反射入门

    一.反射机制是什么反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为jav ...

  5. firewall centos

    firewall-cmd --add-port=8056/tcp    --临时增加端口 firewall-cmd --permanent --zone=public --add-port=6069/ ...

  6. TensorRT&Sample&Python[network_api_pytorch_mnist]

    本文是基于TensorRT 5.0.2基础上,关于其内部的network_api_pytorch_mnist例子的分析和介绍. 本例子直接基于pytorch进行训练,然后直接导出权重值为字典,此时并未 ...

  7. 基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件

    目录 1. 前言 2. 关于vue-simple-uploader 3. 基于vue-simple-uploader封装全局上传组件 4. 文件上传流程概览 5. 文件分片 6. MD5的计算过程 7 ...

  8. python之configparser模块详解--小白博客

    configparse模块 一.ConfigParser简介 ConfigParser 是用来读取配置文件的包.配置文件的格式如下:中括号“[ ]”内包含的为section.section 下面为类似 ...

  9. hdu-1052(贪心)

    链接 [https://vjudge.net/contest/261555#problem/I] 题意 就是两个人都有n匹马,每只马都有战力 第二个人出马的顺序是战力大到小,请问第一个人采取怎样的策略 ...

  10. Python中数学函数

    1.不需要引入math模块的有: abs(),cmp(),max(),min(),pow(),round() 2.需要引入math模块的: 三角函数,及其他数学函数,fabs(), *需要特别注意: ...