Я начинаю новый проект и рассматриваю возможность использования Ansible или Поваренная соль для автоматизации развертывания и, возможно, более сложной оркестровки (управление сервером и федерация).
С Salt мне интересно, есть ли какая-то интеграция между ним и Графитовый или Зенос или Ганглии ... используя соль 0мкв подключения для передачи данных от «миньонов» Salt в базу данных / сборщики мониторинга / построения графиков.
Кто-нибудь еще смотрел на это?
Я использовал salt-stack более 6 месяцев для управления 40+ узлами.
в моей текущей настройке я использую:
также это работает под CentOS 6.x
мой опыт пока что солонка хороша, чтобы записать все. Но при длительном запуске Daemon на узлах он нестабилен.
У меня часто возникают проблемы с недостижением хозяина или вздутие живота на соляных миньонах. Это можно исправить с помощью простого обходного пути, который перезапускает соляных миньонов каждые 24 часа / один раз в неделю.
но эта проблема в salt-minion делает невозможным сбор данных через 0mq Framework.
моя текущая установка работает безопасно. Я могу довольно быстро регистрировать изменения с помощью salt-stack, и сбор на узлах делает свое дело.
Я думаю, что Salt или Ansible не созданы для этой задачи, и я думаю, что их нельзя использовать для этой цели.
Я использую Salt несколько месяцев и не заметил вариантов нужных вам функций (в конфигурациях и документации). Но я думаю, что вы можете «добавить» свои требования, поскольку Salt написана на python - если это возможно.
Самый простой способ - заказать соль для установки. собирать который может собирать данные о системе (и имеет разъемы для графита)
EDIT: я нашел проект, который реализует мониторинг с использованием соли - лосось - взглянуть.
Вы можете взглянуть на Sensu, это решение для мониторинга, подключаемое к множеству плагинов сообщества, включая графит среди прочего.
Однако Sensu использует другую очередь сообщений для доставки сообщений, RabbitMQ. Возможно, потребуется некоторая работа по кодированию, но вы можете попробовать заменить одну из двух очередей обмена сообщениями, поскольку обе они должны использовать протокол AMQ для обмена сообщениями.
Я рекомендую вам изучить две вещи: Соляная шахта - http://docs.saltstack.com/topics/mine/ Соляные события - http://docs.saltstack.com/topics/event/index.html
Если вы объедините их с вашей собственной настройкой конфигурации возвращающего устройства для сохранения результатов в графите или любом другом из перечисленных вами. Вы могли бы использовать Salt для обработки «зондирования» сверху вниз и «обработки событий» снизу вверх. Я бы не смог комментировать эффективность такой системы, но в принципе возможность есть.
Я описал свой путь к мониторингу nagios с точностью до секунды на хост с помощью соляной шахты и 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"
Настройте сервер мониторинга так, чтобы все выходные данные minion 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 ),
]