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

一、原理:拉模型与 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 把它画成人能看懂的图。

