Grafana 是一套开源的跨平台的可视化工具,可以将采集的数据进行可视化展示,并进行通知,展示方式多样,能够让我们随时掌控系统的运行情况。这里我们介绍如何使用 Grafana 来对 Ceph 集群进行性能和运行状态的监控。


Table of Contents

  1. 在 CentoS 7 下安装 Grafana
  2. 使用 Telegraf 和 InfluxDB 监控 Ceph
  3. 利用 Prometheus 监控 Ceph
    1. 在 CentoS 7 下安装 Prometheus
    2. 安装 Docker
    3. 构建 Ceph-exporter 镜像
    4. 将 Prometheus 数据添加到 Grafana
    5. 启用 Ceph 的 Prometheus 模块
    6. 导入 Ceph 集群的 Grafana Dashboards
  4. 参考

在 CentoS 7 下安装 Grafana

最简单的方法是通过 Grafana 的官方 Repo 来安装 Grafana。

  1. 添加 grafana repo
1
2
3
4
5
6
7
8
9
10
11
$ cat << EOF | sudo tee /etc/yum.repos.d/grafana.repo
[grafana]
name=grafana
baseurl=https://packagecloud.io/grafana/stable/el/7/
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packagecloud.io/gpg.key https://grafanarel.s3.amazonaws.com/RPM-GPG-KEY-grafana
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
EOF
  1. 安装 grafana
1
$ sudo yum install -y grafana
  1. 启动 Grafana:
1
$ sudo systemctl enable --now grafana-server
  1. 设置防火墙,打开 3000 端口:
1
2
$ sudo firewall-cmd --permanent --add-port=3000/tcp
$ sudo firewall-cmd --reload
  1. 在浏览器中访问 server-ip:3000 就可以看到 Grafana 界面了。默认用户和组都是 admin

Grafana 默认配置文件在 /etc/grafana/grafana.in, 数据库在 /var/lib/grafana/grafana.db, log 存储在 /var/log/grafana

使用 Telegraf 和 InfluxDB 监控 Ceph

to be updated…

利用 Prometheus 监控 Ceph

我们需要安装 Prometheus 和 ceph-exporter 来为 Grafana 提供 Ceph 的信息,

在 CentoS 7 下安装 Prometheus

  1. 创建一个 Prometheus 系统组和账户:
1
2
3
### uid, gid < 1000
$ sudo useradd -s /sbin/nologin -r -U prometheus
###
  1. 创建 Prometheus 数据和配置文件夹
1
2
$ sudo mkdir -p /etc/prometheus/{rules,rules.d}
$ sudo mkdir -p /var/lib/prometheus
  1. 下载最新的 Prometheus 二进制包进行安装(2。7.1)
1
2
3
4
5
6
7
8
9
$ VER=2.7.1
$ wget https://github.com/prometheus/prometheus/releases/download/v${VER}/prometheus-${VER}.linux-amd64.tar.gz
$ tar xf prometheus-${VER}.linux-amd64.tar.bz2 && cd prometheus-${VER}.linux-amd64
### binary
$ sudo cp prometheus promtool /usr/bin/
### configuration
$ sudo cp -r consoles console_libraries prometheus.yml /etc/prometheus
### permissions
$ sudo chown -R prometheus:prometheus /var/lib/prometheus /etc/prometheus/
  1. 创建 Prometheus 配置文件:
1
2
3
4
5
6
7
8
9
10
# Global config
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_timeout: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']

  1. 创建 systemd 服务单元 prometheus.service, 其中,Environment="GOMAXPROCS=2" 是服务器上的 vCPUs 数量:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[Unit]
Description=Prometheus
Documentation=https://prometheus.io/docs/introduction/overview/
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
Environment="GOMAXPROCS=2"
User=prometheus
Group=prometheus
ExecReload=/bin/kill -HUP $MAINPID
ExecStart=/usr/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 \
--web.listen-address=0.0.0.0:9090 \
--web.external-url=

SyslogIdentifier=prometheus
Restart=always

[Install]
WantedBy=multi-user.target
  1. 启动 Prometheus 服务:
1
2
3
$ sudo cp prometheus.service /usr/lib/systemd/system
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now prometheus
  1. 配置防火墙,打开相应的端口
1
2
3
4
5
### open to all ip
$ sudo firewall-cmd --permanent --add-port=9090/tcp
### open to subnets
$ sudo firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="192.168.60.0/24" port protocol="tcp" port="9090" accept'
$ sudo firewall-cmd --reload

安装 Docker

在用作 Docker 服务器上安装 Docker:

  1. 移除之前安装的 Docker:
1
$ sudo yum remove -y docker docker-common docker-selinux docker-engine
  1. 安装依赖包
