Руководство по системному администрированию#

Термины и определения#

Термин/Аббревиатура

Определение

Артефакт

Объект Kubernetes (OpenShift) определенного типа и/или YAML-файл с описанием этого объекта

АС

Автоматизированная система

Listener

Поток приложения, осуществляющий периодический опрос входящей очереди сообщений

CPU

Central Processing Unit, центральный процессор

gRPC

Высокопроизводительный фреймворк, разработанный компанией Google для вызова удаленных процедур (RPC)

JSON

JavaScript Object Notation, текстовый формат обмена данными, основанный на JavaScript

URL

Uniform Resource Locator, унифицированный адрес ресурса

Goroutines

Легковесные потоки исполнения в приложениях на Golang

Heap

Динамически распределяемая память

Сценарии администрирования#

Внимание! Шлюз MQ не имеет собственного пользовательского интерфейса для администрирования. Все действия по управлению им производятся с использованием интерфейсов и ролевой модели, предоставляемых платформой Kubernetes (OpenShift).

Ниже приведены возможные сценарии администрирования как с использованием Web-интерфейса Kubernetes (OpenShift), так и с использованием консоли клиента Kubernetes (OpenShift). Для выполнения сценариев администрирования, администратор должен иметь роль аналогичную роли администратора проекта в ролевой модели Kubernetes (OpenShift).

Настройки конфигурации шлюза смотреть в документе «Полное описание настроек»

Запуск#

С использованием веб-интерфейса Kubernetes (OpenShift):

Шаг

Действия

Вход в веб-консоль Kubernetes (OpenShift)

Перейдите по ссылке (URL) веб-консоли нужного кластера Kubernetes (OpenShift), в окне ввода учетных данных введите логин и пароль.

Переход в нужный проект

Выберите пункт меню Home/Projects, выберите из списка нужный проект.

Запуск Шлюза MQ

1. В меню выберите пункт Workload/Deployments.
2. На странице найдите нужный Deployment (при необходимости воспользуйтесь поиском по имени).
3. Пройдите по ссылке в наименовании на вкладку Detail.
4. Стрелкой вверх (Increase the pod count) увеличьте количество Pods Шлюза MQ до требуемого.

Выход из веб-консоли Kubernetes (OpenShift)

1. Щелчком по имени пользователя раскройте меню пользователя.
2. Выберите пункт Log out.
3. Закройте окно браузера.

С использованием консоли Kubernetes (OpenShift):

Шаг

Действия

Описание

Вход в OC

В окне командной строки в приглашении введите команду:
oc login --server=<url кластера>
В ответ на запрос введите имя пользователя и пароль.

Переход в нужный проект

Введите команду:
oc project <имя проекта>

Запуск Шлюза MQ

В консоли выполните команду:
oc scale --replicas=<N> deployment/<имя Deployment>

N>0 — требуемое количество запущенных Pods Шлюза MQ.

Завершение сеанса работы с OC

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

Остановка#

С использованием веб-интерфейса Kubernetes (OpenShift):

Шаг

Действие

Вход в веб-консоль Kubernetes (OpenShift)

Перейдите по ссылке (URL) веб-консоли нужного кластера Kubernetes (OpenShift), в окне ввода учетных данных введите логин и пароль.

Переход в нужный проект

Выберите пункт меню Home/Projects, выберите из списка нужный проект.

Остановка Шлюза MQ

1. В меню выберите пункт Workload/Deployments.
2. На странице найдите нужный Deployment (при необходимости воспользуйтесь поиском по имени).
3. Пройдите по ссылке в наименовании на вкладку Detail.
4. Стрелкой вниз (Decrease the pod count) уменьшите количество Pods Шлюза MQ до 0.

Выход из веб-консоли Kubernetes (OpenShift)

1. Щелчком по имени пользователя раскройте меню пользователя.
2. Выберите пункт Log out.
3. Закройте окно браузера.

С использованием консоли Kubernetes (OpenShift):

Шаг

Действие

Вход в OC

1. В окне командной строки в приглашении введите команду: oc login --server=<url кластера>
2. В ответ на запрос введите имя пользователя и пароль.

Переход в нужный проект

Введите команду:
oc project <имя проекта>

Остановка Шлюза MQ

В консоли выполните команду:
oc scale --replicas=0 deployment/<имя Deployment>

Завершение сеанса работы с OC

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

Проверка работоспособности#

С использованием веб-интерфейса Kubernetes (OpenShift):

Шаг

Действие

Описание

Вход в веб-консоль Kubernetes (OpenShift)

Перейдите по ссылке (URL) веб-консоли нужного кластера Kubernetes (OpenShift), в окне ввода учетных данных введите логин и пароль

Переход в нужный проект

Выберите пункт меню Home/Projects, выберите из списка нужный проект

Проверка работоспособности

1. В меню выберите пункт Workload/Pods.
2. На странице найдите нужный Pod Шлюза MQ.
3. Пройдите по ссылке в имени на вкладку Detail, перейдите на вкладку Terminal.
4. В терминале Pod выполните команду:
curl localhost:<portnum>/actuator/health
В выводе команды должна быть строка: "status":"UP"

<portnum> — номер порта, указанный в параметре server/port конфигурации Шлюза MQ

Выход из веб-консоли Kubernetes (OpenShift)

1. Щелчком по имени пользователя раскройте меню пользователя.
2. Выберите пункт Log out.
3. Закройте окно браузера

С использованием консоли Kubernetes (OpenShift):

Шаг

Действие

Описание

Вход в OC

1. В окне командной строки в приглашении введите команду:
oc login --server=<url кластера>
2. В ответ на запрос введите имя пользователя и пароль

Переход в нужный проект

Введите команду:
oc project <имя проекта>

Проверка работоспособности

1. В консоли выполните команду: oc port-forward pod/<имя Pod> <portnum>:<portnum>
2. Запустите еще одно окно консоли, в нем выполните команду:
curl localhost:<portnum>/actuator/health
В выводе команды должна быть строка: "status":"UP"
3. Завершите перенаправление портов нажатием Ctrl+C

<portnum> — номер порта, указанный в параметре server/port конфигурации Шлюза MQ

Завершение сеанса работы с OC

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

Настройка выделения ресурсов#

С использованием веб-интерфейса Kubernetes (OpenShift):

Шаг

Действие

Вход в веб-консоль Kubernetes (OpenShift)

Перейдите по ссылке (URL) веб-консоли нужного кластера Kubernetes (OpenShift), в окне ввода учетных данных введите логин и пароль

Переход в нужный проект

Выберите пункт меню Home/Projects, выберите из списка нужный проект

Открытие Deployment

1. В меню выберите пункт Workload/Deployments.
2. На странице найдите нужный Deployment (при необходимости воспользуйтесь поиском по имени).
3. Пройдите по ссылке в наименовании на вкладку Detail, перейдите на вкладку YAML.

Корректировка параметров

1. В окне редактирования найдите параметры:
spec.template.spec.containers[0].resources.limits.cpu
spec.template.spec.containers[0].resources.limits.memory
spec.template.spec.containers[0].resources.requests.cpu
spec.template.spec.containers[0].resources.requests.memory
2. Установите нужные значения.

Сохранение изменений

Нажмите кнопку Save

Проверка конфигурации

Нажмите кнопку Reload, проверьте, что изменения применились

Выход из веб-консоли Kubernetes (OpenShift)

1. Щелчком по имени пользователя раскройте меню пользователя.
2. Выберите пункт Log out.
3. Закройте окно браузера.

С использованием консоли Kubernetes (OpenShift):

Шаг

Действие

Вход в OC

1. В окне командной строки в приглашении введите команду:
oc login --server=<url кластера>
2. В ответ на запрос введите имя пользователя и пароль

Переход в нужный проект

Введите команду:
oc project <имя проекта>

Сохранение Deployment

В консоли выполните команду:
oc get -o yaml deployment/<имя Deployment> > <путь к файлу>.yaml

Корректировка параметров

1. Откройте файл, полученный на предыдущем шаге в текстовом редакторе (например, Notepad++).
2. Найдите в нем параметры:
spec.template.spec.containers[0].resources.limits.cpu
spec.template.spec.containers[0].resources.limits.memory
spec.template.spec.containers[0].resources.requests.cpu
spec.template.spec.containers[0].resources.requests.memory
3. Укажите нужные значения.

Загрузка Deployment

В консоли выполните команду:
oc apply -f <путь к файлу>.yaml

Завершение сеанса работы с OC

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

Настройка подключений к MQ#

Внимание

Новая конфигурация вступит в действие только после перезапуска Pods.

С использованием веб-интерфейса Kubernetes (OpenShift):

Шаг

Действие

Описание

Вход в веб-консоль Kubernetes (OpenShift)

Перейдите по ссылке (URL) веб-консоли нужного кластера Kubernetes (OpenShift), в окне ввода учетных данных введите логин и пароль

Переход в нужный проект

Выберите пункт меню Home/Projects, выберите из списка нужный проект

Открытие конфигурации

1. В меню выберите пункт Workload/Config Maps.
2. На странице найдите нужный артефакт Configmap (при необходимости воспользуйтесь поиском по имени).
3. Пройдите по ссылке в наименовании на вкладку Detail, перейдите на вкладку YAML

Артефакт, содержащий application.yml либо environment.yml (см. «Руководство прикладного разработчика»)

Редактирование параметров

1. В окне редактирования найдите параметры:
mq.connection.connections[].hostname
mq.connection.connections[].port
mq.connection.connections[].channel
mq.connection.connections[].queueManager
mq.connection.connections[].sslPeerName
2. Внесите необходимые изменения для нужных точек подключения из списка.

mq.connection.connections[].channel, mq.connection.connections[].queueManager, mq.connection.connections[].sslPeerName используются только при работе с провайдером IBM MQ

Сохранение изменений

Нажмите кнопку Save

Выход из веб-консоли Kubernetes (OpenShift)

1. Щелчком по имени пользователя раскройте меню пользователя.
2. Выберите пункт Log out.
3. Закройте окно браузера.

С использованием консоли Kubernetes (OpenShift):

Шаг

Действие

Описание

Вход в OC

1. В окне командной строки в приглашении введите команду:
oc login --server=<url кластера>
2. В ответ на запрос введите имя пользователя и пароль

