Архив рубрики: Публикации

Шпаргалка по написанию Gitlab Pipelines

В данной инструкции будут рассмотрены небольшие сценарии работы с Gitlab Pipelines. Мы приведем примеры использования наиболее востребованных опций при работе с CI/CD. По мере необходимости, база шаблонов будет пополняться.




Шаблоны




В данном разделе напишем несколько готовых шаблонов, которые можно взять за основы при написании своего сценария.




1. Минимальный сценарий. Для небольших заданий, состоящих из пары заданий:




stages:
  - build

TASK_NAME:
  stage: build
  script:
    - ./build_script.sh




* где:







2. Стандартный цикл при сборке. Обычно, процесс CI/CD включает следующие шаги:







Для написания такого сценария за основу можно взять шаблон:




stages:
  - build
  - test
  - delivery
  - deploy

build-job:
  stage: build
  script:
    - echo "Start build job"
    - build-script.sh

test-job:
  stage: test
  script:
    - echo "Start test job"
    - test-script.sh

delivery-job:
  stage: delivery
  script:
    - echo "Start delivery job"
    - delivery-script.sh

deploy-job:
  stage: deploy
  script:
    - echo "Start deploy job"
    - deploy-script.sh




Задания




В данном разделе мы рассмотрим опции, которые могут применяться при описании задания. Общий синтаксис:




<TASK_NAME>:
  <OPTION1>: ...
  <OPTION2>: ...




Мы перечислим лишь часто встречаемые опции. Полный список можно найти в официальной документации.




Stage







Опция указывает, к какой стадии относится задание. Например:




stages:
  - build
  - test

TASK_NAME:
  ...
  stage: build

TASK_NAME:
  ...
  stage: test




Сами же стадии описываются в общей директиве stages.




Также есть две стадии, которые не требуют предварительного определения в stages:







Например:




stages:
  - build
  - test

