1. 程式人生 > >Cat學習篇 | CAT跨語言服務鏈監控(一) CAT簡介與部署

Cat學習篇 | CAT跨語言服務鏈監控(一) CAT簡介與部署

(一) CAT簡介與部署
    介紹
    背景介紹
    Cat系統的特性
    訊息樹
    CAT部署
    
(二) CAT服務端初始化
    Cat模組
    Cat-servlet初始化
    plexus - IOC容器
    模組的載入 - 模型模式
    cat-home的setup
    TcpSocketReceiver--- netty reactor 模式的應用
    訊息的解碼
    
(三) CAT客戶端原理
    cat客戶端部分核心類
    訊息的組織 - 訊息樹
    客戶端的初始化
    訊息生產 -- 入棧
    Context 執行緒本地變數
    Transaction事務的開啟
    其他型別訊息組合
    訊息的完成-出棧
    訊息的傳送-佇列化
    訊息的序列化
    MessageId的設計
    

(四) 服務端訊息分發
    分發架構
    分析管理器的初始化
    消費者與週期管理器的初始化
    什麼是週期?
    週期任務-任務佇列
    訊息分發
    週期策略
    
(五) 配置與資料庫操作
    CAT配置
    程式碼自動生成
    資料庫操作
    資料庫連線管理
    
(六) 訊息分析器與報表(一)
    訊息分析器的構建
    TopAnalyzer
    EventAnalyzer - 事件發生次數分析
    MetricAnalyzer - 業務分析
    ProblemAnalyzer -異常分析
    TransactionAnalyzer - 事務分析
    
(七)訊息分析器與報表(二)
    CrossAnalyzer-呼叫鏈分析
    StorageAnalyzer  --資料庫/快取分析
    StateAnalyzer
    HeartbeatAnalyzer
    DumpAnalyzer -- 原始訊息LogView儲存
    自定義分析器與報表
    
(八) 報表持久化
    週期結束
    分析器的結束 -- 報表持久化
    報表預處理
    報表的檔案儲存 -- 重入鎖
    報表的資料庫儲存
    定時任務
    
(九) 管理平臺MVC框架
    Servlet容器與請求生命週期
    頁面路由初始化
    請求處理流程
    
(十)與JAVA框架的整合
    與Spring MVC整合
    與Spring Boot 整合
    與Spring Cloud 整合
    與dubbo整合
    與MyBatis整合
    與Log4j整合
    
(十一) 其他語言支援
    PHP語言
    C++語言
    LUA語言
    Go語言
    Node.js語言
    Android埋點
    Object  C -- IOS 埋點

(十二) 報警與監控提醒

    簡訊通知

    郵件通知

(十三) CAT與實時計算
    hadoop模組

    spark實時計算模組

介紹:

    大眾點評CAT系統原型和理念來源於eBay的CAL的系統,CAT系統第一代設計者吳其敏在eBay工作長達十幾年,對CAL系統有深刻的理解。CAT不僅增強了CAL系統核心模型,還添加了更豐富的報表。自2014年開源以來,CAT在攜程、陸金所、獵聘網、找鋼網等多家網際網路公司生產環境應用。

    CAT是一個實時和接近全量的監控系統,它側重於對Java應用的監控,除了與點評RPC元件融合的很好之外,他將會能與Spring、MyBatis、Dubbo 等框架以及Log4j 等結合,不久將會支援PHP、C++、Go等多語言應用,基本接入了美團點評上海側所有核心應用。目前在中介軟體(MVC、RPC、資料庫、快取等)框架中得到廣泛應用,為美團點評各業務線提供系統的效能指標、健康狀況、監控告警等,在微服務監控領域也是非常有用的一套元件。

    本文會對CAT整體設計、客戶端、服務端等的一些設計思路做詳細深入的介紹。

    在詳細瞭解CAT的整體設計細節之後,我們可以在CAT基礎之上輕鬆擴充套件我們自己的監控和資料收集模組。

背景介紹

    CAT整個產品研發是從2011年底開始的,當時正是大眾點評App Net遷移Java的核心起步階段。當初大眾點評App已經有核心的基礎中介軟體、RPC元件Pigeon、統一配置元件lion。整體Java遷移已經在服務化的路上。隨著服務化的深入,整體Java在線上部署規模逐漸變多,同時,暴露的問題也越來越多。典型的問題有:

  • 大量報錯,特別是核心服務,需要花很久時間才能定位。

  • 異常日誌都需要線上許可權登陸線上機器排查,排錯時間長。

  • 有些簡單的錯誤定位都非常困難(一次將線上的庫配置到了Beta,花了整個通宵排錯)。

  • 很多不了了之的問題懷疑是網路問題(從現在看,內網真的很少出問題)。

    雖然那時候也有一些簡單的監控工具(比如Zabbix,自己研發的Hawk系統等),可能單個工具在某方面的功能還不錯,但整體服務化水平參差不齊、擴充套件能力相對較弱,監控工具間不能互通互聯,使得查詢問題根源基本都需要在多個系統之間切換,有時候真的是靠“人品”才能找出根源。適逢吳其敏從eBay加入大眾點評成為首席架構師,eBay的CAL系統在內部非常成功,就在這樣天時地利與人和的情況下,我們開始研發了大眾點評App第一代監控系統——CAT。

