Bosh Health Monitor原始碼
Bosh Health Monitor原始碼
Bosh HealthMonitor(BHM)是Bosh裡面的一個元件,負責收集BoshAgent收集到的各個元件的資訊,比如cpu,mem,disk等。BHM有兩種事件,一種是Bosh::Monitor::HeartBeat以及Bosh::Monitor::Alert。另外一個概念是plugin,在BHM裡面有很多外掛,這些外掛負責具體地怎麼去處理一個HeartBeat或者Alert事件。在health_monitor.yml檔案中有一個plugins選項:
plugins: - name: logger events: - alert - name: tsdb events: - alert - heartbeat options: host: 10.134.16.220 port: 4242
這個plugins選項負責設定某一個外掛對什麼事件感興趣,比如tsdb選項對alert,heartbeat事件都感興趣。
在原始碼裡面儲存這樣一個數組@plugins,這裡儲存了事件和外掛的對應關係。
@plugins[''alert]=['logger','heartbeat'],當收到某一個事件的時候就比如alert時候,就會查詢這個陣列,然後分別呼叫相應logger的Plugin::process方法。
AgentManger類是負責管理所有客戶端的agent以及deployments選項。
DirectorMonitor負責訂閱hm.director.alert訊息,觀察director的宣告週期,當
EventProcesser是所有外掛處理器的一個通用介面,所有的事件經過這個處理器。然後呼叫各種各樣的c外掛。
在啟動的時候AgentManger::setup_events時候,
@processor.add_plugin(lookup_plugin(plugin["name"],plugin["options"]), plugin["events"])
lookup_plugin會根據這個建立一個plugininstance。
訂閱hm.agent.heartbeat.*,hm.agent.alert.*,
這些訊息的處理函式都會呼叫AgentManger::process_event
process_event(kind,subject, payload = {})
kind—alert,heartbeart
subject—hm.agent.heartbeat.<agent_id> 提取最後一個欄位就可以知道是那一個agent
case kind.to_s
然後根據訊息的型別,呼叫相應的處理函式
when "alert"
on_alert(agent,message)
when "heartbeat"
on_heartbeat(agent,message)
when "shutdown"
on_shutdown(agent,message)
else
@logger.warn("Nohandler found for `#{kind}' event")
end
on_alert和on_heartbeat都是可以通過呼叫EventProcesser來處理這些事件。
on_shutdown只是remove_agent將其從AgentManger::agents裡面移除。
定時操作:
在啟動的時候BHM會啟動幾個定時器操作。
EM.add_periodic_timer(@intervals.poll_director) { poll_director }
poll_director會從director獲得deployment以及agent_id名稱,然後根據AgentManger自身維護的@deployments以及@agent_id決定留下deployments以及agent_id
poll_director函式主要負責去director裡面取出資料,填充到@agents,@developments裡面
Dirrctor::fetch_deployments
獲取部署的名稱。
AgentManger::sync_deployments來同步deployments
sync_deployments把從director裡面拿部署叢集的名稱,和在@deployments裡面儲存的名稱進行比較,如果發現@deployments沒有的staledeployment那麼就從@deployments裡面刪除。同時從@agent裡面刪除這個staledeployment的所有agent。
AgentManger::sync_agents(deployment_name,vms)
Director::get_deployment_vms(deployment_name)獲取部署名稱所對應的vms,在get_deployment_vms獲取的資料是這樣的,eg:
[{"agent_id":"a3e91d0a-a5a3-41ca-abe3-57d256d28e45","cid":"vm-a34c83e0-209c-467c-8eec-e26470997a0c","job":"mysql_node_100","index":0},
{"agent_id":"11fd6005-5d84-4819-8d62-89a9cdd1c15b","cid":"vm-0c503d2a-f1cf-4685-a581-9744afcb3cf9","job":"dea","index":2},
{"agent_id":"16b9dddc-9c2d-426d-88e7-7aaaba703a65","cid":"vm-7d150ca7-4a19-4993-abf2-db654ed3853e","job":"stager","index":0},
有一個agent_id,cid,job,index這些選項。
@deployment[deployname][agentdid]這一系列陣列。@deploymenst是一個Hashdeployment=>agentids
另外一個定時操作是analyze_agents
一次性分析所有agents
首先獲取所有的#Agents from managed deployments
把AgentManger::@[email protected],對於這些多出來的agent
[email protected][agent_id]---Bosh::Monitor::Agent
Agent有兩個方法,time_out?以及rogue?
time_out?用現在的時間減去上次更新的時間(由hearbeat更新時間)如果大於在health_monitor.yml裡面的agent_timeout的時間,那麼就超時了
rogue?比較難理解
rogue?現在時間減去[email protected]_at如果超過了rogue_agent_alert時間並且未出現在任何deployment中,那麼他就是rouge。@discovered_at是如何更新的?
在Agent.new的時候也更新@discovered_at
Agent.new在同步sync_agents時候出現,
在定期poll_director時候會出現,會根據poll_director的結果來更新@deployments,一切以poll_director的結果為基準,沒有的就刪除。
HeartBeat更新發現新的id會放在@agent裡面
定期地analyze_agent
儲存在@deployments儲存的id和在@agent裡面的id進行分析。
(@agents.keys.to_set -processed).each do |agent_id|
@logger.warn("Agent#{agent_id} is not a part of any deployment")
analyze_agent(agent_id)
count += 1
end
多出來的id就立刻進行分析,呼叫analyze_agent
發現新id,但是已經超時了,那麼就發出一個alert事件。
如果發現這個agent_id沒有存在任何deployment,也就是deployment為null,通過HeartBeat發現的新id都沒有deployment,如果超過rogue_agent_alert時間那麼就是rogue;
相關推薦
Bosh Health Monitor原始碼
Bosh Health Monitor原始碼 Bosh HealthMonitor(BHM)是Bosh裡面的一個元件,負責收集BoshAgent收集到的各個元件的資訊,比如cpu,mem,disk等。BHM有兩種事件,一種是Bosh::Monitor::HeartBeat
轉 Oracle Cluster Health Monitor(CHM)簡介
linu dump nload mas inux database tar.gz 命令操作 ogg Cluster Health Monitor(以下簡稱CHM)是一個Oracle提供的工具,用來自動收集操作系統的資源(CPU、內存、SWAP、進程、I/O以及網絡等)的
以小見大,從Kafka Monitor原始碼解讀看如何做好黑盒監控
Kafka Monitor介紹 Kafka Monitor是由Linkedin開源的一款非常優秀的針對Kafka的黑盒監控軟體。它通過模擬客戶端行為,生產和消費資料並採集訊息的延遲、錯誤率和重複率等效能和可用性指標,來達到黑盒監控的目的。 Kafka的主要
Ceph Monitor原始碼機制分析(一)—— 概述
0 前言 最近終於有點時間可以看看Ceph的程式碼了,接下來準備就Ceph monitor這個Ceph叢集中最重要的元件進行深入的分析。 1 Monitor的作用 Monitor在Ceph叢集中扮演著管理者的角色,維護了整個叢集的狀態(抽象成幾張map,包括osdmap、m
ORACLE:Health Monitor
轉載之:http://space.itpub.net/9466564/viewspace-609039 1. Health Monitor簡介 Health Monitor是11g裡新增加的特性,用於資料庫的各層和各個組建的診斷檢查。例如可以檢查:檔案損壞、物理邏輯
spring-boot-admin原始碼分析及單機監控spring-boot-monitor的實現(三)
SpringBootMonitor spring-boot-admin原始碼分析及單機監控spring-boot-monitor的實現(一) spring-boot-admin原始碼分析及單機監控spring-boot-monitor的實現(二)
spring-boot-admin原始碼分析及單機監控spring-boot-monitor的實現(二)
SpringBootMonitor spring-boot-admin原始碼分析及單機監控spring-boot-monitor的實現(一) spring-boot-admin原始碼分析及單機監控spring-boot-monitor的實現(二)
spring-boot-admin原始碼分析及單機監控spring-boot-monitor的實現(一)
SpringBootMonitor spring-boot-admin原始碼分析及單機監控spring-boot-monitor的實現(一) spring-boot-admin原始碼分析及單機監控spring-boot-monitor的實現(二) spring-boot-ad
actuator 中health這個endpoint的原始碼解剖
用過spring boot的都應該知道里面有一個actuator的starter,這個actuator其實非常有用,它提供了很多監控的endpoint,比如今天要講的health,info。。。。最近在弄的spring boot admin2.0其實也是以這個j
如何利用eclipse編譯除錯linux原始碼--以gnome-system-monitor 為例
一、 下載原始碼包gnome-system-monitor-3.8.2.1-6.el7.src.rpm,解壓。這裡就不要贅述了。 二、 在終端下進去解壓的目錄下,執行指令:./configure 過程中會遇到電腦找不到各種庫的
小夥伴們的ceph原始碼分析二——monitor啟動流程
程式碼位置:src/ceph_mon.cc 首先help看下ceph-mon的usage usage: ceph-mon -i monid [--mon-data=pathtodata][flags] --debug_mon n debug monitor l
小夥伴們的ceph原始碼分析三——monitor訊息處理流程
筆者在讀程式碼初期非常想理清楚的就是ceph這麼個系統在服務端與客戶端是怎麼響應與發起請求的。 本人主要負責monitor部分,而且追了一會cephx認證的程式碼,所以拿這塊舉例,後續osd部分主要是對同事分享的學習。 本篇會講到src/mon/monitor.cc中 c
使用performance monitor 查看 每一個cpu core的cpu time
images cor 使用 man 100% cnblogs tor for img 使用performance monitor 查看 每一個cpu core的cpu time: 打開performance monitor,添加 counter 如下
redis命令monitor詳解
monitor 窗口 inf 做了 命令 linux blog linux中 技術分享 通過monitor這個命令可以查看數據庫在當前做了什麽操作,對於管理redis數據庫有這很大的幫助 如圖示,在redis客戶端進行操作顯示info,另一個窗口打
用Monitor簡單3步監控中間件ActiveMQ
觀察 執行 info 純java 重要 處理 代理 方式 images Apache ActiveMQ是一個基於JMX規範的純Java消息中間件,它為應用系統提供高效、靈活的消息同步與異步傳輸處理、存儲轉發、可靠傳輸的特性。 消息隊列對於應用的健康運行非常重要,作為運維人員
dubbo+dubbo-monitor+nexus+sonar+svn+jenkins+linux-dash搭建項目開發平臺
開發 .com ci系統 文件 下載 還在 sonar hosts 所有 什麽是持續集成:http://www.ruanyifeng.com/blog/2015/09/continuous-integration.html 持續集成的好處:https://zhuanlan.
electronic cigarette harmful to human health?
all nes tel child not find acc trie heat init Do students smoke cigarettes, electronic cigarettes(Smoant Box Mod) harmful to huma
C#中Monitor和Lock以及區別
能夠 program tor 試圖 tro 指定 object span () 原文地址:http://www.cnblogs.com/chengxingliang/p/3150731.html Monitor對象 1.Monitor.Enter(object)方法
C#多線程的用法5-線程間的協作Monitor
ole 所有 pri sum 接下來 變化 customer sta 進入 之前我們使用lock快捷方式,實現了多線程對同一資源的共享。在C#中lock實際上是Monitor操作的簡化版本。 下面使用Monitor來完成之前的lock功能,你可以在此做一下對照: priv
monitor.go
pac isl style 初始化 esp quest for top 地址 package mainimport ( "fmt" "net/http")// 查詢監控信息的接口func statsHandler(w http.ResponseWriter, r