Thank you for reading this post, don't forget to subscribe!
Наш собранный пакет позволит:
- Быстро и без лишних усилий установить бинарник Prometheus на систему CentOS.
- Запускать систему мониторинга в качестве сервиса.
- Разрешать правила брандмауэра при помощи сервиса.
Предварительная подготовка
Чтобы не захламить систему, стоит выполнять сборку в тестовом окружении или контейнере Docker.
Стоит иметь ввиду, что процесс сборки, если допустить ошибку, может привести к выполнению потенциально опасных команд. Стоит выполнять сборку от пользователя с обычными правами.
Так или иначе, нам нужны утилиты:
yum install rpmdevtools rpmlint
Перейдем в каталог, в котором мы будем выполнять сборку, например:
cd /opt
Создадим структуру каталогов для сборки:
rpmdev-setuptree
Наши система готова.
Сборка Prometheus
Сборку выполним в несколько небольших шагов.
1. Создаем файл SPEC:
vi rpmbuild/SPECS/prometheus.spec
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
%{!?version: %define version 2.31.1} %{!?release: %define release %(date +%%Y%%m%%d)} Name: prometheus Version: %{version} Release: %{release}%{?dist} Summary: Power your metrics and alerting with the leading open-source monitoring solution. License: Apache 2.0 Vendor: Dmitriy Mosk URL: https://prometheus.io/download/ Source0: https://github.com/prometheus/prometheus/releases/download/v%{version}/prometheus-%{version}.linux-amd64.tar.gz Source1: firewalld Source2: systemd %description Prometheus is an open-source systems monitoring and alerting toolkit originally built at SoundCloud. Since its inception in 2012, many companies and organizations have adopted Prometheus, and the project has a very active developer and user community. It is now a standalone open source project and maintained independently of any company. To emphasize this, and to clarify the project's governance structure, Prometheus joined the Cloud Native Computing Foundation in 2016 as the second hosted project, after Kubernetes. %define owner prometheus %prep %{__mkdir_p} %{name}-%{version}/{firewalld,systemd} %{__tar} -xzvf %{SOURCE0} -C %{_builddir}/%{name}-%{version} --strip-components 1 cp %{SOURCE1}/* %{_builddir}/%{name}-%{version}/firewalld/ cp %{SOURCE2}/* %{_builddir}/%{name}-%{version}/systemd/ %install # Install Prometheus %{__rm} -rf %{buildroot} %{__mkdir_p} %{buildroot}/usr/local/bin %{__mkdir_p} %{buildroot}/etc/prometheus/{console_libraries,consoles} %{__mkdir_p} %{buildroot}%{_sharedstatedir}/prometheus %{__install} -m755 %{_builddir}/%{name}-%{version}/prometheus %{buildroot}/usr/local/bin/ %{__install} -m755 %{_builddir}/%{name}-%{version}/promtool %{buildroot}/usr/local/bin/ %{__install} -m755 %{_builddir}/%{name}-%{version}/prometheus.yml %{buildroot}/etc/prometheus/ %{__install} -m755 -D %{_builddir}/%{name}-%{version}/console_libraries/* -t %{buildroot}/etc/prometheus/console_libraries %{__install} -m755 -D %{_builddir}/%{name}-%{version}/consoles/* -t %{buildroot}/etc/prometheus/consoles # Install firewalld srv %{__mkdir_p} %{buildroot}%{_usr}/lib/firewalld/services %{__install} -m644 %{_builddir}/%{name}-%{version}/firewalld/prometheus-server.xml %{buildroot}%{_usr}/lib/firewalld/services/ # Install systemd service %{__mkdir_p} %{buildroot}%{_unitdir} %{__install} -m644 %{_builddir}/%{name}-%{version}/systemd/prometheus.service %{buildroot}%{_unitdir}/ %pre /usr/bin/getent group %{owner} &>/dev/null \ || /usr/sbin/groupadd -r %{owner} /usr/bin/getent passwd %{owner} &>/dev/null \ || /usr/sbin/useradd -r -g %{owner} \ -c "Prometheus service account" -s /sbin/nologin %{owner} %post %systemd_post prometheus.service test -f %{_bindir}/firewall-cmd && firewall-cmd --reload --quiet || : %preun %systemd_preun prometheus.service if [ $1 -eq 0 ] && [ -x %{_bindir}/firewall-cmd ]; then # Firewalld services uninstall firewall-cmd --permanent --remove-service=prometheus-server fi %postun %systemd_postun_with_restart prometheus.service if [ $1 -eq 0 ] && [ -x /bin/firewall-cmd ]; then # Firewalld services reload firewall-cmd --reload --quiet fi %clean %{__rm} -rf $RPM_BUILD_ROOT %{__rm} -rf $RPM_BUILD_DIR/* %files %defattr(-,%{owner},%{owner}) %attr(644,root,root) %{_usr}/lib/firewalld/services/prometheus-server.xml %attr(644,root,root) %{_unitdir}/prometheus.service %{_usr}/local/bin/prometheus %{_usr}/local/bin/promtool %dir %{_sharedstatedir}/prometheus %config %{_sysconfdir}/prometheus/console_libraries %config %{_sysconfdir}/prometheus/consoles %config %{_sysconfdir}/prometheus/prometheus.yml %changelog * Mon Nov 22 2021 test test Dmitriy Mosk <master@test.ru> - Create RPM specification |
Краткое описание: в зависимости от переданной сборщику версии, будет выбраны нужные нам исходники, в противном случае будет версия 2.31.1 (самая свежая на момент обновления инструкции). При сборке будут извлечены бинарники и конфигурационные файлы, также будут разложены по местам шаблон для брандмауэра и юнита systemd.
2. Подготовка исходников
В нашем spec-файле мы используем 3 источника с исходниками. Нам нужно их подготовить. Для начала, скачаем архив Prometheus:
spectool -g -R rpmbuild/SPECS/prometheus.spec
Создаем каталоги:
mkdir rpmbuild/SOURCES/{firewalld,systemd}
Создаем файл с шаблоном для брандмауэра:
vi rpmbuild/SOURCES/firewalld/prometheus-server.xml
1 2 3 4 5 6 |
<?xml version="1.0" encoding="utf-8"?> <service> <short>prometheus-server</short> <description>Prometheus Server</description> <port protocol="tcp" port="9090"/> </service> |
* в данном примере будет создан шаблон для открытия порта 9090, на котором, по умолчанию, работает prometheus.
Создаем файл с юнитом systemd:
vi rpmbuild/SOURCES/systemd/prometheus.service
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[Unit] Description=Prometheus Service After=network.target [Service] User=prometheus Group=prometheus Type=simple 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 ExecReload=/bin/kill -HUP $MAINPID Restart=on-failure [Install] WantedBy=multi-user.target |
Можно переходить к самой сборке.
3. Сборка пакета
Выполняем команду:
rpmbuild -bb rpmbuild/SPECS/prometheus.spec
Мы должны увидеть процесс сборки, после чего в каталоге rpmbuild/RPMS/x86_64 мы должны увидеть собранный пакет, например, prometheus-2.31.1-20211125.el7.x86_64.rpm.
Установка
У нас есть несколько способов установить собранный пакет:
- Скопировать его в собственный репозиторий, чтобы использовать команду yum install prometheus.
- Скопировать пакет на целевой компьютер и использовать команду yum localinstall prometheus-2.31.1-20211125.el7.x86_64.rpm.
После установки запускаем сервис:
systemctl enable prometheus --now
Разрешаем порты в брандмауэре:
firewall-cmd --permanent --add-service=prometheus-server
firewall-cmd --reload
Для теста работы службы выполняем:
systemctl status prometheus
Для проверки запуска на порту 9090 (порт работы prometheus по умолчанию):
ss -tunlp | grep :9090
Для работы веб-интерфейса открываем браузер и переходим по ссылку http://<IP-адрес сервера>:9090