从零开始构建云平台监控(四)图形化展示监控效果

组件安装和配置

zabbix本功能非常强大,自定义监控项,自动发现、自动注册等,但zabbix-server获取的zabbix数据看起来不是特别直观。

grafana的出现正好弥补了zabbix绘图能力上的不足,grafana是基于js开发的图形编辑器。
telegraf
telegraf是一个go语言编写的收集监控项的agentTelegraf内存占用小的特点,通过插件来实现不同的监控需求,这里我使用ceph插件。

influxdb
InfluxDB 是一个开源分布式时序|、事件和指标数据库。使用 Go 语言编写,无需外部依赖。其设计目标是实现分布式和水平伸缩扩展。
它有三大特性:

  1. Time Series (时间序列):你可以使用与时间有关的相关函数(如最大,最小,求和等)
  2. Metrics(度量):你可以实时对大量数据进行计算
  3. Eevents(事件):它支持任意的事件数据
    特点
    schemaless(无结构),可以是任意数量的列
    Scalable
    min, max, sum, count, mean, median 一系列函数,方便统计
    Native HTTP API, 内置http支持,使用http读写
    Powerful Query Language 类似sql
    Built-in Explorer 自带管理工具

通过grafana调用zabbix的接口的实现,通过自定义模板和key去拉去数据,在grafana上进行展示,grafana只做统一的监控展示平台ceph的一些监控数据由telegraf收集存到influxdb,grafana去读取。

为什么选择telegraf而不直接通过zabbix写item获取这些数据?
1,telegraf是一个go语言写的小程序,占用资源非常小,并且本身有监控ceph的插件
2,telegraf监控ceph的插件,监控的数据非常全,osd数mon数,细致点,journal盘的速率、pgmap的数率,cluster的iops、pool池的使用趋势等等,如果用zabbix的话我们想获取这些数据要写非常多的item。

monitor-server端操作

安装influxdb
influxdb的安装
配置yum源

1
2
3
4
5
6
7
8
9
cat <<EOF | sudo tee /etc/yum.repos.d/influxdb.repo
[influxdb]
name = InfluxDB Repository - RHEL \$releasever
baseurl = https://repos.influxdata.com/rhel/\$releasever/\$basearch/stable
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdb.key
EOF

yum install influxdb
systemctl enable influxdb
systemctl restart influxdb

默认influxdb的web管理界面是关闭的开启方法
vim /etc/influxdb/influxdb.conf

1
2
3
[admin]
enabled = true
bind-address = ":8083"

重启influxdb
浏览器服务http://ip:8083

在ceph-mon节点上安装telegraf

telegraf通过读取ceph的asok文件获取里面的信息来达到监控目的。

1
wget https://dl.influxdata.com/telegraf/releases/telegraf-1.2.1.x86_64.rpm

yum localinstall telegraf-1.2.1.x86_64.rpm

修改telegraf的启动用户,不然会读取ceph asok文件权限不足
vim /lib/systemd/system/telegraf.service
将User=telegraf改为User=root
systemctl daemon-reload
systemctl restart telegraf
systemctl enable telegraf

配置telegraf
vim /etc/telegraf/telegraf.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[log]
logfile = "/var/log/telegraf/telegraf.log"
[[outputs.influxdb]]
urls = ["http://10.10.1.100:8086"] # required #填写对应的influxdb的地址
[[inputs.ceph]]
interval = '1m'
ceph_binary = "/usr/bin/ceph"
socket_dir = "/var/run/ceph"
mon_prefix = "ceph-mon"
osd_prefix = "ceph-osd"
ceph_user = "client.admin"
ceph_config = "/etc/ceph/ceph.conf"
gather_admin_socket_stats = true
gather_cluster_stats = true

另外3个控制节点同步配置
重启telegraf
测试数据是否拿到

1
telegraf -test -config /etc/telegraf/telegraf.conf -config-directory /etc/telegraf/telegraf.d -input-filter ceph


在monitor-server的influxdb上可以看见创建好的库

进入influxdb
influxd
列出全部库
show databases;
进入指定的库
use telegraf
列出库中全部表
show measurements;
查询表
select * from ceph;

默认influxdb的数据存储时间为168小时也就是7天如果要修改方法为

1
2
3
4
5
6
create retention policy "rp_name" on "db_name" duration 3w replication 1 default
rp_name:策略名
db_name:具体的数据库名
3w:保存3周,3周之前的数据将被删除,influxdb具有各种事件参数,比如:h(小时),d(天),w(星期)
replication 1:副本个数,一般为1就可以了
default:设置为默认策略

