開源一個監控數據採集Agent:OpenFalcon-SuitAgent

OpenFalcon-SuitAgent

項目地址:githubhtml

版本說明

本系統版本劃分以下java

  • alpha:內部測試版(不建議使用於生產環境)linux

  • beta:公開測試版(不建議使用於生產環境)git

  • final:最終正式版(可用於生產環境)github

當前版本請查看pom.xml信息。sql

使用以前

  • 此係統是和OpenFalcon監控系統一塊兒使用,是爲了更方便的進行運維監控。若不瞭解,能夠先點擊連接去OpenFalcon的官方社區進行了解。docker

  • 目前此係統僅支持類Unix系統下使用,不支持Windows系統json

什麼是SuitAgent

這是一個獲取各類系統的監控數據的Agent。
其中內置了OpenFalcon的社區組件:FalconAgent,因全部的監控數據都必需要上報到FalconAgent,因此爲了部署方便和管理,SuitAgent集成了FalconAgent,若agent.falcon.push.url配置爲本地地址,則啓動時會同時啓動自帶的FalconAgent,關閉時也會同時關閉FalconAgent緩存

爲何有這個項目

OpenFalcon監控系統,是由一系列的組件構成。對於操做系統的監控,官方有FalconAgent,可是對於其餘系統的監控,
都是使用腳本或者其餘方式進行單獨採集,而後將數據上報給FalconAgent系統。
公司爲了運維監控的方便和自動化,便有了這個項目,將系統的採集,集中在一個系統中,而且儘量的採集便捷。tomcat

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運行中的日誌分爲四種:
    一、console(debug)

二、info
三、warn
四、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文件的服務器監控參數配置),下一次監控掃描就可以生效。

  • 若改動的是插件的自定義配置文件,它的改動將不會觸發插件的配置更新事件,不過能夠利用改動它的插件配置文件,觸發配置更新。

    注意

  • 已啓動的插件服務,不會由於配置文件的改動而中止服務

  • 插件啓動時的配置項(如插件的steppluginActivateType等)被改動時,若插件已啓動,雖然改動的配置插件會實時更新,但因爲服務已啓動,這些屬性已經在啓動時固定,因此將不會由於改動而生效

SuitAgent mock 接口

接口說明

SuitAgent提供可用性(availability)的mock服務。

mock服務具備有效性,有效性時長,經過配置 agent.properties 文件的 agent.mock.valid.time 配置項

有效的mock,將會讓mock的目標服務即便已經中止運行,也會上報一個可用的監控數據,而且帶上 mock=truetag

mock的時間超時,既無效,則會上報目標服務不可用的監控數據,而且帶上 mock=timeout-{time}tag 。其中{time}是停機時間

接口使用

{
    "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中的serviceagentSignName屬性

相關文章
相關標籤/搜索