項目地址:githubhtml
本系統版本劃分以下java
當前版本請查看pom.xml信息。linux
這是一個獲取各類系統的監控數據的Agent。
其中內置了OpenFalcon的社區組件:FalconAgent
,因全部的監控數據都必需要上報到FalconAgent
,因此爲了部署方便和管理,SuitAgent
集成了FalconAgent
,若agent.falcon.push.url
配置爲本地地址,則啓動時會同時啓動自帶的FalconAgent
,關閉時也會同時關閉FalconAgent
。git
OpenFalcon監控系統,是由一系列的組件構成。對於操做系統的監控,官方有FalconAgent,可是對於其餘系統的監控,
都是使用腳本或者其餘方式進行單獨採集,而後將數據上報給FalconAgent系統。
公司爲了運維監控的方便和自動化,便有了這個項目,將系統的採集,集中在一個系統中,而且儘量的採集便捷。github
Mock
接口功能,有自動化運維的公司,可利用此特性進行監控自動化開發SuitAgent
可自動發現插件,並根據配置自動運行,無需關心插件的啓動。構建工具:maven
Java版本:jdk 1.8sql
選擇對應的版本進行編譯:docker
- linux-64 : mvn clean package -Plinux-64 -Dmaven.test.skip=true - linux64-noJar : mvn clean package -Plinux64-noJar -Dmaven.test.skip=true - osx-noJar : mvn clean package -Posx-noJar -Dmaven.test.skip=true
編譯後,在target目錄下可看到編譯後的壓縮包,解壓縮,改改配置,便可使用json
或者直接下載編譯後的文件,地址:緩存
https://yunpan.cn/cMTHpgsQ3e5DV (提取碼:9f74)
版本說明:tomcat
修改相關配置後,直接啓動SuitAgent
便可
建議:推薦編譯使用,因目前SuitAgent
尚在完善中,代碼和配置不免會有所變更。網盤中的文件不能保證隨時都是最新的。
./bin/agent.sh start
(使用root用戶)
tail -f conf/console.log
SuitAgent
的運行狀況./bin/agent.sh stop
/bin/agent.sh status
跟OpenFalcon官方社區的思想一致,FalconAgent採集的系統監控信息(如內存,CPU等等一百多種)沒有任何tag信息 其餘的業務系統的監控,都會打上tag。`SuitAgent`採集的系統,基本都是業務系統(非Linux操做系統監控信息),因此都會有對應的Tag
tag來區分服務
例如:
service
={value} :(內建)服務產品名,如tomcat
service.type
={value} :(內建)監控服務類型,如jmx,database
agentSignName
={value} :(內建)agent提供的標識字符串,如 allUnVariability(表明該服務SuitAgent啓動時就不存在),標識服務的佔用端口號,服務名等。
metrics.type
={value} :(內建)監控值類型,如availability,jmxObjectConf,jmxObjectInBuild,httpUrlConf,sqlConf,sqlInBuild,snmpConnomInBuild,snmpPluginInBuild
可用性(availability
)會自動打上標籤:
metrics.type
=availability,service
={value}
若某個服務有自定義的endPoint(如SNMP V3),則會加上customerEndPoint=true
的tag
Tomcat
監控值會打上dir={dirName}
的tag,方便同一個物理機啓動多個tomcat時,更好的識別具體的tomcat
SuitAgent全部的監控服務都是插件式開發集成
SuitAgent
支持的插件一共如下幾種:
com.yiji.falcon.agent.plugins.JDBCPlugin
接口com.yiji.falcon.agent.plugins.JMXPlugin
接口com.yiji.falcon.agent.plugins.SNMPV3Plugin
接口com.yiji.falcon.agent.plugins.DetectPlugin
接口若要開發本身的監控服務,想好本身的監控服務是哪一種類型,參照SuitAgent
目前已實現的插件結構,
在包com.yiji.falcon.agent.plugins.plugin
下創建本身的插件目錄,將插件類放在該目錄中,
而後根據規則,在src/main/resources_ext/conf/plugin/
目錄下創建本身的插件配置文件便可。
- 若SuitAgent在啓動時,須要進行監控的服務(對應的work配置爲true的)未啓動,則將會上報一個名爲`allUnVariability`的metrics監控指標,值爲`0`。tag中有metrics的詳情(參考tag命名),表明爲該服務所有不可用
JMX監控的屬性,由如下三部分組成
SuitAgent內置的JMX監控屬性
- `HeapMemoryUsedRatio` - 堆內存使用比例 - `HeapMemoryCommitted` - 堆內存已提交的大小 - `NonHeapMemoryCommitted` - 非堆內存已提交的大小 - `HeapMemoryFree` - 堆內存空閒空間大小 - `HeapMemoryMax` - 堆內存最大的空間大小 - `HeapMemoryUsed` - 堆內存已使用的空間大小 - `NonHeapMemoryUsed` - 非堆內存已使用的空間大小
conf/jmx/common.properties
文件正常狀況下,若Java應用停機,則它的JMX鏈接將會不可用,此時,SuitAgent
將會上報該應用不可用的監控報告,而且,在每一次從新獲取監控值時,都會嘗試從新鏈接此應用。
若該應用是被下線了,就是廢棄了,那麼豈不是會永遠上報不可用狀態?因此,SuitAgent
有一個處理機制,在SuitAgent
啓動時,它會記錄每個Java應用的應用路徑,若是該應用被發現停機了,它會檢查該路徑仍是否存在有效,若是路徑無效,SuitAgent
將會清除此下線應用的監控信息,就不會上報不可用了。
- Oracle - Mysql
每一個接口的Metrics:
- {ifName}.if.HCInBroadcastPkts - {ifName}.if.HCInMulticastPkts - {ifName}.if.HCInOctets - {ifName}.if.HCInUcastPkts - {ifName}.if.HCOutBroadcastPkts - {ifName}.if.HCOutMulticastPkts - {ifName}.if.getIfHCOutUcastPkts - {ifName}.if.HCOutOctets - {ifName}.if.OperStatus : (接口狀態,1 up, 2 down, 3 testing, 4 unknown, 5 dormant, 6 notPresent, 7 lowerLayerDown)
ping
Metrics:
- pingAvgTime : Ping延時(正常返回延時,超時返回 -1)
說明
監控的設備採集信息和採集邏輯主要參考了Falcon社區的swcollector項目,因swcollector不支持SNMP V3協議。
https://github.com/gaochao1/swcollector
採集的私有metric列表
- 公共的metrics數據 - CPU利用率 - 內存利用率
內存和CPU的目前測試的支持設備
- Cisco IOS(Version 12) - Cisco NX-OS(Version 6) - Cisco IOS XR(Version 5) - Cisco IOS XE(Version 15) - Cisco ASA (Version 9) - Ruijie 10G Routing Switch - Huawei VRP(Version 8) - Huawei VRP(Version 5.20) - Huawei VRP(Version 5.120) - Huawei VRP(Version 5.130) - Huawei VRP(Version 5.70) - Juniper JUNOS(Version 10) - H3C(Version 5) - H3C(Version 5.20) - H3C(Version 7)
HTTP監控
監控Metrics:
- availability - response.code : 響應狀態碼 - response.time : 響應時間 毫秒
Ping監控
監控Metrics
- availability - pingAvgTime : ping的平均延時(當前爲每次ping5次,取絕對值) - pingSuccessRatio : ping的成功次數佔比,如ping了`5次`,只成功返回`4次`,則爲`0.8`
TCP(Socket)監控
監控Metrics :
- availability - response.time : 響應時間 毫秒
Yiji NTP 監控
監控Metrics
- availability - `0`:NTP監控失敗(如ntpdate命令執行失敗) - `1`:NTP監控成功 - ntpOffset : ntpdate命令解析的offset值
Docker 監控
監控Metrics
- availability - `0`:Docker daemon 探測失敗 - `1`:Docker daemon 探測成功 - availability-container - 說明:在SuitAgent第一次運行Docker插件時,會將第一次檢測到的容器名稱保存到內存緩存中,在之後的每一次監控時,會上報內存緩存中的容器的可用性狀態 - `0`:容器已中止運行 - `1`:容器正在運行 - availability.container.app - 說明:在SuitAgent第一次運行Docker插件時,會將第一次檢測到的容器內的進程狀況進行緩存到內存中,在之後的每一次監控時,會從新獲取容器內的進程狀況,若與第一次一致,則爲可用 - `0`:容器內應用運行不正常 - `1`:容器內應用正常運行 - `-1`:容器內的應用狀態數據獲取失敗 - has_cpu : 是否有CPU使用權限 - total.cpu.usage.rate : CPU總使用率百分比 - user.cpu.usage.rate : CPU用戶級別使用率百分比 - system.cpu.usage.rate : CPU系統級別使用率百分比 - has_memory : 是否有內存使用權限 - mem.size.usage : 當前已使用的內存大小(單位兆) - mem.size.cache : 當前已緩存的內存大小(單位兆) - mem.usage.rate : 內存已使用與容器總內存百分比 - mem.cache.rate : 內存緩存與容器總內存的百分比 - has_network : 是否有網絡使用權限 - net.if.in.bytes : 網絡IO流入字節數 - net.if.in.packets : 網絡IO流入包數 - net.if.in.dropped : 網絡IO流入丟棄數 - net.if.in.errors : 網絡IO流入出錯數 - net.if.out.bytes : 網絡IO流出字節數 - net.if.out.packets : 網絡IO流出包數 - net.if.out.dropped : 網絡IO流出丟棄數 - net.if.out.errors : 網絡IO流出出錯數
zookeeper
無需配置,可自動發現
tomcat
無需配置,可自動發現
elasticSearch
無需配置,可自動發現
logstash
無需配置,可自動發現
standalone應用(java -jar 方式的Jar包運行)
須要配置conf/plugin/standaloneJarPlugin.properties
配置文件的jmxServerName
或jmxServerDir
,
而後SuitAgent會自動發現已配置的standalone應用
Oracle
須要配置conf/authorization.properties
配置中的Oracle鏈接信息,而後會根據配置的鏈接信息,進行自動發現Oracle應用,並監控
Mysql
須要配置conf/authorization.properties
配置中的Mysql鏈接信息,而後會根據配置的鏈接信息,進行自動發現Mysql應用,並監控
SNMP V3 交換機
須要配置conf/authorization.properties
配置中的交換機的SNMP V3的鏈接信息,而後會根據配置的鏈接信息,進行自動發現交換機並監控。
HTTP監控
只要配置了被探測的地址,就會觸發監控服務
Ping監控
只要配置了被探測的地址,就會觸發監控服務
TCP監控
只要配置了被探測的地址,就會觸發監控服務
NTP監控
只要配置了NTP服務器地址,就會觸發監控服務
Docker監控
無需配置地址,自動探測本機的Docker
服務:若發現有命令/usr/bin/docker
存在,就會啓動Docker
監控插件。並自動鏈接本機的cAdvisor
服務或啓動內置的vAdvisor
服務
SuitAgent
支持部分配置的動態生效,支持的範圍見以下說明
authorization.properties
文件的改動
plugin
目錄下的插件配置文件的改動
StandaloneJarPlugin
插件的standaloneJarPlugin.properties
文件,添加了一個服務名。或更改了插件啓動類型等),將在SuitAgent
下一次的自動服務發現時生效Tomcat
插件的tomcatPlugin.properties
文件的服務器監控參數配置),下一次監控掃描就可以生效。注意
step
,pluginActivateType
等)被改動時,若插件已啓動,雖然改動的配置插件會實時更新,但因爲服務已啓動,這些屬性已經在啓動時固定,因此將不會由於改動而生效接口說明
SuitAgent
提供可用性(availability
)的mock
服務。
mock
服務具備有效性,有效性時長,經過配置 agent.properties
文件的 agent.mock.valid.time
配置項
有效的mock
,將會讓mock
的目標服務即便已經中止運行,也會上報一個可用的監控數據,而且帶上 mock=true
的 tag
若mock
的時間超時,既無效,則會上報目標服務不可用的監控數據,而且帶上 mock=timeout-{time}
的 tag
。其中{time}
是停機時間
接口使用
SuitAgent
當前全部的mock配置,返回json格式的數據,示例:{ "jmx": { "service": "tomcat", "isTimeout": false, "shutdownTime": 0 } }
http://ip:port/mock/add/`serviceType`/`service`
http://ip:port/mock/remove/`serviceType`/`service`
參數說明
serviceType
: 對應於監控值tag
中的service.type
屬性
service
: 對應於監控值tag
中的service
或agentSignName
屬性