Cat系統的特性

  • 實時處理:資訊的價值會隨時間銳減,尤其是事故處理過程中。
  • 全量資料:最開始的設計目標就是全量採集,全量的好處有很多。
  • 高可用:所有應用都倒下了,需要監控還站著,並告訴工程師發生了什麼,做到故障還原和問題定位。
  • 故障容忍:CAT本身故障不應該影響業務正常運轉,CAT掛了,應用不該受影響,只是監控能力暫時減弱。
  • 高吞吐:要想還原真相,需要全方位地監控和度量,必須要有超強的處理吞吐能力。
  • 可擴充套件:支援分散式、跨IDC部署,橫向擴充套件的監控系統。
  • 不保證可靠:允許訊息丟失,這是一個很重要的trade-off,目前CAT服務端可以做到4個9的可靠性,可靠系統和不可靠性系統的設計差別非常大。

目前現狀:
        15臺CAT物理監控叢集
        單臺機器15w qps
       2000+ 業務應用(包括部分.net以及Job)

 7000+ 應用伺服器

 50TB 訊息,~450億訊息(每天)

CAT支援的監控訊息型別包括:
  • Transaction 適合記錄跨越系統邊界的程式訪問行為,比如遠端呼叫,資料庫呼叫,也適合執行時間較長的業務邏輯監控,Transaction用來記錄一段程式碼的執行時間和次數。
  • Event 用來記錄一件事發生的次數,比如記錄系統異常,它和transaction相比缺少了時間的統計,開銷比transaction要小。
  • Heartbeat 表示程式內定期產生的統計資訊, 如CPU%, MEM%, 連線池狀態, 系統負載等。
  • Metric 用於記錄業務指標、指標可能包含對一個指標記錄次數、記錄平均值、記錄總和,業務指標最低統計粒度為1分鐘。
  • Trace 用於記錄基本的trace資訊,類似於log4j的info資訊,這些資訊僅用於檢視一些相關資訊

訊息樹

    CAT監控系統將每次URL、Service的請求內部執行情況都封裝為一個完整的訊息樹、訊息樹可能包括Transaction、Event、Heartbeat、Metric和Trace資訊。

完整的訊息樹

Alt text視覺化訊息樹

Alt text

分散式訊息樹【一臺機器呼叫另外一臺機器】

Alt text


CAT部署

所需環境

  • Linux 2.6以及之上(2.6核心才可以支援epoll),Mac以及Windows環境可以作為開發環境
  • Java 6,7,8
  • Maven 3.2.3+
  • MySQL 5.6

我司的環境配置如下

  1. Distributor ID: CentOS
  2. Description: CentOS release 6.5 (Final)
  3. Release: 6.5
  4. Codename: Final
  5. Server version: Apache Tomcat/8.0.30
  6. Server built: Dec 1 2015 22:30:46 UTC
  7. Server number: 8.0.30.0
  8. OS Name: Linux
  9. OS Version: 2.6.32-431.el6.x86_64
  10. Architecture: amd64
  11. JVM Version: 1.8.0_111-b14
  12. JVM Vendor: Oracle Corporation
  13. Maven 3.3.3
  14. Mysql 5.6
  15. tomcat 7.0.70 建議使用此版本,修改中文亂碼 tomcat conf 目錄下 server.xml
  16. <Connector port="8080" protocol="HTTP/1.1"
  17. URIEncoding="utf-8" connectionTimeout="20000"
  18. redirectPort="8443" /> 增加 URIEncoding="utf-8"

 1、將分支mvn-repo下的jar包複製到本機maven倉庫,cat一些依賴的jar存放於mvn-repo分支

  1. 1、git clone https://github.com/dianping/cat.git
  2. 2、cd cat
  3. 3、git checkout mvn-repo
  4. 4、cp -R * ~/.m2/repository
  5. 5、git checkout master
  6. 6、mvn clean install -DskipTests

如果下載有問題,可以嘗試翻牆後下載

2、在CAT目錄下,用maven構建專案

       mvn clean install -DskipTests

