如何在Ubuntu 18.04上安装Prometheus

时间:2020-03-05 15:28:08  来源:igfitidea点击:

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