web-dev-qa-db-ja.com

Salt(Saltstack)は、グラファイト、ガングリア、ゼノスのデータを収集して中継できますか?

新しいプロジェクトを開始し、展開の自動化と、おそらく、より洗練されたオーケストレーション(サーバー管理とフェデレーション)に Ansible または Salt の使用を検討しています。

Saltを使用すると、それと Graphite または Zenoss または Ganglia の間にソルト mq Saltのミニオンから監視/グラフ作成データベース/コレクターにデータを中継する接続。

他の誰かがこれを見たことがありますか?

11
Jim Dennis

6か月以上にわたってソルトスタックを使用して、40以上のノードを管理しました。

私の現在の設定では私が使用しています:

  • Icinga監視サーバーとして
  • [〜#〜] nrpe [〜#〜]ノードでチェックを実行するため
  • グラファイトは、collectdノードからデータを収集します
  • collectdメトリックを収集してグラファイトにプッシュするため
  • gdash Grahiteメトリックを視覚化するためのナイスダッシュボード
  • salt-stackそして最後にsalt-stackを実行して、各ノードでNRPE/Collectdの構成をロールアウトします

これはCentOS 6.xで動作します

これまでの私の経験は、ソルトスタックはすべてを登録するのに適しているということです。しかし、ノード上で長期的にデーモンを実行すると、安定しません。

私はしばしば塩の手下のマスターまたはメモリの膨満に達しないという問題を抱えています。これは、塩味のミニオンを毎週24時間/週に1回再起動するという簡単な回避策で修正できます。

しかし、salt-minionのこの問題により、0mqフレームワークでデータを収集することができなくなります。

私の現在のセットアップは安全に実行されます。ソルトスタックを使用すると、変更をかなり迅速に登録でき、ノードでcollectdを使用するとうまくいきます。

9
chifiebre

SaltやAnsibleはそのタスクのために作成されたのではないと思います。それらはその目的に使用できないと思います。

私はソルトを数か月間使用していますが、必要な機能のオプションに気づきませんでした(構成でもドキュメントでも)。しかし、Saltはpython-それがオプションである場合)で記述されているため、要件を「追加」できると思います。

最も簡単な方法は、インストールするソルトを注文することです collectd これは、システムに関するデータを収集できます(グラファイトへのコネクターがあります)

編集:私はソルトを使用して監視を実装するプロジェクトを見つけました- salmon -見てください。

4
spinus

Sens を確認することをお勧めします。これは、特に graphite を含む多数のコミュニティプラグインでプラグイン可能な監視ソリューションです。

ただし、Sensuは別のメッセージングキュー RabbitMQ を使用してメッセージを配信します。コーディング作業が必要な場合もありますが、2つのメッセージングキューのいずれかでAMQプロトコルを使用してメッセージを交換する必要があるため、2つのメッセージングキューのいずれかを置き換えることもできます。

3

私は2つのことを検討することをお勧めします:ソルトマイン- http://docs.saltstack.com/topics/mine/ ソルトイベント- http://docs.saltstack.com/topics/event/index.html

これらを独自のリターナ構成設定と組み合わせて、結果をグラファイト、またはリストした他のいずれかに保存する場合。おそらくソルトを使用して、トップダウンの「プロービング」とボトムアップの「イベント」を処理できます。そのようなシステムの有効性についてコメントすることはできませんが、原則として可能性があるようです。

2
Techdragon

ここでは、salt-mineとcheck_mkを使用して、ホストあたりの1秒未満のnagiosモニタリングへの旅の概要を説明しました。 http://garthwaite.org/saltmine_check_mk_agent.html

この記事では、何週間もいじくり回したりいじったりして、すべてが機能するようにします。解決策を要約します。

すべてのミニオンのカスタムcheck_mkモジュールを作成します。

#!/usr/bin/env python
''' Support for running check_mk_agent over salt '''
import os
import salt.utils
from salt.exceptions import SaltException

def __virtual__():
    ''' Only load the module if check_mk_agent is installed '''
    if os.path.exists('/usr/bin/check_mk_agent'):
        return 'check_mk'
    return False

def agent():
    ''' Return the output of check_mk_agent '''
    return __salt__['cmd.run']('/usr/bin/check_mk_agent')

ミニオンの地雷間隔を1分に設定します。

salt '*' file.append /etc/salt/minion.d/mine.conf "mine_interval: 1"

ミニオンのすべてのcheck_mk_agent出力を単一のjsonファイルにプルするように監視サーバーを構成してから、ネットワーククエリの代わりにそのファイルをクエリするようにcheck_mkを構成します。監視ミニオンで次のスクリプトを使用してすべてを実行します。

#!/usr/bin/env python
import sys
import json
import fcntl

DATAFILE="/dev/shm/cmk.json"
NAG_UID = 105
NAG_GID = 107

def do_update():
    import os
    import salt.client

    caller = salt.client.Caller()
    data = caller.function('mine.get', '*', 'check_mk.agent')

    lockfile = open(DATAFILE+".lock", "w")
    fcntl.flock(lockfile, fcntl.LOCK_EX)

    datafile = open(DATAFILE, "w")
    datafile.write(json.dumps(data))

    for f in (DATAFILE, DATAFILE+".lock"):
        os.chmod(f, 0644)
        os.chown(f, NAG_UID, NAG_GID)

def get_agent(minion):
    lockfile = open(DATAFILE+".lock", "w")
    fcntl.flock(lockfile, fcntl.LOCK_SH)

    data = json.load(file(DATAFILE))
    return data[minion]

if __name__ == '__main__':
    if len(sys.argv) != 2:
        print "Usage: mine_agent.py --update | <minion id>"
    Elif sys.argv[1] in ['--update', '-u']:
        do_update()
    else:
        minion = sys.argv[1]
        print get_agent(minion)

毎分更新:

$ cat /etc/cron.d/retrieve_mined_minion_data
*/1 * * * * root /etc/check_mk/mine_agent.py --update

最後に、/ etc/check_mk/main.mk内のすべてのnagiosターゲットのデータソースを変更します。

datasource_programs = [
  ( '/etc/check_mk/mine_agent.py <Host>', ['mine'], ALL_HOSTS ),
]
2
Dan Garthwaite