Может ли Salt (Saltstack) собирать и передавать данные для Graphite, Ganglia или Zenoss?


11

Я начинаю новый проект и рассматриваю возможность использования Ansible или Salt для автоматизации развертывания и, возможно, более сложной оркестровки (управление сервером и федерация).

С Солью мне интересно , если есть какая - либо интеграция между ним и графитом или Zenoss или ганглиями ... с использованием солью 0mq соединений для передачи данных из «миньонов» Соляных к мониторингу / Graphing базы данных / коллекторам.

Кто-нибудь еще смотрел на это?


Можете ли вы объяснить, что вы хотите сделать более подробно, пожалуйста? Какой тип допроса вам нужен?
jamieb

3
Существует новый проект под названием Salmon , целью которого является создание полноценной системы мониторинга, использующей Salt в качестве механизма сбора данных и передачи сообщений. Он использует Whisper в качестве своей базы данных, так что вы можете интегрировать его в Graphite, если действительно хотите.
jgoldschrafe

Ответы:


9

я использовал солончак более 6 месяцев, чтобы управлять более чем 40 узлами.

в моей текущей настройке я использую:

  • Icinga в качестве сервера мониторинга
  • NRPE для выполнения проверок на узлах
  • Графит собирает данные с узлов
  • коллекционируется для сбора и проталкивания метрик в графит
  • gdash для хорошей панели инструментов для визуализации графических метрик
  • солевой стек и, наконец, солевой стек, чтобы развернуть конфиги для NRPE / Collectd на каждом узле

Все это работает под CentOS 6.x

Мой опыт на данный момент в том, что солонка хороша, чтобы записать все. Но, как долго работает демон на узлах, он не стабилен.

У меня часто бывают проблемы с тем, чтобы не дотянуться до хозяина или вздутия памяти о миньонах. Это можно исправить с помощью простого обходного пути, которое вы перезапускаете каждые 24 часа / раз в неделю для миньонов.

но эта проблема в соли-миньоне делает невозможным сбор данных через 0mq Framework.

моя текущая настройка работает безопасно. Я могу довольно быстро зарегистрировать изменения с помощью salt-stack, и сборка на узлах делает свое дело.


Я не хотел отрицать это, но честность и порядочность заставили меня сделать это. Они, безусловно, знают об удивительной возможности предоставления обобщенного транспорта для метрик. Я уже делаю это через соляную шахту.
Дэн Гартвейт,

Зачем собирать поверх [py] statsd?
Дэн Гартвейт

4

Я думаю, что Salt или Ansible не созданы для этой задачи, и я думаю, что они не могут быть использованы для этой цели.

Я использую Salt в течение нескольких месяцев, и я не заметил вариантов функций, которые вы хотите (в конфигах или документации). Но я думаю, что вы можете «добавить» свои требования, так как Salt написан на python - если это вариант.

Самый простой способ - заказать соль для установки collectd, который может собирать данные о системе (и имеет разъемы для графита)

РЕДАКТИРОВАТЬ: Я нашел проект, который реализует мониторинг с использованием соли - лосось - взглянуть.


Colled был также моей первой мыслью.
Джей Адамс

Монитор соли не поддерживается github.com/thatch45/salt-monitor
Итай Френкель

3

Возможно, вы захотите взглянуть на Sensu , это подключаемое решение для мониторинга со множеством плагинов для сообщества, включая графит и другие.

Однако Sensu использует другую очередь сообщений для доставки сообщений, RabbitMQ . Возможно, требуется некоторая работа по кодированию, но вы можете попробовать заменить одну из двух очередей обмена сообщениями, так как они оба должны использовать протокол AMQ для обмена сообщениями.


2

Я рекомендую вам взглянуть на две вещи: Соляная шахта - http://docs.saltstack.com/topics/mine/ Соляные мероприятия - http://docs.saltstack.com/topics/event/index.html

Если вы объедините их с вашей собственной настройкой конфигурации возвращающего, чтобы сохранить результаты в графите или любом другом из перечисленных вами. Вы могли бы предположительно использовать Salt для обработки «зондирования» сверху вниз и «событий» снизу вверх. Я не смог бы прокомментировать эффективность такой системы, но в принципе, похоже, такая возможность есть.


Пока еще нереализованная особенность соли - это безопасная шина событий звездообразной топологии. Я использую соляную шахту для запуска и хранения check_mk_agent, а check_mk на сервере nagios вытаскивает его из шахты.
Dan Garthwaite

2

Я описал свое путешествие к мониторингу нагиосов за каждую секунду на хосте через соляную шахту и 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's 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 ),
]

К сожалению, mine_interval - это глобальная конфигурация, не относящаяся к mine_function, у меня есть несколько тяжелых функций mine, которые могут не сработать, если установить значение в минуту
Ягули
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.