Настройка программы =================== Настройка технических средств --------------------------------------- Серверы, на которых устанавливается Типовое ПО «Витрина данных», должны соответствовать техническим характеристикам указанным в документе «Техническое описание системы» раздел :ref:`hard_soft_ware`, в котором приводятся требования к серверному оборудованию (CPU, RAM, HDD и т.д.), программному обеспечению и каналам связи. Необходимые настройки для серверов описаны в документе «Руководство по установке», в котором приводятся требования к серверам, доступности портов для каждого сервера, настройка протоколов, наличие библиотек и т.д. .. _software_settings: Настройка программных средств --------------------------------------- Все предварительные действия необходимые перед установкой программы, процесс установки и проверка корректной установки программы описан в документе «Руководство по установке» в разделе «Подготовка к установке». .. attention:: Программные средства настраиваются в зависимости от используемой конфигурации. Состав компонентов приведен в разделе :ref:`distr_components` документа «Техническое описание системы». Настройка ProStore ~~~~~~~~~~~~~~~~~~~~~~~~~~ Настройка Сервиса исполнения запросов (query-execution) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Конфигурация инстанса узла **Сервиса исполнения запросов** (query-execution) Prostore представляет собой текстовый YAML-файл, параметры которого организованы в древовидную структуру. Файл конфигурации содержит логику и порядок работы **Сервиса исполнения запросов**. Для наглядности конфигурация сервиса исполнения запросов разделена на отдельные секции. Пример файла конфигурации Prostore приведен в разделе `Конфигурация ноды `_ документации Prostore. Настройка коннекторов ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Следующие коннекторы требуют настройки конфигурации: - Kafka-Clickhouse reader connector; - Kafka-Clickhouse writer connector; - Kafka-Postgres reader connector; - Kafka-Postgres writer connector; - Kafka Jet writer connector. Конфигурация коннектора представляет собой текстовый YAML-файл, параметры которого организованы в древовидную структуру. Пример файла конфигурации Prostore приведен в разделе `Конфигурация коннекторов `_ документации Prostore. Настройка СМЭВ QL Сервера ~~~~~~~~~~~~~~~~~~~~~~~~~~ .. Конфигурация СМЭВ QL Сервера .. Подключаем файл с настройками конфигурации СМЭВ QL Сервера .. include:: ../../modules/smev-ql/doc/smev_ql_config.rst Настройка СМЭВ3-адаптера ~~~~~~~~~~~~~~~~~~~~~~~~ .. Конфигурация СМЭВ-адаптер .. Подключаем файл с настройками конфигурации СМЭВ-адаптер .. include:: ../../modules/smev3-adapter/doc/smev3_adapter_config.rst Настройка CSV-Uploader ~~~~~~~~~~~~~~~~~~~~~~ .. Конфигурация CSV-Uploader (application.yml) .. Подключаем файл с настройками конфигурации CSV-Uploader .. include:: ../../modules/csv-uploader/doc/csv_uploader_config.rst Настройка ПОДД-адаптера - Модуль исполнения запросов ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. Конфигурация ПОДД-адаптера - Модуль исполнения запросов (application.yml) .. Подключаем файл с настройками конфигурации ПОДД-адаптер - Модуль исполнения запросов .. include:: ../../modules/podd-adapter-query/doc/podd_adapter_query_config.rst Настройка ПОДД-адаптер – Модуль MPPR ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. Конфигурация ПОДД-адаптер – Модуль MPPR (application.yml) .. Подключаем файл с настройками конфигурации ПОДД-адаптер – Модуль MPPR .. include:: ../../modules/podd-adapter-mppr/doc/podd_adapter_mppr_config.rst Настройка ПОДД-адаптер-Модуль MPPW ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. Конфигурация ПОДД-адаптер-Модуль MPPW (application.yml) .. Подключаем файл с настройками конфигурации ПОДД-адаптер-Модуль MPPW .. include:: ../../modules/podd-adapter-mppw/doc/podd_adapter_mppw_config.rst Настройка ПОДД-адаптер – Модуль импорта данных табличных параметров ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. Конфигурация ПОДД-адаптер – Модуль импорта данных табличных параметров (application.yml) .. Подключаем файл с настройками конфигурации ПОДД-адаптер – Модуль импорта данных табличных параметров .. include:: ../../modules/podd-adapter-import-tp/doc/podd_adapter_import_tp_config.rst Настройка ПОДД-адаптер – Модуль группировки данных табличных параметров ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. Конфигурация ПОДД-адаптер – Модуль группировки данных табличных параметров (application.yml) .. Подключаем файл с настройками конфигурации ПОДД-адаптер – Модуль группировки данных табличных параметров .. include:: ../../modules/podd-adapter-group-tp/doc/podd_adapter_group_tp_config.rst Настройка ПОДД-адаптер – Avro-defragmentator ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. Конфигурация ПОДД-адаптер – Avro-defragmentator (application.yml) .. Подключаем файл с настройками конфигурации ПОДД-адаптер – Avro-defragmentator .. include:: ../../modules/podd-avro-defragmentator/doc/podd_avro_defragmentator_config.rst Настройка Модуля группировки чанков ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. Конфигурация модуля .. Подключаем файл с настройками конфигурации модуля .. include:: ../../modules/podd-adapter-group-repl/doc/podd_adapter_group_repl_config.rst Настройка DATA-Uploader – Модуль исполнения асинхронных заданий ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. Конфигурация DATA-Uploader – Модуль исполнения асинхронных заданий (application.yml) .. Подключаем файл с настройками конфигурации DATA-Uploader – Модуль исполнения асинхронных заданий .. include:: ../../modules/data-uploader/doc/data_uploader_config.rst Настройка REST-Uploader – Модуль асинхронной загрузки данных из сторонних источников ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. Конфигурация REST-Uploader – Модуль асинхронной загрузки данных из сторонних источников (application.yml) .. Подключаем файл с настройками конфигурации REST-Uploader – Модуль асинхронной загрузки данных из сторонних источников .. include:: ../../modules/rest-uploader/doc/rest_uploader_config.rst .. Подключение ФЛК .. include:: ../../modules/rest-uploader/doc/rest_uploader_format_control.rst .. Подключаем файл спецификации .. include:: ../../modules/rest-uploader/doc/rest_uploader_specification.rst .. подключаем файл openapi.yml .. literalinclude:: ../../modules/rest-uploader/doc/specs/upload.yml :language: yaml Настройка ПОДД-адаптер – Модуль подписок ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. Конфигурация ПОДД-адаптер – Модуль подписки (application.yml) .. Подключаем файл с настройками конфигурации ПОДД-адаптер – Модуль подписки .. include:: ../../modules/podd-adapter-replicator/doc/podd_adapter_replicator_config.rst Настройка BLOB-адаптера ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. Конфигурация BLOB-адаптер (application.yml) .. Подключаем файл с настройками конфигурации BLOB-адаптер .. include:: ../../modules/blob-adapter/doc/blob_adapter_config.rst Настройка Сервиса формирования документов ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. Конфигурация Сервис формирования документов (application.yml) .. Подключаем файл с настройками конфигурации Сервис формирования документов .. include:: ../../modules/printable-form-service/doc/printable_form_service_config.rst Настройка REST-адаптера ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. Конфигурация REST-адаптера (application.yml) .. Подключаем файл с настройками конфигурации REST-адаптера .. include:: ../../modules/rest-adapter/rest_adapter_config.rst Kонфигурационный файл с конечными точками ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Для доступа к конечным точкам отредактируйте файл ``sample.yaml``, описав все необходимые API в соответствии с приведенным в файле шаблоном (шаблон соответствует спецификации OpenAPI 3.0 https://swagger.io/specification/ ). Пример файла ``sample.yaml`` со всеми конфигурируемыми атрибутами: .. code-block:: yaml openapi: 3.0.0 info: title: Sample API version: 0.1.9 servers: - url: / paths: /test/query: get: summary: Returns some value operationId: execquery_get responses: '200': # status code description: A JSON array of user names content: application/json: schema: type: string post: summary: Returns some value operationId: execquery_post responses: '200': # status code description: A JSON array of user names content: application/json: schema: type: string /test/query/{id}: post: summary: Returns some value operationId: execquery_post_params parameters: - name: id in: path required: true schema: type: string format: utf8 responses: '200': # status code description: A JSON array of user names content: application/json: schema: type: string get: summary: Returns some value operationId: execquery_get_params parameters: - name: id in: path required: true schema: type: string format: utf8 responses: '200': # status code description: A JSON array of user names content: application/json: schema: type: string Секция ``servers`` - ``url: /`` - корневой путь сервера. Секция: ``paths`` - ``/test/query`` - путь запроса; - ``get`` - тип запроса (``get``, ``post`` и т.д.); - ``operationId`` - определение ``operationId`` для связки с файлом шаблона; - ``responses`` - описание параметров ответа. Шаблоны ^^^^^^^ Для парсинга и обогащения запросов используются шаблоны. В качестве языка шаблонов используется ``pebble`` с дополнениями: - функция ``xpath(expression)`` - возвращает вычисленное выражение на входящем документе; - тэг ``{% mtom %} some content {% endmtom %}`` - отправляет внутренность вложением; - функция ``sql(var, sql, param1, param2, ...)`` - выполняет sql-запрос с параметрами, результат записывается в переменную ``var``. Пример формирования шаблона приведен в файле ``sample.peb``. .. code-block:: {% var restrictionsquery %} {% if id is empty %} select * from passenger {% else %} select * from passenger where passenger.id = '{{ id }}' {% endif %} {% endvar %} {{ sql("searchingpassenger", restrictionsquery) }} {% for ts in rows.searchingpassenger %} id = {{ ts.id }} and name = {{ ts.firstname }} {% endfor %} Настройка Counter-provider - Сервиса генерации уникального номера ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. Конфигурация Сервиса генерации уникального номера (application.yml) .. Подключаем файл с настройками конфигурации Сервиса генерации уникального номера .. include:: ../../modules/counter-provider/doc/counter_provider_config.rst Настройка утилиты Backup manager ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. Конфигурация утилиты Backup manager (application.yml) .. Подключаем файл с настройками конфигурации утилиты Backup manager .. include:: ../../modules/backup-manager/doc/backup_manager_config.rst Настройка Arenadata Cluster Manager (ADCM) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Подробная инструкция по настройке Arenadata Cluster Manager (ADCM) приведена в официальной документации разработчика на странице https://docs.arenadata.io/adcm/. Настройка Arenadata Streaming (ADS) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Инструкция по настройке Arenadata Streaming (ADS) через Arenadata Cluster Manager (ADCM) приведена в официальной документации к Arenadata Cluster Manager (ADCM) на странице https://docs.arenadata.io/ads/AdminGuide/Config_ADCM.html. .. _logset: Настройка сервиса журналирования ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Сервис журналирования позволяет работать с логами прикладных модулей запущенных в средах WildFly и Kubernetes/OpenShift. Настройка сервиса журналирования должна быть применена к каждому модулю. Ниже приведены шаги по настройке сервиса журналирования. 1. Добавьте зависимости в проект: .. code-block:: xml org.springframework.boot spring-boot-starter-parent 2.3.4.RELEASE 4.0.0 logger-test 11 Hoxton.SR5 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-validation ch.qos.logback logback-classic 1.2.3 ch.qos.logback.contrib logback-json-classic 0.1.5 ch.qos.logback.contrib logback-jackson 0.1.5 net.logstash.logback logstash-logback-encoder 6.3 org.projectlombok lombok 1.18.12 provided io.springfox springfox-boot-starter 3.0.0 org.codehaus.janino janino 3.0.6 org.springframework.cloud spring-cloud-starter-sleuth org.springframework.kafka spring-kafka 2.5.9.RELEASE org.springframework.cloud spring-cloud-dependencies ${spring-cloud.version} pom import 2. Подключите FluentBit к приложению как отдельный контейнер в OpenShift: .. code-block:: yaml containers: - name: fluent-bit image: fluent/fluent-bit:latest volumeMounts: #перенос конфигураций, и лог файла из проекта в контейнер - name: logger mountPath: /fluent-bit/logger/ - name: fluent-bit-config mountPath: /fluent-bit/etc/ terminationMessagePolicy: File envFrom: - configMapRef: name: logger-fluent-bit-config-env 3. Создайте файл ``logback.xml`` для логирования приложения ( подробнее см. `документацию `_): .. attention:: Обязательно в appender FILE_FLUENT прописать путь до конфигураций FluentBit, иначе в контейнер логи не подтянутся. Например, ``name-project/docker/fluentbit/conf/log.log``. .. code-block:: xml %d{yyyy-MM-dd HH:mm:ss}%-5level %logger{36} - %msg%n docker/fluentbit/conf/log.log false x-b3-traceid=%X{X-B3-TraceId:-} x-b3-spanid=%X{X-B3-SpanId:-} x-b3-parentspanid=%X{X-B3-ParentSpanId:-} x-b3-sampled=%X{X-B3-Sampled:-} x-b3-flags=%X{X-B3-Flags:-} caller_file_name=%file serverEventDatetime="%d" logLevel=%level threadName=%thread message="%replace(%replace(%m){'\n','\u2028'}){'\"','\''}" exception="%replace(%replace(%ex){'\"','\u2028'}){'\n','\u2028'}%nopex" callerLine=%L callerMethod="%replace(%caller){'\n','\u2028'}" loggerName="%10.10logger" callerClass=%logger{40} levelStr="%level" levelInt="%level" mdc= \n 4. Добавьте описание конфигурации для FluentBit (подробнее см `документацию `_ ): .. code-block:: [SERVICE] Flush 1 Log_Level info Daemon off Parsers_File /fluent-bit/etc/parsers.conf [INPUT] Name tail Path /fluent-bit/logger/log.log Tag kafka-efs Buffer_Chunk_Size 400k Buffer_Max_Size 6MB Mem_Buf_Limit 6MB Parser logfmt Refresh_Interval 20 [FILTER] Name record_modifier Match kafka-efs Record subsystem ${SUBSYSTEM} Record distribVersion ${DISTRIBVERSION} Record deploymentUnit ${DEPLOYMENTUNIT} Record hostName ${HOSTNAME} Record ipAddress ${IPADDRESS} [FILTER] Name modify Match kafka-efs Hard_copy callerClass className [FILTER] Name record_modifier Match kafka-efs Whitelist_key serverEventDatetime Whitelist_key subsystem Whitelist_key distribVersion Whitelist_key deploymentUnit Whitelist_key hostName Whitelist_key ipAddress Whitelist_key logLevel Whitelist_key className Whitelist_key threadName Whitelist_key message Whitelist_key x-b3-traceid Whitelist_key x-b3-spanid [FILTER] Name lua Match kafka-efs script convert_date.lua call convert_date_efs [OUTPUT] Name stdout Match kafka-efs Format json json_date_key time [OUTPUT] Name http Match kafka-efs Host logstash-service-gt-tatarstan-test-efs.apps.ocp-public.sbercloud.ru Port 80 Format json json_date_key time Для правильной работы подключите ``parsers.conf``. .. code-block:: [PARSER] Name logfmt Format logfmt 5. Настройте форматирование даты: .. code-block:: lua function convert_date_efs(tag, timestamp, record) local pattern = "(%d+)-(%d+)-(%d+) (%d+):(%d+):(%d+),(%d+)" dt_str = record["serverEventDatetime"] local year, month, day, hour, minute, seconds, milliseconds = dt_str:match(pattern) ts = os.time{year = year, month = month, day = day, hour = hour, min = minute, sec = seconds } ts = (ts * 1000) + milliseconds record["serverEventDatetime"] = ts return 2, timestamp, record end function convert_date_pprb(tag, timestamp, record) local pattern = "(%d+)-(%d+)-(%d+) (%d+):(%d+):(%d+),(%d+)" dt_str = record["serverEventDatetime"] local year, month, day, hour, minute, seconds, milliseconds = dt_str:match(pattern) ts = os.time{year = year, month = month, day = day, hour = hour, min = minute, sec = seconds } ts = (ts * 1000) + milliseconds record["timestamp"] = ts return 2, timestamp, record end function convert_date_logstash(tag, timestamp, record) local pattern = "(%d+)-(%d+)-(%d+) (%d+):(%d+):(%d+),(%d+)" dt_str = record["serverEventDatetime"] local year, month, day, hour, minute, seconds, milliseconds = dt_str:match(pattern) ts = os.time{year = year, month = month, day = day, hour = hour, min = minute, sec = seconds } ts = (ts * 1000) + milliseconds record["time"] = ts return 2, timestamp, record end 6. Добавьте параметры модуля: .. code-block:: yaml kind: ConfigMap apiVersion: v1 metadata: name: logger-fluent-bit-config-env data: MODULEID: 1.0.0 MODULEVERSION: 1.0.0 NODEID: 12345 HOSTADDRESS: 0.0.0.0 SUBSYSTEM: LOGGER-TEST DISTRIBVERSION: 1.0.0 DEPLOYMENTUNIT: TEST-UNIT IPADDRESS: 0.0.0.1 7. Настройте конфигурацию для OpenShift. Для того, чтобы Prometheus мог идентифицировать сервис и собирать с него информацию, создайте **Service** и укажите путь, на котором располагаются метрики приложения. .. code-block:: yaml apiVersion: v1 kind: Service metadata: name: monitoring-rest annotations: description: 'Exposes Prometheus App by CLuster Ip' prometheus.io.scrape: 'true' prometheus.io.path: '/monitoring-rest/actuator/prometheus' prometheus.io.port: '8081' labels: app: monitoring-rest spec: type: LoadBalancer ports: - name: http port: 9837 targetPort: 9837 selector: app: monitoring-rest Установка компонента сбора данных запросов и ответов Витрины данных ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Компонент сбора данных запросов и ответов Витрины данных реализован с целью проведения бизнес-мониторинга ИЭП процессов обработки запросов типовым ПО витрины данных, как в целом, так и в части функционирования отдельных витрин для последующей передачи данных в СЦЛ. Процесс установки ^^^^^^^^^^^^^^^^^^ Общий процесс установки состоит из следующих действий: 1. Настройка логирования модулей. 2. Установка и настройка Vector. 3. Установка и настройка HaProxy. 4. Установка и настройка fluentbit. Настройка логирования модулей ################################# Необходимо настроить формирование логов в формате JSON на стороне модулей: - **ПОДД-адаптер - Модуль исполнения запросов**; - **ПОДД-адаптер – Модуль MPPR**; - **BLOB-адаптер**; - **ПОДД-адаптер-Модуль подписок**; - **Сервис формирования документов** Для этого в файле ``logback.xml`` включите параметр ``net.logstash.logback.encoder.LogstashEncoder``. Пример logback.xml: .. code-block:: xml logs/application.log logs/application.%d{yyyy-MM-dd}.log 30 3GB Подробная информация об encoder: https://github.com/logfellow/logstash-logback-encoder Чтобы включить генерацию СЦЛ в секции **logging** файлa настроек **application.yaml** установите значения ``true``. Установка и настройка Vector ############################ Установка производится по официальной документации: https://vector.dev/docs/setup/installation/ Пример настройки source: .. code-block:: yaml json_source: type: fluent address: 0.0.0.0:24226 Пример фильтрации сообщений, имеющих флаг ``scl``: .. code-block:: yaml scl_tags_filter: type: filter inputs: - json_source condition: type: "vrl" source: |- exists(.tags) && includes(array!(.tags), "TYPE_SCL") Пример парсинга scl-сообщений: .. code-block:: yaml scl_message_remap: type: remap inputs: - scl_tags_filter source: |- . = parse_json!(.message) Пример отправки scl-сообщений в Kafka: .. code-block:: yaml podd_agent_sink: type: kafka inputs: - scl_message_remap bootstrap_servers: kafka:9092 topic: "<префикс>.scl.signal" acknowledgements: true compression: "gzip" encoding: codec: json healthcheck: true Установка и настройка HaProxy ############################## Установка производится по официальной документации: http://docs.haproxy.org/ Для настройки HaProxy в секции ``backend`` перечислите список установленных инстансов **Vector**. Пример файла ``haproxy.cfg``: .. code-block:: cfg global log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon stats socket /var/lib/haproxy/stats defaults mode tcp log global retries 3 maxconn 3000 listen stats bind 0.0.0.0:1936 mode http stats enable stats uri / frontend services bind 0.0.0.0:24226 default_backend services mode tcp backend services balance roundrobin mode tcp server vector01 vector-01:24226 server vector02 vector-02:24226 Установка и настройка Fluent bit ################################### Установка производится по официальной документации: (https://docs.fluentbit.io/manual/installation/getting-started-with-fluent-bit). Fluent bit должен быть настроен на чтение файлов логов приложений. Пример файла конфигурации ``fluent-bit.conf``: .. code-block:: [SERVICE] flush 5 daemon off log_level info parsers_file parsers.conf [INPUT] name tail path <путь до лог файла приложения> tag * parser json [OUTPUT] name forward match * host haproxy port 24226 Пример файла ``parsers.conf``: .. code-block:: [PARSER] Name json Format json На этом настройка fluentbit завершена. Работа с БД ClickHouse ####################### В рамках технического решения по хранению протоколируемых запросов и ответов с возможностью извлечение данных по уникальному идентификатору реализовано использование колоночной аналитической базы данных **ClickHouse**. Ключевые функциональные особенности базы данных **ClickHouse**: - **движок базы данных**: по умолчанию **ClickHouse** использует движок Atomic; - **движок таблиц**: MergeTree; - **версия ClickHouse**: LTS; - запрос на создание таблицы хранения логов в **ClickHouse**: **CREATE TABLE**. Пример создания таблицы: .. code-block:: sql CREATE TABLE {Название БД}.logs ( logger String, timestamp DateTime, level String, requestId String, message String, messageType String, customerId String, customerOgrn String, queryMnemonic String ) ENGINE = MergeTree() PARTITION BY timestamp ORDER BY timestamp SETTINGS index_granularity = 8192; Пример задания конфигурационных настроек: .. code-block:: yaml clickhouse_default_config: clickhouse: logger: level: trace log: /var/log/clickhouse-server/clickhouse-server.log errorlog: /var/log/clickhouse-server/clickhouse-server.err.log size: 1000M count: 10 http_port: 8123 tcp_port: 9000 listen_host: 0.0.0.0 max_connections: 4096 keep_alive_timeout: 3 user_directories: users_xml: path: users.xml local_directory: path: "{{ clickhouse_root_data_folder }}/access/" path: "{{ clickhouse_root_data_folder | add_slash }}" Включение / выключение отправки сообщений в СЦЛ ################################################# Отправка логов в СЦЛ осуществляется автоматически после корректной настройки компонента. Для выключения отправки логов закомментируйте блок отправки сообщений ``podd_agent_sink`` в Kafka в настройках Vector. Настройка Агента СМЭВ4 ~~~~~~~~~~~~~~~~~~~~~~~~ Порядок установки и описание настроек Агента СМЭВ4 см. в документе: **«Руководство администратора СМЭВ4»**. Описание формата взаимодействия между Агентом ПОДД и ПОДД-адаптером (название топиков, формат сообщений, схема взаимодействия) описан в разделе :ref:`podd-specification`. Настройка взаимодействия программы с Агентом СМЭВ4 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ После установки программы и Агента СМЭВ4 настройте их взаимодействие между собой. Для этого: 1. Настройте Агента СМЭВ4 и ПОДД-адаптер на работу с одним и тем же брокером сообщения Kafka: - Если вместе с Агентом СМЭВ4 устанавливается брокер сообщений Kafka, а Агент СМЭВ4 преднастроен на работу именно с этим экземпляром брокера сообщений, то укажите адрес этого брокера сообщений в конфигурационном файле ПОДД-адаптера (``application.yml``), параметр ``kafkaUrl``. - Если вместе с Агентом СМЭВ4 не устанавливается брокер сообщений Kafka, то в Агенте СМЭВ4 согласно его документации настройте работу с брокером сообщений Kafka, установленным с программой. Для этого используйте адрес сервера Kafka из конфигурационного файла ПОДД-адаптера (``application.yml``), параметр ``kafkaUrl``. 2. Настройте названия топиков (см. :numref:`tab_topic_name`) для обмена сообщениями в конфигурационном файле ПОДД-адаптера (``application.yml``). .. _tab_topic_name: .. table:: Название топиков для обмена сообщениями между ПОДД-адаптером и Агентом СМЭВ4 +-------+-------------------+----------------------------------------------+-------------------------------+ | **№** | **Назначение** | **Настройка** | **Значение по умолчанию** | +=======+===================+==============================================+===============================+ | 1 | Получение | ``client.kafka.query.consumer.rqTopicName`` | ``query.rq`` | | | запросов | | | +-------+-------------------+----------------------------------------------+-------------------------------+ | 2 | Ответы на запросы | ``client.kafka.query.producer.rsTopicName`` | ``query.rs`` | +-------+-------------------+----------------------------------------------+-------------------------------+ | 3 | Ошибки запросов | ``client.kafka.query.producer.errTopicName`` | ``query.err`` | +-------+-------------------+----------------------------------------------+-------------------------------+ | 4 | Результат запроса | ``client.kafka.query.estimateTopicName`` | ``query.query.estimation.rs`` | | | оценки | | | +-------+-------------------+----------------------------------------------+-------------------------------+ Формат обмена электронными сообщениями с ПОДД-адаптером описан в разделе :ref:`podd-specification`. .. _monitoringset: Настройка сервиса мониторинга --------------------------------- Для мониторинга состояния работы Типового ПО «Витрина данных» используется связка Grafana + Prometheus. Prometheus — система мониторинга, обладающая возможностями тонкой настройки метрик. Prometheus используется для отслеживания состояния работы компонентов системы на низком уровне. Grafana — инструмент с открытым исходным кодом для визуализации данных из различных систем сбора статистики. Grafana используется для представления в графическом виде временных рядов и текстовых данных. .. note:: Описание установки системы мониторинга приведено в разделе :ref:`monitoring_install` документа «Руководство по установке Типового ПО «Витрина данных»». Предоставление источника данных ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Существует два способа предоставления источника данных: - с помощью конфигурационного файла; - с помощью интерфейса Grafana. .. tab-set:: .. tab-item:: Настройка в конфигурационном файле Каждый файл конфигурации предоставления источника данных содержит *манифест*, в котором указывается желаемое состояние набора подготовленных источников данных. При запуске Grafana загружает файлы конфигурации и предоставляет источники данных, перечисленные в манифестах. Ниже приведен пример настройки источника данных **TestData** , который можно использовать для информационных панелей. 1. В директории ``provisioning/datasources/`` создайте файл ``dtm.yml`` со следующим содержимым: .. code-block:: yaml apiVersion: 1 datasources: - name: Prometheus type: prometheus access: proxy url: jsonData: httpMethod: POST manageAlerts: false prometheusType: Prometheus 2. Перезапустите Grafana, чтобы загрузить новые изменения. 3. На боковой панели наведите курсор на значок « Конфигурация» (шестеренка) и нажмите «Источники данных». TestData появится в списке источников данных. .. note:: Папка ``provisioning/datasources/`` находится в ``/etc/grafana/``. .. tab-item:: Настройка в интерфейсе Grafana Для работы Prometheus с Grafana необходимо добавить Prometheus в качестве источника получения данных в Grafana. 1. Откройте Grafana — Configuration — Data sources, нажмите **Add data source** и выберите **Prometheus**. .. _grafana_config: .. figure:: img/grafana_config.jpg :align: center :alt: Выбор Prometheus в качестве источника получения данных Выбор Prometheus в качестве источника получения данных 2. В поле URL введите адрес и порт, по которому доступен Prometheus. .. _prometheus_url: .. figure:: img/prometheus_url.jpg :align: center :alt: Ввод URL Prometheus Ввод URL Prometheus 3. Внизу страницы нажмите кнопку **Save & test** .. _save_test: .. figure:: img/save_test.jpg :align: center :alt: Применение настроек Применение настроек После успешной проверки Prometheus будет добавлен в Grafana. Предоставление информационной панели ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Определить поставщика информационных панелей можно также двумя способами: - с помощью конфигурационного файла; - с помощью интерфейса Grafana. .. tab-set:: .. tab-item:: Настройка в конфигурационном файле Каждый файл конфигурации информационной панели содержит *манифест*, который определяет желаемое состояние набора *поставщиков информационной панели*. Поставщик информационной панели сообщает Grafana, где найти и где разместить определения информационной панели. Grafana регулярно проверяет изменения в определениях панели мониторинга (по умолчанию каждые 10 секунд). В директории ``provisioning/dashboards/`` создайте файл ``dtm.yml`` со следующим содержимым: .. code-block:: yaml apiVersion: 1 providers: - name: 'DTM Metrics' # Уникальное идентифицируемое имя поставщика folder: 'dtm-metrics' # Папка, в которую помещаются дашборды type: file disableDeletion: false updateIntervalSeconds: 10 allowUiUpdates: false options: path: foldersFromFilesStructure: false .. note:: Папка ``provisioning/dashboards/`` находится в ``/etc/grafana/``. .. tab-item:: Настройка в интерфейсе Grafana 1. Нажмите на иконку ``+`` и выберите "Import dashboard". .. _import_dashboard: .. figure:: img/import_dashboard.jpg :align: center :alt: Меню импорта Панели Меню импорта Панели 2. В открывшемся окне нажмите на плашку "Upload dashboard JSON file" и загрузите файл нужной панели. .. _import_json: .. figure:: img/import_json.jpg :align: center :alt: Загрузка файла панели Загрузка файла панели .. _prometheus_config: Настройка конфигурационного файла Prometheus ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Пример конфигурационного файла ``prometheus.yml``: .. code-block:: bash global: scrape_timeout: 5s scrape_interval: 5s scrape_configs: - job_name: 'smevql-server' static_configs: - targets: ['ip:8080'] - job_name: 'blob-adapter' static_configs: # изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами - targets: ['ip:9837'] - job_name: 'counter-provider' static_configs: # изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами - targets: ['ip:9837'] - job_name: 'csv-uploader' static_configs: # изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами - targets: ['ip:9837'] - job_name: 'data-uploader' static_configs: # изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами - targets: ['ip:9837'] - job_name: 'podd-adapter-group-repl' static_configs: # изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами - targets: ['ip:9837'] - job_name: 'podd-adapter-group-tp' static_configs: # изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами - targets: ['ip:9843'] - job_name: 'podd-adapter-import-tp' static_configs: - targets: ['ip:19843'] - job_name: 'podd-adapter-mppr' static_configs: # изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами - targets: ['ip:9843'] - job_name: 'podd-adapter-mppw' static_configs: # изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами - targets: ['ip:9843'] - job_name: 'podd-adapter-query' static_configs: # изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами - targets: ['ip:9837'] - job_name: 'podd-adapter-replicator' static_configs: # изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами - targets: ['ip:9837'] - job_name: 'podd-avro-defragmentator' static_configs: # изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами - targets: ['ip:9837'] - job_name: 'printable-form-service' static_configs: # изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами - targets: ['ip:9837'] - job_name: 'rest-uploader' static_configs: # изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами - targets: ['ip:9837'] - job_name: 'smev3-adapter' static_configs: # изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами - targets: ['ip:9033']