getVersion:
  stage: .pre
  script:
    - VERSION=$(cat VERSION_FILE")
    - echo "VERSION=${VERSION}" > variables.env
  artifacts:
    reports:
      dotenv: variables.env




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




Image







Задаем имя образа, если наше задание выполняется в контейнере docker:




TASK_NAME:
  ...
  image: debian:11




Before_script







Данная опция определяет список команд, которые должны выполняться перед опцией script и после получения артефактов.




TASK_NAME:
  ...
  before_script:
    - echo "Run before_script"




Script







Основная часть, где выполняются задания сценария, описана в опции script. Рассмотрим ее подробнее.




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




TASK_NAME:
  ...
  script:
    - command1
    - command2




2. Длинные команды, разбитые на несколько строк. Нам может потребоваться выполнить команды в виде скрипта (с операторами сравнения, например). В этом случае будет удобна многострочная запись. Ее можно указать разными способами.




Индикатор | :




TASK_NAME:
  ...
  script:
    - |
      command_line1
      command_line2




* для него каждая новая строка является переходом к новой команде или части оператора. По сути, это близко к логике скрипта shell.




Индикатор > :




TASK_NAME:
  ...
  script:
    - >
      command_line1
      command_line1_continue

      command_line2
      command_line2_continue




* данный индикатор интерпретирует новую команду после пустой строки.




After_script







Набор команд, которые запускаются после scripts, даже, при неудачном завершении последнего.




TASK_NAME:
  ...
  script:
    ...
  after_script:
    - command1
    - command2




Artifacts







Артефакты представляют из себя промежуточные сборки или файлы, которые могут передаваться от одного этапа — другому.




1. Например, так можно указать, какие файлы или каталоги будут артефактами:




TASK_NAME:
  ...
  artifacts:
    paths:
      - ${PKG_NAME}.deb
      - ${PKG_NAME}.rpm
      - *.txt
      - configs/




* в моем примере, в артефакты попадут все файлы, название которых заканчивается на txt, файлы ${PKG_NAME}.deb и ${PKG_NAME}.rpm, а также каталог configs. Где ${PKG_NAME} — переменная (подробнее о переменных ниже).




В других заданиях, которые будут выполняться после можно использовать артефакты, обращаясь к ним по именам, например:




TASK_NAME_2:
  ...
  script:
    - cat *.txt
    - yum -y localinstall ${PKG_NAME}.rpm
    - apt -y install ./${PKG_NAME}.deb




2. Также мы можем передать системные переменные, которые были нами переданы в файл:




TASK_NAME:
  ...
  script:
    - echo -e "VERSION=1.1.1" > variables.env
  ...
  artifacts:
    reports:
      dotenv: variables.env




* в данном примере мы передадим системную переменную VERSION со значением 1.1.1 через файл variables.env.




3. При необходимости, мы можем исключить из списка определенные файлы по названию или маске:




TASK_NAME:
  ...
  artifacts:
    paths:
      ...
    exclude:
      - ./.git/**/*




* в данном примере мы исключаем каталог .git, в котором, как правило, хранятся метаданные репозитория.
** обратите внимание, что в отличие от pathsexclude не берет файлы и каталоги рекурсивно и нужно явно указывать объекты.




Extends







Позволяет вынести часть сценария в отдельный блок и объединить его с заданием. Чтобы это лучше понять, рассмотрим конкретный пример:




.my_extend:
  stage: build
  variables:
    USERNAME: my_user
  script:
    - extend script

TASK_NAME:
  extends: .my_extend
  variables:
    VERSION: 123
    PASSWORD: my_pwd
  script:
    - task script




И так, в нашем задании TASK_NAME мы используем extends. В результате, задание примет такой вид:




TASK_NAME:
  stage: build
  variables:
    VERSION: 123
    PASSWORD: my_pwd
    USERNAME: my_user
  script:
    - task script




Что произошло:







Environment







Позволяет указать системную переменную, которая будет создана для выполнения задания.




TASK_NAME:
  ...
  environment:
    RSYNC_PASSWORD: rpass
    EDITOR: vi




Release







Публикует релиз на портале Gitlab для нашего проекта.




TASK_NAME:
  ...
  release:
    name: 'Release $CI_COMMIT_TAG'
    tag_name: '$CI_COMMIT_TAG'
    description: 'Created using the release-cli'
    assets:
      links:
        - name: "myprogram-${VERSION}"
          url: "https://gitlab.com/master.dmosk/project/-/jobs/${CI_JOB_ID}/artifacts/raw/myprogram-${VERSION}.tar.gz"
  rules:
    - if: $CI_COMMIT_TAG




* обратите внимание, что мы применяем правило if (о нем ниже).




Директивы правил и ограничений




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




Rules







Правила, при соблюдении которых наше задание может быть запущено. Примеры работы с директивой rules приведены ниже.




When





https://docs.gitlab.com/ee/ci/yaml/#when.




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




Needs





https://docs.gitlab.com/ee/ci/yaml/#needs.




Тоже набор правил, требующий определенных условий для запуска задачи. Все директивы условий и правил описаны ниже.




Правила и условия




Мы можем выполнять или пропускать задания, в зависимости от выполнения определенных условий. Для этого существует несколько полезных директив, которые мы рассмотрим в данном разделе.




Rules




Регламентирует различные правила, определенные с помощью:







1. Оператор if. Позволяем проверить условие, например, если переменная равна определенному значению:




TASK_NAME:
  ...
  rules:
    - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'




* в данном примере коммит должен быть выполнен в бранче по умолчанию.




2. Изменения затронули определенные файлы. Проверка выполняется с помощью опции changes.




В данном примере, файл script.sql:




TASK_NAME:
  ...
  rules:
    - changes:
        - script.sql




3. Несколько условий. Условий для начала выполнения задания может быть несколько. Рассмотрим несколько примеров.




а) При условии, что коммит выполнен в бранче по умолчанию И изменения затронули файл script.sql:




TASK_NAME:
  ...
  rules:
    - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
      changes:
        - script.sql




б) При условии, что коммит выполнен в бранче по умолчанию ИЛИ изменения затронули файл script.sql




TASK_NAME:
  ...
  rules:
    - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
    - changes:
        - script.sql




4. Проверка на существование файла. Определяется с помощью exists:




TASK_NAME:
  ...
  rules:
    - exists:
        - script.sql




* задание будет выполняться только в случае присутствия файла script.sql.




5. Разрешить сбой задания. Задается с помощью allow_failure:




TASK_NAME:
  ...
  rules:
    - allow_failure: true




* в данном примере наш конвейер продолжит работу, если задание TASK_NAME будет выполнено с ошибкой.




6. Определение переменной в зависимости от условия. Для этого используются вместе if и variables:




TASK_NAME:
  ...
  rules:
    - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
      variables:
        DEPLOY_VARIABLE: "production"
    - if: '$CI_COMMIT_BRANCH =~ demo'
      variables:
        DEPLOY_VARIABLE: "demo"




When




Определяет условия запуска задания. Возможные значения:







Разберем примеры.




1. Manual:




TASK_NAME:
  ...
  when: manual




* задание не начнет выполняться, пока мы не нажмем кнопку запуска в GitLab CI/CD.




2. Always:




TASK_NAME:
  ...
  when: always




* задание будет выполняться всегда. Удобно, например, если нужно сформировать отчетный файл, независимо от результатов сборки.




3. On_failure:




