使用Prometheus + Grafana监控OpenStack
目录
概述
Prometheus是一个开源的完整监控解决方案,其对传统监控系统的测试和告警模型进行了彻底的颠覆,形成了基于中央化的规则计算、统一分析和告警的新模型。
为了不影响原有集群的性能,Prometheus和Grafana的主服务应该部署在单独的监控节点上。Prometheus的监控收集服务要部署在集群的对应节点上,例如node_exporter应该部署在集群的每个节点;libvirt_exporter应该部署在集群的计算节点上。
环境
Host | IP | 说明 |
---|---|---|
monitor | 10.10.15.88 | 监控节点 |
controller | 10.10.15.89 | 控制节点 |
compute | 10.10.15.76 | 计算节点 |
在部署Prometheus前先将每个节点的防火墙关闭。
1 | systemctl disable --now firewalld.service |
安装Prometheus
在监控节点上部署Prometheus的主服务。
下载Prometheus最新的安装包,并解压。
1
2wget https://github.com/prometheus/prometheus/releases/download/v2.40.2/prometheus-2.40.2.linux-amd64.tar.gz
tar -xzvf prometheus-2.40.1.linux-amd64.tar.gz将二进制可执行文件复制到/usr/local/bin下。
1
2cd prometheus-2.40.1.linux-amd64/
cp prometheus promtool /usr/local/bin/新建用户prometheus。
1
sudo useradd --no-create-home --shell /bin/false prometheus
修改二进制可执行文件的用户和组。
1
2
3mkdir /var/lib/prometheus
chown prometheus:prometheus /usr/local/bin/prometheus \
/usr/local/bin/promtool /var/lib/prometheus新建/etc/prometheus文件夹,复制文件consoles和console_libraries到/etc/prometheus下。
1
2mkdir /etc/prometheus
cp -r consoles console_libraries /etc/prometheus编辑Prometheus的配置文件/etc/prometheus/prometheus.yml。
1
2
3
4
5
6
7global:
scrape_interval: 10s
scrape_configs:
- job_name: 'prometheus_master'
scrape_interval: 5s
static_configs:
- targets: ['10.10.15.88:9090']修改配置文件的用户和组
1
chown -R prometheus:prometheus /etc/prometheus/
编辑service文件/etc/systemd/system/prometheus.service。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
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
[Install]
WantedBy=multi-user.target启动服务。
1
2
3systemctl daemon-reload
systemctl enable --now prometheus
systemctl status prometheus
安装node_exporter
node_exporter主要用来收集主机的硬件信息,包括CPU、内存、I/O等。需要在每个需要要被监控的节点安装node_exporter服务。
下载最新的安装包,并解压。
1
2wget https://github.com/prometheus/node_exporter/releases/download/v1.4.0/node_exporter-1.4.0.linux-amd64.tar.gz
tar -xzvf node_exporter-1.4.0.linux-amd64.tar.gz将二进制可执行文件复制到/usr/local/bin下。
1
cd node_exporter-1.4.0.linux-amd64 && cp node_exporter /usr/local/bin/
编辑service文件/etc/systemd/system/node_exporter.service。
1
2
3
4
5
6
7
8[Unit]
Description=Node Exporter
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target启动服务。
1
2
3systemctl daemon-reload
systemctl enable --now node_exporter
systemctl status node_exporter在各个节点执行完上述步骤后,在监控节点上编辑Prometheus的配置文件/etc/prometheus/prometheus.yml。
1
2
3
4
5
6
7
8scrape_configs:
- job_name: 'node_exporter'
scrape_interval: 5s
static_configs:
- targets:
- '10.10.15.88:9100'
- '10.10.15.89:9100'
- '10.10.15.76:9100'重启Prometheus。
1
systemctl restart prometheus
安装openstack-exporter
openstack-exporter主要用来收集openstack环境中的相关信息,包括云主机、镜像、网络等资源信息以及各个openstack服务的状态信息。
下载最新安装包,并解压。
1
2wget https://github.com/openstack-exporter/openstack-exporter/releases/download/v1.6.0/openstack-exporter_1.6.0_linux_amd64.tar.gz
tar -xzvf openstack-exporter_1.6.0_linux_amd64.tar.gz将二进制可执行文件复制到/usr/local/bin下。
1
cp openstack-exporter /usr/local/bin/
新建配置文件目录/etc/openstack/,并编写配置文件clouds.yaml。
1
2mkdir /etc/openstack/
vim /etc/openstack/clouds.yaml1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28clouds:
test:
region_name: RegionOne
identity_api_version: 3
identity_interface: internal
auth:
username: "admin"
password: "000000"
project_name: "admin"
project_domain_name: "Default"
project_domain_id: "default"
user_domain_name: "Default"
auth_url: "http://10.10.15.89:5000/v3"
verify: false
ustack:
region_name: RegionOne
identity_api_version: 3
identity_interface: internal
auth:
username: "admin"
password: "admin12#$"
project_name: "admin"
project_domain_name: "Default"
project_domain_id: "default"
user_domain_name: "Default"
auth_url: "http://10.10.15.11:5000/v3"
verify: false编辑service文件。
(1) /etc/systemd/system/openstack_exporter_test.service1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18[Unit]
Description=OpenStack Exporter
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/openstack-exporter \
--os-client-config /etc/openstack/clouds.yaml test \
--disable-service.object-store \
--disable-service.load-balancer \
--disable-service.container-infra \
--disable-service.gnocchi \
--disable-service.dns \
--disable-service.baremetal \
--disable-service.database \
--disable-service.orchestration \
--web.listen-address=":9181"
[Install]
WantedBy=multi-user.target(2) /etc/systemd/system/openstack_exporter_ustack.service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18[Unit]
Description=OpenStack Exporter
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/openstack-exporter \
--os-client-config /etc/openstack/clouds.yaml ustack \
--disable-service.object-store \
--disable-service.load-balancer \
--disable-service.container-infra \
--disable-service.gnocchi \
--disable-service.dns \
--disable-service.baremetal \
--disable-service.database \
--disable-service.orchestration \
--web.listen-address=":9181"
[Install]
WantedBy=multi-user.target启动服务。
1
2
3systemctl daemon-reload
systemctl enable --now openstack_exporter_test openstack_exporter_ustack
systemctl status openstack_exporter_test openstack_exporter_ustack编辑Prometheus的配置文件。
1
2
3
4
5
6scrape_configs:
- job_name: 'openstack_exporter'
scrape_interval: 60s
scrape_timeout: 60s
static_configs:
- targets: ['10.10.15.88:9180', '10.10.15.88:9181']重启Prometheus。
1
systemctl restart prometheus
安装prometheus-libvirt-exporter
prometheus-libvirt-exporter用于监控计算节点云主机的详细信息,包括CPU、内存、I/O以及网络的使用情况。需要将服务部署在每个计算节点上。
下载最新的安装包,并解压。
1
2
3wget https://github.com/zhangjianweibj/prometheus-libvirt-exporter/\
releases/download/v1.1.0/prometheus-libvirt-exporter.tar.gz
tar -czvf prometheus-libvirt-exporter.tar.gz复制可执行文件到/usr/local/bin/下。
1
2cd prometheus-libvirt-exporter/
cp prometheus-libvirt-exporter /usr/local/bin/编辑service文件/etc/systemd/system/prometheus_libvirt_exporter.service。
1
2
3
4
5
6
7
8[Unit]
Description=Node Exporter
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/prometheus-libvirt-exporter
[Install]
WantedBy=multi-user.target启动服务。
1
2
3systemctl daemon-reload
systemctl enable --now prometheus_libvirt_exporter
systemctl status prometheus_libvirt_exporter监控节点上编辑Prometheus的配置文件。
1
2
3
4
5scrape_configs:
- job_name: 'libvirt_exporter'
scrape_interval: 5s
static_configs:
- targets: ['10.10.15.76:9000']重启Prometheus。
1
systemctl restart prometheus
安装Grafana
下载RPM包,使用yum命令安装grafana。
1
2wget https://dl.grafana.com/oss/release/grafana-9.5.10-1.x86_64.rpm
sudo yum install grafana-9.5.10-1.x86_64.rpm启动服务。
1
2systemctl enable --now grafana-server
systemctl status grafana-server
登录名是admin默认没有密码,第一次登录会提示修改密码。
对接Prometheus
登录到grafana的后台终端,也就是http://10.10.15.88:3000/后。
点击新建Data Source。
选择Data Source类型为Prometheus。
编辑好相应的信息后,点击保存。
新建dashboard。grafana中有现成的配置好的dashboard供开发人员使用,可以通过官网选择合适的dashboard。例如为libvirt-exporter新建dashboard可以选择官网上的这个项目。
(1) 点击Dashbord中Import按钮。(2) 填写上述项目的ID号码。点击Load按钮。
(3) 填好相关信息,选择Data Source为Prometheus。点击Imoport,这样就得到了一个可以展示云主机信息的dashboard。
(4) 查看dashboard。如果监控数据正确的话,能看到如下的画面。
自动伸缩测试
我们可以利用Prometheus和Grafana的告警系统连同openstack中的senlin组件实现集群的自动伸缩。
新建集群
创建senlin集群的方式有命令行和界面,这里提供界面创建的步骤,比较直观。
- 登录openstack dashborad后,点击cluster,首先新建一个Profile。Profile类似Heat资源编排文件,功能是指定创建集群中各个节点的基本信息(flavor、image等)。
上面的flavor、image和network都需要提前创建,另外指定flavor、image和network的UUID同样生效。
2.通过创建好profile创建集群。
新建的集群信息。
节点信息。
这样集群就新建好了,下面新建Receiver。
3.创建Receiver。Receiver的就是触发集群伸缩的触发器。一般有scale in(收缩)和scale out(扩张)两种动作。所以要使集群自动伸缩的话要创建2个Receiver,来控制集群的收缩和扩张。
负责scale in的Receiver。
负责scale out的Receiver。
查看这两个Receiver的详细信息。注意它们的属性中的alarm_url这项,可以通过POST方式访问这个URL来触发这个Receiver。
上面的alarm_url分别是:
Receiver | Alarm URL |
---|---|
mycluster_scale_in | http://10.10.15.89:8777/v1/webhooks/17ca2527-d47e-488c-94dc-7f6626767296/trigger?V=2&count=1 |
mycluster_scale_out | http://10.10.15.89:8777/v1/webhooks/02ae8621-f80b-4a11-9ace-eddc4fb161b0/trigger?V=2&count=1 |
新建Grafana告警
登录到Grafana后台,http://10.10.15.88:3000/。
1.打开grafana告警页面。
2.新建告警规则。
(1) 首先新建告警的通知方式,分别是scale out和scale in。
(2) 然后创建通知的策略。也同样是两个。与上面的通知方式一一对应。
(3) 最后确定告警的规则。需要配合Prometheus的语法。例如我们想新建一个规则规定当集群里的节点的CPU平均使用率达到70%时就触发告警。可以这么写。
A的规则是:
1 | irate(libvirt_domain_info_cpu_time_seconds_total{instanceId="28fa71ac-9ad7-4b02-a2c0-d27f157a80e2"}[30s]) * 100 |
B的规则是:
1 | irate(libvirt_domain_info_cpu_time_seconds_total{instanceId="78f38479-ca84-4236-a3e8-0088e32d9faf"}[30s]) * 100 |
28fa71ac-9ad7-4b02-a2c0-d27f157a80e2和78f38479-ca84-4236-a3e8-0088e32d9faf都是集群内云主机的ID。
C的规则判断A和B的平均值是否都大于70%,是的话就会触发报警。
(4) 最后编辑告警的基本信息和通知规则,这样一个监控告警就设置完成了。