Salt(Saltstack)可以收集和中继石墨,神经节或Zenoss的数据吗?


11

我正在开始一个新项目,并考虑将AnsibleSalt用于部署自动化以及也许更复杂的编排(服务器管理和联合)。

使用Salt我想知道它与GraphiteZenossGanglia之间是否有任何集成...使用Salt 0mq连接将数据从Salt“ 小兵”中继到监视/绘图数据库/收集器。

还有其他人看过吗?


您能否更详细地说明您要做什么?您需要哪种类型的讯问?
jamieb

3
有一个名为Salmon的新项目,旨在成为一个使用Salt作为其数据收集机制和消息传输功能的成熟监视系统。它确实使用Whisper作为数据库,因此,如果您确实愿意,可以想象将其集成到Graphite中。
jgoldschrafe

Answers:


9

我现在使用Salt-stack超过6个月来管理40多个节点。

在我当前的设置中,我使用:

  • Icinga作为监视服务器
  • NRPE用于在节点上执行检查
  • 石墨从收集的节点收集数据
  • collectd用于收集和推动指标以石墨
  • gdash,一个漂亮的仪表板,可直观显示指标
  • 盐堆栈,最后是盐堆栈,以在每个节点上推出NRPE /收集的配置

也可以在CentOS 6.x下运行

到目前为止,我的经验是盐堆非常适合注册所有内容。但是由于长期在节点上运行Daemon,其不稳定。

我经常遇到一些问题,例如无法达到盐矿小怪的主人或记忆力。可以通过简单的解决方法来解决此问题,该解决方法是每隔24小时/每星期一次重新启动盐小兵。

但是盐矿奴隶中的这个问题使其无法通过0mq框架收集数据。

我当前的设置运行安全。我可以使用salt-stack快速注册更改,并在节点上收集这些技巧。


不想对此表示赞同,但是诚实和正派迫使我这样做。他们当然意识到为指标提供通用传输的巨大可能性。我已经通过盐矿做了一些。
Dan Garthwaite

为什么要收集[py] statsd?
Dan Garthwaite 2013年

4

我认为Salt或Ansible不是为该任务而创建的,我认为它们不能用于该目的。

我使用Salt已有几个月,但没有注意到您想要的功能选项(在配置文件或文档中)。但是我认为您可以“添加”您的要求,因为Salt是用python编写的-如果可以的话。

最简单的方法是为了盐安装collectd其可以收集数据有关系统(和具有连接器,以石墨)

编辑:我发现了一个使用盐- 鲑鱼 - 实施监控的项目。


收集也是我的第一个想法。
J亚当斯


3

您可能需要看一下Sensu,它是一个监视解决方案,可插入许多社区插件,包括石墨

但是,Sensu使用另一个消息传递队列来传递消息RabbitMQ。也许需要一些编码工作,但是您可以尝试替换两个消息队列之一,因为它们两个都应使用AMQ协议来交换消息。


2

我建议您研究两件事:盐矿-http: //docs.saltstack.com/topics/mine/ 盐事件-http: //docs.saltstack.com/topics/event/index.html

如果将这些与您自己的返回器配置设置结合使用,可以将结果存储在石墨或您列出的任何其他结果中。您可以想象使用Salt来处理自上而下的“探测”和自下而上的“事件”。我无法评论这种系统的有效性,但原则上似乎有可能。


Salt尚未实现的功能是它是安全的星形拓扑事件总线。我使用Salt mine来运行和存储check_mk_agent,并且nagios服务器上的check_mk将其从矿井中拉出。
Dan Garthwaite 2014年

2

我在这里概述了通过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 ),
]

太糟糕了mine_interval是不是每个mine_function的全局配置,我有一些笨重的mine函数,如果设置为一分钟,可能效果不佳。
jagguli
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.