Используемые термины: Prometheus, CentOS.
Ранее мы уже рассматривали установку Prometheus и пример создания собственного RPM-пакета. В данной инструкции будет приведен пример создания пакета для установки серверной части Prometheus на Linux CentOS.
Наш собранный пакет позволит:
Так как более подробное описание процесса сборки RPM-пакета есть в инструкции, ссылку на которую можно увидеть выше, мы не будем останавливаться на подробном описании сценария.
Чтобы не захламить систему, стоит выполнять сборку в тестовом окружении или контейнере Docker.
Стоит иметь ввиду, что процесс сборки, если допустить ошибку, может привести к выполнению потенциально опасных команд. Стоит выполнять сборку от пользователя с обычными правами.
Так или иначе, нам нужны утилиты:
yum install rpmdevtools rpmlint
Перейдем в каталог, в котором мы будем выполнять сборку, например:
Создадим структуру каталогов для сборки:
rpmdev-setuptree
Наши система готова.
Сборку выполним в несколько небольших шагов.
vi rpmbuild/SPECS/prometheus.spec
%{!?version: %define version 2.31.1}%{!?release: %define release %(date +%%Y%%m%%d)}
Name: prometheusVersion: %{version}Release: %{release}%{?dist}Summary: Power your metrics and alerting with the leading open-source monitoring solution.
License: Apache 2.0Vendor: Dmitriy MoskURL: https://prometheus.io/download/Source0: https://github.com/prometheus/prometheus/releases/download/v%{version}/prometheus-%{version}.linux-amd64.tar.gzSource1: firewalldSource2: systemd
%descriptionPrometheus is an open-source systems monitoring and alerting toolkit originallybuilt at SoundCloud. Since its inception in 2012, many companies andorganizations have adopted Prometheus, and the project has a very activedeveloper and user community. It is now a standalone open source project andmaintained independently of any company. To emphasize this, and to clarify theproject’s governance structure, Prometheus joined the Cloud Native ComputingFoundation 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 1cp %{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.servicetest -f %{_bindir}/firewall-cmd && firewall-cmd —reload —quiet || :
%preun%systemd_preun prometheus.serviceif [ $1 -eq 0 ] && [ -x %{_bindir}/firewall-cmd ]; then # Firewalld services uninstall firewall-cmd —permanent —remove-service=prometheus-serverfi
%postun%systemd_postun_with_restart prometheus.serviceif [ $1 -eq 0 ] && [ -x /bin/firewall-cmd ]; then # Firewalld services reload firewall-cmd —reload —quietfi
%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 Dmitriy Mosk <[email protected]>— Create RPM specification
Краткое описание: в зависимости от переданной сборщику версии, будет выбраны нужные нам исходники, в противном случае будет версия 2.31.1 (самая свежая на момент обновления инструкции). При сборке будут извлечены бинарники и конфигурационные файлы, также будут разложены по местам шаблон для брандмауэра и юнита systemd.
В нашем spec-файле мы используем 3 источника с исходниками. Нам нужно их подготовить. Для начала, скачаем архив Prometheus:
spectool -g -R rpmbuild/SPECS/prometheus.spec
Создаем каталоги:
mkdir rpmbuild/SOURCES/{firewalld,systemd}
Создаем файл с шаблоном для брандмауэра:
vi rpmbuild/SOURCES/firewalld/prometheus-server.xml
<?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
[Unit]Description=Prometheus ServiceAfter=network.target
[Service]User=prometheusGroup=prometheusType=simpleExecStart=/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_librariesExecReload=/bin/kill -HUP $MAINPIDRestart=on-failure
[Install]WantedBy=multi-user.target
Можно переходить к самой сборке.
Выполняем команду:
rpmbuild -bb rpmbuild/SPECS/prometheus.spec
Мы должны увидеть процесс сборки, после чего в каталоге rpmbuild/RPMS/x86_64 мы должны увидеть собранный пакет, например, 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.
Продолжая использовать данный сайт вы принимаете политику конфиденциальности и cookies