3、配置CAT的執行需要配置資訊
mvn cat:install

Note: 

  • Linux\Mac 需要對/data/appdatas/cat和/data/applogs/cat有讀寫許可權
  • Windows 則是對系統執行盤下的/data/appdatas/cat和/data/applogs/cat有讀寫許可權,如果cat服務執行在e盤的tomcat中,則需要對e:/data/appdatas/cat和e:/data/applogs/cat有讀寫許可權
  •   此步驟是自動配置一些cat啟動需要的基本資料庫配置以及配置檔案,如果發現此步驟有問題,可以直接使用第五步,手工方式安裝。
    
4、(Optional)如果安裝了hadoop叢集,需到/data/appdatas/cat/server.xml中配置對應hadoop資訊。將localmode設定為false,預設情況下,CAT在開發模式(localmode=true)下工作。推薦大部分公司使用單機模式,不需要搭建hdfs,部署cat的服務端使用一個大磁碟的機器,比如1TB,這樣可以省去很多事情。

================如果上述自動化程式出現問題,可以使用如下部署進行嘗試,這步驟其實就是上述自動化程式做的事情==========================

5、啟動的cat單機版本基本步驟
  • 檢查下/data/appdatas/cat/ 下面需要的需要的配置檔案,配置檔案在原始碼script,請修改對應的datasources.xml 以及 client.xml 裡面對應的IP、PSW部分。注意cat服務端的資料上報埠是2280,cat的http埠預設是tomcat的埠8080。
  • 修改server.xml 部分,注意修改server.xml 裡面的remote-servers的埠設定,如果是tomcat,一般是8080。
  • 建立一個mysql的資料庫,資料庫的安裝檔案在script檔案下的Cat.sql,可以匯入到資料庫中。
  • 在cat目錄下執行 mvn install -DskipTests
  • cat-home打包出來的war包,重新命名為cat.war, 並放入tomcat的webapps
  • 啟動tomcat
6、匯入eclipse發現找不到類
  • 請先執行mvn eclipse:eclipse 會自動生成相關的類檔案
  • 作為普通專案匯入eclipse,不要用作為maven專案匯入eclipse
7、可以參考script目錄下詳細資料

相關推薦

Cat學習 | CAT語言服務監控 CAT簡介部署

(一) CAT簡介與部署    介紹    背景介紹    Cat系統的特性    訊息樹    CAT部署    (二) CAT服務端初始化    Cat模組    Cat-servlet初始化    plexus - IOC容器    模組的載入 - 模型模式    ca

深入詳解美團點評CAT語言服務監控 CAT簡介部署

原文連結: https://blog.csdn.net/caohao0591/article/details/80693289 前言: CAT是一個實時和接近全量的監控系統,它側重於對Java應用的監控,除了與點評RPC元件融合的很好之外,他將會能與Spring、MyBatis、Dub

深入詳解美團點評CAT語言服務監控 CAT簡介部署

前言: CAT是一個實時和接近全量的監控系統,它側重於對Java應用的監控,除了與點評RPC元件融合的很好之外,他將會能與Spring、MyBatis、Dubbo 等框架以及Log4j 等結合,支援PHP、C++、Go等多語言應用,基本接入了美團點評上海側所有核心應用。目

Meteor學習路程簡介安裝

