如何在 OpenNMS 中监控 memcached 统计信息?

如何在 OpenNMS 中监控 memcached 统计信息?

我想开始汇编大小和点击量的数据......

答案1

创建以下脚本(并使其可执行):

#!/bin/bash
exec 5<> /dev/tcp/127.0.0.1/11211
if [ $? -eq 0 ]; then
        echo "stats" >&5
        echo "quit" >&5
        while read -u 5 -d $'\r' stat name value;
        do
                echo $value
        done
        exit 0
fi
exit 1

我的是/usr/local/bin/memcached_stats.sh

它连接到 memcached 守护进程并输出 memcached stats 命令的净化版本并输出类似以下内容:

2754
2129139
1243545563
1.2.2
64
2299.898362
7336.774640
217721
7091925
1909177049
108
27653
633
234138327
7091925
220430936
13707391
352833
89610818966
1385141563315
2147483648
4

将以下内容添加到您的/etc/snmp/snmpd.conf并重新启动 snmpd:

extend .1.3.6.1.4.1.1.900.100 memcached /usr/local/bin/memcached_stats.sh

这将根据脚本的输出创建一个表,其中每一行都有自己的节点。

如果您想确认这一点,请运行以下命令:

snmpwalk -v2c -c public 127.0.0.1 .1.3.6.1.4.1.1.900.100

你应该得到类似这样的结果:

SNMPv2-SMI::enterprises.1.900.100.3.1.3.9.109.101.109.99.97.99.104.101.100 = INTEGER: 23
SNMPv2-SMI::enterprises.1.900.100.3.1.4.9.109.101.109.99.97.99.104.101.100 = INTEGER: 0
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.1 = STRING: "2754"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.2 = STRING: "2123005"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.3 = STRING: "1243539429"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.4 = STRING: "1.2.2"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.5 = STRING: "64"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.6 = STRING: "2290.369810"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.7 = STRING: "7308.630919"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.8 = STRING: "217652"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.9 = STRING: "7066934"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.10 = STRING: "1909286395"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.11 = STRING: "108"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.12 = STRING: "27628"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.13 = STRING: "633"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.14 = STRING: "233251848"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.15 = STRING: "7066934"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.16 = STRING: "219593496"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.17 = STRING: "13658352"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.18 = STRING: "348593"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.19 = STRING: "89233569948"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.20 = STRING: "1380956068373"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.21 = STRING: "2147483648"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.22 = STRING: "4"

由此您可以推断出哪个节点是哪个统计数据,但幸运的是,我已经完成了所有这一切。

数据收集-配置.xml将以下内容添加到顶部,但在所有 rrd 配置之后:

<resourceType name="MemcachedStats" label="memcached stats" resourceLabel="memcached">
    <persistenceSelectorStrategy class="org.opennms.netmgt.collectd.PersistAllSelectorStrategy"/>
    <storageStrategy class="org.opennms.netmgt.dao.support.IndexStorageStrategy"/>
</resourceType>

然后在群组部分添加以下内容:

<group name="memcached_stats" ifType="all">
    <mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.1" instance="MemcachedStats" alias="pid" type="integer" />
    <mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.2" instance="MemcachedStats" alias="uptime" type="integer" />
    <mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.3" instance="MemcachedStats" alias="time" type="integer" />
    <mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.4" instance="MemcachedStats" alias="version" type="string" />
    <mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.5" instance="MemcachedStats" alias="pointer_size" type="integer" />
    <mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.4" instance="MemcachedStats" alias="rusage_user" type="integer" />
    <mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.7" instance="MemcachedStats" alias="rusage_system" type="integer" />
    <mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.8" instance="MemcachedStats" alias="curr_items" type="integer" />
    <mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.9" instance="MemcachedStats" alias="total_items" type="integer" />
    <mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.10" instance="MemcachedStats" alias="bytes" type="integer" />
    <mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.11" instance="MemcachedStats" alias="curr_connections" type="integer" />
    <mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.12" instance="MemcachedStats" alias="total_connections" type="integer" />
    <mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.13" instance="MemcachedStats" alias="connection_structures" type="integer" />
    <mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.14" instance="MemcachedStats" alias="cmd_get" type="integer" />
    <mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.15" instance="MemcachedStats" alias="cmd_set" type="integer" />
    <mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.16" instance="MemcachedStats" alias="get_hits" type="integer" />
    <mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.17" instance="MemcachedStats" alias="get_misses" type="integer" />
    <mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.18" instance="MemcachedStats" alias="evictions" type="integer" />
    <mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.19" instance="MemcachedStats" alias="bytes_read" type="integer" />
    <mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.20" instance="MemcachedStats" alias="bytes_written" type="integer" />
    <mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.21" instance="MemcachedStats" alias="limit_maxbytes" type="integer" />
    <mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.22" instance="MemcachedStats" alias="threads" type="integer" />