TASK_NAME:
  ...
  on_failure: always




* задание будет выполняться при наличии ошибки на ранних этапах. Можно использовать для отправки уведомления.




4. Delayed:




TASK_NAME:
  ...
  when: delayed
  start_in: 30 minutes




* запуск задания будет отложен на 30 минут.




5. Never:




TASK_NAME:
  ...
  when: never




* задание не будет выполняться.




6. Использование вместе с if:




TASK_NAME:
  ...
  rules:
    - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
      when: manual




* в данном примере задание будет выполняться, если коммит прошел в основной ветке и если администратор подтвердил запуск.




Needs




Позволяет задавать условия выполнения заданий только при наличии определенного артефакта или выполненного задания. С помощью правил данного типа можно контролировать порядок выполнения задач.




Рассмотрим примеры.




1. Artifacts. Принимает значение true (по умолчанию) и false. Для запуска задания нужно, чтобы на предыдущих этапах были загружены артефакты. Запись:




TASK_NAME:
  ...
  needs:
    - artifacts: false




… позволяет начать выполнение задания без этого.




2. Job. Позволяет начать выполнение задачи только после завершения другого задания:




TASK_NAME:
  ...
  needs:
    - job: createBuild




* в нашем примере задача начнет выполняться не раньше завершения задачи с названием createBuild.




Переменные




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




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




Задаются с помощью директивы variables.




Можно определить глобально для всех заданий:




variables:
  PKG_VER: "1.1.1"




Или для конкретного задания:




TASK_NAME:
  ...
  variables:
    PKG_VER: "1.1.1"




Теперь можно использовать нашу переменную в сценарии. Для этого ставим перед ее названием знак доллара, а также стоит заключить его в фигурные скобки, например:




  script:
    - echo ${PKG_VER}




Переменные Gitlab




Данный тип переменных поможет нам управлять процессом сборки. Перечислим данные переменные с описанием их свойств:




ПеременнаяОписаниеПример
LOG_LEVELОпределяет уровень журнала. Варианты: debug, info, warn, error, fatal, и panic. Имеет более низкий приоритет, по сравнению с аргументами командной строки —debug, —log-level.LOG_LEVEL: warning
CI_DEBUG_TRACEВключение или отключение ведения журнала отладки. Принимает значения true или false.CI_DEBUG_TRACE: true
CONCURRENTОграничивает количество заданий, которые могут выполняться одновременно.CONCURRENT: 5
GIT_STRATEGYСпособ загрузки файлов из репозитория. Возможны варианты: clone, fetch, и none (не загружать).GIT_STRATEGY: none




Дополнительные параметры




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




1. Workflow. Позволяем задать общие правила запуска для всего конвейера. Рассмотрим пример с официального сайта:




workflow:
  rules:
    - if: $CI_COMMIT_TITLE =~ /-draft$/
      when: never
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH




В данном примере конвейер:







2. Значения по умолчанию. Задаются в директиве default. Опции с данными значениями будут использоваться во всех заданиях или могут быть переопределены на уровне конкретного задания.




Пример:




default:
  image: centos:7
  tags:
    - ci-test




* мы определили опцию с именем образа (например, образа docker) и тег (теги могут быть необходимы для запуска некоторых runner).




3. Импорт конфигурации из другого файла yml. Может быть полезным, например, для написания общей части сценария, которую мы захотим применять ко всем pipeline или для разделения громоздкого сценария на составные части. Выполняется с помощью опции include. Имеет различные варианты подгрузки файлов. Рассмотрим их подробнее.




а) подключение локального файла (local):




include:
  - local: .gitlab/ci/build.yml




б) коллекции шаблонов (template):




include:
  - template: Custom/.gitlab-ci.yml




* в данном примере мы подключим к нашему сценарию содержимое файла Custom/.gitlab-ci.yml.




в) внешний файл доступный по HTTP (remote):




include:
  - remote: 'https://gitlab.dmosk.ru/main/build.yml'




г) другой проект:




include:
  - project: 'public-project'
    ref: main
    file: 'build.yml'




4. !reference tags. Позволяет описать сценарий и повторно его использовать для разных стадий и задач нашего CI/CD.




Например:




.apt-cache:
  script:
    - apt update
  after_script:
    - apt clean all

install:
  stage: install
  script:
    - !reference [.apt-cache, script]
    - apt install nginx

update:
  stage: update
  script:
    - !reference [.apt-cache, script]
    - apt upgrade
    - !reference [.apt-cache, after_script]




* давайте разберемся, что происходит в нашем примере.







Источник: https://www.dmosk.ru/miniinstruktions.php?mini=gitlab-pipeline



Prometheus + Grafana + Alertmanager в Docker