一、Meteor是什麼? Meteor是一個構建在Node.js之平臺,用於開發讓網頁能夠實時和響應的程式。Meteor位於程式資料庫和使用者介面之間,儲存二者之間的資料同步更新。 二、為何使用Meteor? 易於學習,上手快 三、安裝Meteor(我主要是Windows安裝的哦

C語言面向物件程式設計:封裝繼承

最近在用 C 做專案,之前用慣了 C++ ,轉回頭來用C 還真有點不適應。 C++ 語言中自帶面向物件支援,如封裝、繼承、多型等面向物件的基本特徵。 C 原本是面向過程的語言,自身沒有內建這些特性,但我們還是可以利用 C 語言本身已有的特性來實現面向物件的一些基本特徵。接下來

dubbo學習dubbo簡介原理

一、Dubbo背景和簡介 單一應用框架(ORM)  當網站流量很小時,只需一個應用,將所有功能如下單支付等都部署在一起,以減少部署節點和成本。 缺點:單一的系統架構,使得在開發過程中,佔用的資源越來越多,而且隨著流量的增加越來越難以維護  垂直應用框架(MV

CAT語言服務加拿大28平臺搭建監控消息分析器報表

active 進行 del 哪些 name 取出 服務監控 想要 微服務 CrossAnalyzer-調用鏈加拿大28平臺搭建論壇:haozbbs.com Q1446595067分析 在分布式環境中,應用是運行在獨立的進程中的,有可能是不同的機器,或者不同的服務器進程。那

深入詳解美團點評CAT語言服務監控CAT管理平臺MVC框架

    在第2章我們講到,伺服器在初始化CatServlet 之後, 會初始化 MVC,MVC也是繼承自AbstractContainerServlet , 同樣也是一個 Servlet 容器,這是一個非常古老的MVC框架,當時Spring MVC 還並不成熟,但是所有M

深入詳解美團點評CAT語言服務監控訊息分析器報表(二)

CrossAnalyzer-呼叫鏈分析      在分散式環境中,應用是執行在獨立的程序中的,有可能是不同的機器,或者不同的伺服器程序。那麼他們如果想要彼此聯絡在一起,形成一個呼叫鏈,在Cat中,CrossAnalyzer會統計不同服務之間呼叫的情況,包括服務的訪問量,

深入詳解美團點評CAT語言服務監控 CAT服務端初始化

Cat模組 Cat-client : cat客戶端,編譯後生成 cat-client-2.0.0.jar ,使用者可以通過它來向cat-home上報統一格式的日誌資訊,可以整合到 mybatis、spring、微服務 dubbo 的監控等等流行框架。  C

C++語言學習——C++簡介

產品 泛型 alt 科學計算 內容 實現 .com 運算符 ces C++語言學習(一)——C++簡介 一、C++簡介 C 語言作是結構化和模塊化的語言,適合處理較小規模的程序。對於復雜的問題,規模較大的程序,需要高度的抽象和建模時,C語言並不合適。為了解決軟件危機, 20

從零開始學習區塊技術--從原始碼編譯比特幣

寫在開始之前,為什麼你一定要學習區塊鏈技術? 技術的變革和迭代一直在飛速發展中,作為有著15年程式開發經驗的我,常常在思考現在的我們到底改如何做,到底應該學習些什麼,才能跟上新的時代變革,保持自身的競爭力,並且能為這個世界帶來更好的改變呢? 答案是,學習

NIO原理剖析Netty初步----淺談高性能服務器開發

返回 創建 基於 register 訪問 io操作 nbsp info class 除特別註明外,本站所有文章均為原創,轉載請註明地址 在博主不長的工作經歷中,NIO用的並不多,由於使用原生的Java NIO編程的復雜性,大多數時候我們會選擇Netty,m

機器學習中的範數規則化之L0、L1L2範數

[0 證明 基本上 復雜度 所有 img 方法 風險 機器學習 機器學習中的範數規則化之(一)L0、L1與L2範數 [email protected]/* */ http://blog.csdn.net/zouxy09 轉自:http://blog.csdn.n

【問底】夏俊:深入站點服務端技術——站點並發的問題

而是 思路 臨時 系統負載 表現 json article 不能 情況 摘要:本文來自擁有十年IT從業經驗、擅長站點架構設計、Web前端技術以及Java企業級開發的夏俊,此文也是《關於大型站點技術演進的思考》系列文章的最新出爐內容。首發於CSDN,各位技術人員不

高性能服務器架構:緩沖策略

lin 特點 領域 思路 不能 查表 edi 操作 帶寬 原文鏈接:https://mp.weixin.qq.com/s?__biz=MzA5ODExMTkwMA==&mid=402675187&idx=1&sn=d240f6d1430b86bc00

C語言代碼訓練

color tro 題型 blank adding bsp 喜歡 add 方便 今天我們先來講解一道C語言的經典例題,也是從零開始系列中的一道課後練習題。 請用控制臺程序繪制如下圖案。 循環經典例題 分析情況 這個題目是要求打印30行"*",每行打印的個數不同。通過這

Java總結系列:Java多線程

常見 而是 同時 private 狀態 過程 運行時 不同的 bstr Java總結篇系列:Java多線程(一) 多線程作為Java中很重要的一個知識點,在此還是有必要總結一下的。 一.線程的生命周期及五種基本狀態 關於Java中線程的生命周期,首先看一下下面這張較

Re:從0開始的微服務架構:重識微服務架構--轉

相關 推廣 模塊劃分 ati 滿足 face jar 點擊放大 積累 原文地址:http://www.infoq.com/cn/articles/micro-service-architecture-from-zero?utm_source=infoq&utm_me

分布式服務框架 Zookeeper介紹

出現 編寫 擁有 不同的 順序 高性能 場景 設計 分發 一、概述ZooKeeper(動物園管理員),顧名思義,是用來管理Hadoop(大象)、Hive(蜜蜂)、Pig(小豬)的管理員,同時Apache Hbase、Apache Solr、LinkedIn Sensei等眾