1
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  1. 添加 Docker 源:
1
$ sudo wget https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker.repo
  1. 安装 Docker CE:
1
$ sudo yum install docker-ce
  1. 启动 Docker 服务:
1
$ sudo systemctl enable --now docker

构建 Ceph-exporter 镜像

  1. 从 Github clone ceph-exporter
1
$ git clone https://github.com/digitalocean/ceph_exporter
  1. 构建 ceph-exporter 镜像:
1
$ docker build . -t ceph-exporter
  1. 启动一个 Docker 容器运行 Ceph-exporter:
1
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
28
29
30
31
32
33
34
35
36
37
38
### 1. docker run:
$ docker run --name ceph-exporter -v /etc/ceph:/etc/ceph --net host -p 9128:9128 --restart unless-stopped -dit digitalocean/ceph-exporter
### 2. docker-compose:
$ cat << EOF >> docker-compose.yml
# Example usage of exporter in use
version: '2'
services:
ceph-exporter:
image: ceph_exporter
restart: unless-stopped
network_mode: "host"
volumes:
- /etc/ceph:/etc/ceph
ports:
- '9128:9128'
EOF
$ docker-compose up -d
### 3. systemd:
$ cat << EOF | sudo tee /usr/lib/systemd/system/ceph-exporter.service
[Service]
Restart=always
TimeoutStartSec=0
ExecStartPre=-/usr/bin/docker kill ceph_exporter
ExecStartPre=-/usr/bin/docker rm ceph_exporter

ExecStart=/usr/bin/docker run \
--name ceph_exporter \
-v /etc/ceph:/etc/ceph \
--net host \
-p 9128:9128 \
ceph_exporter

ExecStop=-/usr/bin/docker kill ceph_exporter
ExecStop=-/usr/bin/docker rm ceph_exporter
EOF
$ sudo systemctl daemon-reload
$ sudo systemctl enable ceph-exporter
$ sudo systemctl status ceph-exporter
  1. 设置防火墙,打开 9128 端口:
1
2
3
$ sudo firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" \
source address="192.168.60.0/24" port protocol="tcp" port="9128" accept'
$ sudo firewall-cmd --reload
  1. Grafana 配置文件中加入 ceph-exporter 部分,修改 ceph-exporter-ip 为真实的 IP.IP,并重启 Grafana 服务。
1
2
3
4
5
6
7
8
9
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ['localhost:9090']
- job_name: 'ceph-exporter'
static_configs:
- targets: ['ceph-exporter-ip:9128']
labels:
alias: ceph-exporter

将 Prometheus 数据添加到 Grafana

安装配置好上面的之后,我们需要在 Grafana 中添加 Prometheus 数据源。登陆到 Grafana Web 服务器,在设置中,添加数据源,选择 Prometheus:

添加数据源,需要提供的是:

  • Name: 数据源名
  • URL: 数据源地址
  • Access: Server(Proxy) or Browser(Direct)

添加界面如下:

填好后,点击 Save and Test 按钮即可。

启用 Ceph 的 Prometheus 模块

在 Ceph 中启用 mgr 的 promtheus 监控模块:

1
$ ceph mgr module enable prometheus

导入 Ceph 集群的 Grafana Dashboards

Grafana 官网上有一些已经写好的 Dashboards, 我们可以从上面导入一些设计比较好的。 Dashboard 是 json 文件,我们也可以自己修改设计 Ceph 的 Dashboard。Ceph 本身也有一些 Dashboards, 可以作为参考。在 Grafana Web 界面左侧的工具栏选择 + -> Import,导入界面大致如下:

有三种方法可以导入 Dashboard:

  • 填写 Dashboard 在 Grafana.com Dashboard 中的 url 或 id
  • 上传 JSON 文件
  • 直接粘贴 JSON 内容

导入合适的 Dashboard 后,就可以在 Dashboards 界面选择查看导入的 Dashboards 了。

PS: ceph-exporter 中提供了 docker-compose.yml,包含了 Prometheus、Grafana 和 ceph-exporter, 我们可以使用 docker-compose 一起运行这三个服务。

参考

  1. Grafana Ceph - Cluster 7056
  2. Grafana Ceph - Cluster 2842
  3. Grafana Ceph - Cluster 917
  4. Grafana Ceph - Cluster 923
  5. Grafana Ceph - Cluster 926
  6. Monitoring Ceph Cluster with Prometheus and Grafana
  7. Prometheus plugin
  8. Ceph Monitoring
  9. Install Prometheus Server on CentOS 7 and Ubuntu 18.04
  10. Monitoring Ceph Cluster with Prometheus and Grafana