Как сохранить эффективные исторические журналы с графитом, углеродом и собранные на CentOS 7

Вступление

Системы мониторинга получают и накапливают большие объемы данных в процессе работы. Чем дольше работает система мониторинга, тем больше данных она собирает.

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

Некоторые системы мониторинга, такие как Zabbix, дают возможность хранить как точные, так и усредненные значения данных, но их возможности настройки очень ограничены.

https://en.wikipedia.org/wiki/Time_series_database баз данных seriesTime series] помогают нам решить проблему хранения больших объемов исторических данных. Временные ряды - это просто последовательность точек данных во времени, и база данных временных рядов оптимизирована для хранения данных этого типа.

В этом уроке мы покажем вам, как установить и настроить Graphite - инструмент для хранения числовых данных временных рядов и рендеринга графиков этих данных. Он состоит из трех программных компонентов:

  • * Carbon * - демон, который прослушивает данные временных рядов и записывает их на диск с помощью серверной части хранилища.

  • * Whisper * - простая база данных, похожая на RRDTool, для хранения данных временных рядов

  • * Graphite-Web * - веб-приложение Django, которое отображает графики и обеспечивает многофункциональную визуализацию и анализ полученных данных.

В нашей окончательной конфигурации наш агент мониторинга отправляет точки данных в Carbon, который имеет компоненты реле углерода, агрегатора углерода и кэша углерода. Carbon записывает данные в базу данных Whisper. Graphite-Web отображает данные на веб-странице, которую могут просматривать пользователи.

Предпосылки

Прежде чем начать, убедитесь, что вы выполнили следующие шаги:

  • Разверните каплю CentOS 7

  • Добавьте пользователя sudo, следуя Initial Server Setup

  • Add swap space на ваш сервер; пример 4 ГБ сумма в порядке

  • Включите репозиторий EPEL (Дополнительные пакеты для Enterprise Linux):

sudo yum -y install epel-release

Обновите вашу систему:

sudo yum -y update

Более подробная информация о репозитории EPEL доступна по адресу fedoraproject.org.

Шаг 1 - Установка графита и углерода

Установите необходимые приложения, включая инструменты, связанные с Python, и веб-сервер Apache:

sudo yum install httpd mod_wsgi python-pip python-devel git pycairo libffi-devel

Получите последние исходные файлы для графита и углерода с GitHub:

cd /usr/local/src
sudo git clone https://github.com/graphite-project/graphite-web.git
sudo git clone https://github.com/graphite-project/carbon.git

Проверьте требования:

python /usr/local/src/graphite-web/check-dependencies.py

Вы увидите следующие сообщения:

[REQUIRED] Unable to import the 'whisper' or 'ceres' modules, please download this package from the Graphite project page and install it.

   . . .

   6 optional dependencies not met. Please consider the optional items before proceeding.
   5 necessary dependencies not met. Graphite will not function until these dependencies are fulfilled.

Таким образом, вы должны установить недостающие модули. Сначала установите + gcc:

sudo yum install gcc

Затем установите модули:

sudo pip install -r /usr/local/src/graphite-web/requirements.txt

Затем проверьте версию пакета + django-tagging +:

pip show django-tagging

Если версия пакета меньше 0.3.4, вам следует обновить его:

sudo pip install -U django-tagging

Проверьте требования еще раз:

python /usr/local/src/graphite-web/check-dependencies.py

Теперь вы должны увидеть следующий вывод:

[OPTIONAL] Unable to import the 'ldap' module, do you have python-ldap installed for python 2.7.5? Without python-ldap, you will not be able to use LDAP authentication in the graphite webapp.
[OPTIONAL] Unable to import the 'python-rrdtool' module, this is required for reading RRD.
2 optional dependencies not met. Please consider the optional items before proceeding.
All necessary dependencies are met.

В этом руководстве нам не потребуется аутентификация LDAP или база данных RRD.

Установите Carbon:

cd /usr/local/src/carbon/
sudo python setup.py install

Установите веб-приложение:

cd /usr/local/src/graphite-web/
sudo python setup.py install

Теперь все компоненты установлены, и вы готовы к настройке Graphite.

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

Шаг 2 - Настройка Carbon

Carbon включает в себя несколько услуг:

  • + carbon-cache + - принимает метрики и записывает их на диск

  • + carbon-relay + - копирует данные

  • + carbon-aggregator + - работает перед + carbon-cache +, чтобы со временем буферизовать метрики, прежде чем перенаправлять их в Whisper

