我们有三种部署方式:
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. 【Python 补充01】Python运算符

    Python运算符 举个简单的例子 4 +5 = 9 . 例子中,4 和 5 被称为操作数,"+" 称为运算符. 1.算术运算符 + - * / # 加减乘除 % # 取模(返回除 ...

  2. 腾讯大数据平台Oceanus: A one-stop platform for real time stream processing powered by Apache Flink

    January 25, 2019Use Cases, Apache Flink The Big Data Team at Tencent     In recent years, the increa ...

  3. Configuring Apache Kafka Security

    This topic describes additional steps you can take to ensure the safety and integrity of your data s ...

  4. 【转】VUE 爬坑之旅-- 如何对公共JS,CSS进行统一管理,全局调用

    原文:https://blog.csdn.net/zgh0711/article/details/78664262 vue 中,将页面分为了各个组件,我们写好组件,就可以将这个组件运用到其他各个页面中 ...

  5. 一位月薪1.2w的北漂程序员真实生活!

    “ 每个人都有一条生活道路.千万人,千万条,各不相同,各有特点.但是并不是好人都有一条好路,坏人都有一坏路.有的时候却恰恰相反.这虽然不是历史的必然,但却是客观社会存在的.今天咱们说的这部书是发生在当 ...

  6. Spring Cloud 入门教程(七): 熔断机制 -- 断路器

    对断路器模式不太清楚的话,可以参看另一篇博文:断路器(Curcuit Breaker)模式,下面直接介绍Spring Cloud的断路器如何使用. SpringCloud Netflix实现了断路器库 ...

  7. GXOI/GZOI2019题解

    GXOI/GZOI2019题解 P5300 [GXOI/GZOI2019]与或和 一眼题.. 显然枚举每个二进制位,答案就变成了全1子矩阵数量. 这个xjb推推,单调栈一下就行了. #include& ...

  8. ASP.NET Web API2返回值处理流程

    关于WebApi2控制器方法的四种返回类型请参考官方文档: https://docs.microsoft.com/zh-cn/aspnet/web-api/overview/getting-start ...

  9. 最简单易懂的Spring Security 身份认证流程讲解

    最简单易懂的Spring Security 身份认证流程讲解 导言 相信大伙对Spring Security这个框架又爱又恨,爱它的强大,恨它的繁琐,其实这是一个误区,Spring Security确 ...

  10. 再看ExpressionTree,Emit,反射创建对象性能对比

    [前言] 前几日心血来潮想研究着做一个Spring框架,自然地就涉及到了Ioc容器对象创建的问题,研究怎么高性能地创建一个对象.第一联想到了Emit,兴致冲冲写了个Emit创建对象的工厂.在做性能测试 ...