У нас в компании есть сотрудник, который курирует разработчиков и наши Web-сервисы и вот мы с ним задались целью, как можно сделать отказоустойчивость порталов компании, которые в интернете. Площадка взаимодействия с поставщиками и клиентами, калькулятор/визуализатор продукции, информационный. Я предложил сперва уточнить у специалистов подрядчика, что они скажут, т.к. мое мнение, что мы должны сами все поддерживать и разрабатывать, и не зависеть ни от кого. Уметь развернуть из бекапа и знать все вносимые изменения, но у этого сотрудника, с которым я работаю видение другое, должны быть подрядчики дабы разгрузить отдел IT – я же сказал, как должно быть. Ну так вот прислали они следующие шаги:

1. Пустить все запросы к сайту через сторонний сервис, который обеспечит защиту от ddos-атака (Claudflare);

2.Запретить доступ к сайту по IP (выдавать в этом случае статичную страницу nginx’а);

3.Установить систему мониторинга Prometeus (понятно, что соответствующий сервис должен быть установлен на другом сервере);

4.Name-записи хранить не у хостера, а у регистратора доменов (nic.ru/reg.ru) – это позволит снизить зависимость от ddos-атак на name-сервера.

У нас пункт 4 выполнен: DNS-записи у nic.ru, SLAVE-запись в DATALINE. (заметка для ознакомления на практике "Порядок настройки DNS-SLAVE для организации")

Исходя из пунктов выше, я решил посмотреть, что есть система мониторинга (использовать буду на Ubuntu 22.04 LTS Server) Prometheus лучше или хуже если сравнивать с системой мониторинга на базе Zabbix

Prometheus — это бесплатное программное приложение, используемое для мониторинга событий и оповещения. Он записывает метрики в реальном времени в базу данных временных рядов, построенную с использованием модели HTTP-запроса, с гибкими запросами и оповещениями в режиме реального времени.

Шаг №1: Обновляем систему до самого актуального состояния в рамках текущего релиза установленной операционной системы:

ekzorchik@srv-us2204a:~$ sudo rm -rf /var/lib/apt/lists

ekzorchik@srv-us2204a:~$ sudo apt-get update && sudo apt-get upgrade -y

Шаг №2: Устанавливаю систему предварительные утилиты:

ekzorchik@srv-us2204a:~$ sudo apt-get -y install wget curl nano

Шаг №3: Создаю специального пользователя и группу под сервис Prometheus:

ekzorchik@srv-us2204a:~$ sudo groupadd --system prometheus
ekzorchik@srv-us2204a:~$ sudo useradd -s /sbin/nologin --system -g prometheus prometheus

Шаг №4: Создаю под сервис рабочие директории:

ekzorchik@srv-us2204a:~$ sudo mkdir /var/lib/prometheus
ekzorchik@srv-us2204a:~$ for i in rules rules.d files_sd; do sudo mkdir -p /etc/prometheus/${i}; done