</group>

最后,你想找到系统定义标签网络管理协议&网络SNMP(UCD)并在其中添加以下内容收集标签:

<includeGroup>memcached_stats</includeGroup>

重启 OpenNMS,然后你就可以看到...当 capsd 重新扫描主机时,它将开始收集这些统计数据

以下是从memcached可以获取的数据的参考:

  • pid:此服务器进程的进程 ID
  • 正常运行时间:此服务器已运行的秒数
  • 时间:根据服务器的当前 UNIX 时间
  • version:此服务器的版本字符串
  • pointer_size:主机操作系统上指针的默认大小
  • rusage_user:此进程的累计用户时间
  • rusage_system:此进程的累计系统时间
  • curr_items:服务器当前存储的项目数
  • total_items:自此服务器启动以来存储的项目总数
  • 字节:此服务器当前用于存储项目的字节数
  • curr_connections:打开的连接数
  • total_connections:自服务器开始运行以来打开的连接总数
  • connection_structures:服务器分配的连接结构数量
  • cmd_get:累计检索请求次数
  • cmd_set:累计存储请求数
  • get_hits:已请求并发现存在的键的数量
  • get_misses:已请求但未找到的项目数
  • 逐出:从缓存中删除的有效项目数,以便为新项目释放内存
  • bytes_read:此服务器从网络读取的总字节数
  • bytes_written:此服务器向网络发送的总字节数
  • limit_maxbytes:此服务器允许用于存储的字节数
  • 线程:请求的工作线程数

剩下的就是构建您想要的图形或报告。

(适用于 CentOS 5.2、OpenNMS 1.5.93-1、net-snmp 5.3.1、memcached 1.2.2)

答案2

自 1.7.4 版起它是内置的。

http://www.opennms.org/wiki/Memcached_Monitor

答案3

干得好,Nathan!只是一些评论。

您让这件事变得比实际需要的要难一些——对于标量对象(即每个节点只出现一次的对象),无需使用自定义资源类型。如果您删除资源类型,则只需将每个 <mibObj> 的“oid”属性的最后一位数字迁移到其“instance”属性中,并将 <group> 的“ifType”属性从“all”更改为“ignore”。

您肯定需要将其中一些统计数据视为计数器(单调递增的值,这样两个样本之间的差值才是真正重要的),方法是指定它们的类型为“计数器”而不是“整数”(或“量规”,等效但更清晰)。记住什么是量规和什么是计数器的一个好方法是,量规表示例如现在房间内的人数,而计数器表示例如曾经通过旋转门进入房间的人数。因此,“curr_items”应该是量规,“total_items”应该是计数器。其他也需要更改,但这足以让您开始。您需要重新启动并删除使用错误类型创建的任何 RRD 文件;OpenNMS 将自动重新创建文件。

最后,您也可以使用 HTTP 收集器来完成此操作,但这样您就无法体验到使用 SNMP 的乐趣 ;)

最后一点——通常最好将这些类型的“配方”记录在 opennms.org wiki 上,而不是记录在 ServerFault 等外部网站上。这是因为多年以后,SNMP 数据收集的 XML 架构可能会发生变化,能够相应地更新说明,而无需在数百万个网站上创建帐户或追踪数百万作者的电子邮件地址,这真是太好了。

答案4

memcache 协议定义stat命令,您可以使用它来获取所有这些信息。无论您使用哪种 API,它都应该具有此命令的绑定。

相关内容