Prometheus快速起步

备注

安装Grafana 采用社区 APT包管理 仓库安装,更为方便。配合本文,实现 HPE服务器监控

安装

Prometheus官方网站提供下载 ,可以获得不同平台 (macOS, Linux, Windows)的版本:

  • prometheus

  • alertmanager

  • 不同的exporter

提供给了二进制程序和 Prometheus Docker镜像

ARM环境安装

我的实践在 ARM架构KubernetesRaspberry Pi Atlas 主机上完成,所以安装的是 arm64 版本。

  • 下载软件包并解压缩:

在ARM环境( Raspberry Pi Atlas )安装Prometheus
version=2.45.0
wget https://github.com/prometheus/prometheus/releases/download/${version}/prometheus-${version}.linux-arm64.tar.gz
tar xfz prometheus-${version}.linux-arm64.tar.gz
sudo cp prometheus-${version}.linux-arm64/prometheus /usr/local/bin/
sudo cp prometheus-${version}.linux-arm64/promtool /usr/local/bin/
  • 检查:

    prometheus --version
    

macOS环境安装

  • macOS 环境下,Prometheus可以通过 Homebrew 安装:

    brew install prometheus
    

安装后提示信息:

When run from `brew services`, `prometheus` is run from
`prometheus_brew_services` and uses the flags in:
   /opt/homebrew/etc/prometheus.args

To restart prometheus after an upgrade:
  brew services restart prometheus
Or, if you don't want/need a background service you can just run:
  /opt/homebrew/opt/prometheus/bin/prometheus_brew_services

zcloud物理主机安装Prometheus

我在 私有云架构 重新在一台二手服务器 HPE ProLiant DL360 Gen9服务器 部署大规模虚拟化集群。为了结合 私有云数据层 ZData CephCeph Dashboard 管控面板 以及对整个基础架构进行监控,我重新部署 prometheus + grafana 到两台KVM虚拟机 z-b-mon-1z-b-mon-2

备注

实践 HPE服务器监控 ,在 zcloud 物理服务器上部署

在操作系统中添加 prometheus 用户
sudo groupadd --system prometheus
sudo useradd -s /sbin/nologin --system -g prometheus prometheus

用户ID < 1000则为系统用户ID,这个ID是从 999 开始递减的,对于刚安装好的Ubuntu系统, systemd-coredump 组的ID是 999,则上述两个命令创建的 prometheus 的GID和UID都是 998

  • 创建配置目录和数据目录:

在操作系统中创建prometheus目录
sudo mkdir /var/lib/prometheus
for i in rules rules.d files_sd; do sudo mkdir -p /etc/prometheus/${i}; done
  • 下载工具:

    sudo apt update
    sudo apt -y install wget curl vim
    
  • 下载最新prometheus二进制程序:

在Ubuntu环境安装Prometheus
mkdir -p /tmp/prometheus && cd /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 -
tar xvf prometheus*.tar.gz
cd prometheus*/
sudo mv prometheus promtool /usr/local/bin/

简餐配置(归档,不推荐)

在解压缩的Prometheus软件包目录下有一个默认配置文件 prometheus.yml ,这个初始配置复制到 /etc/prometheus 目录下然后简单配置就可以启动:

sudo mkdir -p /etc/prometheus
sudo cp prometheus.yml /etc/prometheus/

默认配置启动运行在 localhost:9090 并且只监听本机:

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['localhost:9090']

对于较为安全的内部局域网,可以将配置修改成监听网络IP地址:

- targets: ['192.168.6.221:9090']

启动:

sudo prometheus --config.file "/etc/prometheus/prometheus.yml"

如果发生异常,则可以使用 prometool 工具检查配置文件:

promtool check config prometheus.yml

配置以及systemd运行Prometheus

  • 在解压缩的Prometheus软件包目录下有配置案例以及 console libraries :

简单配置
sudo mkdir -p /etc/prometheus
sudo mv consoles/ console_libraries/ /etc/prometheus/
sudo mv prometheus.yml /etc/prometheus/prometheus.yml
  • 创建 Prometheus 的 Systemd进程管理器 服务管理配置文件 /etc/systemd/system/prometheus.service :

Prometheus Systemd进程管理器 服务管理配置文件 /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target

StartLimitIntervalSec=500
StartLimitBurst=5

[Service]
User=prometheus
Group=prometheus
Type=simple
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/bin/prometheus \
  --config.file=/etc/prometheus/prometheus.yml \
  --storage.tsdb.path=/data/prometheus \
  --web.console.templates=/etc/prometheus/consoles \
  --web.console.libraries=/etc/prometheus/console_libraries \
  --web.listen-address=0.0.0.0:9090 \
  --web.enable-lifecycle

[Install]
WantedBy=multi-user.target
  • 启动服务:

启动Prometheus
sudo systemctl daemon-reload
sudo systemctl enable --now prometheus
sudo systemctl status prometheus

警告

如果系统启用了 Cockpit服务器统一管理平台 ,会遇到端口冲突导致无法启动。请先执行 Cockpit监听端口和地址 调整(我设置成 9091 )

Docker运行Prometheus

官方提供了Prometheus Docker镜像,简单运行以下命令:

docker run -p 9090:9090 prom/prometheus

不过,上述命令使用默认配置启动,所以需要提供自定义配置和数据存储,所以可以采用如下方法:

docker run -p 9090:9090 -v /tmp/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

访问Prometheus

请注意,上述简单的实践是将Prometheus启动监听在本地回环地址 localhost:9090 ,所以一般外部就不能访问。这样带来一定的安全保护。

我们可以通过ssh端口转发方式实现远程访问,就是在客户端执行以下命令访问服务器 192.168.6.221 开启端口转发到服务器的回环地址 9090 端口:

ssh -L 9090:192.168.6.221:9090 192.168.6.200

或者配置 .ssh/config 配置:

Host zcloud
    HostName 192.168.6.200
    User admin
    LocalForward 9090 192.168.6.221:9090

然后直接执行:

ssh zcloud

通过ssh认证登陆后,在本地通过浏览器访问 http:://127.0.0.1:9090/graph 就可以看到管理配置界面(访问 http://127.0.0.1:9090 也会重定向到 /graph 路径)

如果要访问Prometheus服务器自己的metrics,则访问 http://127.0.0.1:9090/metrics

表达式浏览

在表达式(也就是graph的查询栏输入需要查询的指标),系统会自动匹配最接近的参数

例如,我们查询 go_gc_duration_seconds 指标,输入后点击 Execute 按钮执行,就看到:

../../../_images/prometheus_graph_1.png

我们点击 Graph 面板,就可以看到上述 Table 表格数据在一段时间,例如1小时以内数据变化趋势:

../../../_images/prometheus_graph_2.png

Prometheus的PromQL提供了非常灵活的表达式语言,允许查询和聚合指标。

一个简单查询所有带有 quantile="0.5" 标签的追表,则输入:

{quantile="0.5"}

我们可以看到有很多匹配的metrics:

../../../_images/prometheus_graph_3.png

配套安装exporter

我的主要目标是实现 HPE服务器监控 ,所以继续安装以下组件:

参考