Статьи

Мониторинг с помощью Bosun

Bosun – это система мониторинга и оповещения, разработанная хорошими людьми из Stack Exchange , а затем открытая для всех нас. Он написан на Go , что означает, что его агенты мониторинга могут работать везде, где Go может отбросить двоичный файл … который почти везде Итак, что именно он делает и как он сравнивается с аналогами New Relic , CloudWatch , Nagios , Splunk Cloud , Server Density и другими инструментами мониторинга?

Что такое Босун?

В простейшем случае Bosun – это система для получения измерений от множества различных источников, их организации, отслеживания и запуска триггеров на основе изменений во времени.

Система использует агент, написанный на Go, называемый scollector, для отправки этих метрик принимающему хосту. Метрики ограничены только тем, что может отправить сколлектор, а не каким-либо ограничением в самом Bosun. Это означает, что есть широкие возможности для расширения доступных данных. Многочисленные внешние сборщики уже доступны, и написание пользовательских сборщиков с помощью собственных сценариев оболочки не особенно сложно.

Из-за ворот эта установка и структура уже очень привлекательны. Он бесплатный, разворачивается практически в любом месте, агенты представляют собой встроенные двоичные файлы без компиляции и имеют широкие возможности настройки . Это твердая формула.

Это также оставляет область этой статьи очень открытой, если мы не сузим область. Имея это в виду, для этого обзора и сравнения мы сосредоточимся на готовых функциональных возможностях.

Что в коробке?

Прямо в scollector заложена возможность мониторинга процессора, диска, сети, памяти и процессов в Windows, Mac и Linux. Оттуда он добавляет некоторые дополнительные функции ОС, такие как процессы .NET, домены приложений, Active Directory и SQL Server в Windows или Yum в Linux. Мониторы VMWare, icmp (ping), snmp и AWS ‘EC2 и ELB также встроены. Для некоторых из них предусмотрена дополнительная поддержка Apache, Cassandra, Chef, CloudFlare, Elasticsearch, HAProxy, Puppet и Redis. Это, конечно, можно расширить.

Как я это использую?

Сначала мы настроим сервер для получения информации от различных удаленных мониторов, которые мы можем использовать. Этот сервер также будет выступать в качестве нашего веб-хоста для просмотра, отслеживания и оповещения об этих значениях. Далее мы настроим удаленного агента для отправки информации о другой машине обратно на наш основной сервер мониторинга. Наконец, мы рассмотрим, как настроить оповещение, некоторые из расширенных метрик, которые вы можете отслеживать, и как собирать пользовательскую информацию, о которой агент, возможно, еще не знает.

1. Настройте сервер для сбора информации

Для начала вам необходимо настроить сервер / контейнер Bosun Monitor для получения и сбора информации.

Вы можете быстро попробовать это с установкой Bosun Docker, хотя сам Stack Exchange говорит, что они НЕ используют эту настройку в работе. Они не говорят, что вы не должны, только что они этого не делают. В настоящее время я склонен согласиться с этим советом, потому что я оставил монитор, запущенный из контейнера Docker, отслеживающим три-четыре сервера в течение нескольких дней, и через некоторое время испытал зависший сервер мониторинга. В репозитории Bosun GitHub есть код для передачи данных в случае, если монитор не работает. Для подробной настройки производства, проверьте этот пост в блоге .

Чтобы запустить версию Docker, чтобы попробовать все, просто откройте общедоступный сервер / ВМ, убедитесь, что Docker установлен , а затем…

1
docker run -d -p 4242:4242 -p 8070:8070 stackexchange/bosun

Это позволит установить монитор, прослушивающий порт 8070 со всеми его зависимостями, включая OpenTSDB и HBase .

Отсюда вы можете получить IP-адрес своей виртуальной машины и открыть браузер по IP: 8070, чтобы увидеть основной веб-интерфейс, включая узлы, с которых он получает информацию с правой стороны. В настоящее время он должен собирать только из себя, но вы можете пролистывать метрики, чтобы получить представление об уровне детализации и детализации, которые вы можете получить из системы. Возможно, вам придется подождать несколько минут, чтобы собрать достаточно информации для отображения.

Я обнаружил, что мне нужна виртуальная машина 1 ГБ для правильной работы образа Docker, НО, на котором запущены монитор, HBase и OpenTSDB на одной машине. В производственной установке вы, вероятно, просто смотрите на сам монитор, хранящий данные на внешнем хосте OpenTSDB, так же, как вы ожидаете от любой другой производственной базы данных.

2. Настройте клиентов для отправки информации

Теперь, когда у вас настроен сервер мониторинга, переключитесь на другую машину или виртуальную машину, чтобы настроить scollector. Сколлектор представляет собой переносной двоичный файл Go. Загрузите правильный для вашей машины, затем поднимите консоль и запустите …

1
scollector -h <BOSUN MONITOR IP>:8070

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

3. Создать оповещение

Я не собираюсь дублировать собственный краткий старт создания оповещений Bosun , который представляет собой прекрасный пример того, как настроить оповещения для различных метрик. Оповещения сводятся к выбору метрики и хоста (хостов), использованию выражения для мониторинга метрики, созданию правила для этой метрики для запуска оповещения и последующей отправке оповещения.