В данной инструкции мы рассмотрим пример docker-compose файла для организации системы мониторинга на базе Prometheus. Мы получим:




  • Базу данных Prometheus и интерфейс для выполнения PromQL.
  • Визуализацию с помощью Grafana.
  • Сбор метрик через Node Exporter.
  • Мониторинг HTTP с использованием Blackbox.
  • Отправку уведомлений в Telegram с помощью Alertmanager.




Мы будем работать в среде Linux, хотя полученный файл docker-compose можно применять где угодно. Останавливаться подробно на описании docker-compose мы не будем.




Подготовка системы




Подразумевается, что у нас установлен Docker и docker-compose, в противном случае, можно воспользоваться инструкцией Установка Docker на Linux.




Создаем каталоги, где будем создавать наши файлы:




mkdir -p /opt/prometheus_stack/{prometheus,grafana,alertmanager,blackbox}




Создаем файл:




touch /opt/prometheus_stack/docker-compose.yml




Переходим в каталог prometheus_stack:




cd /opt/prometheus_stack




Дальше будем работать относительно него.




Prometheus + Node Exporter




Открываем файл:




vi docker-compose.yml




version: '3.9'

services:

  prometheus:
    image: prom/prometheus:latest
    volumes:
      - ./prometheus:/etc/prometheus/
    container_name: prometheus
    hostname: prometheus
    command:
      - --config.file=/etc/prometheus/prometheus.yml
    ports:
      - 9090:9090
    restart: unless-stopped
    environment:
      TZ: "Europe/Moscow"
    networks:
      - default

  node-exporter:
    image: prom/node-exporter
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro
    container_name: exporter
    hostname: exporter
    command:
      - --path.procfs=/host/proc
      - --path.sysfs=/host/sys
      - --collector.filesystem.ignored-mount-points
      - ^/(sys|proc|dev|host|etc|rootfs/var/lib/docker/containers|rootfs/var/lib/docker/overlay2|rootfs/run/docker/netns|rootfs/var/lib/docker/aufs)($$|/)
    ports:
      - 9100:9100
    restart: unless-stopped
    environment:
      TZ: "Europe/Moscow"
    networks:
      - default

networks:
  default:
    ipam:
      driver: default
      config:
        - subnet: 172.28.0.0/16




* в данном примере мы создаем 2 сервиса — prometheus и node-exporter. Также мы отдельно определили подсеть 172.28.0.0/16, в которой будут находиться наши контейнеры docker.




Создаем конфигурационный файл для prometheus:




vi prometheus/prometheus.yml




scrape_configs:
  - job_name: node
    scrape_interval: 5s
    static_configs:
    - targets: ['node-exporter:9100']




* в данном примере мы прописываем наш node-exporter в качестве таргета.




Запускаем контейнеры:




docker-compose up -d




Ждем несколько секунд и можно пробовать подключиться. Открываем браузер и переходим по адресу http://<IP-адрес сервера>:9090 — мы должны увидеть страницу Prometheus:







Переходим по адресу http://<IP-адрес сервера>:9100 — мы должны увидеть страницу Node Exporter:







Мы движемся в правильном направлении. Идем дальше.




Grafana




Добавим к нашему стеку графану.




Открываем файл:




vi docker-compose.yml




Добавляем:




version: '3.9'

services:
  ...
  grafana:
    image: grafana/grafana
    user: root
    depends_on:
      - prometheus
    ports:
      - 3000:3000
    volumes:
      - ./grafana:/var/lib/grafana
      - ./grafana/provisioning/:/etc/grafana/provisioning/
    container_name: grafana
    hostname: grafana
    restart: unless-stopped
    environment:
      TZ: "Europe/Moscow"
    networks:
      - default

...




* по аналогии с другими сервисами, мы добавили сервис для графаны.




Перезапустим контейнеры:




docker-compose up -d




Открываем браузер и переходим по адресу http://<IP-адрес сервера>:3000 — мы должны увидеть стартовую страницу Grafana.




Для авторизации вводим admin / admin. После система потребует ввести новый пароль.




Настроим связку с Prometheus. Кликаем по иконке Configuration — Data Sources:







Переходим к добавлению источника, нажав по Add data source:







Среди списка источников данных находим и выбираем Prometheus, кликнув по Select:







Задаем параметры для подключения к Prometheus:







Сохраняем настройки, кликнув по Save & Test:







Добавим дашборд для мониторинга с node exporter. Для этого уже есть готовый вариант.




Кликаем по изображению плюса и выбираем Import:







Вводим идентификатор дашборда. Для Node Exporter это 1860:







Кликаем Load — Grafana подгрузит дашборд из своего репозитория — выбираем в разделе Prometheus наш источник данных и кликаем по Import:







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




