Для для визуализации данных в 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.