Последние два необязательны.

Файл конфигурации углерода

Основной конфигурационный файл + carbon.conf +. Он определяет настройки для каждого демона Carbon.

Давайте сделаем копию файла примера:

sudo cp /opt/graphite/conf/carbon.conf.example /opt/graphite/conf/carbon.conf

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

Схемы хранения

Затем вам нужно отредактировать файл + storage-schemas.conf, в котором описаны уровни хранения для хранения метрик. Он сопоставляет метрические пути с шаблонами и сообщает Whisper, какую частоту и историю точек данных хранить.

Размер дискового пространства, занимаемого данными, зависит от настроек в этом файле.

Сначала сделайте копию файла примера:

sudo cp /opt/graphite/conf/storage-schemas.conf.example /opt/graphite/conf/storage-schemas.conf

Давайте откроем файл для редактирования:

sudo vi /opt/graphite/conf/storage-schemas.conf

По умолчанию он содержит два раздела:

[carbon]
pattern = ^carbon\.
retentions = 60:90d

[default_1min_for_1day]
pattern = .*
retentions = 60s:1d

Каждый раздел имеет:

  • имя, указанное в квадратных скобках

  • регулярное выражение, указанное после + pattern = +

  • строка уровня удержания, указанная после + retentions = +

Например, давайте добавим новый раздел:

[zabbix_server]
pattern = ^Zabbix_server\.
retentions = 30s:7d,5m:30d,10m:1y

Шаблон регулярного выражения будет соответствовать любой метрике, которая начинается с + Zabbix_server +. Кроме того, этот пример использует несколько сохранений:

  • каждая точка данных представляет 30 секунд, и мы хотим хранить до 7 дней данных с такой частотой

  • все исторические данные за последние 30 дней хранятся с 5-минутными интервалами

  • все исторические данные за последний год хранятся с 10-минутными интервалами

Whisper снизит выборку метрик при превышении порогов для удержания.

Агрегирование хранилища (необязательно)

Затем вам может понадобиться файл + storage-aggregation.conf, который определяет, как агрегировать данные с сохранением точности. Этот файл не является обязательным. Если его нет, будут использованы значения по умолчанию.

Сделайте копию файла примера:

sudo cp /opt/graphite/conf/storage-aggregation.conf.example /opt/graphite/conf/storage-aggregation.conf

Давайте посмотрим на файл:

sudo vi /opt/graphite/conf/storage-aggregation.conf

По умолчанию он содержит 4 раздела:

[min]
pattern = \.min$
xFilesFactor = 0.1
aggregationMethod = min

[max]
pattern = \.max$
xFilesFactor = 0.1
aggregationMethod = max

[sum]
pattern = \.count$
xFilesFactor = 0
aggregationMethod = sum

[default_average]
pattern = .*
xFilesFactor = 0.5
aggregationMethod = average

Подобно файлу + storage-schemas.conf +, каждый раздел имеет имя, указанное в квадратных скобках, и регулярное выражение, указанное после + pattern = +. Каждый раздел также имеет два дополнительных параметра:

  • + xFilesFactor + указывает, какая часть слотов предыдущего уровня хранения должна иметь ненулевые значения, чтобы агрегировать в ненулевое значение. По умолчанию это + 0.5 +

  • «+ метод агрегации» определяет функцию («+ среднее», «+ сумма», «+ min », « max », « последний »), используемую для агрегирования значений для следующего уровня хранения. По умолчанию это ` средний +`

По умолчанию, когда данные попадают в следующий интервал хранения, Graphite будет суммировать все метрики, оканчивающиеся на + .count +, получит минимум / максимум всех метрик, оканчивающихся на + .min / .max + соответственно, и усреднит все остальное.

Реле (опционально)

+ carbon-relay + используется для репликации и шардинга. + carbon-relay + может работать вместе с (+ или вместо) + carbon-cache + и передавать входящие метрики на несколько бэкэндов + carbon-cache +, работающих на разных портах или хостах.

Чтобы настроить передачу данных на другие хосты, вы должны отредактировать соответствующий файл конфигурации. Сначала сделайте копию файла примера:

sudo cp /opt/graphite/conf/relay-rules.conf.example /opt/graphite/conf/relay-rules.conf

Откройте файл для редактирования:

sudo vi /opt/graphite/conf/relay-rules.conf

