Установка 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
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
Комментариев нет:
Отправить комментарий