Переход в нужный проект

Введите команду:
oc project <имя проекта>

Сохранение конфигурации

В консоли выполните команду:
oc get -o yaml configmaps/<имя config map> > <путь к файлу>.yaml

Артефакт, содержащий application.yml либо environment.yml (см.«Руководство прикладного разработчика»)

Корректировка параметров

1. Откройте файл, полученный на предыдущем шаге в текстовом редакторе (например, Notepad++).
2. Найдите в нем параметры:
mq.connection.connections[].hostname
mq.connection.connections[].port
mq.connection.connections[].channel
mq.connection.connections[].queueManager
mq.connection.connections[].sslPeerName
3. Внесите необходимые изменения для нужных точек подключения из списка.

mq.connection.connections[].channel, mq.connection.connections[].queueManager, mq.connection.connections[].sslPeerName используются только при работе с провайдером IBM MQ

Загрузка Deployment

В консоли выполните команду:
oc apply -f <путь к файлу>.yaml

Завершение сеанса работы с OC

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

Изменение количества Pods#

С использованием веб-интерфейса Kubernetes (OpenShift):

Шаг

Действия

Описание

Вход в веб-консоль Kubernetes (OpenShift)

Перейдите по ссылке (URL) веб-консоли нужного кластера Kubernetes (OpenShift), в окне ввода учетных данных введите логин и пароль

Переход в нужный проект

Выберите пункт меню Home/Projects, выберите из списка нужный проект

Увеличение/уменьшение количества Pods

1. В меню выберите пункт Workload/Deployments.
2. На странице найдите нужный Deployment (при необходимости воспользуйтесь поиском по имени).
3. Пройдите по ссылке в наименовании на вкладку Detail.
4. Стрелками вверх (Increase the pod count) или вниз (Decrease the pod count) соответственно увеличьте или уменьшите количество Pods Шлюза MQ до требуемого.

Выход из веб-консоли Kubernetes (OpenShift)

1. Щелчком по имени пользователя раскройте меню пользователя.
2. Выберите пункт Log out.
3. Закройте окно браузера.

С использованием консоли Kubernetes (OpenShift):

Шаг

Действия

Описание

Вход в OC

1. В окне командной строки в приглашении введите команду:
oc login --server=<url кластера>
2. В ответ на запрос введите имя пользователя и пароль.

Переход в нужный проект

Введите команду:
oc project <имя проекта>

Увеличение/уменьшение количества Pods

В консоли выполните команду:
oc scale --replicas=<N> deployment/<имя Deployment>

N>0 — требуемое количество запущенных Pods Шлюза MQ

Завершение сеанса работы с OC

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

Выгрузка системных журналов#

С использованием веб-интерфейса Kubernetes (OpenShift):

Шаг

Действия

Описание

Вход в веб-консоль Kubernetes (OpenShift)

Перейдите по ссылке (URL) веб-консоли нужного кластера Kubernetes (OpenShift), в окне ввода учетных данных введите логин и пароль

Переход в нужный проект

Выберите пункт меню Home/Projects, выберите из списка нужный проект

Загрузка журнала

1. В меню выберите пункт Workload/Deployments.
На странице найдите нужный Deployment (при необходимости воспользуйтесь поиском по имени).
2. Пройдите по ссылке в наименовании на вкладку Detail.
3. Перейдите на вкладку Pods.
4. Найдите в списке нужный Под, перейдите по ссылке в его наименовании на вкладку Detail.
5. Перейдите на вкладку Logs, щелчком по ссылке Download скачайте журнал на свой компьютер.

Выход из веб-консоли Kubernetes (OpenShift)

1. Щелчком по имени пользователя раскройте меню пользователя.
2. Выберите пункт Log out.
3. Закройте окно браузера.

С использованием консоли Kubernetes (OpenShift):

Шаг

Действия

Описание

Вход в OC

1. В окне командной строки в приглашении введите команду:
oc login --server=<url кластера>
2. В ответ на запрос введите имя пользователя и пароль.

Переход в нужный проект

1. Введите команду:
oc project <имя проекта>

Загрузка журнала

В консоли выполните команду:
oc logs -c <имя контейнера> <имя Pod> > <имя файла>.txt,
где <имя контейнера> может быть названием контейнера приложения Шлюза MQ или контейнера Sidecar

Завершение сеанса работы с OC

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

Примеры строк в выгрузке указаны в документе «Руководство по системному администрированию» раздел События системного журнала.

Просмотр метрик мониторинга#

С использованием веб-интерфейса Kubernetes (OpenShift):

Шаг

Действия

Описание

Вход в веб-консоль Kubernetes (OpenShift)

Перейдите по ссылке (URL) веб-консоли нужного кластера Kubernetes (OpenShift), в окне ввода учетных данных введите логин и пароль

Переход в нужный проект

Выберите пункт меню Home/Projects, выберите из списка нужный проект

Получите метрики мониторинга

1. В меню выберите пункт Workload/Deployments.
На странице найдите нужный Deployment (при необходимости воспользуйтесь поиском по имени).
2. Пройдите по ссылке в наименовании на вкладку Detail.
3. Перейдите на вкладку Pods.
4. Найдите в списке нужный Pod, перейдите по ссылке в его наименовании на вкладку Detail.
5. Перейдите на вкладку Terminal. В терминале Pod выполните команду: curl localhost:<portnum>/actuator/prometheus. В консоль будут выведены мгновенные значения метрик мониторинга

Выход из веб-консоли Kubernetes (OpenShift)

1. Щелчком по имени пользователя раскройте меню пользователя.
2. Выберите пункт Log out.
3. Закройте окно браузера.

С использованием консоли Kubernetes (OpenShift):

Шаг

Действия

Примечание

Вход в OC

1. В окне командной строки в приглашении введите команду:
oc login --server=<url кластера>
2. В ответ на запрос введите имя пользователя и пароль.

Переход в нужный проект

1. Введите команду:
oc project <имя проекта>

Получите метрики мониторинга

В консоли выполните команду: oc port-forward pod/<имя пода> <portnum>:<portnum>
Запустите еще одно окно консоли, в нем выполните команду: curl localhost:<portnum>/actuator/prometheus. В консоль будут выведены мгновенные значения метрик мониторинга
Завершите forwarding(s) портов, для этого нажмите Ctrl+C

-

Просмотр прикладных логов и метрик мониторинга может быть выполнен администратором в АС Журналирование и АС Мониторинг в соотвествии с документацией на эти системы.

События системного журнала#

Шлюз MQ ведет собственный системный журнал, который выводится в консоль контейнера приложения. Настройка уровня логирования задается параметром logging.level в конфигурации Шлюза. Рекомендуется устанавливать уровень логирования info (используется по-умолчанию) или выше (warn, error).

Сообщения в журнале#

Для реализации на Java

Шлюз MQ в своем системном журнале фиксирует следующие события:

Настройки подключения к MQ:

2019-08-30 16:02:56.416 [INFO ] [main] [c.s.s.m.m.MessagingConfiguration] [T:] - Настройки подключения к MQ: MqConfiguration(terminationGracePeriodSeconds=60, systemName=asbs, systemType=sc, workMode=null, connection=MqConfiguration.ConnectionConfiguration(hostname=sbt-oaar-370.example.com, port=1601, channel=SYNAPSE.SVRCONN, queueManager=M99.UB.ADP.CLS1, receiveQueue=[SNPS.UB.ASBS.IN], sendQueue=SNPS.UB.ASBS.OUT, sendToCustomDestination=false, sslPeerName=, sslCipherSuite=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, sslFipsRequired=false, sslResetCount=0, sslSocketFactory=MqConfiguration.SSLSocketFactoryConfiguration(protocol=TLSv1.2, keyStore=/mnt/secrets/user.jks, keyStoreType=JKS, trustStore=/mnt/secrets/user.jks, trustStoreType=JKS, sslCertAlias=synapse-ub)), consumerParams=MqConfiguration.ConsumerConfiguration(transactionTimeout=300, sessionCacheSize=10, receiveTimeout=100, idleTaskExecutionLimit=2, idleConsumerLimit=2, copyReplyToIntoUsr=false, threadPool=ThreadPoolConfiguration(concurrentConsumers=1, maxConcurrentConsumers=5, threadKeepAliveSeconds=5)))

Настройки маршрутизации:

