суббота, 13 июня 2015 г.

Установка Graphite и Grafana на CentOS 6.5

I. Graphite

Архитектурно Graphite состоит из трёх компонентов:
1) Graphite-Web, Django web-оболочка, он же рендер графиков, в своей работе также использует mysql;
2) Carbon, демон получения, кеширования и записи в Whisper входящих метрик;
3) Whisper, файловая БД для хранения исторических данных о метриках. 
Таким образом, метрики хранятся в отдельных файлах – по файлу на метрику, что позволяет 
довольно удобно этими метриками управлять (переносить между инсталляциями, удалять и тд)


1. Устанавливаем репозитарий EPEL
# rpm --import https://fedoraproject.org/static/0608B895.txt
или
# rpm --import http://fedoraproject.org/static/0608B895.txt 
(если первая команда выдает ошибку)
# rpm -qa gpg*
# rpm -Uvh  http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

2. Устанавливаем необходимые пакеты:
# yum --nogpgcheck install graphite-web graphite-web-selinux mysql mysql-server MySQL-python python-carbon python-whisper
ПРИМЕЧАНИЕ: Иногда выдается ошибка
#yum --nogpgcheck install graphite-web graphite-web-selinux mysql mysql-server MySQL-python python-carbon python-whisper
Loaded plugins: fastestmirror, security
Determining fastest mirrors
Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again
Тогда открываем файл /etc/yum.repos.d/epel.repo
#nano /etc/yum.repos.d/epel.repo
и меняем в строке 
mirrorlist=https:….
на 
mirrorlist=http:….

3. Устанавливаем и запускаем MySQL, если этого пакета, еще в системе нет. Установить рутовый пароль, если это еще не сделано ранее.

4. Говорим Graphite, как именно ему надо ходить в mysql - редактируем /etc/graphite-web/local_settings.py:
# nano  /etc/graphite-web/local_settings.py
Правим строки раздела DATABASES. Раскомментируем его и заполняем.
DATABASES = {
    'default': {
        'NAME': 'graphite',
        'ENGINE': 'django.db.backends.mysql',
        'USER': 'gr',
        'PASSWORD': '12345',
        'HOST': 'localhost',
        'PORT': '3306'
    }
}

5. Говорим MySQL как нужно работать с Graphite.
Создаем пользователя, от имени которого graphite будет работать с базой
# mysql -uroot –p
mysql> CREATE USER 'gr'@'localhost' IDENTIFIED BY '12345';
mysql> CREATE DATABASE graphite;
mysql> GRANT ALL PRIVILEGES ON graphite.* TO 'gr'@'localhost';
mysql> exit

6. Запускаем скрипт автоконфигурации, который готовит конфигурацию Graphite
# /usr/lib/python2.6/site-packages/graphite/manage.py syncdb
Скрипт задаст несколько вопросов, на которые нужно ответить (помечены красным):
/usr/lib/python2.6/site-packages/graphite/settings.py:231: UserWarning: SECRET_KEY is set to an unsafe default. This should be set in local_settings.py for better security
  warn('SECRET_KEY is set to an unsafe default. This should be set in local_settings.py for better security')
Creating tables ...
Creating table account_profile
Creating table account_variable
Creating table account_view
Creating table account_window
Creating table account_mygraph
Creating table dashboard_dashboard_owners
Creating table dashboard_dashboard
Creating table events_event
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_user_permissions
Creating table auth_user_groups
Creating table auth_user
Creating table auth_message
Creating table django_session
Creating table django_admin_log
Creating table django_content_type
Creating table tagging_tag
Creating table tagging_taggeditem

You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): / yes / 
Username (Leave blank to use 'root'): / ENTER /
E-mail address: 123@yandex.ru
Password: /вводим 12345/
Password (again): /вводим 12345/
Superuser created successfully.
Installing custom SQL ...
Installing indexes ...
No fixtures found.

7. Редактируем конфигурацию Apache, для того что новая система работала на другом порту, например на порту 8090.
# nano /etc/httpd/conf/httpd.conf
Добавляем к имеющейся строке Listen 80 строчку:
Listen 8090
Затем открываем файл /etc/httpd/conf.d/graphite-web.conf
# nano /etc/httpd/conf.d/graphite-web.conf
и меняем там 
<VirtualHost *:80> 
на 
<VirtualHost *:8090>

8. Запускаем сервис CARBON и перезапускаем Apache:
# service carbon-cache start
# chkconfig carbon-cache on
# service httpd restart

9. Теперь обратившись к странице http://<ip-адрес-сервера >:8090/ можно увидеть стартовую страницу Graphite:


10. Определяем схему хранения данных в Graphite. По умолчанию данные хранятся всего сутки. 
#nano /etc/carbon/storage-schemas.conf
Перед разделом [default_1min_for_1day]
Вставляем раздел [Folder]
[Folder]
pattern = ^Folder\.
retentions = 300:15d, 3600:360d
А раздел [default_1min_for_1day] приводим к виду:
[default_1min_for_1day]
pattern = .*
#retentions = 60s:1d
retentions = 60s:30d
В этом случае папка [Folder] будет хранить данные целый год, а в папке по умолчанию ([default_1min_for_1day]) данные будут храниться 30 дней. В папке [Folder] прием данных будет ожидаться каждые 300 секунд, в папке по умолчанию –каждую минуту.
Затем рестартуем сервис carbone
# service carbon-cache restart

