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

В руководстве приведены инструкции по администрированию компонента Сервис управления конвейером DevOps (DPM/PipeWork) (DPMS) (далее по тексту документа — "компонент") продукта Platform V DevOps Pipeline Management (DPM).

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

Администрирование компонента предполагает выполнение сценариев:

  1. Перезапуска.

  2. Изменения параметров настройки компонента (например, смена адреса SMTP-сервера).

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

  4. Просмотра журналов действий пользователя или логов Jenkins job.

Перезапуск#

Для выполнения перезапуска требуется:

  • для перезапуска основных сервисов компонента (dpm-core и/или qgm-core) или иного отдельного конкретного сервиса — следует перезапустить соответствующий сервис;

  • для полного перезапуска всех сервисов компонента — перезапустить все сервисы компонента в последовательности, идентичной установке — см. раздел "Установка" Руководства по установке.

Перезапуск сервиса осуществляется в панели администрирования WildFly:

  1. Откройте браузер и перейдите по адресу http://{wf-host}:9990/console

  2. Перейдите во вкладку Deployments.

  3. Выберите перезапускаемый сервис.

  4. Нажмите Disable.

  5. Нажмите Enable.

Изменение параметров настройки#

Для изменения параметров настройки требуется:

  1. Открыть файл, указать новые значения соответствующих требуемых параметров, сохранить файл:

    1. Для настройки DPM — в файл standalone_dpm.xml, согласно разделу "Порядок установки DPM" Руководства по установке;

    2. Для настройки QGM — в файл standalone_qgm.xml, согласно разделу "Порядок установки QGM" Руководства по установке.

  2. Перезапустить DPM и/или QGM — посредством перезапуска сервисов dpm-core и/или qgm-core, см. выше сценарий "Перезапуск".

Управление аппаратными ресурсами#

Контроль доступности и темпа расходования аппаратных ресурсов (прежде всего, свободного пространства в разделах для хранения БД, загрузки ЦП и памяти) осуществлять:

  • посредством анализа метрик мониторинга, выдаваемых актуаторами (в т.ч. текущие размеры выделенного и свободного дискового пространства) — см. ниже раздел "События мониторинга";

  • посредством установки программных средств автоматического мониторинга, с настройкой автоматических уведомлений по факту снижения размера свободного дискового пространства в разделах для хранения БД ниже минимального резервного уровня;

  • посредством ручного контроля — не реже 1 раза в сутки, или чаще в течение 10 дней непосредственно после установки и начала эксплуатации компонента и в случаях значительного изменения нагрузки.

Минимальный размер (резерв) свободного дискового пространства в разделах для хранения БД рекомендуется поддерживать согласно нормативным документам эксплуатирующей организации, а при отсутствии таковых — не меньшим, чем обеспечивающим расход в течение 15 дней в темпе, максимальном за последний год эксплуатации компонента.

Просмотр журналов#

Просмотр системного журнала ОС выполняется согласно руководству по администрированию используемой ОС, средствами ОС или с использованием иных средств или систем агрегации и(или) просмотра системных журналов, допустимых согласно регламентирующим документам организации, эксплуатирующей компонент.

Для просмотра журналов, ведущихся компонентом (журнала действий пользователя, журнала логов Jenkins job) требуется выполнить действия, перечисленные в настоящем Руководстве в соответствующем подразделе раздела "События системного журнала" и "События мониторинга".

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

Просмотр метрик мониторинга может осуществляться:

  • просмотр текущих значений и истории показателей — с использованием предварительно установленных и настроенных внешних средств или систем сбора и отображения информации мониторинга (например, Prometheus), допустимых согласно регламентирующим документам организации, эксплуатирующей компонент — согласно руководствам по установке и использованию таких средств или систем;

  • просмотр текущих значений метрик мониторинга:

    • метрик, отражающих состояние ОС, БД и доступность аппаратных ресурсов — средствами применяемых ОС и БД;

    • метрик, относящихся к работе компонента как сервиса Java — посредством непосредственного обращения к актуаторам — см. ниже раздел "События мониторинга".

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

На системном уровне компонент обеспечивает протоколирование ошибок, предупреждений и информационных сообщений — см. ниже раздел "События системного журнала ОС".

