Для для визуализации данных в Synergy используется комбинация инструментов Elasticsearch и Kibana.
Elasticsearch (ES) - это мощный инструмент для полнотекстового поиска и анализа данных. Он позволяет быстро загружать, выполнять поиск и анализировать большие объемы данных. Однако ES не имеет специальной визуальной оболочки, и его использование возможно с помощью набора специальных API.
Kibana - это платформа для анализа и визуализации данных. Kibana обрабатывает данные, загруженные в ES, и работает только параллельно с ним. Если работа с ES предполагает использование специального синтаксиса команд, то Kibana позволяет обрабатывать те же данные с помощью визуального интерфейса. При этом Kibana содержит интерпретатор, позволяющий использование всех возможностей и специальных команд ES.
Индексация и обработка исходных данных Synergy производится с помощью ES, дальнейший анализ и визуализация - с помощью Kibana.
В настоящем документе будут рассмотрены только некоторые из возможностей этих инструментов, непосредственно относящиеся к задаче визуализации данных. Для подробного изучения всех их возможностей и способов использования рекомендуем обращаться к официальной документации:
Для реализации диаграмм используются продукты Elasticsearch (индексация данных и поиск) и Kibana (визуализация данных). Наибольшие системные ресурсы занимает Elasticsearch (ES). Для его работы рекомендуется использовать отдельный сервер. Наиболее критичным ресурсом для ES является оперативная память: минимальный допустимый размер - 8Gb, рекомендуемый - от 16 до 64 Gb.
Для хранения индексов рекомендуется выделять отдельный диск или RAID-массив, причем желательно использовать SSD.
Актуальные системные требования перечислены здесь.
Пакеты Elasticsearch и Kibana, подготовленные для интеграции и
Synergy, а также пакет установки Java 8 располагаются в
репозитории unstable
. Для корректной
установки убедитесь, что в файле
/etc/apt/sources.list
прописаны и не
закомменированы следующие строки:
deb http://deb.arta.kz/tengri unstable main contrib non-free
Обновите репозиторий, выполнив команду:
aptitude update
Рекомендуется предварительно установить Java. Для работы ES необходима 8 версия Java.
Установка из подключенных репозиториев
Версией Java по умолчанию должна стать 8-я, поэтому выполняем в следующем порядке:
aptitude install oracle-java8-installer
Для того, чтобы проверить, что Java по умолчанию 8-я, выполняем команду:
java -version
Вывод должен быть таким:
java version "1.8.0_111" Java(TM) SE Runtime Environment (build 1.8.0_111-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)
Если Java по умолчанию получила другую версию, выводим список установленных версий, выполнив команду:
update-java-alternatives --list
Список установленных версий будет выведен в следующем виде:
java-1.7.0-openjdk-amd64 1071 /usr/lib/jvm/java-1.7.0-openjdk-amd64 java-8-oracle 1081 /usr/lib/jvm/java-8-oracle
Переключим версию на нужную, выполнив команду:
update-java-alternatives --set java-8-oracle
Для комплексной установки Java8 и Elasticsearch необходимо установить общий пакет:
aptitude install arta-synergy-indexator-elasticsearch
Этот пакет по зависимостям установит пакеты
oracle-java8-installer
и
elasticsearch
, а также установит версию
Java по умолчанию и настроит конфигурационные файлы.
Запуск ES осуществляется командой:
/etc/init.d/elasticsearch start
Команды остановки, перезапуска и проверки статуса ES аналогичны используемым для jboss:
stop
- остановка;
restart
- перезапуск (комбинация команд
stop
и start
);
status
- проверка текущего статуса ES.
По умолчанию ES доступен по адресу
localhost:9200
. Изменить эту настройку
можно в файле
/etc/elasticsearch/elasticsearch.yml
.
Проверить запуск ES можно, перейдя в браузере по адресу
localhost:9200
либо выполнив команду:
curl localhost:9200
Вывод должен быть таким:
{ "name" : "RFSWkzt", "cluster_name" : "elasticsearch", "cluster_uuid" : "r67YbmerQvyNHdxlzDIt3A", "version" : { "number" : "5.1.2", "build_hash" : "c8c4c16", "build_date" : "2017-01-11T20:18:39.146Z", "build_snapshot" : false, "lucene_version" : "6.3.0" }, "tagline" : "You Know, for Search" }
Примечание:
Если ES работает на отдельном сервере, следует указать его ip-адрес в конфигурационных файлах
/opt/synergy/jboss/standalone/configuration/arta/elasticConfiguration.xml
(параметрurl
, например,<url>http://192.168.1.130:9200/</url>
) и/etc/kibana/kibana.yml
, раскомментировав и изменив строкуelasticsearch.url: "http://192.168.1.130:9200"
.
В консоли сервера выполните команду:
aptitude install kibana
По умолчанию Kibana запускается по адресу
localhost:5601
, адрес используемого ES -
localhost:9200
.
Для обеспецения безопасности данных мы
настоятельно рекомендуем
изменить эти настройки и использовать вместо порта
5601
адрес
<host>/kibana
. Эти настройки
указываются в конфигурационном файле Kibana:
/etc/kibana/kibana.yml
.
Если необходимо, чтобы Kibana была доступна по локальной сети,
нужно изменить параметр server.host
, указав
для него IP-адрес сервера Kibana и раскомментировав
соответствующую строку:
# Kibana is served by a back end server. This setting specifies the port to use. #server.port: 5601 # Specifies the address to which the Kibana server will bind. IP addresses and host names are both valid values. # The default is 'localhost', which usually means remote machines will not be able to connect. # To allow connections from remote users, set this parameter to a non-loopback address. server.host: "127.0.0.1" # Enables you to specify a path to mount Kibana at if you are running behind a proxy. This only affects # the URLs generated by Kibana, your proxy is expected to remove the basePath value before forwarding requests # to Kibana. This setting cannot end in a slash. server.basePath: "/kibana" # The maximum payload size in bytes for incoming server requests. #server.maxPayloadBytes: 1048576 # The Kibana server's name. This is used for display purposes. #server.name: "your-hostname" # The URL of the Elasticsearch instance to use for all your queries. #elasticsearch.url: "http://localhost:9200" # When this setting’s value is true Kibana uses the hostname specified in the server.host # setting. When the value of this setting is false, Kibana uses the hostname of the host # that connects to this Kibana instance. #elasticsearch.preserveHost: true
Запуск Kibana осуществляется командой:
/etc/init.d/kibana start
Команды остановки, перезапуска и проверки статуса Kibana аналогичны используемым для jboss и ES.
Примечание:
Во время запуска и работы Kibana обязательно должен быть запущен ES, иначе возникнет ошибка:
Kibana не имеет встроенных средств для
контроля доступа: при переходе по адресу любой
пользователь имеет полные права на запись, редактирование и
удаление данных. Если требуется обеспечение защиты, предлагаем
использовать средства
nginx reverse proxy
.
Ниже приведём пример с установкой защиты от входа в модуль при
помощи web-сервера nginx, его модулей
http_auth_request_module
,
headers-more-nginx-module
и метода REST API Synergy
rest/api/auth/{role}
.
Будем предполагать, что используется стандартный
конфигурационный файл для nginx
,
поставляемый вместе с Synergy,
synergy-base
.
Веб-сервер nginx
встроенными средствами
позволяет ограничивать доступ к серверу или какому-либо
location
-у с проверкой имени пользователя
и пароля по протоколу «HTTP Basic
Authentication», однако стандартный модуль
ngx_http_auth_basic_module
позволяет
задать только статические пары
логин:пароль
в парольном файле. Мы же
хотим использовать данные учётных записей Synergy, и в этом
нам поможет модуль
ngx_http_auth_request_module
. Этот модуль
ограничивает доступ путём выполнения подзапроса со всеми
заголовками оригинального запроса. Если кодом ответа на
подзапрос будет 2xx
, то аутентификация
будет считаться пройденной, в случае, если подзапрос
возвращает 401
-й код ошибки, в ответ на
оригинальный запрос будет передан заголовок
WWW-Authenticate
из подзапроса.
Специально для подобных случаев в Synergy предусмотрен метод
API rest/api/auth/{role}
, где вместо
{role}
можно передать
user
, administrator
или methodologist
. В случае, если
пользовательские данные авторизации, переданные в заголовке
Authorization
, соответствуют
пользователю, который
имеет доступ в систему и
обладает указанной ролью,
метод вернёт код 200
, в обратном случае -
403
, а при отсутствии заголовка
Authorization
- 401
.
Модуль headers-more-nginx-module
понадобится нам для того, чтобы заменить содержимое
заголовка WWW-Authenticate
, которое
передаёт API Synergy - в целях упрощения интеграции внешнего
проигрывателя там сейчас передаётся None
вместо Basic
, а стандартная директива
nginx
, add_header
, не
срабатывает при 401
коде ответа от
прокси.
Для начала необходимо установить пакет
nginx-extras
. Возможен конфликт с пакетом
nginx-full
(если он у вас установлен) - в
этом случае смело заменяйте последний на
nginx-extras
- он содержит всё то же
самое, что и nginx-full
+ дополнительные
модули.
# aptitude install nginx-extras
После установки вам необходимо добавить в конфигурационный
файл synergy-base
следующие директивы:
# editor /etc/nginx/sites-enabled/synergy-base [ ... ] server { server_name synergy.arta.pro; #DO NOT CHANGE. use dpkg-reconfigure arta-synergy-synergy [ ... ] # Новый location, используемый для аутентификации location = /auth-kibana { proxy_pass http://127.0.0.1:8080/Synergy/rest/api/auth; more_set_headers -s 401 'WWW-Authenticate: Basic'; proxy_pass_request_body off; proxy_set_header Content-Length ""; proxy_set_header X-Original-URI $request_uri; } # И в секцию, которая соответствует Kibana location ~ ^/kibana/(.*)$ { rewrite /kibana/(.*) /$1 break; proxy_pass http://127.0.0.1:5601; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; auth_request /auth-kibana; } [ ... ] }
На этом настройка закончена, перезагрузим конфигурацию
nginx
и kibana
:
# /etc/init.d/nginx reload # /etc/init.d/kibana restart
Теперь для доступа к /kibana/app/kibana
необходимо ввести логин и пароль активной учётной записи
Synergy.