11. Выполняем проверку работы системы. Посылаем в систему Graphite программой nc (netcat) какие-нибудь данные:
# echo "Folder.Test 1 $(date +%s)" | nc localhost 2003
(в этом примере посылаем в папку Folder метрику test со значением 1 и текущем временим)
ПРИМЕЧАНИЕ: Если команды nc в системе нет, то устанавливаем ее.
# yum install nc
В web-интерфейсе Graphite мы должны увидеть новую появившуюся метрику:

В принципе в системе уже можно работать. Файлы баз данных хранятся здесь:
/var/lib/carbon/whisper/.
Файлы можно перемещать с других серверов, удалять и переименовывать.
Важно, что бы после перемещения эти файлы имели правильные права.
Пример назначения прав:
# chown carbon:carbon /var/lib/carbon/whisper/Folder/TLF/Asterisk1-Call.wsp
# chown carbon:carbon /var/lib/carbon/whisper/Folder/TLF/Asterisk2-Call.wsp
# chown –R carbon:carbon /var/lib/carbon/whisper/

II. Grafana

Для придания особенной красоты Graphite нужно установить специальную оболочку, работающую с Graphite – под названием GRAFANA.

1. Обновляем систему
# yum update

2. Устанавливаем JAVA, необходимый для работы GRAFANA
# yum install java-1.7.0-openjdk –y

3. Устанавливаем пакет Elasticsearch, необходимый для работы GRAFANA
Скачиваем пакет RPM со страницы https://www.elastic.co/downloads/elasticsearch 
# wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.5.0.noarch.rpm
# rpm -Uvh elasticsearch-1.5.0.noarch.rpm
# service elasticsearch start
# chkconfig elasticsearch on

4. Тестируем работу Elasticsearch. Даем команду, на которую должен поступить примерно такой ответ.
[root@test ~]# curl http://localhost:9200
{
  "status" : 200,
  "name" : "Armadillo",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "1.5.0",
    "build_hash" : "544816042d40151d3ce4ba4f95399d7860dc2e92",
    "build_timestamp" : "2015-03-23T14:30:58Z",
    "build_snapshot" : false,
    "lucene_version" : "4.10.4"
  },
  "tagline" : "You Know, for Search"
}
[root@test ~]#
Если ответ поступил, значит все в порядке.

5. Скачиваем и распаковываем GRAFANA
# wget http://grafanarel.s3.amazonaws.com/grafana-1.9.1.zip
# unzip grafana-1.9.1.zip

6. Переносим файлы GRAFANA, в место, откуда она будет выполняться
# mkdir /opt/grafana
# cp -R grafana-1.9.1/* /opt/grafana/
# cd /opt/grafana/

7. Формируем конфигурационный файл grafana, скопировав его из примера:
# cp config.sample.js config.js
Проводим модификацию этого файла config.js
# nano config.js
Находим раздел Graphite & Elasticsearch example setup и приводим его к виду:
      // Graphite & Elasticsearch example setup
      datasources: {
        graphite: {
          type: 'graphite',
          url: "http://10.10.50.250:8090",
          default: true,
        },
        elasticsearch: {
          type: 'elasticsearch',
          url: "http://10.10.50.250:9200",
          index: 'grafana-dash',
          grafanaDB: true,
        }
      },
Здесь необходимо указать URL доступа к WEB интерфейсу Graphite и к Elasticsearch.

8. Далее модифицируем файл виртуального хоста Graphite /etc/httpd/conf.d/graphite-web.conf
# nano /etc/httpd/conf.d/graphite-web.conf
В самое начало конфига после строки <VirtualHost *:8090> вставляем строки
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "GET, OPTIONS"
Header set Access-Control-Allow-Headers "origin, authorization, accept"

9. Конфигурируем файл виртуального хоста grafana
# touch /etc/httpd/conf.d/grafana.conf
# nano /etc/httpd/conf.d/grafana.conf
Listen 8080
<VirtualHost *:8080>
DocumentRoot /opt/grafana/
</VirtualHost>

10 Рестартуем сервер Apache 
# service httpd restart

11. Радуемся красивому WEB-интерфейсу на странице 
http://<ip-адрес сервера>:8080/

12. Завершающие штрихи. Вносим изменения в файл /etc/elasticsearch/elasticsearch.yml
# nano /etc/elasticsearch/elasticsearch.yml
В конце добавляем:
http.cors.enabled: true
http.cors.allow-origin: http://10.10.50.250:8080
URL – это URL по которому работает grafana
Рестартуем сервисы:
# service elasticsearch restart
# service httpd restart
Затем задаем пароль на внесение изменений в конфигурацию дашборда grafana
# nano /opt/grafana/config.js
Указывем пароль пользователя admin
dashboards
      admin: {
        password: 'XXXX'
      },

ПОЛЕЗНЫЕ ССЫЛКИ:

Общий обзор и работа с Graphite и Grafana
http://habrahabr.ru/company/tcsbank/blog/252907/

Ссылки по Graphite
http://graphite.readthedocs.org/en/0.9.x/index.html 
https://github.com/graphite-project/whisper 
https://github.com/opsschool/curriculum/blob/master/monitoring_201.rst#caveats 

Комментариев нет:

Отправить комментарий