Визуализация данных в ARTA Synergy

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

Пакеты Elasticsearch и Kibana, подготовленные для интеграции и Synergy, а также пакет установки Java 8 располагаются в репозитории unstable. Для корректной установки убедитесь, что в файле /etc/apt/sources.list прописаны и не закомменированы следующие строки:

deb http://deb.arta.kz/tengri unstable main contrib non-free

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

aptitude update

Установка Java

Рекомендуется предварительно установить 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

Установка и настройка Elasticsearch

Для комплексной установки 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".

Установка и настройка Kibana

В консоли сервера выполните команду:

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, иначе возникнет ошибка:

Рисунок 6.1. Ошибка «Status: RED»

Ошибка «Status: RED»

Защита Kibana

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, соответствуют пользователю, который

  1. имеет доступ в систему и

  2. обладает указанной ролью,

метод вернёт код 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.