По умолчанию он содержит один раздел, который отправляет данные на localhost:

[default]
default = true
destinations = 127.0.0.1:2004:a, 127.0.0.1:2104:b

(+: a + и +: b + означают, что на одном и том же хосте вы можете запустить несколько экземпляров carbon-cache)

В приведенном ниже примере показаны настройки + carbon-relay + для отправки данных из + Zabbix_server + на один хост, а все остальные данные - на три других хоста:

[zabbix]
pattern = ^Zabbix_server\.
destinations = 10.0.0.4:2004

[default]
default = true
destinations = 127.0.0.1:2004, 10.0.0.2:2024, 10.0.0.3:2004

Шаблон регулярного выражения в первом разделе будет соответствовать любой метрике, которая начинается с + Zabbix_server +, и все данные будут передаваться на хост с IP-адресом + 10.0.0.4 +. Все остальные данные будут переданы на локальный хост и два других хоста.

Все пункты назначения, перечисленные в + relay-rules.conf +, также должны быть перечислены в файле + / opt / graphite / conf / carbon.conf +, в настройке + DESTINATIONS + в разделе + [relay] + :

sudo vi /opt/graphite/conf/carbon.conf

Мы добавили три новых IP-адреса:

[relay]
...
DESTINATIONS = 127.0.0.1:2004, , ,
...

Агрегация (необязательно)

+ carbon-aggregator + используется для буферизации метрик с течением времени, прежде чем сообщать о них в базу данных Whisper. Его можно запустить перед + carbon-cache. Правила агрегации позволяют вам добавлять несколько метрик вместе, уменьшая необходимость суммировать множество метрик в каждом URL.

Чтобы настроить агрегирование данных, сначала скопируйте файл примера:

sudo cp /opt/graphite/conf/aggregation-rules.conf.example /opt/graphite/conf/aggregation-rules.conf

Форма каждой строки в этом файле должна быть следующей:

() =

Это будет захватывать любые полученные метрики, которые соответствуют + input_pattern + для расчета агрегированной метрики Расчет будет происходить каждые + частота + секунд. Доступны следующие методы агрегирования: + sum или` + avg`. Имя агрегированной метрики будет получено из + output_template +, заполняя любые захваченные поля из + input_pattern +.

Например, давайте представим, что в вашей организации 25 филиалов, и вы хотите построить график их общего интернет-трафика.

  • collectd.monitoring-host.branch-01.if_octets.rx

  • collectd.monitoring-host.branch-02.if_octets.rx

  • collectd.monitoring-host.branch-03.if_octets.rx

  • collectd.monitoring-host.branch-25.if_octets.rx

Вы можете хранить данные из каждого филиала, построить график для каждого из них и затем суммировать их.

Однако этот тип операции является дорогостоящим: для визуализации итогового графа сначала необходимо прочитать 25 различных метрик, затем вам необходимо объединить результаты, применяя функцию суммирования, и, наконец, построить график.

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

collectd.monitoring-host.branches.if_octets.rx (60) = sum collectd.monitoring-host.*.if_octets.rx

При такой конфигурации метрики будут буферизироваться в течение 60 секунд, объединяться с использованием функции суммы и сохраняться в новом файле метрик.

Шаг 3 - Запуск Carbon как услуга

Настройте инициализирующие скрипты Carbon.

Сначала скопируйте их в + / etc / init.d / + и сделайте их исполняемыми:

sudo cp /usr/local/src/carbon/distro/redhat/init.d/carbon-* /etc/init.d/
sudo chmod +x /etc/init.d/carbon-*

Запустить + carbon-cache:

sudo systemctl start carbon-cache

Если вы решите использовать их, запустите + carbon-relay и` + carbon-aggregator`:

sudo systemctl start carbon-relay
sudo systemctl start carbon-aggregator

Настройка Carbon завершена: Carbon запущен и готов к приему данных. Теперь вы можете настроить веб-интерфейс.

Шаг 4 - Настройка графического веб-приложения

Graphite-Web - это веб-приложение Django, которое работает под Apache / mod_wsgi.

Скопируйте пример файла настроек:

sudo cp /opt/graphite/webapp/graphite/local_settings.py.example /opt/graphite/webapp/graphite/local_settings.py

Откройте файл для редактирования:

sudo vi /opt/graphite/webapp/graphite/local_settings.py