На прикладном уровне компонент обеспечивает протоколирование логов выполнения Jenkins job из DPM — см. ниже раздел "Просмотр логов выполненной Jenkins job из DPM".

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

Компонент обеспечивает протоколирование в системном журнале ОС информации о работе компонента и обнаруженных ошибках.

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

Детализация протоколирования (только ошибки или предупреждения и информационные сообщения) зависит от текущих настроек уровня протоколирования:

  • ERROR — протоколирование только ошибок;

  • WARN — протоколирование ошибок и предупреждений;

  • INFO — протоколирование ошибок, предупреждений и дополнительной информации;

  • DEBUG — протоколирование ошибок, предупреждений, дополнительной и отладочной информации.

Настройка уровня протоколирования выполняется в разделе системных настроек (system properties) панели администрирования WildFly http://{wf-host}:9990/console/index.html#system-properties параметром уровень протоколирования (logging level).

Настройки протоколирования сохраняются в файлах logback.spring и log4j2.xml.

События системного журнала ОС регистрируются в файлах:

  • /var/log/syslog — события запуска процессов

  • /usr/{WF-directory}/WF_DPM/standalone/log — события приложения

  • accesslog — события доступа в WildFly, включая входы в панель администрирования

  • $JBOSS_HOME/standalone/log/server.log или $JBOSS_HOME/standalone/log/{имя_сервиса}/server.log — все не перехваченные события (место хранения по умолчанию)

  • папка QGS

  • /var/log/messages — прочие сообщения

Перечень событий, регистрируемых в системном журнале#

Применяемые сокращения:

  • AS — проект;

  • FSS — приложение;

  • RAO — сервис;

  • RC — релиз-кандидат (РК).

Нижеперечисленные события протоколируются в файлах server.log.

Сообщение

Уровень протоколирования

Примечание

%s Cannot find jenkins!

ERROR

Здесь и далее "%s" — место вывода конкретизирующей информации в типовом сообщении (для вывода имени объекта, в отношении которого зафиксирована ошибка и т.п.)

%s cannot get lead for this job!

ERROR

%s is not valid jira issue key!

ERROR

${getEntityTypeName()} with ID: $id NOT_FOUND!

ERROR

Ad hoc release candidate with id=%d should contain only one step

ERROR

An error has happened. Please contact the administrator.

ERROR

Bundle phase does not contains Jenkins config

ERROR

Bundle phase does not contains QGM config

ERROR

Can't find jira settings!

ERROR

Can't find step template id

ERROR

Can't find valid rc with original version = %s and raoKey = %s!

ERROR

Can't get Class when finding context by id and type. id=%s, type=%s, class=%s

ERROR

Can't parse permission '$permission'

ERROR

Can't update unknown varsNo such execute point for QG

ERROR

Can't update vars

ERROR

Can't write configured pipeline to file.

ERROR

Cannot convert config to Jenkins config!

ERROR

Cannot convert config to QGM config!

ERROR

Cannot convert config to ReadyForBundle config!

ERROR

Cannot create new domain in mapper!

ERROR

Cannot find fss lead for broken user task!

ERROR

Cannot find job with id = %s

ERROR

Cannot find login with id %s for current user!

ERROR

Cannot find M36 Configuration!

ERROR

Cannot find pipeline with id = %s

ERROR

Cannot find qgj by id

ERROR

Cannot get RAO for RC

ERROR

Cannot restart job

ERROR

Cannot restart quality gate in state %s with id = %s!

ERROR

Cannot run generate bundle jobs for non-bundle pipeline owner

ERROR

Cannot run generate bundle jobs for non-bundle pipeline ownerDpmException

ERROR

Cannot save pipeline with optional QG!

ERROR

Cannot update subject var with null value for id = %s

ERROR

CapacityService Error: Release Activity Object is null

ERROR

Chain job can contains only Bundle Config

ERROR

Config not found

ERROR

Configure Pipeline with id %s not AVAILABLE!

ERROR

ConfiguredPipeline in status ARCHIVED

ERROR

Current user can not be lead

ERROR

Current user can not run this task!

ERROR

Current user is not equal to transmitted user.

ERROR

DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [unique_key_constraint]

ERROR

Days of week should be set

ERROR

Distributive url: '$distributiveUrl' doesn't match to pattern!

