web-dev-qa-db-ja.com

OpenNMSでmemcached統計を監視するにはどうすればよいですか?

サイズとヒット数のデータをコンパイルしたいのですが...

2
Nathan Milford

次のスクリプトを作成します(そして実行可能にします)。

#!/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-SNMPNet-SNMP(UCD)systemDefタグを見つけて、-内に以下を追加します。 収集タグ:

<includeGroup>memcached_stats</includeGroup>

OpenNMSを再起動すると、それができます... capsdがホストを再スキャンすると、これらの統計の収集が開始されます

以下は、memcachedから取得できるデータのリファレンスです。

  • pid:このサーバープロセスのプロセスID
  • 稼働時間:このサーバーが実行されている秒数
  • 時間:サーバーに応じた現在のUNIX時間
  • version:このサーバーのバージョン文字列
  • router_size:ホストOS上のポインターのデフォルトサイズ
  • 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で動作します)

5
Nathan Milford

1.7.4以降に組み込まれています。

http://www.opennms.org/wiki/Memcached_Monitor を参照してください

2

いい仕事だ、ネイサン!ほんの少しのコメント。

これを必要以上に難しくしました。スカラーのオブジェクト、つまりノードごとに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スキーマが数年後に変更される可能性があるためです。百万のサイトでアカウントを作成したり、百万の作成者の電子メールアドレスを追跡したりせずに、それに応じて手順を更新できるのは素晴らしいことです。

1
user4871

スクリプトをリファクタリングしました:(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を確認してください。

1
robbyt

memcacheプロトコルはstatコマンドを定義します。これを使用してすべての情報を取得できます。使用しているAPIに関係なく、このコマンドをバインドする必要があります。

0
vartec