Найдите + SECRET_KEY + и введите уникальное значение. Это используется для обеспечения криптографического подписания; Вы можете положить что-нибудь здесь, пока это уникально. Найдите + TIME_ZONE + и обновите его до часового пояса для установки. См. Https://en.wikipedia.org/wiki/List_of_tz_database_time_zones[list часовых поясов] при необходимости.

. . .

SECRET_KEY = ''

. . .

TIME_ZONE = ''

. . .

Инициализируйте новую базу данных:

cd /opt/graphite
sudo PYTHONPATH=/opt/graphite/webapp/ django-admin.py syncdb --settings=graphite.settings

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

   Operations to perform:
     Synchronize unmigrated apps: url_shortener, account, dashboard, tagging, events
     Apply all migrations: admin, contenttypes, auth, sessions
   Synchronizing apps without migrations:
     Creating tables...
       Creating table account_profile

     . . .

     Applying sessions.0001_initial... OK

   You have installed Django's auth system, and don't have any superusers defined.
   Would you like to create one now? (yes/no):
   Username (leave blank to use 'root'):
   Email address:
   Password:
   Password (again):
   Superuser created successfully.

Выполните следующую команду, чтобы собрать все статические файлы в одном каталоге:

sudo PYTHONPATH=/opt/graphite/webapp/ django-admin.py collectstatic --settings=graphite.settings

Вы увидите следующий вывод. Ответьте + yes + на запрос:

You have requested to collect static files at the destination
location as specified in your settings:

/opt/graphite/static

This will overwrite existing files!
Are you sure you want to do this?

Type 'yes' to continue, or 'no' to cancel:
Copying '/opt/graphite/webapp/content/js/browser.js'
Copying '/opt/graphite/webapp/content/js/completer.js'
...
407 static files copied to '/opt/graphite/static'.

Сделайте соответствующий Graphite, принадлежащий пользователю + apache +:

sudo chown -R apache:apache /opt/graphite/storage/
sudo chown -R apache:apache /opt/graphite/static/
sudo chown -R apache:apache /opt/graphite/webapp/

Для запуска веб-приложения вам нужен файл + graphite.wsgi +. Этот файл содержит код + mod_wsgi +, выполняемый при запуске для получения объекта приложения. Скопируйте файл примера:

sudo cp /opt/graphite/conf/graphite.wsgi.example /opt/graphite/conf/graphite.wsgi

Настройте Apache. Чтобы узнать больше о виртуальных хостах Apache в целом, см. Https://www.digitalocean.com/community/tutorials/how-to-set-up-apache-virtual-hosts-on-centos-7[thutorial]. Скопируйте пример файла виртуального хоста из Graphite:

sudo cp /opt/graphite/examples/example-graphite-vhost.conf /etc/httpd/conf.d/graphite.conf

Откройте файл для редактирования:

   sudo vi /etc/httpd/conf.d/graphite.conf

Убедитесь, что ваше + ServerName + установлено на ваш домен или IP-адрес. Строка + Alias ​​+ должна быть уже установлена ​​правильно. Добавьте блок + <Directory> + под ним.

. . .

ServerName

. . .

Alias /static/ /opt/graphite/static/

<Directory /opt/graphite/static/>
  Require all granted
</Directory>

Сохраните и закройте файл.

Шаг 5 - Графит, защищающий паролем (рекомендуется)

По умолчанию любой, кто знает адрес сервера, на котором запущено веб-приложение, может просматривать любые данные. Чтобы предотвратить это, вы можете установить пароль доступа.

Создайте новую папку и установите разрешения:

sudo mkdir /opt/graphite/secure
sudo chown -R apache:apache /opt/graphite/secure

Используйте + htpasswd + для создания нового имени пользователя и пароля, которые ограничат доступ к приложению Graphite-Web. В приведенном ниже примере вы можете увидеть, как создать пользователя ++ и добавить новый пароль:

sudo htpasswd -c /opt/graphite/secure/.passwd
New password:
Re-type new password:
Adding password for user

Настройте Apache. В строке + Require user + вы должны указать то же имя, что и на предыдущем шаге:

sudo vi /etc/httpd/conf.d/graphite.conf

Добавьте этот новый блок + <Location> + в любом месте основного блока виртуального хоста:

<Location "/">
    AuthType Basic
    AuthName "Private Area"
    AuthUserFile /opt/graphite/secure/.passwd
    Require user
</Location>

Сохраните и закройте файл.