Шаг №5: Загружаю/Распаковываю и устанавливаю в систему из интернета (https://github.com/prometheus/prometheus/releases) самую последнюю версию Prometheus:

ekzorchik@srv-us2204a:~$ mkdir -p /tmp/prometheus && cd /tmp/prometheus
ekzorchik@srv-us2204a:/tmp/prometheus$
ekzorchik@srv-us2204a:/tmp/prometheus$ curl -s https://api.github.com/repos/prometheus/prometheus/releases/latest | grep browser_download_url | grep linux-amd64 | cut -d '"' -f 4 | wget -qi -
ekzorchik@srv-us2204a:/tmp/prometheus$ ls
prometheus-2.36.0.linux-amd64.tar.gz
ekzorchik@srv-us2204a:/tmp/prometheus$ tar zxf prometheus-*.tar.gz
ekzorchik@srv-us2204a:/tmp/prometheus$ cd prometheus-*/
ekzorchik@srv-us2204a:/tmp/prometheus/prometheus-2.36.0.linux-amd64$
ekzorchik@srv-us2204a:/tmp/prometheus/prometheus-2.36.0.linux-amd64$ sudo mv prometheus promtool /usr/local/bin/
ekzorchik@srv-us2204a:/tmp/prometheus/prometheus-2.36.0.linux-amd64$ cd ~
ekzorchik@srv-us2204a:~$ prometheus --version
prometheus, version 2.36.0 (branch: HEAD, revision: d48f381d9a4e68c83283ce5233844807dfdc5ba5)
  build user:       root@b3126bd1c115
  build date:       20220530-13:56:56
  go version:       go1.18.2
  platform:         linux/amd64
ekzorchik@srv-us2204a:~$
ekzorchik@srv-us2204a:~$ promtool --version
promtool, version 2.36.0 (branch: HEAD, revision: d48f381d9a4e68c83283ce5233844807dfdc5ba5)
  build user:       root@b3126bd1c115
  build date:       20220530-13:56:56
  go version:       go1.18.2
  platform:         linux/amd64
ekzorchik@srv-us2204a:~$
ekzorchik@srv-us2204a:~$ cd /tmp/prometheus/prometheus-2.36.0.linux-amd64/
ekzorchik@srv-us2204a:/tmp/prometheus/prometheus-2.36.0.linux-amd64$ sudo mv consoles/ console_libraries/ /etc/prometheus/
ekzorchik@srv-us2204a:/tmp/prometheus/prometheus-2.36.0.linux-amd64$ sudo mv prometheus.yml /etc/prometheus/prometheus.yml
ekzorchik@srv-us2204a:/tmp/prometheus/prometheus-2.36.0.linux-amd64$ cd $HOME
ekzorchik@srv-us2204a:~$

Шаг №6: Произвожу настройку Prometheus:

ekzorchik@srv-us2204a:~$ sudo cp /etc/prometheus/prometheus.yml /etc/prometheus/prometheus.yml.backup
ekzorchik@srv-us2204a:~$ sudo nano /etc/prometheus/prometheus.yml

я пока в файле Prometheus.yml ничего менять не буду

Шаг №7: Создаю файл сервиса, который будет запускать Prometheus вместе с системой:

ekzorchik@srv-us2204a:~$ sudo nano /etc/systemd/system/prometheus.service

[Unit]
Description=Prometheus
Documentation=https://prometheus.io/docs/introduction/overview/
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
User=prometheus
Group=prometheus
ExecReload=/bin/kill -HUP $MAINPID
ExecStart=/usr/local/bin/prometheus \
  --config.file=/etc/prometheus/prometheus.yml \
  --storage.tsdb.path=/var/lib/prometheus \
  --web.console.templates=/etc/prometheus/consoles \
  --web.console.libraries=/etc/prometheus/console_libraries \
  --web.listen-address=0.0.0.0:9090 \
  --web.external-url=

SyslogIdentifier=prometheus
Restart=always

[Install]
WantedBy=multi-user.target

Шаг №8: Изменяю права и владельца у файлов Prometheus:

ekzorchik@srv-us2204a:~$ for i in rules rules.d files_sd; do sudo chown -R prometheus:prometheus /etc/prometheus/${i}; done
ekzorchik@srv-us2204a:~$ for i in rules rules.d files_sd; do sudo chmod -R 775 /etc/prometheus/${i}; done
ekzorchik@srv-us2204a:~$ sudo chown -R prometheus:prometheus /var/lib/prometheus/

Шаг №9: Активирую файл сервиса Prometheus:

ekzorchik@srv-us2204a:~$ sudo systemctl daemon-reload
ekzorchik@srv-us2204a:~$ sudo systemctl start prometheus.service
ekzorchik@srv-us2204a:~$ sudo systemctl enable prometheus.service
Created symlink /etc/systemd/system/multi-user.target.wants/prometheus.service → /etc/systemd/system/prometheus.service.
ekzorchik@srv-us2204a:~$ sudo systemctl status prometheus.service
● prometheus.service - Prometheus
     Loaded: loaded (/etc/systemd/system/prometheus.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2022-06-07 08:27:38 MSK; 2s ago
       Docs: https://prometheus.io/docs/introduction/overview/
   Main PID: 1762 (prometheus)
      Tasks: 7 (limit: 2241)
     Memory: 16.6M
        CPU: 81ms
     CGroup: /system.slice/prometheus.service
             └─1762 /usr/local/bin/prometheus --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/var/lib/prometheus --web.console.templa>

Jun 07 08:27:38 srv-us2204a prometheus[1762]: ts=2022-06-07T05:27:38.273Z caller=head.go:542 level=info component=tsdb msg="Replaying WAL, this may tak>
Jun 07 08:27:38 srv-us2204a prometheus[1762]: ts=2022-06-07T05:27:38.417Z caller=head.go:613 level=info component=tsdb msg="WAL segment loaded" segment>
Jun 07 08:27:38 srv-us2204a prometheus[1762]: ts=2022-06-07T05:27:38.417Z caller=head.go:613 level=info component=tsdb msg="WAL segment loaded" segment>
Jun 07 08:27:38 srv-us2204a prometheus[1762]: ts=2022-06-07T05:27:38.417Z caller=head.go:619 level=info component=tsdb msg="WAL replay completed" check>
Jun 07 08:27:38 srv-us2204a prometheus[1762]: ts=2022-06-07T05:27:38.418Z caller=main.go:993 level=info fs_type=EXT4_SUPER_MAGIC
Jun 07 08:27:38 srv-us2204a prometheus[1762]: ts=2022-06-07T05:27:38.418Z caller=main.go:996 level=info msg="TSDB started"
Jun 07 08:27:38 srv-us2204a prometheus[1762]: ts=2022-06-07T05:27:38.418Z caller=main.go:1177 level=info msg="Loading configuration file" filename=/etc>
Jun 07 08:27:38 srv-us2204a prometheus[1762]: ts=2022-06-07T05:27:38.419Z caller=main.go:1214 level=info msg="Completed loading of configuration file" >
Jun 07 08:27:38 srv-us2204a prometheus[1762]: ts=2022-06-07T05:27:38.419Z caller=main.go:957 level=info msg="Server is ready to receive web requests."
Jun 07 08:27:38 srv-us2204a prometheus[1762]: ts=2022-06-07T05:27:38.419Z caller=manager.go:937 level=info component="rule manager" msg="Starting rule >
ekzorchik@srv-us2204a:~$

Шаг №10: Проверяю, что в системе появился порт соединения для сервиса Prometheus:

ekzorchik@srv-us2204a:~$ sudo ss -ltp | egrep prometheus
LISTEN 0      4096               *:9090              *:*    users:(("prometheus",pid=1762,fd=8))
ekzorchik@srv-us2204a:~$

Это порт 9090

Допустим Вы разворачиваете ваш сервис Prometheus в интернете, то не лишним будет задействовать надстройку (ufw или firewalld) над правилами iptables и разрешить взаимодействие с хостом на этот порт:

sudo firewall-cmd --add-port=9090/tcp --permanent
sudo ufw allow to any port 9090/tcp

Шаг №11: С рабочей системы через браузер делаю обращение на адрес (http://IP&DNS:9090 => http://172.35.35.33:9090) системы где развернул сервис Prometheus дабы посмотреть что есть этот развернутый сервис:

Web-интерфейс Prometheus

Вроде ничего примечательного нет.

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

А пока на этом, я прощаюсь, с уважением автор блога Олло Александр aka ekzorchik.