对已有的策略修改

1
alter retention policy "rp_name" on "db_name" duration 30d default  

删除已有策略

1
2
drop retention policy "rp_name"  

安装grafana
配置安装grafana
下载软件包

1
wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-4.1.2-1486989747.x86_64.rpm

安装软件

1
yum localinstall /root/grafana-4.1.2-1486989747.x86_64.rpm

启动grafana
systemctl start grafana-server
查看端口
lsof -i:3000

安装pie chart插件

ceph这一块用饼图描述比较直观点,需要安装grafana Pie Chart插件

grafana-cli plugins install grafana-piechart-panel

在线安装方式
grafana-cli plugins install grafana-piechart-panel

离线安装方式
将下载好的plugins解压到
/var/lib/grafana/plugins
grafana-cli plugins install grafana-piechart-pane

重启grafana
systemctl restart grafana-server
登录grafana
http://localhost:3000
默认帐号密码为admin/admin
将插件激活

enable zabbix

右侧可以看见已经安装的插件

添加Datasource
选zabbix

url输入
http://192.168.122.100/zabbix/api_jsonrpc.php

测试api连接

然后就可以在dashboard里面看见两个新模板了

将Template Linux Server删除

查看zabbix-server模板

添加influxdb DataSource

创建以下dashboard

创建好后,我们从一个个dashboard里面添加模块

openstack物理节点性能监控

配置template

因为这是一个集群,有很多台机器,每台机器所对应的角色是不一样的,比如node-1到node-3是控制节点node-4到node6是存储节点 node-7到node-10是计算节点,不同角色的监控项也有略微不同。但我们想在一个dashboard展示多台机器的监控值

所以我们需要定义Templating

定义group的templating

然后在zabbix里面定义的group就出来了

selection options host可以选多个,然后在一个图上绘出,我建议,这里还是一一对应的显示吧
定义host的templating

匹配完的显示

创建row

row是一组panel的集合


这里面的uptime、memeory free、free disk space on / 、system load(1min)这些panel就是属于主机情况这个row的。
以创建主机情况row为例
dashboard下面有一个add row的按钮

编辑row

编辑名称显示名字

按照上述方法创建另外3个row,资源使用情况,网卡信息,
然后ctrl+s保存这个dashboard的改变。
创建panel
将panel创建到对应的row中
创建uptime时间panel
点击创建panel


类型为Singlestat panel
general配置 标题大小

metrics配置数据来源

配置字体颜色

ctrl+s保存,uptime 的panel就完成了。

定义memory free panel

在主机情况row创建Singlestat类型的panel

options定义背景色,和定义值范围,根据值的不同范围,背景色会自动调整

这里需要注意下Thresholds这个参数,这个参数定义值的范围,然后granafa会根据这个范围自动调整颜色,如7,9如果值小于7则显示红色,在79之间则显示橙色,大于9则显示绿色,但这个值不支持单位换算后的值,所以这也是为什么我这里是10737418240,21474836480,是10,20 G内存空闲小于10G变红色,10G20G之间橙色,大于20G绿色。

ctrl+s保存

定义根分区剩余空间panel

在主机情况row创建Singlestat类型的panel

配置metrics

options定义背景色,和定义值范围,根据值的不同范围,背景色会自动调整

这里也是定义小于10G时背景色变红,10G~20G范围内为橙色,大于20G为绿色。
ctrl+s保存
定义cpu负载panel
不过这里首先需要修改我们zabbix的 item,zabbix item里面定义的 per cpu而不是all cpu,所以得出来的值会比操作系统里面直接uptime看起来小 ,需要修改zabbix 里面Template OpenStack Compute、和Template OpenStack Controller里面,找到这三个健值修改成all

测试
zabbix_agentd -t “system.cpu.load[all,avg1]”

在主机情况row创建Singlestat类型的panel
这里我选择15分钟负载情况



ctrl+s保存

定义cpu空闲率panel

在资源使用情况row创建Graph类型的panel

单位为percent

保存
ctrl+s

定义CPU时间片使用情况

在资源使用情况rom创建Table panel
Genterl配置panel 名字

配置Metrics

配置Options

ctrl+s保存

定义可用内存panel

在资源使用情况rom创建Graph panel


定义网桥流量监控panel

