我正在开始一个新项目,并考虑将Ansible或Salt用于部署自动化以及也许更复杂的编排(服务器管理和联合)。
使用Salt我想知道它与Graphite或Zenoss或Ganglia之间是否有任何集成...使用Salt 0mq连接将数据从Salt“ 小兵”中继到监视/绘图数据库/收集器。
还有其他人看过吗?
我正在开始一个新项目,并考虑将Ansible或Salt用于部署自动化以及也许更复杂的编排(服务器管理和联合)。
使用Salt我想知道它与Graphite或Zenoss或Ganglia之间是否有任何集成...使用Salt 0mq连接将数据从Salt“ 小兵”中继到监视/绘图数据库/收集器。
还有其他人看过吗?
Answers:
我现在使用Salt-stack超过6个月来管理40多个节点。
在我当前的设置中,我使用:
也可以在CentOS 6.x下运行
到目前为止,我的经验是盐堆非常适合注册所有内容。但是由于长期在节点上运行Daemon,其不稳定。
我经常遇到一些问题,例如无法达到盐矿小怪的主人或记忆力。可以通过简单的解决方法来解决此问题,该解决方法是每隔24小时/每星期一次重新启动盐小兵。
但是盐矿奴隶中的这个问题使其无法通过0mq框架收集数据。
我当前的设置运行安全。我可以使用salt-stack快速注册更改,并在节点上收集这些技巧。
我建议您研究两件事:盐矿-http: //docs.saltstack.com/topics/mine/ 盐事件-http: //docs.saltstack.com/topics/event/index.html
如果将这些与您自己的返回器配置设置结合使用,可以将结果存储在石墨或您列出的任何其他结果中。您可以想象使用Salt来处理自上而下的“探测”和自下而上的“事件”。我无法评论这种系统的有效性,但原则上似乎有可能。
我在这里概述了通过salt-mine和check_mk进行每主机次秒级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')
将小兵的防雷间隔设置为一分钟:
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 ),
]