Здесь вы начинаете видеть самую сильную точку Bosun, выражения . Выражения являются собственным языком, который в основном отображает / сокращает вызовы агрегации, включая среднее, счетчик изменений, стандартное отклонение (очень полезно), медиану и т. Д. Простой пример из быстрого старта показывает читабельный…

1
avg(q("sum:rate{counter,,1}:os.cpu{host=your-system-here}", "1h", ""))

Мы можем видеть, что он принимает среднее значение «avg» результата запроса последнего часа «1h» метрики «os.cpu» для указанного имени хоста «host» в «your-system-here».

Правила одинаково понятны …

1
2
3
4
5
6
7
alert cpu.is.too.high {
    template = test
    $metric = q("sum:rate{counter,,1}:os.cpu{host=your-system-here}", "1h", "")
    $avgcpu = avg($metric)
    crit = $avgcpu > 80
    warn = $avgcpu > 60
}

Предупреждение сработает, когда значение превысит 60 процентов, а критическое состояние будет активировано, когда оно превысит 80 процентов. В оповещении будет использоваться шаблон «тест», который использует собственный язык шаблонов Bosun и может быть настроен в соответствии с вашими потребностями.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
template test {
    subject = {{.Last.Status}}: {{.Alert.Name}} on {{.Group.host}}
    body = `<p>Alert: {{.Alert.Name}} triggered on {{.Group.host}}
    <hr>
    <p><strong>Computation</strong>
    <table>
        {{range .Computations}}
            <tr><td><a href="{{$.Expr .Text}}">{{.Text}}</a></td><td>{{.Value}}</td></tr>
        {{end}}
    </table>
    <hr>
    {{ .Graph .Alert.Vars.metric }}
    <hr>
    <p><strong>Relevant Tags</strong>
    <table>
        {{range $k, $v := .Group}}
            <tr><td>{{$k}}</td><td>{{$v}}</td></tr>
        {{end}}
    </table>`
}

Для отправки этих предупреждений Bosun требуется SMTP-сервер. В настоящее время это единственный способ отправки оповещений, хотя ряд систем обработки входящей почты от провайдеров (Sendgrid, Mailgun, Cloudmailin и т. Д.) Может сделать отправку этих писем конечной точке http довольно тривиальной, чтобы инициировать другие действия. В этом случае вы можете настроить шаблоны для отправки данных в формате JSON или XML.

4. Отслеживать расширенные показатели

Bosun предоставляет множество продвинутых примеров использования, которые охватывают такие вещи, как:

  • Отслеживание сессий на каждом интерфейсе HAProxy:
1
2
3
$current_sessions = max(q("sum:haproxy.frontend.scur{host=*,pxname=*,tier=*}", "5m", ""))
$session_limit = max(q("sum:haproxy.frontend.slim{host=*,pxname=*,tier=*}", "5m", ""))
$q = ($current_sessions / $session_limit) * 100
  • Оповещение о прогнозируемом будущем дисковом пространстве:
1
$days_to_zero = (forecastlr(q("avg:6h-avg:os.disk.fs.percent_free{$filter}", "7d", ""), 0) / 60 / 60 / 24)
  • Использование макросов, чтобы избежать повторного использования определений предупреждений:
1
2
3
4
5
6
macro host_based {
warnNotification = lookup("host_base_contact", "main_contact")
critNotification = lookup("host_base_contact", "main_contact")
warnNotification = lookup("host_base_contact", "chat_contact")
critNotification = lookup("host_base_contact", "chat_contact")
}
  • Установка оповещений о сигналах тревоги, которые отклоняются от нормы без необходимости жесткого кодирования порога оповещения:
1
2
3
4
5
6
$history = band($metric, $duration, $period, $lookback)
$past_dev = dev($history)
$past_median = percentile($history, .5)
$current_median = percentile(q($metric, $duration, ""), .5)
$diff = $current_median - $past_median
warn = $current_median > ($past_median + $past_dev*2) && abs($diff) > 10 && $hit_percent > 1
  • Условные оповещения. Когда вы ожидаете оповещение в определенных обстоятельствах, это нормально, например, не отправлять оповещение об использовании Swap, когда очередь почты высокая.
1
2
3
$mail_q = nv(max(q("sum:exim.mailq_count{host=*}", "2h", "") > 5000), 1)
$metric = "sum:rate{counter,,1}:linux.mem.pswp{host=*,direction=in}"
$q = (median(q($metric, "2h", "")) > 1) && ! $mail_q

5. Отслеживайте свои собственные показатели с помощью внешних коллекторов

Scollector также может отправлять информацию, собранную практически из любого типа сценария, для агрегирования, мониторинга и управления Bosun Monitor. Эти сценарии называются внешними сборщиками . Эти данные могут быть собраны в одном из двух простых форматов: простой вывод данных и данные JSON.

Простой формат вывода данных

Просто используйте стандартный поток вывода примерно так:

