如何在Ubuntu 18.04上安装Prometheus
Prometheus是一个非常强大的开源监视和警报系统,适用于诸如云空间之类的动态环境。
这是一个由社区维护的独立项目,许多和组织都对其源代码做出了贡献。
Prometheus的大多数组件都是用Go编写的,因此很容易将其构建和部署为静态二进制文件。
很少需要从代码编译应用程序。
Prometheus能够记录任何纯数字时间序列,既可以用于以机器为中心的监视,例如Linux系统,也可以监视高度动态的面向服务的体系结构。
像Grafana这样的可视化工具支持使用Grafana 2.5.0以后包含的Prometheus的Grafana数据源查询Prometheus。
在本教程中,我们将介绍如何在Ubuntu 18.04服务器上安装Prometheus。
Prometheus的组成
Prometheus生态系统包含各种组件,这些组件一起工作以提供完整的监视和警报系统。
大多数组件是可选的,我们只需要按需安装它们。
主要组成部分是:
- Prometheus服务器-这将从客户端系统和应用程序中刮取并存储时间序列数据。
- 导出器Exporters-用于从第三方系统导出现有度量作为Prometheus度量。
- 用于处理警报的警报管理器
- 用于检测应用程序代码的客户端库
Prometheus的特点
Prometheus的主要特点是:
- 一个多维数据模型,其中包含通过度量标准名称和键/值对标识的时间序列数据
- 它具有非常灵活的查询语言来利用其多维模型
- 单个服务器节点是自治的,并且不依赖于分布式存储。
- Prometheus时间序列集合使用基于HTTP协议的拉模型
- 它具有自动发现目标的服务,并且配置文件可用于相同的目标。
- 通过中间网关支持推送时间序列
- Prometheus支持多种图形和仪表板模式
在Ubuntu 18.04上安装Prometheus
由于Prometheus是用Go编写的,因此其软件包将作为二进制文件分发。
在撰写本文时,Prometheus的最新版本是v2.2.1.
我们可以从“官方下载”页面检查发行。
提供的软件包适用于macOS,Linux和Windows操作系统,因此请确保我们下载了正确的软件包。
$sudo su $export RELEASE="2.2.1" $wget https://github.com/prometheus/prometheus/releases/download/v${RELEASE}/prometheus-${RELEASE}.linux-amd64.tar.gz
下载档案后,使用tar解压缩。
$tar xvf prometheus-${RELEASE}.linux-amd64.tar.gz prometheus-2.2.1.linux-amd64/ prometheus-2.2.1.linux-amd64/consoles/ prometheus-2.2.1.linux-amd64/consoles/index.html.example prometheus-2.2.1.linux-amd64/consoles/node-cpu.html prometheus-2.2.1.linux-amd64/consoles/node-disk.html prometheus-2.2.1.linux-amd64/consoles/node-overview.html prometheus-2.2.1.linux-amd64/consoles/node.html prometheus-2.2.1.linux-amd64/consoles/prometheus-overview.html prometheus-2.2.1.linux-amd64/consoles/prometheus.html prometheus-2.2.1.linux-amd64/console_libraries/ prometheus-2.2.1.linux-amd64/console_libraries/menu.lib prometheus-2.2.1.linux-amd64/console_libraries/prom.lib prometheus-2.2.1.linux-amd64/prometheus.yml prometheus-2.2.1.linux-amd64/LICENSE prometheus-2.2.1.linux-amd64/NOTICE prometheus-2.2.1.linux-amd64/prometheus prometheus-2.2.1.linux-amd64/promtool
从文件解压缩更改为新创建的目录。
# cd prometheus-${RELEASE}.linux-amd64/
创建Prometheus系统组
Prometheus需要其自己的用户和组才能运行。
# groupadd --system prometheus # grep prometheus /etc/group prometheus:x:999:
创建Prometheus系统用户
现在我们有了Prometheus组,让我们创建一个用户并将其分配给创建的组。
# useradd -s /sbin/nologin -r -g prometheus prometheus # id prometheus uid=999(prometheus) gid=999(prometheus) groups=999(prometheus)
为Prometheus创建配置和数据目录
Prometheus需要一个目录来存储其数据和配置文件。
我们将为数据创建/var/lib/prometheus,为配置文件创建/etc/prometheus。
# mkdir -p /etc/prometheus/{rules,rules.d,files_sd} /var/lib/prometheus
将Prometheus二进制文件复制到$PATH中的目录中
在Linux上放置第三方二进制文件的首选目录是/usr/local/bin /,因为默认情况下它位于$PATH中,并且不会干扰系统二进制文件。
# cp prometheus promtool /usr/local/bin/ # ls /usr/local/bin/ prometheus promtool
将console和console_libraries复制到配置文件目录
控制台文件和库需要放在/etc/prometheus /目录下。
# cp -r consoles/console_libraries//etc/prometheus/
创建系统单位文件:
Ubuntu 18.04默认使用systemd初始化系统,我们需要创建一个服务单元文件来管理Prometheus服务。
我们将文件放在/etc/systemd/system目录下。
文件名必须以.service结尾
# cat /etc/systemd/system/prometheus.service [Unit] Description=Prometheus systemd service unit 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 SyslogIdentifier=prometheus Restart=always [Install] WantedBy=multi-user.target
注意:
- 我们将服务绑定到0.0.0.0:9090。可以从服务器上的所有网络接口访问此文件。通过为要使用的接口指定IP地址来限制它,127.0.0.1仅用于本地访问。
- 指定的配置文件是/etc/prometheus/prometheus.yml。我们将创建一个基本配置文件以供下一步使用。
创建Prometheus配置文件
这将放置在/etc/prometheus /目录中。
# cat /etc/prometheus/prometheus.yml # Global config global: scrape_interval: 15s # Set the scrape interval to every 15 seconds. evaluation_interval: 15s # Evaluate rules every 15 seconds. scrape_timeout: 15s # scrape_timeout is set to the global default (10s). # A scrape configuration containing exactly one endpoint to scrape:# Here it's Prometheus itself. scrape_configs: # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config. - job_name: 'prometheus' # metrics_path defaults to '/metrics' # scheme defaults to 'http'. static_configs: - targets: ['localhost:9090']
有关更多的配置选项,请参阅Prometheus官方配置教程。
将目录权限更改为Prometheus用户和组
Prometheus文件和数据的所有权应为其用户和组。
# chown -R prometheus:prometheus /etc/prometheus/ /var/lib/prometheus/ # chmod -R 775 /etc/prometheus//var/lib/prometheus/
启动并启用Prometheus服务
启动并启用Prometheus服务以在启动时启动。
# systemctl start prometheus # systemctl enable prometheus Created symlink from /etc/systemd/system/multi-user.target.wants/prometheus.service to /etc/systemd/system/prometheus.service.
检查状态:
# systemctl status prometheus
确认端口9090正在监听。
# netstat -tunlp | grep 9090 tcp6 0 0 :::9090 :::* LISTEN 2140/prometheus # telnet 127.0.0.1 9090 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. ^]
If you have a firewall like ufw, Open port 9090 to be able to access it from a remote device. # ufw allow 9090 Rule added Rule added (v6)
要允许特定的网络,请使用:
# ufw allow from 192.168.10.0/24 to any port 9090 Rule added # ufw status Status: active To Action From -- ------ --- 9090 ALLOW Anywhere 9090 ALLOW 192.168.10.0/24 9090 (v6) ALLOW Anywhere (v6)
要获取Web界面,请打开http://ip:9090