Настройка оповещений с AlertManager




В нашем примере мы настроим отправку уведомлений на телеграм бот. Само оповещение будет выполнять AlertManager, который интегрируется с Prometheus.




Для начала подготовим наш бот телеграм. Создадим нового — для этого открываем телеграм и ищем @my_id_bot:







Приложение покажет наш идентификатор. Записываем — он нам потребуется позже.




Теперь создаем бота. Ищем @BotFather:







Переходим в чат с найденным BotFather и запускаем бота:







Создаем бота, последовательно введя команду /newbot и отвечая на запросы мастера:







* в нашем примере мы создаем бота prometheus_alert с именем учетной записи DmoskPrometheusBot.




Переходим в чат с созданным ботом, кликнув по его названию:







Запускаем бота:







С ботом мы закончили. Переходим к docker.




Открываем наш файл docker-compose:




vi docker-compose.yml




И добавляем:




version: '3.9'
  ...

  alertmanager-bot:
    command:
      - --alertmanager.url=http://alertmanager:9093
      - --log.level=info
      - --store=bolt
      - --bolt.path=/data/bot.db
      - --telegram.admin=573454381
      - --telegram.token=5472129845:AAFTQRdujqIHgWHbbVtfYWQQvzvIN98KBqg
    image: metalmatze/alertmanager-bot:0.4.3
    user: root
    ports:
      - 8080:8080
    container_name: alertmanager-bot
    hostname: alertmanager-bot
    environment:
      TZ: "Europe/Moscow"
    restart: unless-stopped
    volumes:
      - ./data:/data
    networks:
      - default

  alertmanager:
    image: prom/alertmanager:v0.21.0
    user: root
    ports:
      - 127.0.0.1:9093:9093
    volumes:
      - ./alertmanager/:/etc/alertmanager/
    container_name: alertmanager
    hostname: alertmanager
    environment:
      TZ: "Europe/Moscow"
    restart: unless-stopped
    command:
      - '--config.file=/etc/alertmanager/config.yml'
      - '--storage.path=/etc/alertmanager/data'
    networks:
      - default

...




* мы добавили два сервиса — alertmanager-bot (телеграм бот для prometheus alertmanager) и alertmanager (система оповещений в prometheus).




Теперь открываем конфигурационный файл для prometheus:




vi prometheus/prometheus.yml




И добавим строки:




...

rule_files:
  - 'alert.rules'

alerting:
  alertmanagers:
  - scheme: http
    static_configs:
    - targets:
      - "alertmanager:9093"




* в данном примере мы указали, что наш сервер мониторинга должен использовать в качестве системы оповещения alertmanager, который доступен по адресу alertmanager:9093. Также мы добавили файл alert.rules с описанием правил оповещения.




Создаем файл с правилами оповещения:




vi prometheus/alert.rules




groups: 
- name: test
  rules:
  - alert: PrometheusTargetMissing
    expr: up == 0
    for: 0m
    labels:
      severity: critical
    annotations:
      summary: "Prometheus target missing (instance {{ $labels.instance }})"
      description: "A Prometheus target has disappeared. An exporter might be crashed. VALUE = {{ $value }}  LABELS: {{ $labels }}"




* в данном примере мы добавили правило, которое будет срабатывать при недоступности узла (node-exporter).




Переходим к конфигурированию alertmanager:




vi alertmanager/config.yml




route:
    receiver: 'alertmanager-bot'

receivers:
- name: 'alertmanager-bot'
  webhook_configs:
  - send_resolved: true
    url: 'http://alertmanager-bot:8080'




* данная конфигурация позволяет отправлять оповещения с помощью webhook на сервис alertmanager-bot:8080 (наш телеграм бот для alertmanager).




Запускаем новые сервисы docker:




docker-compose up -d




Открываем браузер и переходим по адресу http://<IP-адрес сервера>:9090 — на вкладке Alerts мы должны увидеть нашу настройку:







Попробуем проверить работу оповещения. Отключаем наш node exporter:




docker stop exporter




На телеграм должно прийти оповещение:







Отправка уведомлений настроена.




Blackbox exporter




Переходим к настройке мониторинга http сервисов. В нашем примере мы будем проверять работу сайта dmosk.ru.




Открываем наш файл docker-compose:




vi docker-compose.yml




Добавим в него:




version: '3.9'

services:
  ...

  blackbox:
    image: prom/blackbox-exporter
    container_name: blackbox
    hostname: blackbox
    ports:
      - 9115:9115
    restart: unless-stopped
    command:
      - "--config.file=/etc/blackbox/blackbox.yml"
    volumes:
      - ./blackbox:/etc/blackbox
    environment:
      TZ: "Europe/Moscow"
    networks:
      - default

  ...




