详细可参考https://github.com/dianping/cat,本文仅摘取我们搭建时需要关注的部分
1、介绍
cat核心组件有5个
- cat-client: 客户端,上报监控数据
- cat-consumer: 服务端,收集监控数据进行统计分析,构建丰富的统计报表
- cat-alarm: 实时告警,提供报表指标的监控告警
- cat-hadoop: 数据存储,logview 存储至 Hdfs
- cat-home: 管理端,报表展示、配置管理等
client为各个业务系统上报监控数据使用,其余4个统一部署在同一个jvm里,通过配置文件来开启对应功能,使用到的mysql只有一个,数据存储可用hdfs也可用磁盘。
2、搭建过程
2.1、目录权限
要求/data/目录能进行读写操作,默认的数据文件和配置文件会写到此目录。
2.2、配置文件
配置/data/appdatas/cat/client.xml,内容如下
<?xml version="1.0" encoding="utf-8"?> <config mode="client"> <servers> <server ip="10.1.1.1" port="2280" http-port="8080"/> <server ip="10.1.1.2" port="2280" http-port="8080"/> <server ip="10.1.1.3" port="2280" http-port="8080"/> </servers> </config>
2.3、初始化数据库
建表脚本:CatApplication.sql
2.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>root</password> <!-- 请替换为真实数据库密码 --> <connectionProperties><![CDATA[useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&socketTimeout=120000]]></connectionProperties> </properties> </data-source> </data-sources>
需要替换jdbc.url,jdbc.user,jdbc.password这三个值。
2.5、获取war包
可以从git上获取源码自己打包,也可以直接下载:http://unidal.org/nexus/service/local/repositories/releases/content/com/dianping/cat/cat-home/3.0.0/cat-home-3.0.0.war,注意直接下载的为jdk8编译的,运行时也需要jdk8
2.6、部署到tomcat
- 将上步的war包重命名为cat.war,部署到tomcat的webapps下,启动tomcat。
- 浏览器打开:http://10.1.1.1:8080/cat/s/config?op=routerConfigUpdate
- 输入默认用户名:admin 默认密码:admin。
- 更新配置示例如下,更新之后重启此台tomcat,然后启动其他机器的tomcat
<?xml version="1.0" encoding="utf-8"?> <router-config backup-server="10.1.1.1" backup-server-port="2280"> <default-server id="10.1.1.1" weight="1.0" port="2280" enable="false"/> <default-server id="10.1.1.2" weight="1.0" port="2280" enable="true"/> <default-server id="10.1.1.3" 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="10.1.1.2"/> <group-server id="10.1.1.3"/> </server-group> <domain id="cat"> <group id="default"> <server id="10.1.1.2" port="2280" weight="1.0"/> <server id="10.1.1.3" port="2280" weight="1.0"/> </group> </domain> </router-config>
说明:
- 注意10.1.1.1,10.1.1.2,10.1.1.3这几个IP需要替换为自己实际的IP,修改路由配置仅仅需要修改一次即可,这部分数据会存入mysql中。
- enable=false表示机器不可用,10.1.1.1机器不做为消费机集群。所有客户端上报的消息都由于10.1.1.2,10.1.1.3来处理。
- 更多服务端机器按需添加Xml配置即可。
2.7、服务端配置
配置链接:http://{ip:port}/cat/s/config?op=serverConfigUpdate
说明:这个只需要更新一次,配置是保存在mysql的数据库里面。
- CAT节点职责
-
- 控制台 - 提供给业务人员进行数据查看【默认所有的cat节点都可以作为控制台,不可配置】
- 消费机 - 实时接收业务数据,实时处理,提供实时分析报表【默认所有的cat节点都可以作为消费机,不可配置】
- 告警端 - 启动告警线程,进行规则匹配,发送告警(目前仅支持单点部署)【可以配置】
- 任务机 - 做一些离线的任务,合并天、周、月等报表 【可以配置】
- 集群配置
线上做多集群部署,假设有10.1.1.1,10.1.1.2,10.1.1.3这三台机器
-
- 建议选取一台或多台机器负责角色有控制台、告警端、任务机,例如10.1.1.1。配置域名访问CAT,该域名关联至10.1.1.1
- 10.1.1.2,10.1.1.3 负责消费机处理,这样能做到有效隔离,任务机、告警等问题不影响实时数据处理
- remote-servers 这个一定要配置正确,端口号为8080,这里面的remote-servers为10.1.1.1:8080,10.1.1.2:8080,10.1.1.3:8080
- 完成以上步骤,重启下当前CAT节点
配置的sample如下: id="default"是默认的配置信息,server id="10.1.1.1" 如下的配置是表示10.1.1.1这台服务器的节点配置覆盖default的配置信息,比如下面的job-machine,alarm-machine,send-machine为true。
<?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="10.1.1.1:8080,10.1.1.2:8080,10.1.1.3:8080"/> </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/" base-dir="user/cat/logview"/> <hdfs id="dump" max-size="128M" server-uri="hdfs://10.1.77.86/" base-dir="user/cat/dump"/> <hdfs id="remote" max-size="128M" server-uri="hdfs://10.1.77.86/" base-dir="user/cat/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="10.1.1.1"> <properties> <property name="job-machine" value="true"/> <property name="alarm-machine" value="true"/> <property name="send-machine" value="true"/> </properties> </server> </server-config>
- 配置说明:
请注意:当一个机器角色更改后,请重启该机器!
server模型:代表一台机器的配置。如果id为default,代表默认配置;如果id为ip,代表该台服务器的配置 * property local-mode : 定义服务是否为本地模式(开发模式),在生产环境时,设置为false,启动远程监听模式。默认为 false; * property hdfs-machine : 定义是否启用HDFS存储方式,默认为 false; * property job-machine : 定义当前服务是否为报告工作机(开启生成汇总报告和统计报告的任务,只需要一台服务机开启此功能),默认为 false; * property alarm-machine : 定义当前服务是否为报警机(开启各类报警监听,只需要一台服务机开启此功能),默认为 false; * property send-machine : 定义当前服务告警是否发送(当时为了解决测试环境开启告警线程,但是最后告警不通知,此配置后续会逐步去除,建议alarm-machine开启为true的时候,这个同步为true) storage模型: 定义数据存储配置信息 * property local-report-storage-time : 定义本地报告存放时长,单位为(天) * property local-logivew-storage-time : 定义本地日志存放时长,单位为(天) * property local-base-dir : 定义本地数据存储目录,此目录为上传到HDFS时所查找的源文件路径 * property hdfs : 定义HDFS配置信息,便于直接登录系统 * property server-uri : 定义HDFS服务地址,支持配置Nameservice * property console : 定义服务控制台信息 * property remote-servers : 定义HTTP服务列表,(远程监听端同步更新服务端信息即取此值) * ldap : 定义LDAP配置信息(这个可以忽略) * ldapUrl : 定义LDAP服务地址(这个可以忽略)
2.8、重启不影响数据可用性(线上环境)
单机模式部署可略过此步骤,线上环境使用建议配置。
- 请在tomcat重启之前调用当前tomcat的存储数据的链接 http://${ip}:8080/cat/r/home?op=checkpoint,重启之后数据会恢复。【注意重启时间在每小时的整点10-55分钟之间】
- 线上部署时候,建议把此链接调用存放于tomcat的stop脚本中,这样不需要每次手工调用