首页›云计算›云计算-OpenStack+LDAP集成-第六节-Prometheus安装与对接

云计算-OpenStack+LDAP集成-第六节-Prometheus安装与对接

云平台装好了、账号统一了,接下来要能看见它的运行状态:还有多少虚拟机在跑、网络有没有异常。监控体系的分工是:Exporter 采集 → Prometheus 存储与查询 → Grafana 展示。本节先搭前两段。

第六节 Prometheus:openstack-exporter 采集指标 → Prometheus 拉取并落盘
第六节 Prometheus:openstack-exporter 采集指标 → Prometheus 拉取并落盘

一、原理:拉模型与 Exporter

Prometheus 是“拉”模型:它不等你上报,而是每隔一段时间(本例 15 秒)主动去各个“数据源”抓一次数据。这些数据源统称 Exporter,就像装在设备上的水表、电表,Prometheus 是定时来抄表的抄表员。

针对 OpenStack 有专门的 openstack-exporter:它拿着 clouds.yaml 里的账号去调 OpenStack API,把返回的状态翻译成一行行 openstack_ 开头的指标文本,供 Prometheus 抓取。

二、操作步骤

第 1 步:建专用用户和目录(别用 root 跑监控)。

groupadd --system prometheus
useradd -s /sbin/nologin --system -g prometheus prometheus
mkdir /etc/prometheus /var/lib/prometheus
chown prometheus:prometheus /var/lib/prometheus
chmod 755 /etc/prometheus

第 2 步:下载并安装 Prometheus 二进制。总手册用的 2.47.2 版本已放在本站服务器上,约 92MB。

# 提示找不到命令就先装 wget:yum install -y wget
wget https://www.thisteam.cn/prometheus-2.47.2.linux-amd64.tar.gz
tar xvfz prometheus-*.tar.gz
cd prometheus-2.47.2.linux-amd64

mv prometheus promtool /usr/local/bin/
chown prometheus:prometheus /usr/local/bin/prometheus
chown prometheus:prometheus /usr/local/bin/promtool

mv consoles/ console_libraries/ /etc/prometheus/
chown -R prometheus:prometheus /etc/prometheus/consoles
chown -R prometheus:prometheus /etc/prometheus/console_libraries

第 3 步:写主配置文件 prometheus.yml。

vi /etc/prometheus/prometheus.yml

global:
  scrape_interval: 15s
  evaluation_interval: 15s

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

  # 后续在这里添加 openstack 抓取任务
chown prometheus:prometheus /etc/prometheus/prometheus.yml

第 4 步:配置 systemd 服务并启动。

vi /etc/systemd/system/prometheus.service

[Unit]
Description=Prometheus Monitoring System
Documentation=https://prometheus.io/docs/introduction/overview/
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
User=prometheus
Group=prometheus
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=always

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start prometheus
systemctl enable prometheus
systemctl status prometheus

浏览器打开 http://192.168.100.10:9090 能看到 Prometheus 自身界面即成功。

第 5 步:装 openstack-exporter 的依赖。Exporter 需要 OpenStack 的 Python 客户端库来和 API 通信。

yum groupinstall "Development Tools" -y
yum install epel-release -y
yum install python3-pip python3-devel git -y

pip3 install python-cinderclient python-keystoneclient python-neutronclient \
    python-novaclient python-swiftclient python-netaddr prometheus-client

第 6 步:装 exporter 本体并准备认证文件。

groupadd --system openstack-exporter
useradd -s/sbin/nologin --system -g openstack-exporter openstack-exporter
mkdir -p /etc/openstack-exporter /var/lib/openstack-exporter
chown openstack-exporter:openstack-exporter /var/lib/openstack-exporter

wget https://www.thisteam.cn/openstack-exporter_1.7.0_linux_amd64.tar.gz
tar xvfz openstack-exporter_1.7.0_linux_amd64.tar.gz
mv openstack-exporter /usr/local/bin/
chown openstack-exporter:openstack-exporter /usr/local/bin/openstack-exporter

mkdir -p /etc/openstack
vi /etc/openstack/clouds.yaml

clouds.yaml 可以在 OpenStack 控制台的「API 访问」页面下载后修改,内容如下(域和密码按实际改):

clouds:
  openstack:
    auth:
      auth_url: "http://controller:5000/v3/"
      username: "admin"
      password: "12345678"
      project_name: "admin"
      user_domain_name: "demo"
      project_domain_name: "demo"
    region_name: "RegionOne"
    interface: "public"
    identity_api_version: 3

这个文件含密码,权限必须收紧:

chmod 640 /etc/openstack/clouds.yaml
chown root:root /etc/openstack/clouds.yaml

第 7 步:把 exporter 配成 systemd 服务,并让 Prometheus 来抓。

vi /etc/systemd/system/openstack-exporter.service

[Unit]
Description=Prometheus OpenStack Exporter
After=network.target

[Service]
Type=simple
User=openstack-exporter
Group=openstack-exporter
Environment="OS_CLIENT_CONFIG_FILE=/etc/openstack/clouds.yaml"
ExecStart=/usr/local/bin/openstack-exporter \
    --web.listen-address=":9180" \
    --path.config="/etc/openstack-exporter" \
    --path.data="/var/lib/openstack-exporter"
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start openstack-exporter
systemctl enable openstack-exporter

# 在 prometheus.yml 的 scrape_configs 下追加
#   - job_name: 'openstack'
#     static_configs:
#       - targets: ['localhost:9180']
#         labels:
#           group: 'openstack'
systemctl restart prometheus

三、端口一览

端口“, ”谁在用“, ”作用
9090 Prometheus Web 界面 + 自身指标
9180 openstack-exporter 对外暴露 openstack_* 指标
5000 Keystone exporter 调 OpenStack 认证 API
3000 Grafana(下一节) 监控大屏

四、常见问题与排错

现象“, ”原因“, ”解决办法
curl :9180/metrics 无数据 clouds.yaml 认证失败“, ”用 openstack token issue 验证同一套凭据
Targets 显示 DOWN exporter 没起来或端口不对 systemctl status openstack-exporter + ss -lntp
指标有但缺 nova 项 pip 客户端库缺装“, ”对照第 5 步把 python-*-client 装全
exporter 频繁重启“, ”认证文件权限读不到“, ”检查 clouds.yaml 属主与 640 权限

五、本节小结

一句话记住: exporter 是水表,Prometheus 是抄表员,去 Status → Targets 看那个 job 是不是 UP——UP 才算接上。数据存下来了,下一节用 Grafana 把它画成人能看懂的图。

上一篇
下一篇