1
2
3
// metric timestamp value tag-key=tag-value tag-key=tag-value tag-key=tag-value
twitter.tweet_count 1441406996 0 query=stackoverflow-down
twitter.follower_count 1441406996 1337 account=stackoverflow

Вы заметите, что в метрике не указана единица измерения; это просто число, что касается Bosun. Они могут быть добавлены в графики или выражения позже.

Формат данных JSON

Этот формат позволяет включать в ваши метрики дополнительные данные, которые являются просто сериализованными экземплярами структур opentsdb.DataPoint или metadata.Metasend .

1
2
{"metric":"exceptional.exceptions.count","timestamp":1438788720,"value":5,"tags":{"application":"Careers","machine":"ny-web03","source":"NY_Status"}}
{"metric":"exceptional.exceptions.count","timestamp":1438788720,"value":0,"tags":{"application":"AdServer","machine":"ny-web03","source":"NY_Status"}}

Как это сравнить?

Теперь у нас есть сервер мониторинга, который может получать любые метрики, которые мы хотим, собирать эти метрики из любого места, где мы выберем, в простом формате, позволяет нам использовать множество инструментов сокращения для любых из этих мер и позволяет нам запускать многоуровневые оповещения пользовательский шаблон в любом месте, мы выбираем. И это бесплатно, за исключением цены на сервер (ы), на которых он сидит. Это довольно солидное предложение.

Вот общий обзор того, как он сравнивается с некоторыми другими предложениями.

Новая Реликвия

Новый Relic зарабатывает на жизнь с помощью мониторинга приложений, хотя он и включает в себя некоторый мониторинг серверов.

Мониторы приложений созданы для интеграции в работающие приложения, чтобы они могли собирать информацию о уровне стека и сообщать о ней, выявлять узкие места и предупреждать о проблемах. Это очень сложная система с ценой, которая варьируется от бесплатной до $ 149 / месяц за хост и выше. Как правило, он зарабатывает свою цену, поскольку предоставляет бесценную информацию независимо от того, где размещено ваше приложение.

Bosun, конечно, не заменит это. Однако, если вы хотите написать свой коллектор уровня приложения для вывода данных таким образом, чтобы Bosun мог их использовать, у вас все равно не было бы сведений об уровне трассировки приложения, которые бы соответствовали данным New Relic. New Relic – это отличный сервис, который сложно понять заменой. Это также расширяемо .

Преимущество, которое Bosun имеет в New Relic, заключается в том, что вы можете определять свое собственное хранение данных с неограниченным количеством хостов, его система оповещения является значительно более настраиваемой и гибкой, а совместимость с New Relic не становится ограничением вашей системы мониторинга. Многие люди, которых я знаю, в конечном итоге отключают оповещения New Relic, особенно в отношении интеграции пейджеров, потому что они часто бывают ложными тревогами, самостоятельным разрешением или ожидаемым поведением, не сообщая об этом New Relic.

CloudWatch

CloudWatch обеспечивает мониторинг и оповещение о существующих показателях, отслеживаемых AWS, в зависимости от типа ресурса AWS, о котором мы говорим.

Система оповещения довольно гибкая, хотя и не так сильно, как Bosun. Таким образом, CloudWatch предоставляет отличную систему для мониторинга ресурсов AWS, но не более того. Если вы хотите отслеживать то, что AWS еще не отслеживает, вы не можете сделать это с CloudWatch. Если вы используете AWS, CloudWatch – это часть вашей инфраструктуры мониторинга, но не вся.

Nagios

Nagios – всеобъемлющий дедушка систем мониторинга. Он контролирует все, делает это годами, и имеет достаточно обширную сеть плагинов и решений. Все от настройки пользовательского интерфейса до мониторов. Он имеет открытые и коммерческие решения практически для всего.

Страшно просто смотреть на это, и это действительно то, что Босун сравнивает с этим. Bosun чрезвычайно проще, чем Nagios. Это одна часть дизайна и одна часть недостаток возраста.

Splunk Cloud

Люди, у которых есть Splunk, любят Splunk. Splunk – это очень комплексное решение с внушительным ценником. Я знаю многих людей в мире ИТ, которые клянутся всем, что может предложить Splunk в качестве решения для мониторинга, однако ценник лишил меня возможности когда-либо тщательно его оценить. Таким образом, я не могу предоставить большую часть сравнения.

Плотность сервера

В мире «как услуга» плотность серверов, вероятно, обеспечивает лучшее сравнение с Bosun. Как хост, он будет потреблять буквально все, включая данные Nagios.

Вы можете написать свои собственные плагины для агента. Метрики могут быть переданы из ассортимента различных облачных провайдеров, поэтому с ним не связано блокирование мониторинга. Их веб-интерфейс содержит полную метрическую картину того, что происходит с сервером в любой момент времени. Есть даже приложения для iPhone и Android . Он также имеет довольно настраиваемые оповещения, основанные на множестве показателей, которые вы можете передать.

Что касается цен , то они гораздо более сопоставимы с облачными предложениями, чем другие платные игроки, о которых я упоминал.

Вывод

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

Ссылка: Мониторинг с Bosun от нашего партнера JCG Барри Джонса в блоге Codeship Blog .