Руководство по системному администрированию#
Термины и определения#
Термин/Аббревиатура |
Определение |
|---|---|
Артефакт |
Объект 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. |
Выход из веб-консоли Kubernetes (OpenShift) |
1. Щелчком по имени пользователя раскройте меню пользователя. |
С использованием консоли Kubernetes (OpenShift):
Шаг |
Действия |
Описание |
|---|---|---|
Вход в OC |
В окне командной строки в приглашении введите команду: |
|
Переход в нужный проект |
Введите команду: |
|
Запуск Шлюза MQ |
В консоли выполните команду: |
N>0 — требуемое количество запущенных Pods Шлюза MQ. |
Завершение сеанса работы с OC |
В консоли выполните команду: |
Остановка#
С использованием веб-интерфейса Kubernetes (OpenShift):
Шаг |
Действие |
|---|---|
Вход в веб-консоль Kubernetes (OpenShift) |
Перейдите по ссылке (URL) веб-консоли нужного кластера Kubernetes (OpenShift), в окне ввода учетных данных введите логин и пароль. |
Переход в нужный проект |
Выберите пункт меню Home/Projects, выберите из списка нужный проект. |
Остановка Шлюза MQ |
1. В меню выберите пункт Workload/Deployments. |
Выход из веб-консоли Kubernetes (OpenShift) |
1. Щелчком по имени пользователя раскройте меню пользователя. |
С использованием консоли Kubernetes (OpenShift):
Шаг |
Действие |
|---|---|
Вход в OC |
1. В окне командной строки в приглашении введите команду: |
Переход в нужный проект |
Введите команду: |
Остановка Шлюза MQ |
В консоли выполните команду: |
Завершение сеанса работы с OC |
В консоли выполните команду: |
Проверка работоспособности#
С использованием веб-интерфейса Kubernetes (OpenShift):
Шаг |
Действие |
Описание |
|---|---|---|
Вход в веб-консоль Kubernetes (OpenShift) |
Перейдите по ссылке (URL) веб-консоли нужного кластера Kubernetes (OpenShift), в окне ввода учетных данных введите логин и пароль |
|
Переход в нужный проект |
Выберите пункт меню Home/Projects, выберите из списка нужный проект |
|
Проверка работоспособности |
1. В меню выберите пункт Workload/Pods. |
|
Выход из веб-консоли Kubernetes (OpenShift) |
1. Щелчком по имени пользователя раскройте меню пользователя. |
С использованием консоли Kubernetes (OpenShift):
Шаг |
Действие |
Описание |
|---|---|---|
Вход в OC |
1. В окне командной строки в приглашении введите команду: |
|
Переход в нужный проект |
Введите команду: |
|
Проверка работоспособности |
1. В консоли выполните команду: |
|
Завершение сеанса работы с OC |
В консоли выполните команду: |
Настройка выделения ресурсов#
С использованием веб-интерфейса Kubernetes (OpenShift):
Шаг |
Действие |
|---|---|
Вход в веб-консоль Kubernetes (OpenShift) |
Перейдите по ссылке (URL) веб-консоли нужного кластера Kubernetes (OpenShift), в окне ввода учетных данных введите логин и пароль |
Переход в нужный проект |
Выберите пункт меню Home/Projects, выберите из списка нужный проект |
Открытие Deployment |
1. В меню выберите пункт Workload/Deployments. |
Корректировка параметров |
1. В окне редактирования найдите параметры: |
Сохранение изменений |
Нажмите кнопку Save |
Проверка конфигурации |
Нажмите кнопку Reload, проверьте, что изменения применились |
Выход из веб-консоли Kubernetes (OpenShift) |
1. Щелчком по имени пользователя раскройте меню пользователя. |
С использованием консоли Kubernetes (OpenShift):
Шаг |
Действие |
|---|---|
Вход в OC |
1. В окне командной строки в приглашении введите команду: |
Переход в нужный проект |
Введите команду: |
Сохранение Deployment |
В консоли выполните команду: |
Корректировка параметров |
1. Откройте файл, полученный на предыдущем шаге в текстовом редакторе (например, Notepad++). |
Загрузка Deployment |
В консоли выполните команду: |
Завершение сеанса работы с OC |
В консоли выполните команду: |
Настройка подключений к MQ#
Внимание
Новая конфигурация вступит в действие только после перезапуска Pods.
С использованием веб-интерфейса Kubernetes (OpenShift):
Шаг |
Действие |
Описание |
|---|---|---|
Вход в веб-консоль Kubernetes (OpenShift) |
Перейдите по ссылке (URL) веб-консоли нужного кластера Kubernetes (OpenShift), в окне ввода учетных данных введите логин и пароль |
|
Переход в нужный проект |
Выберите пункт меню Home/Projects, выберите из списка нужный проект |
|
Открытие конфигурации |
1. В меню выберите пункт Workload/Config Maps. |
Артефакт, содержащий |
Редактирование параметров |
1. В окне редактирования найдите параметры: |
|
Сохранение изменений |
Нажмите кнопку Save |
|
Выход из веб-консоли Kubernetes (OpenShift) |
1. Щелчком по имени пользователя раскройте меню пользователя. |
С использованием консоли Kubernetes (OpenShift):
Шаг |
Действие |
Описание |
|---|---|---|
Вход в OC |
1. В окне командной строки в приглашении введите команду: |
|
Переход в нужный проект |
Введите команду: |
|
Сохранение конфигурации |
В консоли выполните команду: |
Артефакт, содержащий |
Корректировка параметров |
1. Откройте файл, полученный на предыдущем шаге в текстовом редакторе (например, Notepad++). |
|
Загрузка Deployment |
В консоли выполните команду: |
|
Завершение сеанса работы с OC |
В консоли выполните команду: |
Изменение количества Pods#
С использованием веб-интерфейса Kubernetes (OpenShift):
Шаг |
Действия |
Описание |
|---|---|---|
Вход в веб-консоль Kubernetes (OpenShift) |
Перейдите по ссылке (URL) веб-консоли нужного кластера Kubernetes (OpenShift), в окне ввода учетных данных введите логин и пароль |
|
Переход в нужный проект |
Выберите пункт меню Home/Projects, выберите из списка нужный проект |
|
Увеличение/уменьшение количества Pods |
1. В меню выберите пункт Workload/Deployments. |
|
Выход из веб-консоли Kubernetes (OpenShift) |
1. Щелчком по имени пользователя раскройте меню пользователя. |
С использованием консоли Kubernetes (OpenShift):
Шаг |
Действия |
Описание |
|---|---|---|
Вход в OC |
1. В окне командной строки в приглашении введите команду: |
|
Переход в нужный проект |
Введите команду: |
|
Увеличение/уменьшение количества Pods |
В консоли выполните команду: |
N>0 — требуемое количество запущенных Pods Шлюза MQ |
Завершение сеанса работы с OC |
В консоли выполните команду: |
Выгрузка системных журналов#
С использованием веб-интерфейса Kubernetes (OpenShift):
Шаг |
Действия |
Описание |
|---|---|---|
Вход в веб-консоль Kubernetes (OpenShift) |
Перейдите по ссылке (URL) веб-консоли нужного кластера Kubernetes (OpenShift), в окне ввода учетных данных введите логин и пароль |
|
Переход в нужный проект |
Выберите пункт меню Home/Projects, выберите из списка нужный проект |
|
Загрузка журнала |
1. В меню выберите пункт Workload/Deployments. |
|
Выход из веб-консоли Kubernetes (OpenShift) |
1. Щелчком по имени пользователя раскройте меню пользователя. |
С использованием консоли Kubernetes (OpenShift):
Шаг |
Действия |
Описание |
|---|---|---|
Вход в OC |
1. В окне командной строки в приглашении введите команду: |
|
Переход в нужный проект |
1. Введите команду: |
|
Загрузка журнала |
В консоли выполните команду: |
|
Завершение сеанса работы с OC |
В консоли выполните команду: |
Примеры строк в выгрузке указаны в документе «Руководство по системному администрированию» раздел События системного журнала.
Просмотр метрик мониторинга#
С использованием веб-интерфейса Kubernetes (OpenShift):
Шаг |
Действия |
Описание |
|---|---|---|
Вход в веб-консоль Kubernetes (OpenShift) |
Перейдите по ссылке (URL) веб-консоли нужного кластера Kubernetes (OpenShift), в окне ввода учетных данных введите логин и пароль |
|
Переход в нужный проект |
Выберите пункт меню Home/Projects, выберите из списка нужный проект |
|
Получите метрики мониторинга |
1. В меню выберите пункт Workload/Deployments. |
|
Выход из веб-консоли Kubernetes (OpenShift) |
1. Щелчком по имени пользователя раскройте меню пользователя. |
С использованием консоли Kubernetes (OpenShift):
Шаг |
Действия |
Примечание |
|---|---|---|
Вход в OC |
1. В окне командной строки в приглашении введите команду: |
|
Переход в нужный проект |
1. Введите команду: |
|
Получите метрики мониторинга |
В консоли выполните команду: |
- |
Просмотр прикладных логов и метрик мониторинга может быть выполнен администратором в АС Журналирование и АС Мониторинг в соотвествии с документацией на эти системы.
События системного журнала#
Шлюз 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.
В прикладном журнале фиксируются события:
получения сообщения;
отправки сообщения;
возникновения ошибки.
Каждая запись о событии в журнале содержит:
Имя поля |
Требование к заполнению |
Обязательность |
|---|---|---|
|
Имя проекта в Kubernetes (OpenShift). Заполняется автоматически |
1 |
|
Имя Pod в Kubernetes (OpenShift), записавшего событие. Заполняется автоматически |
1 |
|
Время фиксации события в Pod. Заполняется автоматически |
1 |
|
Тело передаваемого сообщения в формате MQ |
1 |
|
Информация о записываемом событии |
0 |
|
Уникальный идентификатор запроса. Основной идентификатор для поиска записей в журнале. |
1 |
|
Имя вызываемого сервиса (получателя) или имя менеджера и очереди для внешней АС (получателя) |
0 |
|
Название операции (корневого тега сообщения) |
0 |
|
Статус операции |
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> |
Ошибка вызова по gRPC |
События мониторинга#
Шлюз MQ задает HTTP-endpoint (actuator/prometheus), на котором публикует метрики в формате Prometheus. Для опроса и централизованного сбора метрик может использоваться компонент Объединенный мониторинг Unimon (MONA) продукта Planform V Monitor.
Полный список метрик реализации Шлюза MQ на Java приведен в таблице:
№ |
Метрика |
Описание |
Показатель/Тип |
Измерение |
|---|---|---|---|---|
1 |
Активные подключения с параметрами MQ |
Количество активных/сбойных менеджеров MQ |
|
|
2 |
Состояние listeners MQ |
Показывает, включены или выключены listeners, читающие сообщения из MQ |
|
|
3 |
Количество доступных MQ-менеджеров |
Количество доступных подключений к MQ-менеджерам. |
|
|
4 |
Количество настроенных MQ менеджеров |
Количество настроенных подключений к серверам MQ |
|
|
5 |
Количество ожидаемых ответов |
Количество ожидаемых ответов (количество ответов, которое ожидается в очереди MQ в sync-режиме поставщика) |
|
|
6 |
Время выполнения операции |
|
|
|
7 |
Версия шлюза |
Версия выводится в измерении |
|
|
8 |
Количество ошибок |
Количество ошибок в разрезе кодов, которые возвращает шлюз |
|
|
9 |
Временные задержки на шлюзе |
Длительность обработки сообщений в разрезе направлений и операций |
|
|
10 |
ТПС |
Количество сообщений в секунду в разрезе направлений и статусов |
|
|
11 |
Размер сообщений |
Размер сообщений в разрезе интерфейсов и процентилей |
|
|
12 |
Время обработки HTTP-вызова |
Время обработки HTTP-вызова в разрезе метода, URI, статуса, исключения |
|
|
13 |
Сроки истечения используемых сертификатов SSL |
Количество дней до истечения срока действия сертификатов в разрезе сертификатов |
|
|
14 |
Количество вызовов в разрезе статусов |
Количество входящих вызовов на ограничителе в разрезе статусов |
|
|
15 |
Значение ограничителя |
Максимальное количество одновременно обрабатываемых вызовов |
|
|
16 |
Максимальное, зафиксированное количество одновременно обрабатываемых вызовов |
Максимальное, зафиксированное в данный период измерения количество одновременно обрабатываемых вызовов |
|
|
17 |
Количество одновременно обрабатываемых вызовов |
Количество одновременно обрабатываемых в данный момент вызовов |
|
|
18 |
Количество ошибок |
Количество ошибок в разрезе точек вызова |
|
|
19 |
Время до готовности приложения |
Время в секундах, необходимое приложению для готовности к обслуживанию запросов |
|
|
20 |
Время запуска приложения |
Время в секундах, необходимое для запуска приложения |
|
|
21 |
Свободное место на диске |
Свободное место на диске в разрезе точек монтирования |
|
|
22 |
Размер диска |
Общий размер дискового пространства в разрезе точек монтирования |
|
|
23 |
Количество потоков в пуле |
Текущее количество потоков в пуле |
|
|
24 |
Количество задач в очереди |
Примерное количество задач, поставленных в очередь на выполнение |
|
|
25 |
Оставшаяся емкость очереди |
Количество дополнительных элементов, которые эта очередь может в идеале принять без блокировки |
|
|
26 |
Количество активных потоков |
Примерное количество потоков, выполняющих задачи |
|
|
27 |
Основное количество потоков |
Основное количество потоков для пула |
|
|
28 |
Максимальное количество потоков |
Максимально допустимое количество потоков в пуле |
|
|
29 |
Количество завершенных задач |
Примерное общее количество задач, завершивших выполнение |
|
|
30 |
Издержки GC |
Издержки, связанные со "сбором мусора" в процентах |
|
|
31 |
Процент использования памяти |
Процент использования памяти после последней сборки мусора |
|
|
32 |
Утилизация CPU |
Метрики JVM |
|
|
33 |
Утилизация памяти |
Метрики JVM |
|
|
34 |
Количество буферов |
Оценка количества буферов в пуле |
|
|
35 |
Объем используемой памяти |
Оценка объема памяти, используемой JVM под этот пул |
|
|
36 |
Общая емкость буферов |
Оценка общей емкости буферов в этом пуле |
|
|
37 |
Количество загруженных классов |
Количество классов, загруженных в JVM |
|
|
38 |
Количество выгруженных классов |
Общее количество классов, выгруженных с момента старта JVM |
|
|
39 |
Размер пула памяти old generation |
Размер пула памяти old generation после полной сборки мусора |
|
|
40 |
Максимальный размер пула памяти old generation |
Максимальный размер пула памяти old generation после полной сборки мусора |
|
|
41 |
Объем освобожденной памяти |
Увеличение размера пула памяти young generation от одной сборки мусора до другой |
|
|
42 |
Объем освобожденной за цикл памяти |
Увеличение размера пула памяти old generation за цикл сборки мусора |
|
|
43 |
Время паузы |
Время, затраченное в GC pause |
|
|
44 |
Количество фоновых потоков |
Количество активных daemon threads |
|
|
45 |
Количество активных потоков |
Количество активных потоков (daemon и non-daemon) |
|
|
46 |
Максимальное количество потоков |
Количество активных потоков посчитанных с момента старта JVM или сброса счетчика |
|
|
47 |
Статусы потоков |
Количество потоков в разрезе статусов |
|
|
48 |
Максимальное количество файлов |
Максимальное количество файловых дескрипторов |
|
|
49 |
Количество открытых файлов |
Количество открытых файловых дескрипторов |
|
|
50 |
Время старта |
Время старта JVM |
|
|
51 |
Время работы |
Время работы JVM |
|
|
52 |
Количество процессоров |
Количество процессоров, доступных JVM |
|
|
53 |
Среднее нагрузка |
Среднее количество работающих и находящихся в очереди исполняемых объектов |
|
|
54 |
Количество событий журналирования |
Количество записываемых в журнал событий в разрезе уровней журналирования |
|
|
55 |
Буферизованные вызовы |
Количество буферизованных вызовов |
|
|
56 |
Количество вызовов |
Количество вызовов в разрезе статусов и точек вызова |
|
|
57 |
Уровень «медленных» вызовов |
Количество «медленных» вызовов в разрезе точек вызова |
|
|
58 |
Количество «медленных» вызовов |
Количество «медленных» вызовов в разрезе статуса и точек вызова |
|
|
59 |
Статус circuitbreaker |
Статус circuitbreaker в разрезе точек вызова |
|
|
60 |
Общее количество вызовов с повтором |
Общее количество вызовов с повтором в разрезе точек вызова |
|
|
61 |
Количество потоков в ожидании |
Количество потоков в ожидании при срабатывании rate-limiter |
|
|
62 |
Количество доступных потоков |
Количество доступных для использования потоков |
|
|
Полный список метрик реализации Шлюза MQ на Golang приведен в таблице:
№ |
Метрика |
Описание |
Показатель/Тип |
Измерение |
|---|---|---|---|---|
1 |
Продолжительность паузы сборки мусора |
Суммарная продолжительность паузы циклов сборки мусора. |
|
|
2 |
Количество Goroutines |
Количество существующих в настоящее время Goroutines. |
|
|
3 |
Информация |
Информация о среде Go. |
|
|
4 |
Выделено байтов |
Количество выделенных и все еще используемых байтов. |
|
|
5 |
Общее количество выделенных байтов |
Общее количество выделенных байтов, даже если они были освобождены. |
|
|
6 |
Число байтов хеш-таблицы |
Число байтов, используемых хеш-таблицей сегмента профилирования. |
|
|
7 |
Высвобождения |
Общее количество высвобождений. |
|
|
8 |
Количество байтов системы сбора мусора. |
Количество байтов, используемых для метаданных системы сбора мусора. |
|
|
9 |
Количество выделенных байтов heap |
Количество байтов heap, выделенных и все еще используемых. |
|
|
10 |
Количество ожидающих байтов heap |
Количество байтов heap, ожидающих использования. |
|
|
11 |
Количество используемых байтов heap |
Количество байтов heap, которые используются. |
|
|
12 |
Количество объектов |
Количество выделенных объектов. |
|
|
13 |
Количество возвращенных байтов heap |
Количество байтов heap, возвращенных ОС. |
|
|
14 |
Количество байтов heap |
Количество байтов heap, полученных от системы. |
|
|
15 |
Время последней сборки мусора |
Количество секунд с 1970 года до последней сборки мусора. |
|
|
16 |
Количество операций поиска |
Общее количество операций поиска указателя. |
|
|
17 |
Количество выделений памяти |
Общее количество выделений памяти (malloc). |
|
|
18 |
Количество используемых байтов mcache |
Количество байтов, используемых структурами mcache. |
|
|
19 |
Количество полученных байтов mcache |
Количество байтов, используемых для структур mcache, полученных из системы. |
|
|
20 |
Количество используемых байтов mspan |
Количество байтов, используемых структурами mspan. |
|
|
21 |
Количество полученных байтов mspan |
Количество байтов, используемых для структур mspan, полученных из системы. |
|
|
22 |
Следующая сборка мусора |
Количество байтов heap, когда будет происходить следующая сборка мусора. |
|
|
23 |
Другие системные распределения |
Количество байтов, используемых для других системных распределений. |
|
|
24 |
Количество байтов стека |
Количество байтов, используемых распределителем стека. |
|
|
25 |
Количество байтов системы для распределителя стека |
Количество байтов, полученных от системы для распределителя стека. |
|
|
26 |
Количество байтов системы |
Количество байтов, полученных от системы. |
|
|
27 |
Количество потоков |
Количество созданных потоков ОС. |
|
|
28 |
Время обработки HTTP-вызова |
Время обработки HTTP-вызова в разрезе метода, URI, статуса, исключения |
|
|
29 |
Максимальное время обработки HTTP-вызова |
Максимально время обработки HTTP-вызова в разрезе метода, URI, статуса, исключения |
|
|
30 |
Размер сообщений |
Размер сообщений в разрезе интерфейсов и процентилей |
|
|
31 |
Временные задержки на шлюзе |
Среднее время обработки сообщений в разрезе направлений и этапов обработки. |
|
|
32 |
Количество mq-консьюмеров |
Количество консьюмеров выполняющих чтение из входящих очередей, в разрезе очередей и подключений. Выводит количество активных потоков, для конкретного подключения и конкретной очереди. Если активных потоков для данного подключения и очереди нет - для них будет выведено значение 0 |
|
|
33 |
Минимальное количество mq-консьюмеров |
Минимальное количество mq-консьюмеров. Показывает значение параметра |
|
|
34 |
Максимальное количество mq-консьюмеров |
Максимальное количество mq-консьюмеров. Показывает значение параметра |
|
|
35 |
Наполнение очереди запросов |
Количество gRPC вызовов, превысивших ограничение и ожидающих в очереди на обработку |
|
|
36 |
Размер очереди запросов |
Максимальное количество запросов, которые могут быть помещены в очередь на ожидание (последующие будут отклонены) |
|
|
37 |
Состояние listeners MQ |
Показывает, включены или выключены listeners, читающие сообщения из MQ |
|
|
38 |
Количество серверов |
Количество настроенных брокеров MQ |
|
|
39 |
Неактивные подключения с параметрами MQ |
Количество сбойных брокеров MQ |
|
|
40 |
Количество доступных брокеров MQ |
Количество доступных подключений к брокерам MQ в разрезе статусов |
|
|
41 |
Активные подключения с параметрами MQ |
Количество активных брокеров MQ |
|
|
42 |
Время выполнения операции |
|
|
|
43 |
Максимальное время выполнения операции |
|
|
|
44 |
Количество ожидаемых ответов |
Количество ожидаемых ответов (количество ответов, которое ожидается в очереди MQ в sync-режиме поставщика) |
|
|
45 |
Количество повторов при отправке |
Количество повторов при отправке сообщений в MQ |
|
|
46 |
ТПС |
Количество сообщений в секунду в разрезе направлений и статусов |
|
|
47 |
Версия Шлюза |
Версия выводится в измерении |
|
|
48 |
Общее процессорное время |
Общее пользовательское и системное процессорное время, в секундах. |
|
|
49 |
Максимальное количество файлов |
Максимальное количество открытых дескрипторов файлов. |
|
|
50 |
Количество файлов |
Количество открытых дескрипторов файлов. |
|
|
51 |
Резидентная память |
Размер резидентной памяти в байтах. |
|
|
52 |
Время начала процесса |
Время начала процесса с unix-эпохи в секундах. |
|
|
53 |
Виртуальная память |
Размер виртуальной памяти в байтах. |
|
|
54 |
Доступная виртуальная память |
Максимальный объем доступной виртуальной памяти в байтах. |
|
|
55 |
Обрабатываемые запросы |
Текущее количество обрабатываемых запросов. |
|
|
56 |
Обработанные запросы по коду состояния HTTP. |
Общее количество обработанных запросов по коду состояния HTTP. |
|
|
57 |
Сроки истечения используемых сертификатов SSL |
Количество дней до истечения срока действия сертификатов в разрезе сертификатов |
|
|
58 |
Количество вызовов в разрезе статусов |
Количество входящих вызовов на ограничителе в разрезе статусов |
|
id="FIXED" |
59 |
Количество одновременно обрабатываемых вызовов |
Количество одновременно обрабатываемых в данный момент вызовов |
|
type="GRPC" |
60 |
Значение ограничителя |
Максимальное количество одновременно обрабатываемых вызовов |
|
type="GRPC" |
Часто встречающиеся проблемы и пути их устранения#
Проблема |
Влияние |
Причина |
Решение |
|---|---|---|---|
Не стартует Pod приложения |
Приложение не функционирует |
Недостаточно ресурсов |
Увеличьте limits/requests для приложения |
Не стартует Pod приложения |
Приложение не функционирует |
Нет доступного узла для запуска |
Зарегистрируйте обращение в поддержку инфраструктуры |
Не стартует Pod приложения |
Приложение не функционирует |
Ошибка в конфигурации |
Выгрузите системный журнал приложения (см. пункт «Выгрузка системных журналов» данного документа), проведите анализ на наличие ошибок конфигурации, скорректируйте конфигурацию |
Частый перезапуск контейнера приложения |
Задержка обработки сообщений |
Медленная загрузка приложения |
Увеличьте задержку и/или интервал опроса Liveness-пробы |
Частый рестарт контейнера приложения |
Задержка обработки сообщений |
Недостаточно ресурсов |
Увеличьте limits/requests для приложения |
Ошибка при вызове по gRPC |
Сообщения не доставлены |
Нет доступных Pods сервиса, которому направлен вызов |
Проверьте состояние сервиса — получателя вызова |
Ошибка при вызове по gRPC |
Сообщения не доставлены |
Ошибки в конфигурации сервисного прокси |
Выгрузите системный журнал сервисного прокси, проведите анализ на наличие ошибок конфигурации, устраните ошибки |
Ошибка при вызове по MQ |
Сообщения не доставлены |
Недоступен менеджер очередей |
Проверьте и устраните недоступность |
Ошибка при вызове по MQ |
Сообщения не доставлены |
Отсутствует очередь |
Проверьте наличие очереди, при необходимости создайте ее |
Ошибка при вызове по MQ |
Сообщения не доставлены |
Ошибка в конфигурации Шлюза MQ |
Проверьте и скорректируйте конфигурацию |
Ошибка при вызове по MQ |
Сообщения не доставлены |
При соединении через граничный прокси — ошибки в его конфигурации |
Скачайте системный журнал граничного прокси, проведите анализ на наличие ошибок конфигурации, устраните ошибки |