2019-08-30 16:03:01.912 [INFO ] [main] [c.s.s.m.ProtoMessageCallRouteExtractor] [T:] - Конфигурация роутинга: RoutingConfiguration(destinationExpression=ScName+'-'+'srv'+ServiceName.substring(0,ServiceName.length()-2)+'-'+SpName+'-rq', routeExtractRules={SCName=[ExtractionRule(type=FROM_RFH2_HEADER, value=SCName)], ServiceName=[ExtractionRule(type=FROM_BODY, value=local-name(/*))], SPName=[ExtractionRule(type=FROM_RFH2_HEADER, value=SPName)]})

Настройки трассировки:

2019-08-30 16:03:01.516 [INFO ] [main] [c.s.s.m.t.ProtoMessageTracingHeadersExtractor] [T:] - Конфигурация трейсинга: TracingConfiguration(tracingHeaders={x-synapse-rquid=[ExtractionRule(type=FROM_BODY, value=//RqUID)]}, generateXB3Headers=true, generate128bitTraceId=true)

Запуск сервера gRPC:

2021-01-30 16:29:50.000 [INFO ] [main] [c.s.s.c.s.c.GrpcAnnotationBeanPostProcessor] [T:] - Зарегистрирован GrpcService. ServiceName=com.sbt.synapse.gateway.MessageAsyncChannel/processMessage
2021-01-30 16:29:50.003 [INFO ] [main] [c.s.s.c.s.c.GrpcAnnotationBeanPostProcessor] [T:] - Зарегистрирован GrpcService. ServiceName=com.sbt.synapse.gateway.MessageSyncChannel/processMessage

Запуск сервера HTTP:

2021-01-30 16:31:40.202 [INFO ] [main] [o.s.b.w.e.netty.NettyWebServer] [T:] - Netty started on port(s): 8799

Режим работы Шлюза MQ:

2021-01-30 16:31:49.300 [INFO ] [boundedElastic-1] [c.s.s.m.m.MqListenerRegistrator] [T:] - Шлюз потребителя работает в синхронном режиме. Принимает запросы по MQ, отправляет в gRPC/HTTP

Успешное подключение к MQ:

2019-08-30 16:03:14.010 [DEBUG] [main] [c.s.s.m.m.MessagingConfiguration$1] [T:] - Established shared JMS Connection: com.ibm.mq.jms.MQConnection@7eb27768
2019-08-30 16:03:14.013 [DEBUG] [main] [o.s.j.l.DefaultMessageListenerContainer] [T:] - Established shared JMS Connection
2019-08-30 16:03:14.014 [DEBUG] [main] [o.s.j.l.DefaultMessageListenerContainer] [T:] - Resumed paused task: org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker@14d8e132
2019-08-30 16:03:14.706 [DEBUG] [[mq-transport]-1] [c.s.s.m.m.MessagingConfiguration$1] [T:] - Registering cached JMS Session for mode 2: com.ibm.mq.jms.MQSession@445ca92d
2019-08-30 16:03:15.514 [DEBUG] [[mq-transport]-1] [c.s.s.m.m.MessagingConfiguration$1] [T:] - Registering cached JMS Session for mode 0: com.ibm.mq.jms.MQSession@28a3afb4

Сообщение получено

2023-01-11 16:16:36.182 [INFO ] [http-service-nio-2] [c.s.s.l.g.SynapseMessageLoggerImpl] [T:] - Логирование события Сообщение получено от REST. RqUID: 24fd7eccc0bc11eca979005056a31332

Сообщение отправлено

2023-01-11 16:16:36.444 [INFO ] [http-service-nio-2] [c.s.s.l.g.SynapseMessageLoggerImpl] [T:] - Логирование события Сообщение отправлено в АС: UFO. RqUID: 24fd7eccc0bc11eca979005056a31332

Таймаут

2023-01-11 16:19:17.167 [INFO ] [[mq-shared-receiver]-19] [c.s.s.l.g.SynapseMessageLoggerImpl] [T:] - Логирование события Произошел таймаут при запросе к АС: UFO. RqUID: 24fd7eccc0bc11eca979005056a31332

Ошибка отправки

2023-01-11 16:22:12.133 [INFO ] [http-service-nio-6] [c.s.s.l.g.SynapseMessageLoggerImpl] [T:] - Логирование события Произошла ошибка. Код ошибки: 603. Запрос не может быть выполнен - нет доступных подключений StackTrace: com.sbt.synapse.mq.exceptions.SynapseGatewayException: Код ошибки: 603. Запрос не может быть выполнен - нет доступных подключений <..Stacktrace..>. RqUID: 24fd7eccc0bc11eca979005056a31332

Выполнение исходящего вызова:

2019-09-12 13:55:26.267 [DEBUG] [[mq-transport]-178] [c.s.s.c.s.client.GrpcCallExecutor] [T:] - Выполнение gRPC-вызова. Метод: MethodInfo(methodDescriptor=MethodDescriptor{fullMethodName=com.sbt.synapse.gateway.MessageAsyncChannel/processMessage, type=UNARY, idempotent=false, safe=false, sampledToLocalTracing=true, requestMarshaller=io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@1b3cb794, responseMarshaller=io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@6865e487, schemaDescriptor=com.sbt.synapse.gateway.protobuf.MessageAsyncChannelGrpc$MessageAsyncChannelMethodDescriptorSupplier@3f66f5e4}, callbackPool=java.util.concurrent.ThreadPoolExecutor@1df38d8b[Running, pool size = 5, active threads = 0, queued tasks = 0, completed tasks = 227], channel=ManagedChannelOrphanWrapper{delegate=ManagedChannelImpl{logId=1, target=empty-service:5454}}). Вызов: CallInfo(methodInfo=MethodInfo(methodDescriptor=MethodDescriptor{fullMethodName=com.sbt.synapse.gateway.MessageAsyncChannel/processMessage, type=UNARY, idempotent=false, safe=false, sampledToLocalTracing=true, requestMarshaller=io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@1b3cb794, responseMarshaller=io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@6865e487, schemaDescriptor=com.sbt.synapse.gateway.protobuf.MessageAsyncChannelGrpc$MessageAsyncChannelMethodDescriptorSupplier@3f66f5e4}, callbackPool=java.util.concurrent.ThreadPoolExecutor@1df38d8b[Running, pool size = 5, active threads = 0, queued tasks = 0, completed tasks = 227], channel=ManagedChannelOrphanWrapper{delegate=ManagedChannelImpl{logId=1, target=empty-service:5454}}), callExecutor=com.sbt.synapse.core.service.client.GrpcCallExecutor@630d19b6, deadline=null, authority=asbs-srvupdateinsurancepolicy-nonl-rq, headers=MessageHeaders(headers={x-synapse-type-message=RQ, x-synapse-scname=ASBS, x-b3-traceid=714487b4f3874b32af4a21af7432bfcc, x-b3-spanid=af4a21af7432bfcc, x-synapse-from-pod-name=asbs-mq-gateway-sc, x-synapse-spname=NONL, x-synapse-operationname=UpdateInsurancePolicyRq, x-synapse-from=asbs, x-b3-sampled=1, x-synapse-messageid=ID:414d51204d39392e55422e4144502e43e6ed755de34bc421, x-synapse-corellationid=, x-synapse-rquid=C8272ef3be7CA19E9BFeA72c5eC5D8DD}))
2019-09-12 13:55:26.267 [DEBUG] [[mq-transport]-178] [c.s.s.c.s.c.PutGrpcHeadersInterceptor] [T:] - Метадата исходящего вызова: Metadata(x-synapse-type-message=RQ,x-synapse-scname=ASBS,x-b3-traceid=714487b4f3874b32af4a21af7432bfcc,x-b3-spanid=af4a21af7432bfcc,x-synapse-from-pod-name=asbs-mq-gateway-sc,x-synapse-spname=NONL,x-synapse-operationname=UpdateInsurancePolicyRq,x-synapse-from=asbs,x-b3-sampled=1,x-synapse-messageid=ID:414d51204d39392e55422e4144502e43e6ed755de34bc421,x-synapse-corellationid=,x-synapse-rquid=C8272ef3be7CA19E9BFeA72c5eC5D8DD)

Обработка входящего вызова:

2019-09-12 13:55:26.978 [DEBUG] [[grpc-transport]-5] [c.s.s.t.g.ServerTracerHeadersInterceptor] [T:] - Метадата входящего вызова: Metadata(content-type=application/grpc,user-agent=grpc-java-netty/1.18.0,x-synapse-type-message=RS,x-synapse-scname=ASBS,x-synapse-from-pod-name=asbs-srvupdateinsurancepolicy-nonl,x-synapse-spname=NONL,x-synapse-operationname=SrvUpdateInsurancePolicy,x-synapse-from=nonl,x-synapse-messageid=ID:414d51204d39392e55422e4144502e43e6ed755df01cc421,x-synapse-corellationid=ID:414d51204d39392e55422e4144502e43e6ed755de34bc421,grpc-accept-encoding=gzip,x-forwarded-proto=http,x-request-id=c5f9cafd-d299-9a6e-9616-734037313908,x-envoy-decorator-operation=asbs-mq-gateway-sc.synapse-ub-st.svc.cluster.local:5454/*,x-istio-attributes=CjAKGGRlc3RpbmF0aW9uLnNlcnZpY2UubmFtZRIUEhJhc2JzLW1xLWdhdGV3YXktc2MKMAodZGVzdGluYXRpb24uc2VydmljZS5uYW1lc3BhY2USDxINc3luYXBzZS11Yi1zdApeCgpzb3VyY2UudWlkElASTmt1YmVybmV0ZXM6Ly9hc2JzLXNydnVwZGF0ZWluc3VyYW5jZXBvbGljeS1ub25sLTdkNGY1NWZjOGMtbGJiczYuc3luYXBzZS11Yi1zdApQChhkZXN0aW5hdGlvbi5zZXJ2aWNlLmhvc3QSNBIyYXNicy1tcS1nYXRld2F5LXNjLnN5bmFwc2UtdWItc3Quc3ZjLmNsdXN0ZXIubG9jYWwKTgoXZGVzdGluYXRpb24uc2VydmljZS51aWQSMxIxaXN0aW86Ly9zeW5hcHNlLXViLXN0L3NlcnZpY2VzL2FzYnMtbXEtZ2F0ZXdheS1zYw==,x-b3-traceid=e1f4fdbd73e65b9af6f34dc0bd51ba00,x-b3-spanid=f6f34dc0bd51ba00,x-b3-sampled=1)
2019-09-12 13:55:26.985 [DEBUG] [[grpc-transport]-3] [c.s.s.m.messaging.JmsMessageProducer] [T:] - Сообщение MessageID=ID:414d51204d39392e55422e4144502e43e6ed755df01cc421 CorrelationID=ID:414d51204d39392e55422e4144502e43e6ed755de34bc421 отправлено в MQ за 6 мс

Изменение конфигурации:

2021-01-30 17:15:20.983 [DEBUG] [Thread-26] [c.s.s.m.c.r.PropertiesFileListener] [T:] - файл с настройками environment.yml изменен
2021-01-30 17:15:21.497 [DEBUG] [Thread-26] [c.s.s.m.c.r.PropertiesRefresher] [T:] - Новое состояние листенеров true не отличается от текущего
2021-01-30 17:15:21.602 [DEBUG] [Thread-26] [c.s.s.m.c.r.PropertiesFileListener] [T:] - Connection параметры обновлены MqConfiguration(terminationGracePeriodSeconds=60, systemName=rratst, systemType=sc, workMode=sync, rollbackIfError=false, autoCommitMessage=false, sslConfigs=[], connection=MqConfiguration.GlobalConnectionConfiguration(receiveQueue=[TEST.RA.QUEUE], receiveQueueSync=null, sendQueue=TEST.RA.OUT, messageBodyStyle=null, sendToCustomDestination=false, putAsync=false, readAhead=false, shareConvAllowed=true, cacheProducers=false, useSendCircuitBreaker=false, connectionCheckPeriod=1, restoreGroupIdFromUsr=false, connections=[MqConfiguration.ConnectionConfiguration(hostname=tvli-snaps0001.example.com, port=1414, channel=SRV.CHANNEL, queueManager=SYNAPSE.DEV.MGR.CLS1, sslConfigName=default, sslPeerName=null)]), consumerParams=MqConfiguration.ConsumerConfiguration(readEnabled=true, transactionTimeout=300, sessionCacheSize=10, receiveTimeout=100, idleTaskExecutionLimit=2, idleConsumerLimit=2, copyReplyToIntoUsr=false, copyGroupIdIntoUsr=false, threadPool=ThreadPoolConfiguration(concurrentConsumers=1, maxConcurrentConsumers=5, threadKeepAliveSeconds=5, rejectCapacity=0)), outbound=OutboundMqConfiguration(serviceName=null, serviceList=[], enableCopyHeadersFromRequest=false, copyHeadersFromRequestSettings=null))
2021-01-30 17:15:21.799 [DEBUG] [Thread-26] [c.s.s.m.c.r.PropertiesFileListener] [T:] - RoutingConfiguration обновлен RoutingList RoutingConfiguration(retryableServices=[], routeName=RoutingConfiguration.VariableRoute(name=null, valueFrom=[ExtractionRule(type=FROM_CONST, value=default, separator=null, list=false)], expr=null), routeList=[RoutingConfiguration.RouteConfig(routeName=default, transportType=HTTP, destinationExpression=null, grpcHeaders={}, userHeaders={}, systemHeaders={}, http=null, copyHeadersFromRequestSettings=null, transform=null, variables=[], destinations={})])
2021-01-30 17:15:21.899 [DEBUG] [Thread-26] [c.s.s.m.c.r.PropertiesFileListener] [T:] - RoutingConfiguration обновлен RoutingName
2021-01-30 17:15:21.903 [DEBUG] [Thread-26] [c.s.s.m.c.r.PropertiesFileListener] [T:] - TracingConfiguration обновлен TracingConfiguration(tracingHeaders={}, generateXB3Headers=false, generate128bitTraceId=true)
2021-01-30 17:15:22.103 [DEBUG] [Thread-26] [c.s.s.m.c.r.PropertiesFileListener] [T:] - HttpToTransportTransformConfig HttpToTransportTransformConfig(system={}, usr={}, httpToTransportConvertRequired=true) обновлен
2021-01-30 17:15:22.104 [DEBUG] [Thread-26] [c.s.s.m.c.r.PropertiesFileListener] [T:] - TransportToHttpTransformConfig TransportToHttpTransformConfig(headers={}, transportToHttpConvertRequired=true) обновлен

Ошибка подключения к MQ:

2021-01-20 17:50:24.328 [ERROR] [[mq-transport]-554] [o.s.j.l.DefaultMessageListenerContainer] [T:] - Could not refresh JMS Connection for destination 'SYNAPSE.ASFM.IN' - retrying using FixedBackOff{interval=5000, currentAttempts=11, maxAttempts=unlimited}. Cause: JMSWMQ0018: Failed to connect to queue manager 'M.SYNAPSE.BLNC2' with connection mode 'Client' and host name 'tkli-synaps0008.example.com(3012)'.; nested exception is com.ibm.mq.MQException: JMSCMQ0001: IBM MQ call failed with compcode '2' ('MQCC_FAILED') reason '2397' ('MQRC_JSSE_ERROR').
com.ibm.msg.client.jms.DetailedJMSException: JMSWMQ0018: Failed to connect to queue manager 'M.SYNAPSE.BLNC2' with connection mode 'Client' and host name 'tkli-synaps0008.example.com(3012)'.

Восстановление подключения к MQ:

2021-01-20 17:50:38.464 [INFO ] [[failover-check]-1] [c.s.s.m.h.JmsConnectionsHealthIndicator] [T:] - Подключение к серверу восстановлено - M.SYNAPSE.BLNC2-SYNAPSE.SVRCONN@tkli-synaps0008.example.com:3012
2021-01-20 17:50:38.464 [DEBUG] [[failover-check]-1] [com.sbt.synapse.mq.lb.LoadBalancer] [T:] - Возврат сервера M.SYNAPSE.BLNC2-SYNAPSE.SVRCONN@tkli-synaps0008.example.com:3012 в балансировку, доступных: 2, отключенных: 0

Для реализации на Golang

В системном журнале фиксируются следующие события приложения:

Настройки шлюза

time="2022-05-30T17:49:29Z" level=debug msg="{\"Grpc\":{\"ServerConfig\":{\"ServerPort\":5454,\"MaxMessageSizeInMb\":4,\"ThreadPool\":{\"ConcurrentConsumers\":10,\"MaxConcurrentConsumers\":10,\"ThreadKeepAliveSeconds\":0,\"RejectCapacity\":0,\"QueueRequestSize\":100,\"QueueRequestTimeout\":45000}},\"ClientConfig\":{\"Settings\":{\"default\":{\"Hostname\":\"go-mq-gateway\",\"Port\":5454,\"Timeout\":0}}}},\"RoutingConfig\":{\"RouteName\":{\"Name\":\"\",\"ValueFrom\":[{\"Type\":\"fromBody\",\"Value\":\"local-name(/*)\",\"ValueJson\":\"\",\"InnerPath\":\"\",\"Variables\":null}],\"Expr\":\"\"},\"RouteList\":[{\"RouteName\":\"default\",\"InboundSelector\":\"\",\"TransportType\":\"\",\"HttpConfig\":{\"Client\":{\"Url\":\"\",\"Timeout\":0,\"HttpMethod\":\"\"}},\"TransformConfig\":{\"HttpMq\":{\"Mqmd\":null,\"Usr\":null},\"MqHttp\":{\"Headers\":null}},\"DestinationExpression\":\"'go-mq-gateway'\",\"SystemHeaders\":null,\"UserHeaders\":null,\"GrpcHeaders\":null,\"Variables\":[{\"Name\":\"ServiceName\",\"ValueFrom\":[{\"Type\":\"fromBody\",\"Value\":\"local-name(/*)\",\"ValueJson\":\"\",\"InnerPath\":\"\",\"Variables\":null}],\"Expr\":\"\"},{\"Name\":\"SCName\",\"ValueFrom\":[{\"Type\":\"fromConst\",\"Value\":\"SCName\",\"ValueJson\":\"\",\"InnerPath\":\"\",\"Variables\":null},{\"Type\":\"fromConst\",\"Value\":\"UFS\",\"ValueJson\":\"\",\"InnerPath\":\"\",\"Variables\":null}],\"Expr\":\"\"},{\"Name\":\"SPName\",\"ValueFrom\":[{\"Type\":\"fromRfh2Header\",\"Value\":\"SPName\",\"ValueJson\":\"\",\"InnerPath\":\"\",\"Variables\":null},{\"Type\":\"fromBody\",\"Value\":\"//SystemID\",\"ValueJson\":\"\",\"InnerPath\":\"\",\"Variables\":null}],\"Expr\":\"\"}],\"Destinations\":null,\"CopyHeadersFromRequestSettings\":{\"CopyAllMqmdHeaders\":false,\"CopyAllUsrHeaders\":false,\"Mqmd\":null,\"Usr\":null}}]},\"LoggerConfig\":{\"MaskConfig\":{\"Enabled\":true,\"CardNumAttributes\":null,\"CardNumElements\":[\"CardNum\",\"NumCard\"],\"PhoneNumAttributes\":null,\"PhoneNumElements\":null,\"DocNumAttributes\":null,\"DocNumElements\":null,\"FioAttributes\":null,\"FioElements\":null,\"Attributes\":null,\"Elements\":[\"Phone\"],\"ElementsWithAttribute\":{\"AccountNumber\":[\"Value\"],\"ID\":[\"Value\",\"Name\"],\"TaxId\":[\"Value\"]}},\"Headers\":null},\"Mq\":{\"SystemName\":\"system\",\"SystemType\":\"sc\",\"Mode\":\"all\",\"MaxMsgLength\":0,\"RollbackIfError\":false,\"Connection\":{\"ReceiveQueue\":[\"UB.TEST.QUEUE\"],\"ReceiveQueueSync\":null,\"ListReceiveQueue\":null,\"DefaultSendQueues\":{\"SyncConsumer\":{\"Queue\":\"\",\"SystemName\":\"\"},\"SyncProvider\":{\"Queue\":\"\",\"SystemName\":\"\"},\"Async\":{\"Queue\":\"\",\"SystemName\":\"\"}},\"SendQueue\":\"UB.TEST.OUT\",\"MessageBodyStyle\":\"\",\"SendToCustomDestination\":false,\"Connections\":[{\"Hostname\":\"hostname.domainname.ru\",\"Port\":1453,\"Channel\":\"SRV.SSL.CHANNEL\",\"QueueManager\":\"SYNAPSE.DEV.MGR\",\"SslPeerName\":\"CN=00CA001CSNPsynapse.dev.mgr, OU=00CA, O=Organization, C=RU\",\"SslConfigName\":\"\"}],\"ConnectionCheckPeriod\":2,\"ConnectionStartTimeout\":0,\"RestoreGroupIdFromUsr\":false,\"Health\":{\"SuccessThreshold\":1,\"FailureThreshold\":1,\"TimeoutSeconds\":5,\"PeriodSeconds\":0,\"InitialDelaySeconds\":0}},\"SyncReceiver\":{\"PoolSize\":20,\"StartDelay\":10,\"MaxDelay\":500,\"MaxProcessingTime\":35000,\"MaxStopTime\":1000,\"ReceiveTimeout\":50,\"ReceiveByRequestCorrelId\":false,\"DefaultReceiveQueue\":\"UB.TEST.OUT\"},\"ConsumerParams\":{\"ReadEnabled\":true,\"DisabledManagerIds\":null,\"TransactionTimeout\":300,\"SessionCacheSize\":500,\"ReceiveTimeout\":100,\"IdleTaskExecutionLimit\":1,\"IdleConsumerLimit\":1,\"CopyReplyToIntoUsr\":false,\"CopyGroupIdIntoUsr\":false,\"ThreadPool\":{\"ConcurrentConsumers\":1,\"MaxConcurrentConsumers\":10,\"ThreadKeepAliveSeconds\":5,\"RejectCapacity\":0,\"QueueRequestSize\":0,\"QueueRequestTimeout\":0}},\"Outbound\":{\"ServiceName\":{\"Name\":\"\",\"ValueFrom\":null,\"Expr\":\"\"},\"ServiceList\":null,\"EnableCopyHeadersFromRequest\":false,\"CopyHeadersFromRequestSettings\":{\"CopyAllMqmdHeaders\":false,\"CopyAllUsrHeaders\":false,\"Mqmd\":null,\"Usr\":null}},\"SslConfigs\":[{\"SslConfigName\":\"\",\"SslCipherSuite\":\"ECDHE_RSA_AES_128_GCM_SHA256\",\"SslFipsRequired\":false,\"SslResetCount\":0,\"SslSocketFactory\":{\"KeyStore\":\"/mnt/secrets/key.kdb\",\"SslCertAlias\":\"test-gw\"}}],\"Retry\":{\"MaxRetryAttempts\":3,\"WaitDuration\":2000000,\"RetryExceptions\":[\"MQRC_CONNECTION_BROKEN\",\"MQRC_HOST_NOT_AVAILABLE\",\"CREATE_MSG_HANDLE_ERROR\",\"MQRC_UNKNOWN_REMOTE_Q_MGR\"]},\"Monitoring\":{\"Messages\":{\"ExpireListner\":{\"Enable\":false,\"ExpireTime\":0,\"CheckInterval\":0,\"ThreadPoolSize\":0,\"ChannelSize\":0}}},\"RateLimiter\":{\"Enable\":false,\"Settings\":null},\"ConcurrentLimiter\":{\"Enable\":false,\"LimitConcurrent\":0}},\"TracingConfig\":{\"Headers\":{\"x-synapse-rquid\":[{\"Type\":\"fromBody\",\"Value\":\"//RqUID\",\"ValueJson\":\"\",\"InnerPath\":\"\",\"Variables\":null}]},\"ListHeaders\":null},\"Server\":{\"Port\":8787,\"Uri\":\"\",\"ConvertRequired\":true,\"SystemName\":\"\",\"Limiter\":{\"Enabled\":false,\"LimitConcurrent\":0}},\"TransformConfig\":{\"HttpMq\":{\"Mqmd\":null,\"Usr\":null},\"MqHttp\":{\"Headers\":null}},\"Http\":{\"Client\":{\"Url\":\"\",\"Timeout\":0,\"HttpMethod\":\"\"}},\"Logging\":{\"Level\":\"\"},\"Validator\":{\"Enabled\":false,\"InvalidateByDefault\":false,\"ReplyByCorrelId\":false,\"LoggingBody\":false,\"Http\":{\"Client\":{\"Url\":\"\",\"Timeout\":0,\"HttpMethod\":\"\"}},\"ServiceName\":null,\"ServiceList\":null}}"

Запуск сервера gRPC

time="2022-05-30T17:49:29Z" level=info msg="Grpc сервер запущен на порту :5454"

Успешное подключение к MQ

time="2022-05-30T17:49:29Z" level=info msg="Контекст {SYNAPSE.DEV.MGR hostname.domainname.ru 1453 SRV.SSL.CHANNEL   100 0 ECDHE_RSA_AES_128_GCM_SHA256 REQUIRED /mnt/secrets/key test-gw CN=00CA001CSNPsynapse.dev.mgr, OU=00CA, O=Organization, C=RU false 0 } создан"
time="2022-05-30T17:49:29Z" level=info msg="AsyncКонсьюмер {SYNAPSE.DEV.MGR hostname.domainname.ru 1453 SRV.SSL.CHANNEL   100 0 ECDHE_RSA_AES_128_GCM_SHA256 REQUIRED /mnt/secrets/key test-gw CN=00CA001CSNPsynapse.dev.mgr, OU=00CA, O=Organization, C=RU false 0 } создан"
time="2022-05-30T17:49:29Z" level=info msg="Создан контекст для отправки сообщений для менеджера { hostname.domainname.ru 1453 SRV.SSL.CHANNEL SYNAPSE.DEV.MGR CN=00CA001CSNPsynapse.dev.mgr, OU=00CA, O=Organization, C=RU }"

Выполнение исходящего вызова

time="2022-05-30T18:22:03Z" level=debug msg="Метадата исходящего вызова: map[x-b3-parentspanid:[200cead168574b2c] x-b3-sampled:[1] x-b3-spanid:[200cead168574b2c] x-b3-traceid:[200cead168574b2cb777416e9a5f6ef2] x-synapse-corellationid:[ID:3736402d3732393431363038340000000000000000000000] x-synapse-from:[system] x-synapse-from-pod-name:[go-mq-gateway] x-synapse-messageid:[ID:414d51204d39392e55422e47415445578bbf6a5c04bfa421] x-synapse-operationname:[GoTest] x-synapse-rquid:[d6e3fd28ab2f4f51968c9c7423f99113] x-synapse-scname:[SCName] x-synapse-type-message:[RQ]]"
time="2022-05-30T18:22:03Z" level=info msg="Логирование события Сообщение отправлено в: GO-MQ-GATEWAY. RqUID: d6e3fd28ab2f4f51968c9c7423f99113"

Обработка входящего вызова

time="2022-05-30T18:22:03Z" level=info msg="Логирование события Сообщение получено от: GO-MQ-GATEWAY. RqUID: d6e3fd28ab2f4f51968c9c7423f99113"

Сообщение получено

time="2023-01-13T10:54:45Z" level=info msg="Логирование события Сообщение получено от АС: SYSTEM. RqUID: d6e3fd28ab2f4f51968c9c7423f99113"

Сообщение отправлено

time="2023-01-13T10:54:46Z" level=info msg="Логирование события Сообщение отправлено в АС: SYSTEM. RqUID: d6e3fd28ab2f4f51968c9c7423f99113"

Таймаут

time="2023-01-13T12:20:11Z" level=info msg="Логирование события Ошибка при вычитке сообщения из MQ. Ответ на сообщение ID:414d512053594e415053452e4445562eb5afa5638d2aea2a не был получен за 35000 из мен\xd0..... RqUID: d6e3fd28ab2f4f51968c9c7423f99113"

Ошибка отправки

time="2023-01-13T12:26:34Z" level=info msg="Логирование события Произошла ошибка. Запрос не может быть выполнен - нет доступных подключений. RqUID: d6e3fd28ab2f4f51968c9c7423f99113"

Изменение конфигурации

time="2022-05-30T18:28:08Z" level=debug msg="файл с настройками изменен application.yml"
time="2022-05-30T18:28:08Z" level=debug msg="FILE \"application.yml\" WRITE [/deployments/config/application.yml]"
time="2022-05-30T18:28:08Z" level=debug msg="{\"Grpc\":{\"ServerConfig\":{\"ServerPort\":5454,\"MaxMessageSizeInMb\":4,\"ThreadPool\":{\"ConcurrentConsumers\":10,\"MaxConcurrentConsumers\":10,\"ThreadKeepAliveSeconds\":0,\"RejectCapacity\":0,\"QueueRequestSize\":100,\"QueueRequestTimeout\":45000}},\"ClientConfig\":{\"Settings\":{\"default\":{\"Hostname\":\"go-mq-gateway\",\"Port\":5454,\"Timeout\":0}}}},\"RoutingConfig\":{\"RouteName\":{\"Name\":\"\",\"ValueFrom\":[{\"Type\":\"fromBody\",\"Value\":\"local-name(/*)\",\"ValueJson\":\"\",\"InnerPath\":\"\",\"Variables\":null}],\"Expr\":\"\"},\"RouteList\":[{\"RouteName\":\"default\",\"InboundSelector\":\"\",\"TransportType\":\"\",\"HttpConfig\":{\"Client\":{\"Url\":\"\",\"Timeout\":0,\"HttpMethod\":\"\"}},\"TransformConfig\":{\"HttpMq\":{\"Mqmd\":null,\"Usr\":null},\"MqHttp\":{\"Headers\":null}},\"DestinationExpression\":\"'go-mq-gateway'\",\"SystemHeaders\":null,\"UserHeaders\":null,\"GrpcHeaders\":null,\"Variables\":[{\"Name\":\"ServiceName\",\"ValueFrom\":...

Ошибка подключения к MQ

time="2022-05-30T18:30:37Z" level=warning msg="Проверка подключения № 1 к серверу SYNAPSE.DEV.MGR-SRV.SSL.CHANNEL@hostname.domainname.ru:1453 завершилось ошибкой!"
time="2022-05-30T18:30:37Z" level=warning msg="Подключение к серверу потеряно - {errorCode=2537, reason=MQRC_CHANNEL_NOT_AVAILABLE, linkedErr=MQCONNX: MQCC = MQCC_FAILED [2] MQRC = MQRC_CHANNEL_NOT_AVAILABLE [2537]} SYNAPSE.DEV.MGR-SRV.SSL.CHANNEL@hostname.domainname.ru:1453"
time="2022-05-30T18:30:37Z" level=warning msg="Удаление сервера SYNAPSE.DEV.MGR-SRV.SSL.CHANNEL@hostname.domainname.ru:1453 из балансировки, доступных: 0, отключенных: 1"

Восстановление подключения к MQ

time="2022-05-30T18:31:30Z" level=info msg="Подключение контекста {SYNAPSE.DEV.MGR hostname.domainname.ru 1453 SRV.SSL.CHANNEL   100 0 ECDHE_RSA_AES_128_GCM_SHA256 REQUIRED /mnt/secrets/key test-gw CN=00CA001CSNPsynapse.dev.mgr, OU=00CA, O=Savings Bank of the Russian Federation, C=RU false 0 } восстановлено"
time="2022-05-30T18:31:30Z" level=info msg="Контекст восстановлен"
time="2022-05-30T18:31:31Z" level=info msg="Проверка подключения № 1 к серверу SYNAPSE.DEV.MGR-SRV.SSL.CHANNEL@hostname.domainname.ru:1453 прошла успешна!"
time="2022-05-30T18:31:31Z" level=info msg="Подключение к серверу восстановлено - SYNAPSE.DEV.MGR-SRV.SSL.CHANNEL@hostname.domainname.ru:1453"
time="2022-05-30T18:31:31Z" level=warning msg="Возврат сервера SYNAPSE.DEV.MGR-SRV.SSL.CHANNEL@hostname.domainname.ru:1453 в балансировку, доступных: 1, отключенных: 0"

События прикладного журнала#

Прикладной журнал фиксируется в файле /opt/synapse/logs/messages1.log в формате JSON. В прикладном журнале фиксируются события:

  • получения сообщения;

  • отправки сообщения;

  • возникновения ошибки.

Каждая запись о событии в журнале содержит:

Имя поля

Требование к заполнению

Обязательность

projectName

Имя проекта в Kubernetes (OpenShift). Заполняется автоматически

1

podSource

Имя Pod в Kubernetes (OpenShift), записавшего событие. Заполняется автоматически

1

event_timestamp

Время фиксации события в Pod. Заполняется автоматически

1

message

Тело передаваемого сообщения в формате MQ

1

information

Информация о записываемом событии

0

rqUID

Уникальный идентификатор запроса. Основной идентификатор для поиска записей в журнале.

1

serviceReceiver

Имя вызываемого сервиса (получателя) или имя менеджера и очереди для внешней АС (получателя)

0

operationName

Название операции (корневого тега сообщения)

0

status

Статус операции

0

Важно! Если при чтении сообщения из очереди возникает ошибка, которая препятствует корректному разбору параметров сообщения (например в случаях, когда RqUID определяется по телу сообщения, а тело не было получено и/или корректно разобрано), то вместо RqUID в поле rqUID записи прикладного журнала пишется messageId сообщения. В этом случае тело сообщения в поле message не фиксируется.

Примеры записи в прикладной журнал:

{
    "projectName": "Имя проекта",
    "podSource": "Имя Pod",
    "event_timestamp": 1611911783399,
    "message": "<HEADERS>Заголовки сообщения</HEADERS><MSG_BODY>тело сообщения</MSG_BODY>",
    "information": "Сообщение получено от АС: АС",
    "rqUID": "abcdef00000001212669000134159445",
    "operationName": "Имя операции",
    "status": "SUCCESS"
}
{
    "projectName": "Имя проекта",
    "podSource": "Имя Pod",
    "event_timestamp": 1611911786396,
    "message": "<HEADERS>Заголовки сообщения</HEADERS><MSG_BODY>тело сообщения</MSG_BODY>",
    "information": "Сообщение отправлено в: Имя сервиса",
    "rqUID": "abcdef00000001925071162918237829",
    "serviceReceiver": "Имя сервиса",
    "operationName": "Имя операции",
    "status": "SUCCESS"
}
{
    "projectName": "Имя проекта",
    "podSource": "Имя Pod",
    "event_timestamp": 1611911791304,
    "message": "",
    "information": "Произошла ошибка: ИМЯ СЕРВИСА. Код ошибки: 701. Ошибка при вызове по GRPC ID:414d51204d39392e45534246532e4956cc2c106002a90220 StackTrace: com.sbt.synapse.mq.exceptions.SynapseGatewayException: Код ошибки: 701. Ошибка при вызове по GRPC ID:414d51204d39392e45534246532e4956cc2c106002a90220\n\tat com.sbt.synapse.mq.logging.InboundLoggingAspect$1.onFailure(InboundLoggingAspect.java:79)\n\tat com.google.common.util.concurrent.Futures$CallbackListener.run(Futures.java:1039)\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n\tat java.lang.Thread.run(Thread.java:748)\nCaused by: io.grpc.StatusRuntimeException: UNAVAILABLE: no healthy upstream\n\tat io.grpc.Status.asRuntimeException(Status.java:533)\n\tat io.grpc.stub.ClientCalls$UnaryStreamToFuture.onClose(ClientCalls.java:495)\n\tat io.grpc.PartialForwardingClientCallListener.onClose(PartialForwardingClientCallListener.java:39)\n\tat io.grpc.ForwardingClientCallListener.onClose(ForwardingClientCallListener.java:23)\n\tat io.grpc.ForwardingClientCallListener$SimpleForwardingClientCallListener.onClose(ForwardingClientCallListener.java:40)\n\tat io.grpc.internal.ClientCallImpl.closeObserver(ClientCallImpl.java:426)\n\tat io.grpc.internal.ClientCallImpl.access$500(ClientCallImpl.java:66)\n\tat io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl.close(ClientCallImpl.java:689)\n\tat io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl.access$900(ClientCallImpl.java:577)\n\tat io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInternal(ClientCallImpl.java:751)\n\tat io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInContext(ClientCallImpl.java:740)\n\tat io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)\n\tat io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:123)\n\t... 3 more\n",
    "rqUID": "abcdef00000002509572495095446810",
    "operationName": "Имя операции",
    "status": "ERROR"
}

Записи прикладного журнала могут быть переданы в подсистему Журналирование с помощью внешнего компонента — Агента журналирования (LOGA). Настройка компонента выполняется разработчиками конечной системы в соответствии с эксплуатационной документацией на него.

Коды ошибок:

Код ошибки

Сообщение в журнале

Описание

601

Общая ошибка в Шлюзе MQ

602

Код ошибки: 602. Сообщение не может быть отправлено <ID>

Ошибка конфигурации Шлюза MQ

603

Код ошибки: 603. <текст MQ ошибки>

Ошибки взаимодействия с MQ

604

Код ошибки: 604. Сообщение не соответствует схеме <ID>

Ошибка валидации сообщения (работает с валидатором сообщений)

605

Код ошибки: 605. Ошибка вызова валидатора <ID>

Ошибка вызова валидатора (при работе с валидатором сообщений)

606

Код ошибки: 606. Сообщение не соответствует конфигурации <ID>

Параметры полученного сообщения не соответствуют конфигурации шлюза

701

Код ошибки: 701. Ошибка при вызове по GRPC ID:<ID>
StackTrace: …

Ошибка вызова по gRPC

События мониторинга#

Шлюз MQ задает HTTP-endpoint (actuator/prometheus), на котором публикует метрики в формате Prometheus. Для опроса и централизованного сбора метрик может использоваться компонент Объединенный мониторинг Unimon (MONA) продукта Planform V Monitor.

Полный список метрик реализации Шлюза MQ на Java приведен в таблице:

Метрика

Описание

Показатель/Тип

Измерение

1

Активные подключения с параметрами MQ

Количество активных/сбойных менеджеров MQ

mqgate_mq_server_health_up/gauge
mqgate_mq_server_health_down/gauge

QM "<MQ_Manager_name>",
id "<manager_channel_host_port>"

2

Состояние listeners MQ

Показывает, включены или выключены listeners, читающие сообщения из MQ

mqgate_mq_listeners_enabled/gauge

3

Количество доступных MQ-менеджеров

Количество доступных подключений к MQ-менеджерам.
Частично дублирует mqgate_mq_server_health_up/ mqgate_mq_server_health_down

mqgate_mq_server_health_states/gauge

state ["UP","DOWN"]

4

Количество настроенных MQ менеджеров

Количество настроенных подключений к серверам MQ

mqgate_mq_server_count/gauge

5

Количество ожидаемых ответов

Количество ожидаемых ответов (количество ответов, которое ожидается в очереди MQ в sync-режиме поставщика)

mqgate_response_waiting_count/gauge

6

Время выполнения операции

response_receive = System.currentTimeMillis() - receiveTaskContext.getStartTime()
— время с момента первого создания задачи на чтение ответа до завершения чтения ответа;
response_put = getIbmPutTime(response) - receiveTaskContext.getReqPutTime() — время с момента помещения запроса в MQ до помещения ответа в MQ поставщиком

mqgate_operation_timer_seconds/summary
mqgate_operation_timer_seconds_sum/summary
mqgate_operation_timer_seconds_count/summary
mqgate_operation_timer_seconds_max/gauge

name ["response_receive","response_put"]

7

Версия шлюза

Версия выводится в измерении

mqgate_version_total/counter

version="<номер версии>"

8

Количество ошибок

Количество ошибок в разрезе кодов, которые возвращает шлюз

errors_gateway_total

x_synapse_status_code

9

Временные задержки на шлюзе

Длительность обработки сообщений в разрезе направлений и операций

mqgate_average_duration_seconds_count/summary
mqgate_average_duration_seconds_sum/summary
mqgate_average_duration_seconds_max/gauge

direction ["INBOUND","OUTBOUND"]
step ["PROCESS", "MQ_TIME","DELIVERY"]

10

ТПС

Количество сообщений в секунду в разрезе направлений и статусов
(Так как counter ведет подсчет накопительным итогом, для отображения значения TPS в дашборде нужно использовать функцию rate)

mqgate_tps_total/counter

direction [ "INBOUND","OUTBOUND" ]
mode [ "ALL","SUCCESS","FAILURE","TIMEOUT" ]

11

Размер сообщений

Размер сообщений в разрезе интерфейсов и процентилей

message_size/summary
message_size_count/summary
message_size_sum/summary

MESSAGE_TYPE [ "HTTP","GRPC","JMS" ]
quantile [ "0.5","0.75","0.9","0.99" ]

12

Время обработки HTTP-вызова

Время обработки HTTP-вызова в разрезе метода, URI, статуса, исключения

http_server_requests_seconds_count/summary
http_server_requests_seconds_sum/summary
http_server_requests_seconds_max/gauge

exception ["None","<exception_type>"]
method "<method_name>"
status "<STATUS_CODE>"
uri "<URI>"

13

Сроки истечения используемых сертификатов SSL

Количество дней до истечения срока действия сертификатов в разрезе сертификатов

certs/gauge

certLabel="{Alias=<alias сертификата>, Subject=<DN владельца сертификата>, Expiration date=<Дата истечения сертификата>, Issuer=<DN издателя сертификата>}"

14

Количество вызовов в разрезе статусов

Количество входящих вызовов на ограничителе в разрезе статусов

synapse_concurrent_call_total/counter

id="FIXED"
status ["rejected", "dropped", "ignored", "success"]
type ["GRPC", "HTTP"]

15

Значение ограничителя

Максимальное количество одновременно обрабатываемых вызовов

synapse_concurrent_limit/gauge

type ["HTTP", "GRPC"]

16

Максимальное, зафиксированное количество одновременно обрабатываемых вызовов

Максимальное, зафиксированное в данный период измерения количество одновременно обрабатываемых вызовов

synapse_concurrent_inflight_max/gauge

type ["HTTP", "GRPC"]

17

Количество одновременно обрабатываемых вызовов

Количество одновременно обрабатываемых в данный момент вызовов

synapse_concurrent_inflight/summary

type ["HTTP", "GRPC"]

18

Количество ошибок

Количество ошибок в разрезе точек вызова

resilience4j_circuitbreaker_failure_rate/gauge

name ["balancer", "<mq_manager_id>"]

19

Время до готовности приложения

Время в секундах, необходимое приложению для готовности к обслуживанию запросов

application_ready_time_seconds/gauge

main_application_class="com.sbt.synapse.mq.MqGatewayApplication"

20

Время запуска приложения

Время в секундах, необходимое для запуска приложения

application_started_time_seconds/gauge

main_application_class="com.sbt.synapse.mq.MqGatewayApplication"

21

Свободное место на диске

Свободное место на диске в разрезе точек монтирования

disk_free_bytes/gauge

path="/."

22

Размер диска

Общий размер дискового пространства в разрезе точек монтирования

disk_total_bytes/gauge

path="/."

23

Количество потоков в пуле

Текущее количество потоков в пуле

executor_pool_size_threads/gauge

name ["mqExecutor", "taskScheduler"]

24

Количество задач в очереди

Примерное количество задач, поставленных в очередь на выполнение

executor_queued_tasks/gauge

name ["mqExecutor", "taskScheduler"]

25

Оставшаяся емкость очереди

Количество дополнительных элементов, которые эта очередь может в идеале принять без блокировки

executor_queue_remaining_tasks/gauge

name ["mqExecutor", "taskScheduler"]

26

Количество активных потоков

Примерное количество потоков, выполняющих задачи

executor_active_threads/gauge

name ["mqExecutor", "taskScheduler"]

27

Основное количество потоков

Основное количество потоков для пула

executor_pool_core_threads/gauge

name ["mqExecutor", "taskScheduler"]

28

Максимальное количество потоков

Максимально допустимое количество потоков в пуле

executor_pool_max_threads/gauge

name ["mqExecutor", "taskScheduler"]

29

Количество завершенных задач

Примерное общее количество задач, завершивших выполнение

executor_completed_tasks_total/gauge

name ["mqExecutor", "taskScheduler"]

30

Издержки GC

Издержки, связанные со "сбором мусора" в процентах

jvm_gc_overhead_percent/gauge

31

Процент использования памяти

Процент использования памяти после последней сборки мусора

jvm_memory_usage_after_gc_percent/gauge

area="heap"
pool="long-lived"

32

Утилизация CPU

Метрики JVM

process_cpu_usage/gauge
system_cpu_usage/gauge

33

Утилизация памяти

Метрики JVM
jvm_memory_max_bytes/gauge
jvm_memory_used_bytes/gauge

jvm_memory_committed_bytes/gauge

area ["heap","noheap"]
id ["Tenured Gen", "Eden Space", "Metaspace", "Code Cache", "Survivor Space", "Compressed Class Space"]

34

Количество буферов

Оценка количества буферов в пуле

jvm_buffer_count_buffers/gauge

id ["direct","mapped"]

35

Объем используемой памяти

Оценка объема памяти, используемой JVM под этот пул

jvm_buffer_memory_used_bytes/gauge

id ["direct","mapped"]

36

Общая емкость буферов

Оценка общей емкости буферов в этом пуле

jvm_buffer_total_capacity_bytes/gauge

id ["direct","mapped"]

37

Количество загруженных классов

Количество классов, загруженных в JVM

jvm_classes_loaded_classes/gauge

38

Количество выгруженных классов

Общее количество классов, выгруженных с момента старта JVM

jvm_classes_unloaded_classes_total/counter

39

Размер пула памяти old generation

Размер пула памяти old generation после полной сборки мусора

jvm_gc_live_data_size_bytes/gauge

40

Максимальный размер пула памяти old generation

Максимальный размер пула памяти old generation после полной сборки мусора

jvm_gc_max_data_size_bytes/gauge

41

Объем освобожденной памяти

Увеличение размера пула памяти young generation от одной сборки мусора до другой

jvm_gc_memory_allocated_bytes_total/counter

42

Объем освобожденной за цикл памяти

Увеличение размера пула памяти old generation за цикл сборки мусора

jvm_gc_memory_promoted_bytes_total/counter

43

Время паузы

Время, затраченное в GC pause

jvm_gc_pause_seconds_count/summary <br> jvm_gc_pause_seconds_sum/summary
jvm_gc_pause_seconds_max/gauge

action "<action_type>"
cause "<cause_type>"

44

Количество фоновых потоков

Количество активных daemon threads

jvm_threads_daemon_threads/gauge

45

Количество активных потоков

Количество активных потоков (daemon и non-daemon)

jvm_threads_live_threads/gauge

46

Максимальное количество потоков

Количество активных потоков посчитанных с момента старта JVM или сброса счетчика

jvm_threads_peak_threads/gauge

47

Статусы потоков

Количество потоков в разрезе статусов

jvm_threads_states_threads/gauge

state "runnable","blocked","waiting","timed-waiting","new","terminated"]

48

Максимальное количество файлов

Максимальное количество файловых дескрипторов

process_files_max_files/gauge

49

Количество открытых файлов

Количество открытых файловых дескрипторов

process_files_open_files/gauge

50

Время старта

Время старта JVM

process_start_time_seconds/gauge

51

Время работы

Время работы JVM

process_uptime_seconds/gauge

52

Количество процессоров

Количество процессоров, доступных JVM

system_cpu_count/gauge

53

Среднее нагрузка

Среднее количество работающих и находящихся в очереди исполняемых объектов

system_load_average_1m/gauge

54

Количество событий журналирования

Количество записываемых в журнал событий в разрезе уровней журналирования

logback_events_total/counter

level ["warn","debug","error","trace","info",]

55

Буферизованные вызовы

Количество буферизованных вызовов

resilience4j_circuitbreaker_buffered_calls/gauge

kind ["successful","failed",]

56

Количество вызовов

Количество вызовов в разрезе статусов и точек вызова
(до релиза 2.10 вместо resilience4j_circuitbreaker_not_permitted_calls_total использовалась resilience4j_circuitbreaker_calls_total)

resilience4j_circuitbreaker_not_permitted_calls_total/counter
resilience4j_circuitbreaker_calls_seconds_count/summary
resilience4j_circuitbreaker_calls_seconds_sum/summary
resilience4j_circuitbreaker_calls_seconds_max/gauge

kind ["successful","failed","not_permitted","ignored"]
name ["balancer","<mq_manager_id>"]

57

Уровень «медленных» вызовов

Количество «медленных» вызовов в разрезе точек вызова

resilience4j_circuitbreaker_slow_call_rate/gauge

name ["balancer","<mq_manager_id>"]

58

Количество «медленных» вызовов

Количество «медленных» вызовов в разрезе статуса и точек вызова

resilience4j_circuitbreaker_slow_calls/gauge

kind ["successful","failed"]
name ["balancer","<mq_manager_id>"]

59

Статус circuitbreaker

Статус circuitbreaker в разрезе точек вызова

resilience4j_circuitbreaker_state/gauge

name ["balancer","<mq_manager_id>"] <br> state ["open","closed","disabled","half_open","forced_open","metrics_only"]

60

Общее количество вызовов с повтором

Общее количество вызовов с повтором в разрезе точек вызова

resilience4j_retry_calls_total/counter

kind ["successful_with_retry","failed_with_retry","failed_without_retry","successful_without_retry"]
name ["balancer","<mq_manager_id>"]

61

Количество потоков в ожидании

Количество потоков в ожидании при срабатывании rate-limiter

resilience4j_ratelimiter_waiting_threads/gauge

name ["default","<mq_queue_name>"]

62

Количество доступных потоков

Количество доступных для использования потоков

resilience4j_ratelimiter_available_permissions/gauge

name ["default","<mq_queue_name>"]

Полный список метрик реализации Шлюза MQ на Golang приведен в таблице:

Метрика

Описание

Показатель/Тип

Измерение

1

Продолжительность паузы сборки мусора

Суммарная продолжительность паузы циклов сборки мусора.

go_gc_duration_seconds/summary

quantile [0, 0.25, 0.5, 0.75, 1]

2

Количество Goroutines

Количество существующих в настоящее время Goroutines.

go_goroutines/gauge

3

Информация

Информация о среде Go.

go_info/gauge

version="<номер версии>"

4

Выделено байтов

Количество выделенных и все еще используемых байтов.

go_memstats_alloc_bytes/gauge

5

Общее количество выделенных байтов

Общее количество выделенных байтов, даже если они были освобождены.

go_memstats_alloc_bytes_total/counter

6

Число байтов хеш-таблицы

Число байтов, используемых хеш-таблицей сегмента профилирования.

go_memstats_buck_hash_sys_bytes/gauge

7

Высвобождения

Общее количество высвобождений.

go_memstats_frees_total/counter

8

Количество байтов системы сбора мусора.

Количество байтов, используемых для метаданных системы сбора мусора.

go_memstats_gc_sys_bytes/gauge

9

Количество выделенных байтов heap

Количество байтов heap, выделенных и все еще используемых.

go_memstats_heap_alloc_bytes/gauge

10

Количество ожидающих байтов heap

Количество байтов heap, ожидающих использования.

go_memstats_heap_idle_bytes/gauge

11

Количество используемых байтов heap

Количество байтов heap, которые используются.

go_memstats_heap_inuse_bytes/gauge

12

Количество объектов

Количество выделенных объектов.

go_memstats_heap_objects/gauge

13

Количество возвращенных байтов heap

Количество байтов heap, возвращенных ОС.

go_memstats_heap_released_bytes/gauge

14

Количество байтов heap

Количество байтов heap, полученных от системы.

go_memstats_heap_sys_bytes/gauge

15

Время последней сборки мусора

Количество секунд с 1970 года до последней сборки мусора.

go_memstats_last_gc_time_seconds/gauge

16

Количество операций поиска

Общее количество операций поиска указателя.

go_memstats_lookups_total/counter

17

Количество выделений памяти

Общее количество выделений памяти (malloc).

go_memstats_mallocs_total/counter

18

Количество используемых байтов mcache

Количество байтов, используемых структурами mcache.

go_memstats_mcache_inuse_bytes/gauge

19

Количество полученных байтов mcache

Количество байтов, используемых для структур mcache, полученных из системы.

go_memstats_mcache_sys_bytes/gauge

20

Количество используемых байтов mspan

Количество байтов, используемых структурами mspan.

go_memstats_mspan_inuse_bytes/gauge

21

Количество полученных байтов mspan

Количество байтов, используемых для структур mspan, полученных из системы.

go_memstats_mspan_sys_bytes/gauge

22

Следующая сборка мусора

Количество байтов heap, когда будет происходить следующая сборка мусора.

go_memstats_next_gc_bytes/gauge

23

Другие системные распределения

Количество байтов, используемых для других системных распределений.

go_memstats_other_sys_bytes/gauge

24

Количество байтов стека

Количество байтов, используемых распределителем стека.

go_memstats_stack_inuse_bytes/gauge

25

Количество байтов системы для распределителя стека

Количество байтов, полученных от системы для распределителя стека.

go_memstats_stack_sys_bytes/gauge

26

Количество байтов системы

Количество байтов, полученных от системы.

go_memstats_sys_bytes/gauge

27

Количество потоков

Количество созданных потоков ОС.

go_threads/gauge

28

Время обработки HTTP-вызова

Время обработки HTTP-вызова в разрезе метода, URI, статуса, исключения

http_server_requests_seconds/summary

exception
method ["POST"]
status=<status code>
uri

29

Максимальное время обработки HTTP-вызова

Максимально время обработки HTTP-вызова в разрезе метода, URI, статуса, исключения

http_server_requests_seconds_max/gauge

exception
method ["POST"]
status=<status code>
uri

30

Размер сообщений

Размер сообщений в разрезе интерфейсов и процентилей

message_size/summary

MESSAGE_TYPE ["HTTP","GRPC","JMS"]
quantile

31

Временные задержки на шлюзе

Среднее время обработки сообщений в разрезе направлений и этапов обработки.
Среднее значение за 5 минут может быть определено как rate(mqgate_average_duration_seconds_sum[5m])/rate(mqgate_average_duration_seconds_count[5m])

mqgate_average_duration_seconds/summary

direction ["INBOUND", "OUTBOUND"]
step ["DELIVERY", "MQ_TIME", "PROCESS"]

32

Количество mq-консьюмеров

Количество консьюмеров выполняющих чтение из входящих очередей, в разрезе очередей и подключений. Выводит количество активных потоков, для конкретного подключения и конкретной очереди. Если активных потоков для данного подключения и очереди нет - для них будет выведено значение 0

mqgate_consumer/gauge

connection
destination

33

Минимальное количество mq-консьюмеров

Минимальное количество mq-консьюмеров. Показывает значение параметра mq.consumerParams.threadPool.concurrentConsumers

mqgate_consumer_min/gauge

34

Максимальное количество mq-консьюмеров

Максимальное количество mq-консьюмеров. Показывает значение параметра mq.consumerParams.threadPool.maxConcurrentConsumers

mqgate_consumer_max/gauge

35

Наполнение очереди запросов

Количество gRPC вызовов, превысивших ограничение и ожидающих в очереди на обработку

mqgate_grpc_concurrent_limiter_request_queue_inuse/gauge

type [GRPC]

36

Размер очереди запросов

Максимальное количество запросов, которые могут быть помещены в очередь на ожидание (последующие будут отклонены)

mqgate_grpc_concurrent_limiter_request_queue_limit/gauge

type [GRPC]

37

Состояние listeners MQ

Показывает, включены или выключены listeners, читающие сообщения из MQ

mqgate_mq_listeners_enabled/gauge

38

Количество серверов

Количество настроенных брокеров MQ

mqgate_mq_server_count/gauge

39

Неактивные подключения с параметрами MQ

Количество сбойных брокеров MQ

mqgate_mq_server_health_down/gauge

QM=<url брокера>
id=<url брокера>

40

Количество доступных брокеров MQ

Количество доступных подключений к брокерам MQ в разрезе статусов

mqgate_mq_server_health_states/gauge

state ["UP","DOWN"]

41

Активные подключения с параметрами MQ

Количество активных брокеров MQ

mqgate_mq_server_health_up/gauge

QM=<url брокера>
id=<url брокера>

42

Время выполнения операции

response_receive = System.currentTimeMillis() - receiveTaskContext.getStartTime()
— время с момента первого создания задачи на чтение ответа до завершения чтения ответа;
response_put = getIbmPutTime(response) - receiveTaskContext.getReqPutTime()
— время с момента помещения запроса в MQ до помещения ответа в MQ поставщиком

mqgate_operation_timer_seconds/summary

name ["response_put","response_receive"]
quantile

43

Максимальное время выполнения операции

response_receive = System.currentTimeMillis() - receiveTaskContext.getStartTime()
— время с момента первого создания задачи на чтение ответа до завершения чтения ответа;
response_put = getIbmPutTime(response) - receiveTaskContext.getReqPutTime()
— время с момента помещения запроса в MQ до помещения ответа в MQ поставщиком

mqgate_operation_timer_seconds_max/gauge

name ["response_put","response_receive"]

44

Количество ожидаемых ответов

Количество ожидаемых ответов (количество ответов, которое ожидается в очереди MQ в sync-режиме поставщика)

mqgate_response_waiting_count/gauge

45

Количество повторов при отправке

Количество повторов при отправке сообщений в MQ

mqgate_retry_calls_total/counter

kind ["successful_with_retry", "failed_with_retry", "failed_without_retry", "successful_without_retry"]

46

ТПС

Количество сообщений в секунду в разрезе направлений и статусов
(Так как counter ведет подсчет накопительным итогом, для отображения значения TPS в дашборде нужно использовать функцию rate)

mqgate_tps/counter

direction ["INBOUND","OUTBOUND"]
mode ["ALL", "SUCCESS", "FAILURE", "TIMEOUT"]

47

Версия Шлюза

Версия выводится в измерении

mqgate_version_total/counter

version=<номер версии>

48

Общее процессорное время

Общее пользовательское и системное процессорное время, в секундах.

process_cpu_seconds_total/counter

49

Максимальное количество файлов

Максимальное количество открытых дескрипторов файлов.

process_max_fds/gauge

50

Количество файлов

Количество открытых дескрипторов файлов.

process_open_fds/gauge

51

Резидентная память

Размер резидентной памяти в байтах.

process_resident_memory_bytes/gauge

52

Время начала процесса

Время начала процесса с unix-эпохи в секундах.

process_start_time_seconds/gauge

53

Виртуальная память

Размер виртуальной памяти в байтах.

process_virtual_memory_bytes/gauge

54

Доступная виртуальная память

Максимальный объем доступной виртуальной памяти в байтах.

process_virtual_memory_max_bytes/gauge

55

Обрабатываемые запросы

Текущее количество обрабатываемых запросов.

promhttp_metric_handler_requests_in_flight/gauge

56

Обработанные запросы по коду состояния HTTP.

Общее количество обработанных запросов по коду состояния HTTP.

promhttp_metric_handler_requests_total/counter

code=<code>

57

Сроки истечения используемых сертификатов SSL

Количество дней до истечения срока действия сертификатов в разрезе сертификатов

certs/gauge

certLabel="{Alias=<alias сертификата>, Subject=<DN владельца сертификата>, Expiration date=<Дата истечения сертификата>, Issuer=<DN издателя сертификата>}"

58

Количество вызовов в разрезе статусов

Количество входящих вызовов на ограничителе в разрезе статусов

synapse_concurrent_call/counter

id="FIXED"
status ["all","rejected"]
type="GRPC"

59

Количество одновременно обрабатываемых вызовов

Количество одновременно обрабатываемых в данный момент вызовов

synapse_concurrent_inflight/summary

type="GRPC"

60

Значение ограничителя

Максимальное количество одновременно обрабатываемых вызовов

synapse_concurrent_limit/gauge

type="GRPC"

Часто встречающиеся проблемы и пути их устранения#

Проблема

Влияние

Причина

Решение

Не стартует Pod приложения

Приложение не функционирует

Недостаточно ресурсов

Увеличьте limits/requests для приложения

Не стартует Pod приложения

Приложение не функционирует

Нет доступного узла для запуска

Зарегистрируйте обращение в поддержку инфраструктуры

Не стартует Pod приложения

Приложение не функционирует

Ошибка в конфигурации

Выгрузите системный журнал приложения (см. пункт «Выгрузка системных журналов» данного документа), проведите анализ на наличие ошибок конфигурации, скорректируйте конфигурацию

Частый перезапуск контейнера приложения

Задержка обработки сообщений

Медленная загрузка приложения

Увеличьте задержку и/или интервал опроса Liveness-пробы

Частый рестарт контейнера приложения

Задержка обработки сообщений

Недостаточно ресурсов

Увеличьте limits/requests для приложения

Ошибка при вызове по gRPC

Сообщения не доставлены

Нет доступных Pods сервиса, которому направлен вызов

Проверьте состояние сервиса — получателя вызова

Ошибка при вызове по gRPC

Сообщения не доставлены

Ошибки в конфигурации сервисного прокси

Выгрузите системный журнал сервисного прокси, проведите анализ на наличие ошибок конфигурации, устраните ошибки

Ошибка при вызове по MQ

Сообщения не доставлены

Недоступен менеджер очередей

Проверьте и устраните недоступность

Ошибка при вызове по MQ

Сообщения не доставлены

Отсутствует очередь

Проверьте наличие очереди, при необходимости создайте ее

Ошибка при вызове по MQ

Сообщения не доставлены

Ошибка в конфигурации Шлюза MQ

Проверьте и скорректируйте конфигурацию

Ошибка при вызове по MQ

Сообщения не доставлены

При соединении через граничный прокси — ошибки в его конфигурации

Скачайте системный журнал граничного прокси, проведите анализ на наличие ошибок конфигурации, устраните ошибки