* сервис blackbox является компонентом Prometheus для мониторинга сетевых сервисов по различным протоколам.




Открываем конфигурационный файл prometheus:




vi prometheus/prometheus.yml




И дописываем:




scrape_configs:
  ...
  - job_name: 'blackbox'
    metrics_path: /probe
    params:
      module: [http_2xx]
    static_configs:
      - targets:
        - https://www.dmosk.ru
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: blackbox:9115

...




* подобная конфигурация позволит создать дополнительное задание мониторинга сайта https://www.dmosk.ru.




Создаем конфигурационный файл blackbox:




vi blackbox/blackbox.yml




modules:
  http_2xx:
    prober: http
    timeout: 5s
    http:
      valid_http_versions: ["HTTP/1.1", "HTTP/2.0"]
      valid_status_codes: [200]
      method: GET
      no_follow_redirects: true
      fail_if_ssl: false
      fail_if_not_ssl: false
      fail_if_body_matches_regexp:
        - "Could not connect to database"
      fail_if_body_not_matches_regexp:
        - "Download the latest version here"
      fail_if_header_matches: # Verifies that no cookies are set
        - header: Set-Cookie
          allow_missing: true
          regexp: '.*'
      fail_if_header_not_matches:
        - header: Access-Control-Allow-Origin
          regexp: '(*|example.com)'
      tls_config:
        insecure_skip_verify: false
      preferred_ip_protocol: "ip4"
      ip_protocol_fallback: false




* во многом, данный пример взят с официальной страницы на Github.




Теперь откроем конфигурационный файл с описанием правил для предупреждений:




vi prometheus/alert.rules




Добавим:




  ...

  - alert: BlackboxSlowProbe
    expr: avg_over_time(probe_duration_seconds[1m]) > 5
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: Blackbox slow probe (instance {{ $labels.instance }})
      description: "Blackbox probe took more than 1s to completen  VALUE = {{ $value }}n  LABELS = {{ $labels }}"

  - alert: BlackboxProbeHttpFailure
    expr: probe_http_status_code <= 199 OR probe_http_status_code >= 400
    for: 0m
    labels:
      severity: critical
    annotations:
      summary: Blackbox probe HTTP failure (instance {{ $labels.instance }})
      description: "HTTP status code is not 200-399n  VALUE = {{ $value }}n  LABELS = {{ $labels }}"




* в данном примере мы создали два правила:




  • BlackboxSlowProbe — предупреждать, если сайт открывается дольше 5 секунд.
  • BlackboxProbeHttpFailure — реагировать, в случае получения кода ответа с ошибкой работы сайта (более 400).




Запускаем добавленный в докер сервис:




docker-compose up -d




Для визуализации мониторинга с помощью blackbox есть готовый дашборд в графане. Снова открываем страницу импорта:







Вводим идентификатор 7587 и выбираем источник (как делали при добавлении дашборда node exporter).




Источник https://www.dmosk.ru/miniinstruktions.php?mini=prometheus-stack-docker#prometheus



2022-10-02T19:55:44
DevOps

Qt 6.4 выходит с новыми функциями, внутренними улучшениями и многим другим

Qt 6.4 выходит с новыми функциями, внутренними улучшениями и многим другим

Qt — это кроссплатформенная объектно-ориентированная среда, широко используемая для разработки программ, использующих графические пользовательские интерфейсы.



Представлена ​​компания Qt запуск новой версии кв. 6.4, в котором продолжается работа по стабилизации и увеличению функциональности ветки Qt 6.

команда Кьюдобавлены дополнительные функциональные возможности для типов Qt Quick TableView и TreeView., помимо поддержки новых платформ, он содержит множество новых функций, некоторые из которых являются технологическими достижениями, а также множество внутренних улучшений.



Читать

Что делает Системный администратор?

Системный администратор, часто сокращенный как системный администратор или просто администратор, отвечает за поддержание сети компьютеров под контролем. Скорее всего, от вас не ожидают, что вы будете исправлять рабочие столы нескольких конечных пользователей, но вы будете тем человеком, который гарантирует, что все работает, в общей картине. Читать

Что интересного в облаке в 2022-23 годах — тенденции, на которые следует обратить внимание

Облачные вычисления уже были мощными до ситуации с COVID-19. Но за последние два года произошел беспрецедентный рост благодаря вызванному пандемией переходу на цифровые сервисы и гибридные рабочие пространства, охватывающие отрасли.

Ничто не может помешать этой тенденции в 2022 году и далее, учитывая успех облачных вычислений как надежной операционной модели в современном цифровом мире.

