开源一个监控数据采集Agent:OpenFalcon-SuitAgent
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} :(內建)服务产品名,如tomcatservice.type
={value} :(內建)监控服务类型,如jmx,databaseagentSignName
={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
的tagTomcat
监控值会打上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
采集的私有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}
是停机时间
接口使用
http://ip:port/mock/list
- 查看
SuitAgent
当前所有的mock配置,返回json格式的数据,示例:
- 查看
{
"jmx": {
"service": "tomcat",
"isTimeout": false,
"shutdownTime": 0
}
}
http://ip:port/mock/add/
serviceType
/service
- 添加一个mock配置
http://ip:port/mock/remove/
serviceType
/service
- 删除一个mock配置
参数说明
serviceType
: 对应于监控值tag
中的service.type
属性service
: 对应于监控值tag
中的service
或agentSignName
属性
开源一个监控数据采集Agent:OpenFalcon-SuitAgent的更多相关文章
- 监控软件之open-falcon安装、配置篇
2019-07-10 一.open-falcon简介 open-falcon是由小米运维团队,从互联网公司角度为出发点,开发出来的一套面向互联网行业的企业级的开源监控系统,截至2019年7月,open ...
- 监控软件之open-falcon
一.open-falcon介绍 1)中文社区介绍 http://book.open-falcon.org/zh_0_2/intro/ 参照文档: https://www.cnblogs.com/LAl ...
- 运维监控系统之Open-Falcon
一.Open-Falcon介绍 1.监控系统,可以从运营级别(基本配置即可),以及应用级别(二次开发,通过端口进行日志上报),对服务器.操作系统.中间件.应用进行全面的监控,及报警,对我们的系统正常运 ...
- 大众点评开源分布式监控平台 CAT 深度剖析
一.CAT介绍 CAT系统原型和理念来源于eBay的CAL的系统,CAT系统第一代设计者吴其敏在eBay工作长达十几年,对CAL系统有深刻的理解.CAT不仅增强了CAL系统核心模型,还添加了更丰富的报 ...
- 【zabbix】自动注册,实现自动发现agent并添加监控(agent不需要任何配置)
更新: 后来在实际使用中发现,与其使用zabbix自动注册,不如直接调用zabbix的api主动发起添加服务器的请求,这样就不需要在zabbixserver上配置host信息了.实现全自动.具体调用方 ...
- [转帖]开源的监控技术栈除了ELK,还有InfluxData的TICK
开源的监控技术栈除了ELK,还有InfluxData的TICK https://cloud.tencent.com/developer/news/357119 来源 | Influxdata 译者 ...
- ZeroMQ接口函数之 :zmq_socket_monitor - 注册一个监控回调函数
ZeroMQ 官方地址 :http://api.zeromq.org/4-2:zmq-socket-monitor zmq_socket_monitor(3) ØMQ Manual - ØMQ/4.1 ...
- 使用monit搭建一个监控系统
上周用monit搭建或者说定制了一个监控系统,来监控服务器发生事情.当然了主要是监控异常,因为我们的产品属于服务器类型,很多进程都daemon,要不停的运行.我们搭建监控目的不过是出现问题能够及时的知 ...
- python为运维人员打造一个监控脚本
0x00前言: 一直想写一个监控方面的脚本,然后想到了运维这方面的 后来就写了个脚本. 0x001准备: psutil模块 0x02正文: import os import time import r ...
随机推荐
- ffmpeg+SDl+ 播放器 -01
最近因公司项目需要,打算自己在LINUX平台整一个播放器,来学习和研究音频编解码. 项目需求: 支持下列格式文件播放. 1> WMA 硬件解码,但需要软件分析ASF格式,提取Payload数据 ...
- android同时使用多个library时的问题
剧情是这样,我的app要使用四个library,如:LibraryA,LibraryB.这两个库又都需要support.v4.jar. 由于加载的时间不同,所以四个support.v4.jar不同,出 ...
- JS实现文本复制与剪切
我们在网页上放置一个复制按钮,主要用来方便用户复制链接之类的复杂文本,以往的做法是,通过JS依靠Flash,甚至借助jQuery庞大的js库来实现文本复制到剪贴板的.今天我要给大家介绍的是一款极现代的 ...
- Android 常用 adb 命令总结
Android 常用 adb 命令总结 针对移动端 Android 的测试, adb 命令是很重要的一个点,必须将常用的 adb 命令熟记于心, 将会为 Android 测试带来很大的方便,其中很多命 ...
- ipa 重签
IPA 重签名 时间 2014-03-03 10:28:36 txx's blog原文 http://blog.rpplusplus.me/blog/2014/03/03/ipa-re-codes ...
- (转)C# WinForm中 获得当前鼠标所在控件 或 将窗体中鼠标所在控件名显示在窗体标题上
原文地址:http://www.cnblogs.com/08shiyan/archive/2011/04/14/2015758.html /********************** * 课题:将窗 ...
- 如何实现 Excel方式二维变色提示的 m*n 表格
此代码当m≠n 时,有问题.暂时还未解决此问题. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...
- 本地拦截genymotion或者Android模拟器的网络请求
我们在主机上面运行了Burp或者fiddler,那么代理已经监听在本机的8080端口了. 那么我们需要在模拟器中进行如下设置: 1.在设置中,长按当前连接的wifi网络,弹出如下: 2. 点击修改网络 ...
- docker 配置桥接网络
2.5 docker配置桥接网络(上): 为了使本地网络中的机器和Docker 容器更方便的通信,我们经常会有将Docker容器 配置到和主机同一网段的需求. 这个需求其实很容器实现, 我们只需要将D ...
- iOS5系统API和5个开源库的JSON解析速度测试
iOS5系统API和5个开源库的JSON解析速度测试 iOS5新增了JSON解析的API,我们将其和其他五个开源的JSON解析库进行了解析速度的测试,下面是测试的结果和工程代码附件. 我们选择的测试对 ...