ERROR

Don't start scheduling task because millisecond date is past

ERROR

Dpm job has one more scheduled task!

ERROR

Dpm state '%s' for job with id = %s not supported!

ERROR

Dpm taskStatus '%s' for job with id = %s not supported!

ERROR

DpmFpdRcPhaseJob can not be a child of ChainDpmRcJob!

ERROR

DpmManualRcPhaseJob with id = %s not found!

ERROR

DpmPhaseQualityGateC can not be a child of ChainDpmRcJob!

ERROR

Error during create new DpmRaoStep, because StepTemplate with id = %d not found!

ERROR

Error during get RC's because for rao with id = %s because nexus = null!

ERROR

Error during init new task, start date = null!

ERROR

Error during start scheduling task!

ERROR

Error with define Nexus QG flag

ERROR

Execution canceled because timeout of 60000 millis was reached

ERROR

ExternalAppCredentials doesn't exist

ERROR

Fss lead cannot be null

ERROR

Fss not found for job

ERROR

FssStepResponsibleUser with id %s has not found!

ERROR

Groovy DSL pipeline 'input' operation is not supported by DPM

ERROR

Incorrect login or token for Nexus!

ERROR

Invalid username/password supplied

ERROR

Jira Issue with id=%s

ERROR

Job configuration not found!

ERROR

Job with id = {} not is chainable job!

ERROR

Job with id = %s isn't from step with id = %s

ERROR

Key %s already exist

ERROR

Key: %s is not valid!", entity.getKey()

ERROR

Lead can not be null

ERROR

Login should not be empty!

ERROR

M36 job does not contains %s

ERROR

Nexus check response for RC is null

ERROR

Nexus is null for raoId=

ERROR

No actual config found in QGMRcPhaseJob!

ERROR

No any valid tech windows for project entity:

ERROR

No fss with name " + stStepResponsibleUserDTO.getFssName() + " found

ERROR

No release note found for artifact with key: ${artifact.key}

ERROR

No required key found in SAST check result

ERROR

No user was found.

ERROR

Not enough permissions for operation

ERROR

Not found chatOwner with type=%s and id=%s

ERROR

Not found correct state for tech window with id =

ERROR

Not found rao profile for release candidate with id =

ERROR

Not found scope run

ERROR

Not implemented yet!

ERROR

Not supported fss step responsible type value: %s.

ERROR

Not supported job type

ERROR

Not valid parsing for version: %s, size parse %s

ERROR

Only token owner can delete this token

ERROR

Phase job of type %s is not service job!

ERROR

Phase job type: %s is not supported

ERROR

Phase not found

ERROR

PhaseJobType is not QGMRcPhaseJob!

ERROR

PipelineStep is null

ERROR

PipelineTemplate must have 'step' and 'pipeline' reference %s

ERROR

Profile with id = %s already exist. Use update request instead

ERROR

Project entity with key = %s does not exist

ERROR

Project entity with key = %s is not found

ERROR

Project key: '$projectKey' doesn't match to pattern!

ERROR

Project with key: '${rga.toProjectKey()}' already exists!

ERROR

QG job with id %s not optional!

ERROR

Quality gate log with id '$id' not found!

ERROR

QualityGateJob is not in QG_JOB_WAIT_SUBSCRIPTION state! {}

ERROR

Queue for %s type does not supported!

ERROR

Queue size cannot be 0!

ERROR

RAO has incorrect 'OTHER' Profile!

ERROR

RAO has incorrect Profile's rank!

ERROR

RAO Profile with id = %s not found!

ERROR

RAO with id: %s has %s configured pipeline

ERROR

Rao with key " + raoKey + " not found!

ERROR

RAO with key %s is not found

ERROR

RC with id: %s has actual phaseJob

ERROR

ReadyForBundleRcPhaseJob can not be a child of ChainDpmRcJob!

ERROR

Regexp should not be empty or null

ERROR

Release Activity Object is not in ACTIVE state!

ERROR

Release Candidate can not be continued because it is archived

ERROR

Release note not found for url: ${request.url}

ERROR

Release notes already exists for this distributive!

ERROR

Repository for %s not found!

ERROR

Repository url: '$repositoryUrl' doesn't match to pattern!

