4 个版本
使用旧 Rust 2015
0.1.7 | 2018 年 6 月 18 日 |
---|---|
0.1.3 |
|
0.1.2 | 2017 年 9 月 18 日 |
0.1.1 | 2017 年 9 月 6 日 |
0.0.9 | 2017 年 8 月 7 日 |
在 数据库接口 中排名 1022
135KB
2.5K SLoC
rs-collector
rs-collector 是一个兼容 Bosun 的收集器,用于各种未被 scollector 覆盖的服务,并且我们在 CenterDevice 中使用。
注意:请务必注意,尽管我们已经成功在生产系统中运行了数月的 rs-collector,但这不是一个稳定的软件。
目录 使用 DocToc 生成
收集器
- Galera - 收集 MySQL Galera 集群的集群状态和集群同步性能指标。
- HasIpAddr - 检查主机是否绑定了特定的 IPv4 地址。
- JVM - 收集垃圾回收统计信息。
- Megaraid - 收集 Megaraid 磁盘统计信息。
- MongoDB - 收集副本集指标。
- Postfix - 收集所有 postfix 队列的队列长度。
- rs-collector - 收集 rs-collector 的内部指标。
下面是关于收集器的详细信息。
Galera
Galera 收集器收集 MySQL Galera 集群的集群状态和集群同步性能指标。我们使用它来监视集群脑裂和一般退化情况。所有可用指标的全列表在 galera.rs 文件中的函数 metadata
。
Galera 收集器支持 Linux 上的 SSL 传输加密。有关启用 SSL 的示例配置,请参阅示例配置。
示例警报
alert galera.cluster.state.uuid.no.consensus {
template = ...
critNotification = default
$metric = avg:galera.wsrep.cluster.state.uuid{domain=wildcard(*)}
$q=q("$metric", "5m", "")
$a = avg($q)
$f = first($q)
$q_alert = ($a - $f) != 0
crit = $q_alert
}
alert galera.cluster.state.not.primary {
template = ...
critNotification = default
$metric = sum:galera.wsrep.cluster.status{host=wildcard(*),domain=wildcard(*)}
$q = q("$metric", "5m", "")
$t = t(last($q), "domain")
$q_alert = sum($t)
$primaryValue = 0
crit = $q_alert != $primaryValue
}
alert galera.local.state.not.synced {
template = ...
critNotification = default
$metric = zimsum:5m-avg:galera.wsrep.local.state{domain=wildcard(*)}
$q = q("$metric", "5m", "")
$q_alert = last($q)
$syncedValue = 12
crit = $q_alert != $syncedValue
}
alert galera.cluster.size.degraded {
template = ...
critNotification = default
$metric = avg:galera.wsrep.cluster.size{domain=wildcard(*)}
$q = q("$metric", "5m", "")
$q_alert = last($q)
$critValue = 3
crit = $q_alert != $critValue
}
HasIpAddr
《HasIpAddr》收集器根据主机是否已绑定特定的IPv4地址发送1或0,分别表示已绑定或未绑定。这在主机动态绑定或释放IPv4地址的情况下非常有用。例如,在keepalived
VRRP集群中,它允许Bosun检查虚拟、高可用IP地址绑定在多少个主机上。
在我们的生产集群中,我们观察到没有任何集群成员绑定虚拟IP地址的情况。这个收集器允许我们为这种情况定义一个警报。
示例警报
alert os.net.vrrp-vip-failed {
template = ...
critNotification = default
$metric = sum:os.net.has_ipv4s{ipv4=wildcard(*)}
$q_alert = sum(t(last(q("$metric", "5m", "")), "ipv4"))
$expected = 1
$critValue = $expected
crit = $q_alert != $critValue
}
JVM
《JVM》收集器收集垃圾收集统计信息,即jstat -gc
为每个指定的、正在运行的JVM显示的信息。这个收集器与OpenJDK "7u51-2.4.6-1ubuntu4"和Oracle JDK "1.8.0_121"进行了测试。JVM通过匹配类名或命令行参数的正则表达式进行识别。
此收集器仅收集指定JVM的统计信息;参见图例配置。目前它不能区分同一识别JVM的多个实例。
Megaraid
《Megaraid》收集器使用MegaCLI工具收集磁盘驱动器统计信息。它收集的统计信息如下:
hw.storage.drivestats.mediaerrors
:RAID控制器报告的设备媒体错误数。hw.storage.drivestats.othererrors
:RAID控制器报告的设备其他错误数。hw.storage.drivestats.predfailerrors
:RAID控制器认为重要的错误数。hw.storage.drivestats.smartflag
hw.storage.drivestats.firmwarestate
hw.storage.drivestats.predfaileventno
:最近记录的预测性故障事件的序列号。
Mongo
《Mongo》收集器收集MongoDB连接、操作计数器、副本集和集群指标。我们使用它来检查集群脑裂和一般退化情况。所有可用指标的全列表可在mongo.rs
中的函数metadata
中找到。
对于连接和操作统计,以下指标很有帮助:
mongo.connections.current
收集从客户端到数据库服务器的传入连接数。此数字包括当前shell会话。考虑connections.available的值以增加此数据的上下文。此值将包括所有传入连接,包括任何shell连接或其他服务器(如副本集成员或mongos实例)的连接。mongo.connections.available
收集可用的未使用传入连接数。将此值与connections.current的值结合使用,以了解数据库的连接负载,并参阅UNIX ulimit设置文档以获取有关系统阈值的信息。mongo.connections.totalCreated
计算已创建到服务器的所有传入连接数。此数字包括后来已关闭的连接。mongo.opcounters.insert
收集自mongod实例上次启动以来接收到的插入操作总数。mongo.opcounters.query
收集自mongod实例上次启动以来接收到的查询总数。mongo.opcounters.update
收集自mongod实例上次启动以来接收到的更新操作总数。mongo.opcounters.delete
用于收集自 mongod 实例上次启动以来的删除操作总数。mongo.opcounters.getmore
用于收集自 mongod 实例上次启动以来的“getmore”操作总数。即使查询次数较低,此计数器也可能很高。从副节点发送 getMore 操作是复制过程的一部分。mongo.opcounters.command
用于收集自 mongod 实例上次启动以来向数据库发出的命令总数。mongo.opcounters.command
计算所有命令,但不是写入命令:插入、更新和删除。
对于副本集和集群监控,以下两个指标很有帮助
mongo.replicasets.members.mystate
从每个副本集成员收集 "myState" 变量。这允许计算特定副本集是否处于正常状态。mongo.replicasets.oplog_lag.[min,avg,max]
收集副本集主节点与对应从节点之间的最小、平均和最大 oplog 复制延迟。这些值仅在当前活动的主节点上测量。
示例警报
alert mongo.replicaset.state.unexpected {
template = ...
critNotification = default
$metric = sum:mongo.replicasets.members.mystate{host=wildcard(*),replicaset=wildcard(*)}
$q = q("$metric", "5m", "")
$t = t(last($q), "replicaset")
$q_alert = sum($t)
$critValue = 5
crit = $q_alert != $critValue
}
Postfix
Postfix 收集器收集关于 Postfix 队列的指标。这有助于监控队列随时间填充和清空的情况,以及检查队列是否完全清空,以便在邮件投递停滞时发出警报。所有可用指标的完整列表在 postfix.rs 中的功能 metadata
。
示例警报
alert postfix.mailqueue.deferred.too.long {
template = ...
critNotification = default
warnNotification = default
$metric = sum:5m-min:postfix.queues.deferred{domain=wildcard(*)}
$q = q("$metric", "5m", "")
$t = t(last($q), "domain")
$q_alert = sum($t)
warn = $q_alert
}
alert postfix.mailqueue.deferred.unchanged {
template = ...
warnNotification = default
$period = 4h
$metric = postfix.queues.deferred{domain=wildcard(*)}
$q_min = q("min:$metric", "$period", "")
$q_max = q("max:$metric", "$period", "")
$min_queue_len = min($q_min)
$max_queue_len = max($q_max)
$q_alert = $min_queue_len > 0 && $max_queue_len == $min_queue_len
warn = $q_alert
}
rs-collector 内部指标
rs-collector.stats.rss
收集 rs-collector 消耗的常驻集大小(物理内存),以 KB 计算;仅在 Linux 上受支持。rs-collector.stats.samples
收集发送的样本数。rs-collector.versio
收集 rs-collector 的版本 'x.y.z',作为 x * 1.000.0000 + y * 1000 + z。
这些指标还可以用于检查 rs-collector 的活动性并作为心跳。
配置
请参阅此 示例。
安装
Ubuntu [x86_64 和 Raspberry Pi]
请添加我的 PackageCloud 开源存储库,并通过 apt 安装 rs-collector。
curl -s https://packagecloud.io/install/repositories/lukaspustina/opensource/script.deb.sh | sudo bash
sudo apt-get install rs-collector
Linux 二进制文件 [x86_64 和 Raspberry Pi]
GitHub 发布页面 上有可用的二进制文件。这些二进制文件在 Ubuntu 上编译。
macOS
请使用 Homebrew 在您的系统上安装 rs-collector。
brew install lukaspustina/os/rs-collector
源代码
请通过 rustup 安装 Rust,然后运行
cargo install rs-collector
Ansible
Ansible Galaxy Ansible Galaxy 上也有可用的 Ansible 角色可自动安装 rs-collector。
已知问题
-
一般:在 chan::tick 中有轻微的内存泄漏 -- 参见 路线图。
-
JVM:不区分通过配置分配名称相同的 JVM,即同一 Java 应用程序的多实例。
路线图
请参阅 待办事项。
依赖关系
~38MB
~769K SLoC