Компания Nubes обеспечит вас производительной облачной ИТ-инфраструктурой, подробнее тут, высокий уровень обслуживания — с каждым клиентом работает команда профессионалов с многолетним опытом, помогая решить любые технические задачи.

Прогнозирование будущего этой технологии может показаться неосмотрительным, учитывая стремительную динамику космоса. Однако организациям, ориентированным на SAP, и их партнерам полезно оценить статистику и важнейшие тенденции, которые, как ожидается, будут определять мир облачных вычислений с 2022 года.

 

Основные тенденции облачных вычислений с 2022 года

Вот основные тенденции облачных вычислений, на которые следует обратить внимание с 2022 года:

1. Пограничные вычисления

Эта развивающаяся облачная тенденция является эффективной альтернативой облачным вычислениям и хранению данных. Это влечет за собой создание локализованных центров обработки данных для хранения и вычислений данных там, где они собираются, а не в центральном месте, которое может находиться за тысячи километров.

Децентрализованная инфраструктура сокращает задержки и повышает производительность приложений. Поскольку ресурсы и данные находятся рядом с устройствами конечных пользователей, обработка будет осуществляться локально, что позволит компаниям экономить денежные средства.

Пограничные вычисления идеально подходят для обработки данных, зависящих от времени. ИТ-технологии ускоряют обработку данных, сокращают задержки и повышают безопасность, возможности подключения и поддержку конфиденциальности. Эта тенденция станет невероятным стимулом для организаций, которым нужна операционная эффективность.

Переход к «целевому подходу к облаку»

Миграция и внедрение облачных технологий были основой подхода, ориентированного на облако. Концепция обычно предполагает перенос большей части инфраструктуры организации на облачные платформы, размещенные в Google Cloud, Microsoft Azure или AWS. Но это часто приводило к неоднозначным результатам.

Опытные организации будут все больше отходить от этой концепции в 2022 году и далее. Вместо этого подход «под облако» выделяется как более реалистичный. При таком практическом менталитете ИТ-бизнес функционирует, а руководители компаний будут более стратегически подходить к:

  • Принятие соответствующей модели развертывания.
  • Выбор рабочих нагрузок и приложений, которые будут перенесены в облако, и тех, которые останутся локальными.
  • Оптимизация облачной среды для постоянного совершенствования своих облачных возможностей в соответствии с быстро меняющимися требованиями потребителей и рынка.

Продолжение использования технологий по требованию

Поскольку компании продолжают управлять расходами, они получат дополнительный доход для поиска решений конкретных отраслевых проблем. Следовательно, провайдеры будут стремиться обслуживать широкую аудиторию с помощью легкодоступных инноваций с простым интерфейсом, простой кривой обучения и демократичной структурой.

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

 

2. GitOps теперь является стандартом непрерывного развертывания

GitOps выпускает управление облачными рабочими нагрузками с помощью знакомого рабочего процесса на основе Git. Рассмотрение Git как основного источника истины примиряет государство. Сочетание этого с возможностью быстрого отката решения делает GitOps практичным и мощным подходом.

Доступные варианты реализации GitOps включают в себя Rancher Fleet, Google Anthos Config Management, ArgoCD и Flux CD.

В 2022 году и далее GitOps начнет поддерживать многокластерные и многопользовательские развертывания. Следовательно, организациям будет легко управлять кластерами Kubernetes в гибридных средах или на границе. Таким образом, это, скорее всего, станет золотым стандартом непрерывного развертывания.

Безопасность, устойчивость и отказоустойчивость становятся основой облачных разговоров

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

Безопасность

Более конфиденциальные данные и критические рабочие нагрузки находятся в облаке. Таким образом, бизнес-лидеры и CISO сейчас стратегически создают облачные среды и переносят рабочие нагрузки, чтобы наилучшим образом защитить свои данные. Все больше организаций будут переходить от реактивных к проактивным ИТ-средам, которые предвидят и устраняют проблемы в режиме реального времени.

Отказоустойчивость

Клиенты никогда не стесняются выражать разочарование, когда зависящее устройство или услуга выходят из строя из-за сбоя в работе облачного провайдера. Поскольку вопрос заключается в том, «когда», а не «если» произойдет следующее отключение, руководители бизнеса теперь уделяют больше внимания готовности ИТ и действиям по исправлению, чтобы уменьшить последующее воздействие на потребителей.

Устойчивость

В последние годы устойчивое развитие стало серьезной проблемой, центральной темой которой стало социальное и экологическое управление. Ожидается, что это повышенное внимание к корпоративной устойчивости будет расти по мере того, как организации будут эксплуатировать крупные центры обработки данных. После 2022 года организации будут уделять больше внимания изучению следующих:

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

 

