サイズとヒット数のデータをコンパイルしたいのですが...
次のスクリプトを作成します(そして実行可能にします)。
#!/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"
それから、どのノードがどの統計であるかを推定することができますが、幸運なことに、私はすでにすべてを行っています。
datacollection-config.xmlで、以下を先頭に追加しますが、結局のところrrd config:
<resourceType name="MemcachedStats" label="memcached stats" resourceLabel="memcached">
<persistenceSelectorStrategy class="org.opennms.netmgt.collectd.PersistAllSelectorStrategy"/>
<storageStrategy class="org.opennms.netmgt.dao.support.IndexStorageStrategy"/>
</resourceType>
次に、groupsセクションに以下を追加します。
<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>
そして最後に、さらに下に、Net-SNMP&Net-SNMP(UCD)のsystemDefタグを見つけて、-内に以下を追加します。 収集タグ:
<includeGroup>memcached_stats</includeGroup>
OpenNMSを再起動すると、それができます... capsdがホストを再スキャンすると、これらの統計の収集が開始されます
以下は、memcachedから取得できるデータのリファレンスです。
残っているのは、必要なグラフやレポートを作成することだけです。
(CentOS 5.2、OpenNMS 1.5.93-1、net-snmp 5.3.1、memcached 1.2.2で動作します)
1.7.4以降に組み込まれています。
いい仕事だ、ネイサン!ほんの少しのコメント。
これを必要以上に難しくしました。スカラーのオブジェクト、つまりノードごとに1回だけ表示されるオブジェクトには、カスタムresourceTypeを使用する必要はありません。 resourceTypeを削除する場合は、各<mibObj>の「oid」属性の最後の桁をその「instance」属性に移行し、<group>の「ifType」属性を「all」から変更する必要があります。無視する"。
「integer」(または「gauge」)の代わりに「counter」を指定して、これらの統計の一部をカウンター(2つのサンプル間のデルタが実際に重要になるように単調に増加する値)として扱う必要があります。それらのタイプについては同等ですがより明確です)。ゲージとは何か、カウンターとは何かを覚えておくための良いニーモニックは、ゲージが表すことです。現在部屋にいる人数。カウンターは例を表します。部屋に入るために改札口を通過したことがある人の数。したがって、「curr_items」はゲージであり、「total_items」はカウンターである必要があります。他の人も変更する必要がありますが、それで十分です。間違ったタイプで作成されたRRDファイルを再起動して削除する必要があります。 OpenNMSは自動的にファイルを再作成します。
最後に、HTTPコレクターを使用してこれを行うこともできますが、SNMPを使用することの喜びを体験することはできませんでした;)
最後にもう1つ、これらの種類の「レシピ」は、ServerFaultなどの外部サイトではなくopennms.orgwikiに文書化することをお勧めします。これは、SNMPデータ収集のXMLスキーマが数年後に変更される可能性があるためです。百万のサイトでアカウントを作成したり、百万の作成者の電子メールアドレスを追跡したりせずに、それに応じて手順を更新できるのは素晴らしいことです。
スクリプトをリファクタリングしました:(netcatが必要です)
#!/bin/bash
echo -e "stats\nquit"|nc $1 11211 | while read -d $'\r' stat
name value;
do
echo $value
done
fyi:OpenNMS> 1.7.4に、ネイティブのmemcachedモニタリングが追加されました。私が書いた半完成の記事については、OpenNMSwikiを確認してください。
memcacheプロトコルはstat
コマンドを定義します。これを使用してすべての情報を取得できます。使用しているAPIに関係なく、このコマンドをバインドする必要があります。