ERROR

Required parameters are not filled: %s

ERROR

Role automation settings are incomplete! Contact the administrator!

ERROR

Role with id = '" + roleId + "' not found

ERROR

Sorry, we used incorrect status for tech window with id =

ERROR

Start date should not be after end date

ERROR

Start time should not be after end time

ERROR

Status '$status' not found for QG '${qg.name}', allowed statuses: [${qg.statuses.joinToString()}]

ERROR

StepTemplate with id " + stepTemplateId + " not found!

ERROR

Target entity with id = " + target.getId() + " is not a child of entity with id = " + origin.getId()

ERROR

Task does not created, because there is an active task for this RAO with key=

ERROR

Task hasn't added to queue

ERROR

Task is not in ACTIVE or WAIT_FOR_ANSWER state!

ERROR

Task is not in ACTIVE state!

ERROR

Task not found!

ERROR

Task status did not changed!

ERROR

Task type: %s is not supported

ERROR

TechWindow not found or deleted

ERROR

The EventProcessor's childrens: %s did not configured to work with any entity

ERROR

The JobConfigBuilder's children count: %s don't equal to count: %s of JobConfigBuilder's services

ERROR

There are no instances of SALM

ERROR

There can not be more than one user for this role

ERROR

There is no any conditions!

ERROR

This method allows for DPM targeted roles

ERROR

This parameter name '%s' is reserved, use another one please.

ERROR

This pipeline contains step without main scope phases!

ERROR

This pipeline is running on previous stageOrder!

ERROR

Timetable not found or deleted

ERROR

Timetable with id=" + newTimetable.getId() + " not available for select

ERROR

Token should not be empty!

ERROR

Token with id '" + tokenId + "' not exist

ERROR

Try to sync not ACTIVE job

ERROR

Unknown basicApp for rcStep

ERROR

Unknown complexReleaseSortType

ERROR

Unknown ConfiguredPipeline type:

ERROR

Unknown entity Id = %s

ERROR

Unknown entity key

ERROR

Unknown fss for rcStep

ERROR

Unknown job type: %s!

ERROR

Unknown pipeline owner type %s!

ERROR

Unknown pipeline type:

ERROR

Unknown project entity type!

ERROR

Unknown QGM user. Probably can't get info via authentication provider.

ERROR

Unknown SAST quality gate type:

ERROR

Unknown step name

ERROR

Unknown target type!

ERROR

Unknown targeted role type!

ERROR

Unknown targeted validation mode!

ERROR

Unknown type:

ERROR

Unrecognized ldap name $domain

ERROR

Unsupportable phase type

ERROR

Unsupportable pipeline variable project entity

ERROR

User details not mapped

ERROR

User is blocked in QGM

ERROR

User permission with id '$id' not found

ERROR

You can't restart step because Release Candidate is interrupted!

ERROR

You have not enough permission for this

ERROR

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

Встроенные средства мониторинга#

Компонент содержит следующие собственные встроенные средства мониторинга.
В составе DPM и QGM реализованы актуаторы, обеспечивающие выдачу (по запросу от внешней системы, например Prometheus) информации о состоянии сервисов.
Актуаторы обеспечивают выдачу следующей информации при обращении по соответствующим URL (ниже <адрес сервиса> = DNS-имя или IP-адрес сервиса), на примере QGM:

  • перечень типов выдаваемой информации и URL соответствующих актуаторов — http://<DNS-имя или IP-адрес>:8080/qgm/actuator

  • текущая версия компонента — http://<DNS-имя или IP-адрес>:8080/qgm/actuator/info

  • состояние компонента — http://<DNS-имя или IP-адрес>:8080/qgm/actuator/health

В перечне типов выдаваемой информации возвращаются:

  • тип информации

  • URL для запроса соответствующей информации

Пример ответа актуатора с перечнем типов выдаваемой информации (на примере QGM):

{
  "_links": {
    "self": {
      "href": "http://<DNS-имя или IP-адрес>:8080/qgm/actuator",
      "templated": false
    },
    "health": {
      "href": "http://<DNS-имя или IP-адрес>:8080/qgm/actuator/health",
      "templated": false
    },
    "health-path": {
      "href": "http://<DNS-имя или IP-адрес>:8080/qgm/actuator/health/{*path}",
      "templated": true
    },
    "info": {
      "href": "http://<DNS-имя или IP-адрес>:8080/qgm/actuator/info",
      "templated": false
    }
  }
}