3. Kubevirt становится мейнстримом

Этот проект с открытым исходным кодом позволяет Kubernetes организовывать виртуальные машины как контейнеры. Одновременный запуск контейнеров и виртуальных машин позволяет клиентам интегрировать современные приложения на основе микросервисов с устаревшими рабочими нагрузками. Клиенты также получают выгоду от простых рабочих процессов DevOps.

В настоящее время Kubevirt является неотъемлемой частью Google Anthos, Kubernetes, управляемых платформой 9, Rancher’s Harvester и Red Hat OpenShift Virtualization. Но ожидайте резкого роста его внедрения и интеграции, когда виртуальные машины будут рассматриваться как первоклассные граждане.

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

Сфера применения облачных вычислений выходит за рамки хранения данных. В настоящее время компании используют интеллектуальные облачные решения для извлечения информации из доступных данных и повышения общей эффективности.

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

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

Наконец, многие организации в настоящее время предпочитают передавать свои ИТ-функции на аутсорсинг поставщикам. Делегирование ИТ-функций сокращает операционные расходы и позволяет организациям сосредоточиться на своей основной услуге или продукте. Однако при выборе аутсорсинга необходимо учитывать ваши конфиденциальные технологии и данные.



2022-09-29T19:52:22
Облако

Должен ли ваш бизнес использовать пространство в стойке colocation?

По мере того как ваш бизнес становится больше, вы можете браться за более крупные и сложные проекты. Возможно, у вас большая команда сотрудников или вы даже работаете в нескольких филиалах. Все это означает, что ваша ИТ-инфраструктура становится все более сложной.

Если вы хотите расширить свои ИТ-системы, но при этом хотите что-то недорогое, арендуйте стеллажи colocation в Дата-Центре Miran по ссылке https://miran.ru/services/colocation/rentrack, Используются серверные шкафы объемом 47U, шириной 19 дюймов и глубиной 1200 см. В каждом шкафу функциональный кодовый замок и два независимых розеточных блока (PDU). Стеллажи colocation от Дата-Центре Miran могут стать подходящим вариантом для вашего бизнеса.

 

Что такое colocation?

Colocation (также известный как CoLo) — это когда вы арендуете пространство для своих серверов у третьей стороны, используя центр обработки данных colocation, а не размещаете свои физические серверы в своих помещениях.

Это может быть более доступным для бизнеса, потому что вам не нужно вкладывать средства в выделенную комнату связи, платить за охлаждение или управлять каким-либо обслуживанием. Если пространство дорого, переход на пространство для стеллажей colocation может освободить место, предоставив вам больше возможностей без необходимости переезда.

Более того, аренда места в стойке в центре обработки данных может значительно снизить ваши расходы на электроэнергию, поскольку вы не будете платить за питание своих локальных серверов. Поскольку затраты на электроэнергию стремительно растут, сейчас может быть идеальное время для перехода на пространство для стеллажей colocation.

 

В чем преимущества услуг colocation?

Фирмы все чаще обращаются к услугам по размещению, потому что они предлагают масштабируемое решение, которое позволяет вам легко адаптировать свои технологии к меняющимся потребностям вашего бизнеса.

Поскольку все больше предприятий работают на гибридной или удаленной основе, colocation может стать эффективным ресурсом, поскольку вам не нужно беспокоиться о постоянном обслуживании своих серверов или коммуникационных комнат.

Вместо этого вы можете воспользоваться услугами квалифицированных специалистов, которые будут активно контролировать ваши системы и обеспечивать быстрое, надежное подключение и исключительные процессы безопасности для защиты ваших данных. А благодаря источникам бесперебойного питания и резервным генераторам с автоматическим переключением на другой ресурс вы можете быть уверены, что у вашей команды всегда будет все необходимое для эффективной работы.

 

Является ли colocation тем же, что и облачные вычисления?

Между colocation и облачными вычислениями есть сходство, поскольку в обоих сценариях у вас нет физического сервера в вашем офисе. Однако они отличаются тем, как данные управляются и надежно хранятся.

В облачных решениях сервер принадлежит поставщику облачных услуг. Таким образом, все данные хранятся надежно и управляются виртуально.

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

Важно отметить, что когда дело доходит до ИТ-инфраструктуры, вам не нужно выбирать между облачными вычислениями или размещением. Вместо этого многие предприятия приветствуют гибридный подход, который позволяет им извлекать выгоду из гибкости и гибкости, соответствующих потребностям их бизнеса. Например, некоторым компаниям может потребоваться использовать физические серверы (а не облачные решения) в целях соблюдения требований.



2022-09-29T14:16:06
Сервер