这里需要注意,我们直接对ovs桥进行监控,因为通过ovs桥我们可以确认这部分流量的用途,直接通过物理网卡的话不直观,所以这里需要在zabbix里面将对应的item加上。

这里将Incoming和Outcoming拆分了开来用两张图显示,并且只监控traffic流量。
在网卡信息row创建Graph panel
先配置Incoming_Network_traffic

注意item为"/Incoming network traffic on br-.*/"

在配置Outcoming_Network_traffic

item写这个

/Outgoing network traffic on br-.*/

ctrl+s

最终效果

添服务状态dashboard,

这里我拆分为3个dashboard,分别是OpenStack控制节点服务状态、OpenStack计算节点服务状态、OpenStack储存节点服务状态

每个dashboard设置不同的Templating以OpenStack控制节点服务状态为例,后面都一样
创建group,指定为controller这样就不会选别的了,计算节点就指定为computer、储存节点就指定为ceph

创建host

ctrl+s保存

OpenStack控制节点服务状态

定义nova-api panel


配置 value mapping,因为默认抓取的值为数字我们需要将数字映射为更好看的值,比如大于1映射为running,其他映射为down,这里测试发现down后值经常为0.0x所以这里设置映射为值的范围,比如0~0.9为down,1为up

效果如下

我把nova-api关掉

其他控制节点和计算节点监控项目可以直接duplicate了,只需要修改下panel和metrics
控制节点需要显示的panel

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
nova-api
nova-scheduler
nova-conductor
Neutron-server
Neutron-l3-agent
Neutron-ovs-agent
Neutron-metadata
Neutron-DHCP
Glance-api
Glance-Registry
Keystone
Rabbitmq_cluster
Rabbitmq_liste_port
Rabbitmq_BEAM_process
Rabbitmq_EPMD_listen_port
Rabbitmq_EPMD_process
Mysql_cluster
Cinder_api
Cinder_scheduler
Cinder_volumer
Ceilometer_process
Ceilometer_API

计算节点需要显示的panel

1
2
3
4
openstack-compute
libvirtd
openvswitch-agent
ceilometer-agent-compute

zabbix-altert dashboard

alter-dashboard主要显示整个集群的问题

创件panel,类型为zabbix-Triggers

添加后,它自动会将zabbix的Triggers同步过来

ceph dashboard

创建template

这里需要注意把group中固定住控制节点

host配置

添加ceph健康状态监控panel

在状态row中创建 Singlestat panel

添加ceph mon总数监控panel

在状态row中创建一个singlestat的panel,General修改名字,metrics配置数据源

添加ceph mon up数panel

在状态row中创建一个singlestat的panel,General修改名字,metrics配置数据源

thresholds要根据实际集群mon数写,ceph-mon不能挂掉总个数的一半,3个mon只能挂1个,所以这里写2,3小于2时就变红。

添加ceph osd总数监控panel

在状态row中创建一个singlestat的panel,General修改名字,metrics配置数据源

添加ceph osd up数监控panel

在状态row中创建一个singlestat的panel,General修改名字,metrics配置数据源

添加ceph总容量panel

在容量row中创建一个singlestat的panel,General修改名字,metrics配置数据源

注意单位

添加ceph剩余容量panel

在容量row中创建一个singlestat的panel,General修改名字,metrics配置数据源

添加ceph已用容量panel

在容量row中创建一个singlestat的panel,General修改名字,metrics配置数据源

注意单位

添加ceph容量使用率(饼图)panel

在容量row中创建一个 Pie Chart 的panel,General修改名字,metrics配置数据源
已经使用和剩余可用百分比
利用饼图展示已用空间占总空间的比例
新建个panel,类型选择pie chart
general设置名字

添加pool容量使用率(已compute pool为例)panel

在容量row中创建一个 Pie Chart 的panel,General修改名字,metrics配置数据源

option这里根刚才一样

另外几个pool根这个一样,需要注意的是 where name里面的pool name要更改。

添加pool池的使用趋势图(以compute pool为例)panel

在pool池中的使用情况row中创建Graph panel

显示30天的数据
剩下pool的使用情况图根上面有一,只需要修改metrics里面的pool名就可以了

添加性能panel

在性能row中创将graph panel

注意这里的datasource是 zabbix

单位选择IOPS

添加ceph pg read rate panel

在性能row中创将graph panel

单位为bites

显示一天的

添加ceph pg write rate panel

在性能row中创将graph panel

最终效果