OpenFalcon-SuitAgent
專案地址:github
版本說明
本系統版本劃分如下
-
alpha:內部測試版(不建議使用於生產環境)
-
beta:公開測試版(不建議使用於生產環境)
-
final:最終正式版(可用於生產環境)
當前版本請檢視pom.xml資訊。
使用之前
-
此係統是和OpenFalcon監控系統一起使用,是為了更方便的進行運維監控。若不瞭解,可以先點選連結去OpenFalcon的官方社群進行了解。
-
目前此係統僅支援類Unix系統下使用,不支援Windows系統
什麼是SuitAgent
這是一個獲取各種系統的監控資料的Agent。
其中內建了OpenFalcon的社群元件:FalconAgent
,因所有的監控資料都必須要上報到FalconAgent
,所以為了部署方便和管理,SuitAgent
整合了FalconAgent
,若agent.falcon.push.url
配置為本地地址,則啟動時會同時啟動自帶的FalconAgent
,關閉時也會同時關閉FalconAgent
。
為什麼有這個專案
OpenFalcon監控系統,是由一系列的元件構成。對於作業系統的監控,官方有FalconAgent,但是對於其他系統的監控,
都是使用指令碼或者其他方式進行單獨採集,然後將資料上報給FalconAgent系統。
公司為了運維監控的方便和自動化,便有了這個專案,將系統的採集,集中在一個系統中,並且儘可能的採集便捷。
SuitAgent特點
-
自動探測部署機上的服務,自動監控
-
監控配置動態生效,無需重啟
-
能夠動態發現部署機上新啟動的服務
-
支援
Mock
介面功能,有自動化運維的公司,可利用此特性進行監控自動化開發 -
監控服務全部外掛化實現,可自定義開發自己需求的監控服務的外掛,只需要開發採集邏輯和外掛執行配置。
SuitAgent
可自動發現外掛,並根據配置自動執行,無需關心外掛的啟動。
目前支援的監控服務
-
Docker(包括Docker內的應用存活情況監控)
-
ElasticSearch
-
Http
-
Logstash
-
Mysql
-
交換機
-
Ntp
-
Oracle
-
Ping
-
Standalone Jar(Java通過java -jar xxx.jar執行的服務)
-
Tcp
-
Tomcat
-
Zookeeper
SuitAgent編譯
構建工具:maven
Java版本:jdk 1.8
選擇對應的版本進行編譯:
- 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目錄下可看到編譯後的壓縮包,解壓縮,改改配置,即可使用
或者直接下載編譯後的檔案,地址:
https://yunpan.cn/cMTHpgsQ3e5DV (提取碼:9f74)
版本說明:
-
linux-64 : linux-64位自帶Jre執行環境。不需要目標系統安裝java
-
osx-noJar : 蘋果系統。需要安裝java環境
-
linux64-noJar : linux-64位系統。需要目標系統安裝個java環境
修改相關配置後,直接啟動SuitAgent
即可
建議:推薦編譯使用,因目前SuitAgent
尚在完善中,程式碼和配置難免會有所變動。網盤中的檔案不能保證隨時都是最新的。
SuitAgent配置
-
FalconAgent配置檔案(配置官方社群的FalconAgent)
-
{SuitAgentHome}/conf/falcon/agent.cfg.json
-
-
SuitAgent配置檔案
-
{SuitAgentHome}/conf/agent.properties
-
-
監控服務授權配置
-
{SuitAgentHome}/conf/authorization.properties
-
-
監控服務外掛配置
-
{SuitAgentHome}/conf/plugin目錄下
-
SuitAgent相關命令
-
啟動:
./bin/agent.sh start
(使用root使用者)-
啟動日誌檢視
-
可通過
tail -f conf/console.log
觀察SuitAgent
的執行情況
-
-
-
關閉:
./bin/agent.sh stop
-
狀態:
/bin/agent.sh status
SuitAgent日誌
-
SuitAgent執行中的日誌分為四種:
1、console(debug)
2、info
3、warn
4、error
每種日誌均自動控制日誌大小,每到5MB就自動進行日誌分割,最多有10個同類檔案。既所有的日誌檔案,最多隻會達到200MB,無需擔心日誌檔案過於龐大。
監控資料上報
公有的Tag
跟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 Plugin 說明
SuitAgent所有的監控服務都是外掛式開發整合
如何自定義外掛開發
SuitAgent
支援的外掛一共以下幾種:
-
JDBC的監控服務,實現
com.yiji.falcon.agent.plugins.JDBCPlugin
介面 -
JMX的監控服務,實現
com.yiji.falcon.agent.plugins.JMXPlugin
介面 -
SNMP V3的監控服務,實現
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目前整合的監控服務
JMX監控服務
特殊的metrics說明
- 若SuitAgent在啟動時,需要進行監控的服務(對應的work配置為true的)未啟動,則將會上報一個名為`allUnVariability`的metrics監控指標,值為`0`。tag中有metrics的詳情(參考tag命名),代表為該服務全部不可用
JMX監控屬性組成
JMX監控的屬性,由以下三部分組成
-
SuitAgent內建的JMX監控屬性
- `HeapMemoryUsedRatio` - 堆記憶體使用比例 - `HeapMemoryCommitted` - 堆記憶體已提交的大小 - `NonHeapMemoryCommitted` - 非堆記憶體已提交的大小 - `HeapMemoryFree` - 堆記憶體空閒空間大小 - `HeapMemoryMax` - 堆記憶體最大的空間大小 - `HeapMemoryUsed` - 堆記憶體已使用的空間大小 - `NonHeapMemoryUsed` - 非堆記憶體已使用的空間大小
-
JMX 公共的監控屬性自定義配置
-
定義於
conf/jmx/common.properties
檔案
-
-
自定義的監控屬性
-
每個外掛自定義的屬於自身的監控屬性
-
Java應用的停機處理說明
正常情況下,若Java應用停機,則它的JMX連線將會不可用,此時,SuitAgent
將會上報該應用不可用的監控報告,並且,在每一次重新獲取監控值時,都會嘗試重新連線此應用。
若該應用是被下線了,就是廢棄了,那麼豈不是會永遠上報不可用狀態?所以,SuitAgent
有一個處理機制,在SuitAgent
啟動時,它會記錄每一個Java應用的應用路徑,如果該應用被發現停機了,它會檢查該路徑還是否存在有效,如果路徑無效,SuitAgent
將會清除此下線應用的監控資訊,就不會上報不可用了。
目前支援的監控元件
-
zookeeper
-
tomcat
-
elasticSearch
-
logstash
-
standaloneJar(單獨Jar包執行的應用,如SpringBoot)
JDBC監控的服務
目前支援的監控元件
- Oracle
- Mysql
SNMP監控服務
公共的metrics列表
每個介面的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)
交換機(SNMP V3)
說明
監控的裝置採集資訊和採集邏輯主要參考了Falcon社群的swcollector專案,因swcollector不支援SNMP V3協議。
[https://github.com/gaochao1/swcollector](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 動態配置
SuitAgent
支援部分配置的動態生效,支援的範圍見如下說明
authorization.properties
檔案的改動
-
若對應外掛未啟動,則檔案修改後,將在SuitAgent下一次的自動服務發現時生效。
-
若對應的外掛已啟動,因系統不會重複啟動相同的監控服務,故雖然外掛配置會生效,但是不會重新啟動服務
plugin
目錄下的外掛配置檔案的改動 -
若改動的是未啟動的監控服務配置(如
StandaloneJarPlugin
外掛的standaloneJarPlugin.properties
檔案,新增了一個服務名。或更改了外掛啟動型別等),將在SuitAgent
下一次的自動服務發現時生效 -
若改動的是外掛的監控配置(如
Tomcat
外掛的tomcatPlugin.properties
檔案的伺服器監控引數配置),下一次監控掃描就能夠生效。 -
若改動的是外掛的自定義配置檔案,它的改動將不會觸發外掛的配置更新事件,不過可以利用改動它的外掛配置檔案,觸發配置更新。
注意
-
已啟動的外掛服務,不會因為配置檔案的改動而停止服務
-
外掛啟動時的配置項(如外掛的
step
,pluginActivateType
等)被改動時,若外掛已啟動,雖然改動的配置外掛會實時更新,但由於服務已啟動,這些屬性已經在啟動時固定,所以將不會因為改動而生效
SuitAgent mock 介面
介面說明
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/|
f1f204026cc40a72030bbf5a799e1bb675
|/service
-
新增一個mock配置
-
-
http://ip:port/mock/remove/|
f1f204026cc40a72030bbf5a799e1bb677
|/service
-
刪除一個mock配置
引數說明
-
-
serviceType
: 對應於監控值tag
中的service.type
屬性 -
service
: 對應於監控值tag
中的service
或agentSignName
屬性