Шаг 6 - Запуск Graphite-Web

Запустите сервис Apache и включите его для запуска при загрузке:

sudo systemctl start httpd
sudo systemctl enable httpd

Установка завершена! Запустите браузер и перейдите по адресу + http: /// +.

Введите имя пользователя и пароль, которые вы установили в Шаге 5.

Вы увидите следующее:

изображение: https: //assets.digitalocean.com/articles/historicallogs_graphite_carbon/1.png [Домашняя страница Graphite-Web]

Шаг 7 - Публикация метрик из коллекции

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

Более подробная информация о collectd доступна на сайте official.

Установите коллекцию:

sudo yum install collectd

Файл конфигурации содержит много настроек. Откройте файл для редактирования:

sudo vi /etc/collectd.conf

Завершите следующее:

  • Установите + Hostname + в Глобальных настройках. Это может быть любое имя, которое вы хотите, и оно будет использоваться в веб-интерфейсе для обозначения этого хоста.

Hostname
  • Раскомментируйте настройки плагина + write_graphite +

LoadPlugin write_graphite
  • Измените настройки в блоке + <Plugin write_graphite> + следующим образом:

<Plugin write_graphite>
 <Node "">
   Host "localhost"
   Port ""
 Protocol "tcp"
LogSendErrors true
 Prefix ""

 StoreRates true
  AlwaysAppendDS false
 EscapeCharacter "_"
 </Node>
</Plugin>

Основные параметры плагина + write_graphite +:

  • + Host + (required) - имя хоста агента сбора углерода. В нашем случае это работает на localhost

  • + Port + (required) - порт, используемый агентом по сбору углерода. В нашем примере + carbon-relay + прослушивает порт + 2003 +

  • + Prefix + - строка префикса, предшествующая имени хоста, отправляемого в Carbon. Мы добавили пункт, чтобы Graphite мог автоматически группировать хосты

  • + Postfix + - строка постфикса, добавленная к имени хоста, отправляемого в Carbon. Нам не нужна эта опция, потому что мы установили префикс, так что вы можете отключить его

Начните собирать, чтобы начать отправку метрик в Graphite:

sudo systemctl start collectd.service

Собранный сразу начинает отправлять данные в Графит. Обновите веб-страницу. Если вы развернете папку * Metrics *, вы увидите список * collectd * в списке. Через некоторое время вы сможете увидеть красивые графики ваших данных, как показано ниже.

изображение: https: //assets.digitalocean.com/articles/historicallogs_graphite_carbon/2.png [Графики для метрик> collectd> Monitor> load> load> midterm]

Шаг 8 - Управление данными

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

  1. На левой панели щелкните * Metrics *> * collectd *> * Monitor * (или «+ Hostname +», настроенный на шаге 7)> * load *> * load *> * midterm *. Вы увидите график средней нагрузки.

изображение: https: //assets.digitalocean.com/articles/historicallogs_graphite_carbon/3.png [Нажмите кнопку данных графика]

  1. Нажмите кнопку * Данные графика * под графиком.

  2. Нажмите кнопку * Добавить * справа от всплывающего окна.

  3. Вставьте следующую строку: + collectd..memory. * +. Это позволит выбрать все графики, связанные с памятью. Если вы использовали другое имя для своего хоста, используйте это имя вместо + Monitor Of.

  4. Нажмите * OK *. Вы увидите несколько графиков на одном экране. Из-за различий в шкале кривая нагрузки превратилась в линию. Чтобы это исправить, вы должны выполнить следующие манипуляции с графиками.

  5. Нажмите кнопку * Graph Data * еще раз.

  6. Выберите строку + collectd..load.load.midterm +.

  7. Нажмите кнопку * Применить функцию *.

  8. Выберите * Специальный *> * Рисовать во второй оси Y *

  9. Нажмите * Применить функцию * еще раз.

  10. Выберите * Специальный *> * Цвет *.

  11. Введите + black + и нажмите * OK *.

  12. Выберите строку + collectd.Monitor.memory. * +.

  13. Нажмите * Применить функцию *.

  14. Выберите * Special *> * Draw Stacked *.

  15. Вы увидите изображение, подобное показанному в конце шага 7.

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

Заключение

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

Графит можно использовать в качестве приборной панели. Вы можете отслеживать ключевые показатели: использование ЦП, использование памяти, использование сетевых интерфейсов и т. Д.

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

Related