Пример ответа актуатора с информацией о текущей версии компонента (на примере QGM):

{
  "version":"<номер версии и дата и время сборки (*)>",
  "artifactId":"qgm"
}

(*) дата и время сборки возвращаются целым числом (время эпохи Unix = число миллисекунд с 1970-01-01 00:00:00+00)

В информации о состоянии компонента возвращаются значения метрик мониторинга:

Метрика

Пояснение

components.db.status

текущий статус сервера БД

components.discoveryComposite.status

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

components.discoveryComposite.components.discoveryClient.details.services

перечень зарегистрированных сервисов

components.discoveryComposite.components.eureka.details.applications

количество экземпляров зарегистрированных сервисов

components.diskSpace.status

текущий статус наличия свободного дискового пространства

components.diskSpace.details.total

текущий размер выделенного дискового пространства

components.diskSpace.details.free

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

components.diskSpace.details.threshold

пороговое минимальное значение размера свободного дискового пространства

components.ping.status

текущий статус ping

Пример ответа актуатора с информацией о состоянии компонента (на примере QGM):

{
  "status": "UP",
  "components": {
    "db": {
      "status": "UP",
      "details": {
        "database": "PostgreSQL",
        "validationQuery": "isValid()"
      }
    },
    "discoveryComposite": {
      "status": "UP",
      "components": {
        "discoveryClient": {
          "status": "UP",
          "details": {
            "services": [
              "qg-applicability-service",
              "dpm-mail",
              "dpm-core",
              "dpm-processing",
              "dpm-eureka",
              "dpm-auth",
              "qg-elk-service",
              "dpm-artifact-sync",
              "dpm-jenkins-log",
              "dpm-atlassian-integration",
              "dpm-relay",
              "qg-core",
              "qg-eureka",
              "qg-validation-service"
            ]
          }
        },
        "eureka": {
          "description": "Remote status from Eureka server",
          "status": "UP",
          "details": {
            "applications": {
              "QG-APPLICABILITY-SERVICE": 1,
              "DPM-MAIL": 1,
              "DPM-CORE": 1,
              "QG-CORE": 1,
              "QG-VALIDATION-SERVICE": 1,
              "DPM-PROCESSING": 1,
              "DPM-EUREKA": 1,
              "DPM-AUTH": 1,
              "QG-ELK-SERVICE": 1,
              "QG-EUREKA": 1,
              "DPM-ARTIFACT-SYNC": 1,
              "DPM-JENKINS-LOG": 1,
              "DPM-ATLASSIAN-INTEGRATION": 1,
              "DPM-RELAY": 1
            }
          }
        }
      }
    },
    "diskSpace": {
      "status": "UP",
      "details": {
        "total": <возвращенное значение>,
        "free": <возвращенное значение>,
        "threshold": <возвращенное значение>,
        "exists": true
      }
    },
    "hystrix": {
      "status": "UP"
    },
    "ping": {
      "status": "UP"
    },
    "refreshScope": {
      "status": "UP"
    }
  }
}

Дополнительные средства мониторинга#

Поскольку основными составляющими компонента являются Java сервисы и БД — для мониторинга работы программно-аппаратных средств могут применяться типовые решения мониторинга работы оборудования, Java сервисов и БД, допустимые согласно регламентирующим документам организации, эксплуатирующей компонент.

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

Типовые проблемы не выявлены.

В случае общих ошибок (проявляющихся для пользователей в виде сообщений об ошибках или ошибках с кодом 500, преимущественно при попытке выполнения операций, предполагающих запись или изменение информации в БД, в частности, создания объектов или изменения свойств объектов) следует проверить:

  • Наличие свободного пространства в разделах для хранения БД — см. выше подраздел "Управление аппаратными ресурсами" раздела "Сценарии администрирования". В случае отсутствия свободного дискового пространства следует:

    • обеспечить наличие свободного дискового пространства в разделах для хранения БД — согласно руководству по администрированию используемых ОС и БД;

    • перезагрузить компонент согласно разделу "Перезапуск" настоящего руководства.