Grafana supports automatic rendering of panels as PNG images. This allows Grafana to automatically generate images of your panels to include in alert notifications.
Grafana支持将面板自动呈现为PNG图像。这允许Grafana自动生成面板的图像,以便将其包含在警报通知中。
While an image is being rendered, the PNG image is temporarily written to the file system. When the image is rendered, the PNG image is temporarily written to the png folder in the Grafana data folder.
A background job runs every 10 minutes and removes temporary images. You can configure how long an image should be stored before being removed by configuring the temp-data-lifetime setting.
You can also render a PNG by clicking the dropdown arrow next to a panel title, then clicking Share > Direct link rendered image.
在呈现图像时,PNG图像被临时写入文件系统。当图像呈现时,PNG图像被临时写入Grafana数据文件夹中的PNG文件夹。
后台作业每10分钟运行一次,并删除临时图像。您可以通过配置临时数据生存期设置来配置图像在删除之前应该存储多长时间。
可以通过单击面板标题旁边的下拉箭头,然后单击Share>Directlink呈现图像来呈现PNG。
警告通知设置 另外再说。假设此处已设置了邮件警告通知,且通知中包含图片。此处学习设置image render。
使用kolla部署openstack时 选择安装 collectd,influxdb,grafana作为监控软件。
已经通过通过kolla 安装了grafana的docker 容器。
[root@ALLInOne-Kolla ~]# docker ps -a | grep grafana
02029735d235 kolla/centos-binary-grafana:train "dumb-init --single-…" 2 months ago Up 19 minutes grafana
警告规则设置。
如果未设置image render,渲染图片。那么设置警告通知中包含图片,所展示的图片是一个提示。
或者不设置警告,只是点击一个panel,希望share该panel 时。
如果希望获取该panel的 image。也需要安装 image render。
grafana image render 安装。
https://grafana.com/grafana/plugins/grafana-image-renderer/
https://grafana.com/docs/grafana/latest/administration/image_rendering/
尝试使用两种方式设置 imager render
image render并不是截图工具,将Panel的图片截下来,而是根据数据库中数据,警告渲染生成一个image,所以有时区,语言等方面的问题。
一、grafana内安装grafana-image-renderer插件。
grafana是docker容器或者直接在宿主机上安装的软件,在安装grafana-image-renderer插件的操作基本一致,只是容器时需要先进入docker容器才能再进行操作。
1.使用root用户进入grafana容器
因为grafana容器不只需要安装插件grafana-image-renderer,还需要安装相关的依赖包。只有root权限才能再都容器内使用yum命令安装依赖。
docker exec -it -u root grafana bash
开始安装插件。
grafana-cli plugins install grafana-image-renderer
查看当前插件
grafana-cli plugins ls
(grafana)[root@ALLInOne-Kolla grafana]# grafana-cli plugins ls
installed plugins:
gnocchixyz-gnocchi-datasource @ 1.7.0
grafana-image-renderer @ 2.0.1
grafana-influxdb-08-datasource @ 1.0.2
Restart grafana after installing plugins . <service grafana-server restart>
grafana-image-renderer 插件已经安装完成。
安装完成重启grafana,在容器内操作,只重启grafana服务好像是无用的,还需要退出容器后重启容器才能使安装的插件生效。
olugin和render server需要使用chrome浏览器,chrom依赖于某些库。如果系统中没有安装所有这些库,则在试图呈现图像时可能会遇到错误。查看chrom依赖库。
ldd chrome-linux/chrome
ldd /var/lib/grafana/plugins/grafana-image-renderer/chrome-linux/chrome
(grafana)[root@ALLInOne-Kolla grafana]# ldd /var/lib/grafana/plugins/grafana-image-renderer/chrome-linux/chrome
linux-vdso.so.1 => (0x00007ffdf1dfd000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f047f598000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f047f37c000)
librt.so.1 => /lib64/librt.so.1 (0x00007f047f174000)
libX11.so.6 => /lib64/libX11.so.6 (0x00007f047ee36000)
libX11-xcb.so.1 => /lib64/libX11-xcb.so.1 (0x00007f047ec34000)
libxcb.so.1 => /lib64/libxcb.so.1 (0x00007f047ea0c000)
libXcomposite.so.1 => not found
libXcursor.so.1 => /lib64/libXcursor.so.1 (0x00007f047e801000)
libXdamage.so.1 => not found
libXext.so.6 => /lib64/libXext.so.6 (0x00007f047e5ef000)
libXfixes.so.3 => /lib64/libXfixes.so.3 (0x00007f047e3e9000)
libXi.so.6 => /lib64/libXi.so.6 (0x00007f047e1d9000)
libXrender.so.1 => /lib64/libXrender.so.1 (0x00007f047dfce000)
libXtst.so.6 => not found
libgobject-2.0.so.0 => /lib64/libgobject-2.0.so.0 (0x00007f047dd7d000)
libglib-2.0.so.0 => /lib64/libglib-2.0.so.0 (0x00007f047da67000)
libnss3.so => /lib64/libnss3.so (0x00007f047d733000)
libnssutil3.so => /lib64/libnssutil3.so (0x00007f047d503000)
libsmime3.so => /lib64/libsmime3.so (0x00007f047d2db000)
libnspr4.so => /lib64/libnspr4.so (0x00007f047d09d000)
libcups.so.2 => not found
libdbus-1.so.3 => /lib64/libdbus-1.so.3 (0x00007f047ce4d000)
libXss.so.1 => not found
libgio-2.0.so.0 => /lib64/libgio-2.0.so.0 (0x00007f047caad000)
libexpat.so.1 => /lib64/libexpat.so.1 (0x00007f047c883000)
libXrandr.so.2 => /lib64/libXrandr.so.2 (0x00007f047c678000)
libasound.so.2 => not found
libm.so.6 => /lib64/libm.so.6 (0x00007f047c376000)
libatk-1.0.so.0 => not found
libatk-bridge-2.0.so.0 => not found
libpangocairo-1.0.so.0 => not found
libpango-1.0.so.0 => not found
libcairo.so.2 => not found
libatspi.so.0 => not found
libgtk-3.so.0 => not found
libgdk-3.so.0 => not found
libgdk_pixbuf-2.0.so.0 => not found
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f047c160000)
libc.so.6 => /lib64/libc.so.6 (0x00007f047bd92000)
/lib64/ld-linux-x86-64.so.2 (0x00007f04897df000)
libXau.so.6 => /lib64/libXau.so.6 (0x00007f047bb8e000)
libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f047b92c000)
libffi.so.6 => /lib64/libffi.so.6 (0x00007f047b724000)
libplc4.so => /lib64/libplc4.so (0x00007f047b51f000)
libplds4.so => /lib64/libplds4.so (0x00007f047b31b000)
libsystemd.so.0 => /lib64/libsystemd.so.0 (0x00007f047b0ea000)
libgmodule-2.0.so.0 => /lib64/libgmodule-2.0.so.0 (0x00007f047aee6000)
libz.so.1 => /lib64/libz.so.1 (0x00007f047acd0000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f047aaa9000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f047a88f000)
libmount.so.1 => /lib64/libmount.so.1 (0x00007f047a64c000)
libcap.so.2 => /lib64/libcap.so.2 (0x00007f047a447000)
liblzma.so.5 => /lib64/liblzma.so.5 (0x00007f047a221000)
liblz4.so.1 => /lib64/liblz4.so.1 (0x00007f047a012000)
libgcrypt.so.11 => /lib64/libgcrypt.so.11 (0x00007f0479d91000)
libgpg-error.so.0 => /lib64/libgpg-error.so.0 (0x00007f0479b8c000)
libdw.so.1 => /lib64/libdw.so.1 (0x00007f047993b000)
libblkid.so.1 => /lib64/libblkid.so.1 (0x00007f04796fb000)
libuuid.so.1 => /lib64/libuuid.so.1 (0x00007f04794f6000)
libattr.so.1 => /lib64/libattr.so.1 (0x00007f04792f1000)
libelf.so.1 => /lib64/libelf.so.1 (0x00007f04790d9000)
libbz2.so.1 => /lib64/libbz2.so.1 (0x00007f0478ec9000)
(grafana)[root@ALLInOne-Kolla grafana]#
可以看到有不少依赖库是not found的状态,需要安装这些库。
yum --disablerepo=elasticsearch-kibana-logstash-5.x -y install libXcomposite libXdamage libXtst cups libXScrnSaver pango atk adwaita-cursor-theme adwaita-icon-theme at at-spi2-atk at-spi2-core cairo-gobject colord-libs dconf desktop-file-utils ed emacs-filesystem gdk-pixbuf2 glib-networking gnutls gsettings-desktop-schemas gtk-update-icon-cache gtk3 hicolor-icon-theme jasper-libs json-glib libappindicator-gtk3 libdbusmenu libdbusmenu-gtk3 libepoxy liberation-fonts liberation-narrow-fonts liberation-sans-fonts liberation-serif-fonts libgusb libindicator-gtk3 libmodman libproxy libsoup libwayland-cursor libwayland-egl libxkbcommon m4 mailx nettle patch psmisc redhat-lsb-core redhat-lsb-submod-security rest spax time trousers xdg-utils xkeyboard-config alsa-lib
有一些依然漏掉的库可以通过该网站查询安装方法。
https://pkgs.org/
安装完成,重启grafana server
service grafana-server restart
退出grafana 容器,重启该容器
docker restart grafana
(grafana)[root@ALLInOne-Kolla grafana]# service grafana-server restart
Starting Grafana Server: ... [ OK ]
(grafana)[root@ALLInOne-Kolla grafana]# exit
exit
[root@ALLInOne-Kolla ~]# docker restart grafana
grafana
[root@ALLInOne-Kolla ~]#
刷新grafana的dashboard,再次选择分享一个panel。
可以点击 Direct link rendered image 生成图片
可以看到生成的image 不支持中文(中文乱码)。时间显示是当前浏览器的时区。
邮件警告通知包含的image
不止中文乱码,且时间显示时区不正确(UTC时区)。尝试修改配置文件grafana.ini
设置插件grafana-image-renderer设置时区 和 语言,然后grafana重新加载配置
vim /etc/kolla/config/grafana.ini
[plugin.grafana-image-renderer]
rendering_timezone = Asia/Shanghai
rendering_language = zh-CN,zh;q=0.9
kolla-ansible reconfigure -i /etc/kolla/all-in-one
加载完成,邮件警告通知包含的图片中时区是正常的了,但是中文依然乱码(也不算乱码,就是口口口口),所以不推荐使用该方法,推荐使用第二种方法设置。
二、用docker安装rendering image容器。 建议使用此方法。
使用rendering image容器作为grafana的远程图片渲染工具。该镜像是专门为grafana render image做的,所以无需像grafana容器那样安装依赖即可渲染图片。
只用在启动容器前 进行一些环境变量配置即可设置生成图片显示的时区,以及语言。
由于上一步在grafana容器内已经安装了grafana-image-renderer插件,为了避免互相影响,从grafana还未安装插件grafana-image-renderer开始重新设置。
docker 拉取grafana-image-renderer镜像。默认latest版本就可以。
docker pull grafana/grafana-image-renderer
运行grafana-image-renderer容器。名称name,网络选择host以便端口可直接使用主机IP访问,自动重启,附加环境变量时区上海。
docker run -d --name=render --network=host --restart=always -e BROWSER_TZ=Asia/Shanghai grafana/grafana-image-renderer
[root@ALLInOne-Kolla ~]# docker pull grafana/grafana-image-renderer
Using default tag: latest
latest: Pulling from grafana/grafana-image-renderer
0a6724ff3fcd: Pull complete
5fd2bdfdbf4b: Pull complete
80b224d472a8: Pull complete
e21405c347ae: Pull complete
54b5dc5a6e2d: Pull complete
ed875b31509d: Pull complete
794abc5177d6: Pull complete
83e2f49255cd: Pull complete
83c6d22038ed: Pull complete
7062252578a3: Pull complete
Digest: sha256:d0c6271cb7f4f7588e1cfda31756e31bd39d5e5bd0e0c7453716e97f16af3126
Status: Downloaded newer image for grafana/grafana-image-renderer:latest
docker.io/grafana/grafana-image-renderer:latest
[root@ALLInOne-Kolla ~]# docker image list | grep grafana
kolla/centos-binary-grafana train 467b3ea66e83 2 months ago 649MB
grafana/grafana-image-renderer latest 045b9f5b7039 2 months ago 627MB
[root@ALLInOne-Kolla ~]# docker run -d --name=render --network=host --restart=always -e BROWSER_TZ=Asia/Shanghai grafana/grafana-image-renderer
5585dcae594d38dc94dd6b7e47f0e076b1ac9661d962110435b47ab9dbb3bcb7
[root@ALLInOne-Kolla ~]# docker ps -a | grep render
5585dcae594d grafana/grafana-image-renderer "dumb-init -- node b…" 9 seconds ago Up 8 seconds render
[root@ALLInOne-Kolla ~]#
可设置的参数有很多,比如host port timezone之类
https://github.com/grafana/grafana-image-renderer/blob/master/docs/remote_rendering_using_docker.md
安装完成可访问 192.168.199.90:8081
如上表示容器成功运行。
编辑grafana配置文件,设置render使用Remote rendering service。
vim /etc/kolla/config/grafana.ini
设置render。
[rendering]
server_url = http://192.168.199.90:8081/render
callback_url = http://192.168.199.90:3000/
server_url 是Remote rendering service 的地址,
callback_url 是本grafana的地址。
加载新配置。
kolla-ansible reconfigure -i /etc/kolla/all-in-one
使用Remote rendering service获取到的图片,可以正常显示中文和选择的时区。不过,该容器所在的宿主机内存 需要大一点,因为渲染图片可能占用不少内存,如果内存不足,偶尔图片会渲染失败。导致发出的警告通知中不包含图片(其实后果也不算严重,警告通知依然发出去了,只是没图片,依然可以点进直接进入grafana的dashboard操作)
{"url":"/render?deviceScaleFactor=1.000000&domain=192.168.199.90&encoding=&height=500&renderKey=i2aH9ocrfNAwLyT59Im1cf3lyeTBbcso&timeout=15&timezone=&url=http%3A%2F%2F192.168.199.90%3A3000%2Fd-solo%2FKzZOgaYGk%2Fcollectd-libvirtd-dashboard-with-alert-panel%3ForgId%3D1%26panelId%3D29%26render%3D1&width=1000","stack":"TimeoutError: waiting for function failed: timeout 15000ms exceeded\n at new WaitTask (/usr/src/app/node_modules/puppeteer/lib/DOMWorld.js:549:28)\n at DOMWorld.waitForFunction (/usr/src/app/node_modules/puppeteer/lib/DOMWorld.js:454:12)\n at Frame.waitForFunction (/usr/src/app/node_modules/puppeteer/lib/FrameManager.js:657:28)\n at Page.waitForFunction (/usr/src/app/node_modules/puppeteer/lib/Page.js:1144:29)\n at Browser.<anonymous> (/usr/src/app/build/browser/browser.js:174:24)\n at Generator.next (<anonymous>)\n at fulfilled (/usr/src/app/build/browser/browser.js:5:58)\n at runMicrotasks (<anonymous>)\n at processTicksAndRejections (internal/process/task_queues.js:97:5)","level":"error","message":"Request failed"}
可以点击 Direct link rendered image 生成图片。
警告通知中包含图片。
中文正常显示,时区也正常。
三、设置external_image_storage
经过以上设置,在邮件警告通知设置中包含image,已经可以将当前panel的图片展示在邮件中了,但对于一些其他的警告通知方式,如dingding,webhook等,需要设置external storage才能在通知中包含图片。
external_image_storage 会长久保存 生成的image 图片。
https://www.bookstack.cn/read/grafana-v6.2/76cfcba775b0ea24.md
不设置external_image_storage时,邮件警告通知包含的图片是一个完全的图片附件,设置后图片变为一个指向external_image_storage中图片地址的链接。如果本机无法访问external_image_storage 图片是无法显示的。
所以。特别的,设置为local时邮件警告通知图片却有可能出错
https://github.com/grafana/grafana/commit/2743e8be20cc36d48370f78df140a42ff209cb60
To enable email notifications you have to setup [SMTP settings](/installation/configuration/#smtp)
in the Grafana config. Email notifications will upload an image of the alert graph to an
external image destination if available or fallback to attaching the image to the email.
Be aware that if you use the `local` image storage email servers and clients might not be
able to access the image.
要启用电子邮件通知,您必须在Grafana配置中设置[SMTP设置](/Installation/Configuration/#SMTP)。如果可用,电子邮件通知将将警报图的图像上载到外部图像目的地,或者将图像附加到电子邮件。请注意,如果您使用“local”映像存储,则电子邮件服务器和客户端可能无法访问该映像。
external_image_storage可设置的provider包括(s3, webdav, gcs, azure_blob, local),测试设置 s3 和 local。
1.设置provider 为 local
vim /etc/kolla/config/grafana.ini
[external_image_storage]
provider = local
当external_image_storage的provider参数设置为local是,不用为local进行其它额外设置。
相当于把本机当作一个服务器,可以通过本机IP访问到存储在本地的图片。
所以当provider设置为local时,需要保证grafana所在主机是公网IP,如此才能保证各个地方都可访问到该图片。
kolla-ansible reconfigure -i /etc/kolla/all-in-one
如果grafana不能通过公网IP访问,而是使用局域网IP(比如192.168.199.90),并且设置了provider = local。
那么通过钉钉机器人发送的警告通知中显示的图片就是一个感叹号,因为钉钉无法通过图片链接访问到该图片。
未设置[external_image_storage]时,钉钉告警通知中不包含图片。
设置[external_image_storage] provider为local,但是grafana宿主机不可使用公网IP访问时,告警通知中图片无法访问,是一个感叹号。
grafana宿主机有公网IP,且可通过该IP访问grafana时,可正常显示图片。
这里使用XX云安装一个grafana测试一下
当provider设置为local时,邮件告警通知特殊一点,当打开邮件的的电脑是grafana所在宿主机时,邮件中图片是可以显示的(因为可以通过图片链接访问到图片)。。。但是其他情况下,图片也无法显示,因为图片是一个指向grafana主机图片的链接,而不是未设置provider = local时的附件。
对比一下不同情况下邮件图片的地址。
# 未设置[external_image_storage]
http://mail.163.com/js6/s?func=mbox:getMessageData&mid=69:1tbiRRpt3Fl914n7-wAAsQ&part=2
# 使用网易的163邮件,因为图片是附件的关系,图片打开的链接是163网址的。
# 设置[external_image_storage] 且 provider设置为local
http://192.168.199.90:3000/public/img/attachments/N0olgl64V08DbIGKZqRh.png
# 图片不是一个附件,而是直接指向grafana宿主机的图片链接,当链接不可达时,也会是一个感叹号。
# 明显192.168.199.90 是一个局域网IP。不在该局域网下的主机都是无法访问到该图片的。。。
### 使用XX云时显示了正确图片,因为grafana使用了公网IP
2.设置provider为s3
上面设置provider 为local的情况,需要保证grafana可通过公网IP访问,才能正常显示图片。
如果设置为其它外部存储,同样需要需要保证这些外部存储有一个公网IP地址,通过该IP可访问到这些外部存储。
例如设置 s3 存储。。。没有s3,但是可以使用ceph代替,效果一样。设置provider为s3 时,需要设置一些s3 的参数。
部署一个ceph集群,安装rgw 代替s3。
http://docs.ceph.org.cn/install/install-ceph-gateway/
http://docs.ceph.org.cn/radosgw/config/#s3-radosgw
ceph-1 ceph-2 两个节点构成的ceph集群。。。测试使用
配置文件
[global]
fsid = 00bd9244-d2c8-4541-95e3-0d53c214c7bb
mon_initial_members = ceph-1
mon_host = 192.168.199.91
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd_pool_default_size = 2
public_network = 192.168.199.0/24
cluster_network = 192.168.100.0/24
1.在部署节点工作目录下,给 Ceph 对象网关节点安装Ceph对象所需的软件包。
ceph-deploy install --rgw ceph-1 ceph-2
2.新建网关实例 在 ceph-1 节点创建对象网关 RGW 例程默认会监听 7480 端口。
ceph-deploy rgw create ceph-1
默认生成了四个pool。。。
[root@ceph-1 ~]# ceph -s
cluster:
id: 00bd9244-d2c8-4541-95e3-0d53c214c7bb
health: HEALTH_OK
services:
mon: 1 daemons, quorum ceph-1 (age 11m)
mgr: ceph-1(active, since 10m)
osd: 2 osds: 2 up (since 9m), 2 in (since 9m)
rgw: 1 daemon active (ceph-1)
task status:
data:
pools: 4 pools, 128 pgs
objects: 160 objects, 1.2 KiB
usage: 2.0 GiB used, 38 GiB / 40 GiB avail
pgs: 128 active+clean
3.在网关服务成功运行后,你可以使用未经授权的请求来访问ceph-1的端口 7480 。。。修改默认端口什么的直接看ceph吧。这里不多赘述,也不修改默认端口。
192.168.199.91:7480
返回信息大概如下
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Owner>
<ID>anonymous</ID>
<DisplayName/>
</Owner>
<Buckets/>
</ListAllMyBucketsResult>
为了使用 REST 接口, 首先需要为 S3 接口初始化一个 Ceph 对象网关用户. 然后为 Swift 接口新建一个子用户
4.创建Ceph 对象网关用户。
sudo radosgw-admin user create --uid="testuser" --display-name="First User"
执行结果大概如下。其中access_key和secret_key值是需要使用的,可以记录一下。
[root@ceph-1 ~]# sudo radosgw-admin user create --uid="testuser" --display-name="First User"
{
"user_id": "testuser",
"display_name": "First User",
"email": "",
"suspended": 0,
"max_buckets": 1000,
"subusers": [],
"keys": [
{
"user": "testuser",
"access_key": "NO37BR0Q1KKI5ZG65WXC",
"secret_key": "M40SW9iGlmmz4634CrYkECy1VcjTaXCu2LA5O8Sx"
}
],
"swift_keys": [],
"caps": [],
"op_mask": "read, write, delete",
"default_placement": "",
"default_storage_class": "",
"placement_tags": [],
"bucket_quota": {
"enabled": false,
"check_on_raw": false,
"max_size": -1,
"max_size_kb": 0,
"max_objects": -1
},
"user_quota": {
"enabled": false,
"check_on_raw": false,
"max_size": -1,
"max_size_kb": 0,
"max_objects": -1
},
"temp_url_keys": [],
"type": "rgw",
"mfa_ids": []
}
5.创建一个 SWIFT 用户
如果要通过 Swift 访问,必须创建一个 Swift 子用户。需要分两步完成,第一步是创建用户,第二步创建密钥。
创建用户
radosgw-admin subuser create --uid=testuser --subuser=testuser:swift --access=full
{
"user_id": "testuser",
"display_name": "First User",
"email": "",
"suspended": 0,
"max_buckets": 1000,
"subusers": [
{
"id": "testuser:swift",
"permissions": "full-control"
}
],
"keys": [
{
"user": "testuser",
"access_key": "NO37BR0Q1KKI5ZG65WXC",
"secret_key": "M40SW9iGlmmz4634CrYkECy1VcjTaXCu2LA5O8Sx"
}
],
"swift_keys": [
{
"user": "testuser:swift",
"secret_key": "hS1Y7JPheiiVGm0iQvdQhpAIP5WO8gNvrS3lFU4U"
}
],
"caps": [],
"op_mask": "read, write, delete",
"default_placement": "",
"default_storage_class": "",
"placement_tags": [],
"bucket_quota": {
"enabled": false,
"check_on_raw": false,
"max_size": -1,
"max_size_kb": 0,
"max_objects": -1
},
"user_quota": {
"enabled": false,
"check_on_raw": false,
"max_size": -1,
"max_size_kb": 0,
"max_objects": -1
},
"temp_url_keys": [],
"type": "rgw",
"mfa_ids": []
}
创建用户密钥
radosgw-admin key create --subuser=testuser:swift --key-type=swift --gen-secret
{
"user_id": "testuser",
"display_name": "First User",
"email": "",
"suspended": 0,
"max_buckets": 1000,
"subusers": [
{
"id": "testuser:swift",
"permissions": "full-control"
}
],
"keys": [
{
"user": "testuser",
"access_key": "NO37BR0Q1KKI5ZG65WXC",
"secret_key": "M40SW9iGlmmz4634CrYkECy1VcjTaXCu2LA5O8Sx"
}
],
"swift_keys": [
{
"user": "testuser:swift",
"secret_key": "gSzJNUTyhRV6QgEWJjQwKt4BHOIUHjXsUaosuSxs"
}
],
"caps": [],
"op_mask": "read, write, delete",
"default_placement": "",
"default_storage_class": "",
"placement_tags": [],
"bucket_quota": {
"enabled": false,
"check_on_raw": false,
"max_size": -1,
"max_size_kb": 0,
"max_objects": -1
},
"user_quota": {
"enabled": false,
"check_on_raw": false,
"max_size": -1,
"max_size_kb": 0,
"max_objects": -1
},
"temp_url_keys": [],
"type": "rgw",
"mfa_ids": []
}
6.访问验证,测试s3访问。
使用一个python测试程序验证。
yum -y install python-boto
vi s3test.py
import boto
import boto.s3.connection
access_key = 'NO37BR0Q1KKI5ZG65WXC'
secret_key = 'M40SW9iGlmmz4634CrYkECy1VcjTaXCu2LA5O8Sx'
conn = boto.connect_s3(
aws_access_key_id = access_key,
aws_secret_access_key = secret_key,
host = 'ceph-1', port = 7480,
is_secure=False, calling_format = boto.s3.connection.OrdinaryCallingFormat(),
)
bucket = conn.create_bucket('my-new-bucket')
for bucket in conn.get_all_buckets():
print "{name}\t{created}".format(
name = bucket.name,
created = bucket.creation_date,
)
基本上需要改动的就是access_key,secret_key,host和port。
python s3test.py
运行该程序,可得到大概如下内容
[root@ceph-1 ~]# python s3test.py
my-new-bucket 2021-04-07T08:59:13.409Z
可知创建以一个名为my-new-bucket的bucket,且将该桶的name和创建时间打印了出来。
grafana配置。ceph集群代替s3
如果 provider设置为s3,需要配置的参数大概如下。好像只有path是可以忽略的。
[external_image_storage.s3]
;endpoint = # ceph的对象存储网关
;path_style_access = # 尽量设置为true
;bucket = # 存储的bucket选择测试中创建的my-new-bucket
;region = # 必须填写该字段 default即可
;path = # 可忽略
;access_key = # key 创建s3 对象网关用户时返回结果
;secret_key = # secret 创建s3 对象网关用户时返回结果
vim /etc/kolla/config/grafana.ini
[external_image_storage]
provider = s3
[external_image_storage.s3]
endpoint = http://192.168.199.91:7480
path_style_access = true
bucket = my-new-bucket
region = default
;path =
access_key = NO37BR0Q1KKI5ZG65WXC
secret_key = M40SW9iGlmmz4634CrYkECy1VcjTaXCu2LA5O8Sx
kolla-ansible reconfigure -i /etc/kolla/all-in-one
由于没有公网IP指向该ceph集群,所以设置了该集群并且设置grafana外部存储后,钉钉告警通知图片 依然是一个 感叹号。。。
但是通过邮件警告通知中图片地址,证明ceph代替s3设置是没错的,只是因为没有公共IP。所以钉钉无法访问到该图片。
图片的URL
http://192.168.199.91:7480/my-new-bucket/rmHf59LsPFNywIqarQfH.png