Может ли Salt (Saltstack) собирать и передавать данные для Graphite, Ganglia или Zenoss?
Я начинаю новый проект и рассматриваю возможность использования Ansible или Salt для автоматизации развертывания и, возможно, более сложной оркестровки (управление сервером и федерация).
С Salt мне интересно, есть ли какая-либо интеграция между ним и Graphite, Zenoss или Ganglia... используя соединения Salt 0mq для передачи данных от "миньонов" Salt к базе данных / сборщикам мониторинга / построения графиков.
Кто-нибудь еще смотрел на это?
5 ответов
Я использовал солончак более 6 месяцев, чтобы управлять более чем 40 узлами.
в моей текущей настройке я использую:
- Icinga в качестве сервера мониторинга
- NRPE для выполнения проверок на узлах
- Графит собирает данные с узлов
- коллекционируется для сбора и проталкивания метрик в графит
- gdash для хорошей панели инструментов для визуализации метрик grahite
- солевой стек и, наконец, солевой стек, чтобы развернуть конфиги для NRPE / Collectd на каждом узле
Все это работает под CentOS 6.x
Мой опыт на данный момент в том, что солонка хороша, чтобы записать все. Но, как долго работает демон на узлах, он не стабилен.
У меня часто бывают проблемы с тем, чтобы не дотянуться до хозяина или вздутия памяти о миньонах. Это можно исправить с помощью простого обходного пути, которое вы перезапускаете каждые 24 часа / раз в неделю для миньонов.
но эта проблема в соли-миньоне делает невозможным сбор данных через 0mq Framework.
моя текущая настройка работает безопасно. Я могу довольно быстро зарегистрировать изменения с помощью salt-stack, и сборка на узлах делает свое дело.
Я думаю, что Salt или Ansible не созданы для этой задачи, и я думаю, что они не могут быть использованы для этой цели.
Я использую Salt в течение нескольких месяцев, и я не заметил вариантов функций, которые вы хотите (ни в конфигурации, ни в документации). Но я думаю, что вы можете "добавить" свои требования, поскольку Salt написан на python - если это вариант.
Самый простой способ - заказать соль для установки collectd, который может собирать данные о системе (и имеет разъемы для графита)
РЕДАКТИРОВАТЬ: Я нашел проект, который реализует мониторинг с использованием соли - лосось - взглянуть.
Возможно, вы захотите взглянуть на Sensu, это подключаемое решение для мониторинга с множеством плагинов для сообщества, включая графит и другие.
Однако Sensu использует другую очередь сообщений для доставки сообщений, RabbitMQ. Возможно, требуется некоторая работа по кодированию, но вы можете попробовать заменить одну из двух очередей обмена сообщениями, так как они оба должны использовать протокол AMQ для обмена сообщениями.
Я рекомендую вам рассмотреть две вещи: Соляная шахта - http://docs.saltstack.com/topics/mine/ Соляные мероприятия - http://docs.saltstack.com/topics/event/index.html
Если вы объедините их с вашей собственной настройкой конфигурации возвращающего, чтобы сохранить результаты в графите или любом другом из перечисленных вами. Вы можете использовать Salt для обработки "зондирования" сверху вниз и "событий" снизу вверх. Я не смог бы прокомментировать эффективность такой системы, но в принципе, похоже, такая возможность есть.
Я описал свое путешествие к мониторингу нагиосов за каждую секунду на хосте через соляную шахту и check_mk здесь: 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
И наконец: измените источник данных для всех целей nagios в /etc/check_mk/main.mk:
datasource_programs = [
( '/etc/check_mk/mine_agent.py <HOST>', ['mine'], ALL_HOSTS ),
]