新しいプロジェクトを開始し、展開の自動化と、おそらく、より洗練されたオーケストレーション(サーバー管理とフェデレーション)に Ansible または Salt の使用を検討しています。
Saltを使用すると、それと Graphite または Zenoss または Ganglia の間にソルト mq Saltのミニオンから監視/グラフ作成データベース/コレクターにデータを中継する接続。
他の誰かがこれを見たことがありますか?
6か月以上にわたってソルトスタックを使用して、40以上のノードを管理しました。
私の現在の設定では私が使用しています:
これはCentOS 6.xで動作します
これまでの私の経験は、ソルトスタックはすべてを登録するのに適しているということです。しかし、ノード上で長期的にデーモンを実行すると、安定しません。
私はしばしば塩の手下のマスターまたはメモリの膨満に達しないという問題を抱えています。これは、塩味のミニオンを毎週24時間/週に1回再起動するという簡単な回避策で修正できます。
しかし、salt-minionのこの問題により、0mqフレームワークでデータを収集することができなくなります。
私の現在のセットアップは安全に実行されます。ソルトスタックを使用すると、変更をかなり迅速に登録でき、ノードでcollectdを使用するとうまくいきます。
SaltやAnsibleはそのタスクのために作成されたのではないと思います。それらはその目的に使用できないと思います。
私はソルトを数か月間使用していますが、必要な機能のオプションに気づきませんでした(構成でもドキュメントでも)。しかし、Saltはpython-それがオプションである場合)で記述されているため、要件を「追加」できると思います。
最も簡単な方法は、インストールするソルトを注文することです collectd これは、システムに関するデータを収集できます(グラファイトへのコネクターがあります)
編集:私はソルトを使用して監視を実装するプロジェクトを見つけました- salmon -見てください。
私は2つのことを検討することをお勧めします:ソルトマイン- http://docs.saltstack.com/topics/mine/ ソルトイベント- http://docs.saltstack.com/topics/event/index.html
これらを独自のリターナ構成設定と組み合わせて、結果をグラファイト、またはリストした他のいずれかに保存する場合。おそらくソルトを使用して、トップダウンの「プロービング」とボトムアップの「イベント」を処理できます。そのようなシステムの有効性についてコメントすることはできませんが、原則として可能性があるようです。
ここでは、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 ),
]