NAS 备忘录其四:TrueNAS Scale 24.04 部署Docker 和 Influx + Telegraf + Grafana 监测栈

2024-05-10 21:35:12 0点赞 3收藏 0评论

大家好,这里是爱小憩的小爱。本篇将详细介绍如何在最新发布的 TrueNAS Scale 24.04 系统中部署 Docker 和自建 Telegraf、InfluxDB、Grafana 监测栈。本篇适用于 24.04 和 23.10 版本,更早前的尚未进行测试。

一、背景介绍

全新版本:TrueNAS Scale 24.04

在四月 22 日,Scale 24.04 版本粉墨登场。相较于笔者在上篇引入的 23.10 版,其增加了诸多特性,包括:

  • Linux 内核改用最新长期维护分支,即 6.6——新内核可以支持更多硬件,例如 Intel Arc 系列显卡、十二代及以上 Core 处理器集成 GPU;

  • 动态缓存(ARC)改进,现在其表现和 TrueNAS Core 分支一致;

  • SMB/NFS 连接状态监测;

  • 不间断电源(UPS)状态监测,支持 USB 和网络接口;

  • 内置 Netdata 监测服务,可一键抵达;

  • 如此等等,不一而足。

问题来了

既然有 Netdata,为什么要自建监测栈?

首先我们来看在网页管理界面上的“报告”一页:

TrueNAS 报告页TrueNAS 报告页

这里有一项严重的局限性,便是观测范围,选项仅有一小时、24 小时和七天,而且仅对单个图表适用。此外,可以看到诸硬盘的指标各自为政,未聚合于一处。 那么 Netdata 界面有何表现?我们点击右上角的 Netdata,来到它的控制台:

内置 Netdata 服务控制台内置 Netdata 服务控制台

可以看到,进入控制台后,处理器占用随即上升 25% 左右,远超背景使用率(5% 以下)。这是不可接受的:监测栈的资源占用应该尽量小,避免影响到宿主机上其余业务。 综上,我们需要一套独立的监测栈,要求资源占用小、信息聚合展示、可选任意时间节点监看。

为什么不用系统自带应用功能,而是部署 Docker?

主要原因是网络连接不便。 无论是官方应用列表还是第三方列表 TrueCharts,均要求连接国际开源交流平台,需特殊手段来辅助;而 Docker 除了搜索镜像稍有不便以外,可用镜像站俯拾皆是,可用性是有保障的,不需要特殊手段。

这些服务用 apt 也可以部署,为什么还需要 Docker?

为了方便未来升级系统后重新部署服务。 TrueNAS 的更新方式特殊,更新后会创建一个新的系统实例,保留 Web 界面中的设置,但不会保留任何通过命令行部署的服务或其他操作(这些都存放于旧实例中)。尽管 Docker 本身也不会保留,但重新部署后通过事先准备的 Docker Compose 脚本,仍可快速恢复各项服务。

为何选择这个监测栈组合?

以前在群晖系统上用过,仅此而已(笑)
其实这三者是当下非常成熟的监测栈组合之一;Telegraf 负责接收遥测数据,InfluxDB 负责记录数据,而 Grafana 是最重要的:分析数据并可视化,其界面可以定制,资源消耗则远小于 Netdata。

事不宜迟,开始正题。

二、Docker 部署

初始状态下,TrueNAS Scale 会限制包管理器 apt 的使用;如试图调用之,会提示“在 TrueNAS 系统中,包管理器已被禁用”字样,拒绝执行。

原生环境试图执行 apt  的结果原生环境试图执行 apt 的结果

据官方文档介绍,通过执行命令 install-dev-tools 可进入开发者模式,此时会部署开发环境、解除系统目录的只读状态并开放 apt 权限。但如果仅仅希望获取 apt 权限,可改为运行一个内置 Python 脚本:

# python /usr/local/libexec/disable-rootfs-protection

注意:启用开发者模式不受 TrueNAS 官方支持,一切后果自负!切勿尝试以 apt 更新系统!

然后,编辑 apt 软件源配置 /etc/apt/sources.list,加入位于内地的任意 Debian 镜像站链接(如南方科大 mirrors.sustech.edu.cn/debian/),保存后执行 apt update,更新数据库。

这样万事俱备,以命令 apt install docker.io 即可部署 Docker 服务。服务会自动打开,无需额外操作。如通过 Docker Compose 部署容器,还需安装软件包 docker-compose

三、数据源准备

监测数据从何而来呢?除了 Linux 底层接口以外,TrueNAS 还可向指定主机或端口(包括自身)发送 Graphite 格式的遥测数据,其中有处理器、内存、硬盘吞吐、网络吞吐、ARC 命中率等参数,比较全面;尽管该数据流未报告诸存储池的使用率、以及诸硬盘除温度以外的一切 SMART 参数等,但相对易于获取和分析,本篇里也将用到。

进入 Web 管理界面的“报告”一栏,点击右上角“导出器(Exporter)”,然后添加一项导出任务:

监测数据导出监测数据导出

其中:

  • 名称任意,仅用于在管理界面中识别;

  • 目前类型仅有 Graphite 选项,选择之;

  • 目标 IP(Destination IP)改为本机,即 127.0.0.1(如果监测栈部署于其他主机,可改为该主机的 IP);

  • 目标端口(Destination Port)任意,记住端口号;

  • 前缀(Prefix)、命名空间(Namespace)任意;

  • 更新间隔(Update Every)任意,单位为秒,可设定 5 秒或 10 秒;

  • 报告失败时的缓存间隔(Buffer On Failures)任意,一般为更新间隔的两倍;

  • 报告项目名而非 ID(Send Names instead of Ids)可留空,系统将自动填写 true(启用);

  • 监测项目(Matching Charts)任意,一般监测全部,即留星号(*)。

保存设置,数据源准备完成。

四、配置文件和目录准备

部署容器前,先准备好配置文件和存储目录。 笔者登录命令行,在 SSD 存储池、Docker 数据集 /mnt/SSD/docker 之下建立以下目录:influx、influx-config、telegraf、grafana。

随后,在 telegraf 目录下编写配置文件 telegraf.conf

[global_tags] [agent] # 更新间隔设置,和第 3 节一致 interval = "5s" round_interval = true metric_batch_size = 1000 metric_buffer_limit = 10000 collection_jitter = "0s" # 刷新间隔设置,和第 3 节“缓存间隔”一致 flush_interval = "10s" flush_jitter = "0s" precision = "1ms" debug = false quiet = false logfile = "" # 主机名任意,此值写入数据库,供日后查询 hostname = "truenas" omit_hostname = false [[outputs.influxdb_v2]] # 数据库设置,记住桶(bucket)和组织(organization)名称,用于数据库初始化,口令(token)留空,稍后填写 urls = ["http://influxdb:8086"] bucket = "telegraf" organization = "smzdm" token = "" [[inputs.socket_listener]] # 监听端口设置,端口号和第 3 节所用端口一致 service_address = "tcp://:19039" data_format = "graphite" templates = ["os.host.measurement.type.field"]

五、容器部署

以下提供两种部署方式:Docker Compose 脚本或命令行。当然,引入 Portainer 等容器管理器也是可行的。

5.1 Docker Compose 部署

应用以下配置:

version: "3" services: influxdb: container_name: influxdb hostname: influxdb # Alpine 封装版本可节约空间 image: influxdb:alpine # 服务端口映射,此后登录 IP:9100 进行数据库初始化 ports: - 9100:8086/tcp restart: always volumes: - /mnt/SSD/docker/influx:/var/lib/influxdb2 - /mnt/SSD/docker/influx-config:/etc/influxdb2 # 内联网络,诸容器应保持一致 networks: - monitor telegraf: container_name: telegraf hostname: telegraf image: telegraf:alpine # 监听端口映射设置,和第 3 节所用一致 ports: - 19039:19039/tcp restart: unless-stopped volumes: - /mnt/SSD/docker/telegraf:/etc/telegraf:ro networks: - monitor grafana: container_name: grafana hostname: grafana image: grafana/grafana-oss:latest networks: - monitor # 管理端口映射,稍后登录 IP:3000 ports: - 3000:3000/tcp restart: unless-stopped # 用于访问宿主目录的用户 ID,admin = 950,admin 是 grafana 目录的所有者 user: 950 volumes: - /mnt/SSD/docker/grafana:/var/lib/grafana networks: monitor: driver: bridge external: true

保存后,以命令 docker compose up -d 部署并启动上述容器。

5.2 命令行部署

执行以下命令:

# docker network create monitor

以下将 InfluxDB 管理端口映射至宿主的 9100 端口,稍后以 IP:9100 访问。主机名(Hostname)必须设置,以下 Grafana 需要引用数据库主机名。

# docker run -d -p 9100:8086
--name influxdb --hostname influxdb
-v /mnt/SSD/docker/influx:/var/lib/influxdb2
-v /mnt/SSD/docker/influx-config:/etc/influxdb2
--restart always
--network monitor
influxdb:alpine

以下端口仍和第 3 节、第 4 节所设置的一致。

# docker run -d -p 19039:19039
--name telegraf
-v /mnt/SSD/docker/telegraf:/etc/telegraf:ro
--restart unless-stopped
--network monitor
telegraf:alpine

以下用户设置和目录 /mnt/SSD/docker/grafana 的所有者一致。

# docker run -d -p 3000:3000
--name grafana
-v /mnt/SSD/docker/grafana:/var/lib/grafana
--user 950
--restart unless-stopped
--network monitor
grafana/grafana-oss:latest

六、数据库初始化

待容器部署完成后,浏览器访问 <主机IP>:9100,按以下提示进行初始化:

InfluxDB 初始化InfluxDB 初始化

按下“继续”,会弹出一个写有管理员口令的窗口。妥善保存该口令,请勿直接用于容器。

此后,我们从左侧“载入数据”(Load Data)进入“API 口令”(API Token)管理页面,生成(Generate)一个口令。一般“全功能口令”(All Access API Token)足够我们的容器使用。以下填写新口令名称。

创建新口令创建新口令

按下保存(Save),会弹出新口令,妥善保存,口令仅会展示一次。如丢失该口令,需重新生成一个。

将该口令写入 Telegraf 配置文件 /mnt/SSD/docker/telegraf/telegraf.conf 里面的留空处,然后重启 Telegraf 容器:

# docker restart telegraf

这样,齿轮开始转动,遥测数据源源不断输入到数据库中。

七、Grafana 设置

浏览器访问 <主机IP>:3000,填入默认用户 admin、密码 admin 以登录。密码随后可自行更改。 我们从左侧“连接”(Connections)进入“数据源”(Data sources),于右上角添加新数据源,选择 InfluxDB:

Grafana 数据源页面Grafana 数据源页面

此后,我们需键入数据库主机名和端口、组织、桶和访问口令等:

Grafana 数据源设置Grafana 数据源设置

蓝色按钮保存并测试连接。

接着,我们从左侧进入“面板”(Dashboards)页面,于右上角“新增”(New)处选择“导入面板”(Import):

Grafana 面板页面Grafana 面板页面

下面有两种选择,一是外国友人做好的成品,于中间一栏键入 “20199” 再点击 Load 即可导入;二是笔者借该友人之福,调校并汉化的成品,访问这个 Gitee 仓库,复制其中 grafana.json 的内容并粘贴到下方一栏以导入。

最后就到了奇迹的时刻!

Grafana 监测面板成品Grafana 监测面板成品

笔者的版本较原面板有以下变更:

  1. 原面板含有二级动态缓存(L2ARC)的展示,但笔者的系统未部署任何 L2ARC(相信有不少家用 TrueNAS 实例也未部署),故显示为空。已移除。如有相关需求,可以考虑从 20199 号面板取用。

  2. 拆分了内存和 Swap 使用曲线。

  3. 处理器使用率改以时间—曲线展示。

  4. 移除了开机时间(Uptime)背景的直线。

  5. 移除了内存使用饼状图,加入 UPS 剩余电量指示。

注意:UPS 电量指示仅适用于 TrueNAS Scale 24.04,如低于此版本则不会记录到。

恭喜你完成了 TrueNAS 监测栈的搭建!如有任何疑问或建议,欢迎在下面留言,我们下次再会!NAS 备忘录其四:TrueNAS Scale 24.04 部署Docker 和 Influx + Telegraf + Grafana 监测栈

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起

SPARKLE Intel Arc A310 ECO 4GD6 显卡

SPARKLE Intel Arc A310 ECO 4GD6 显卡

729元起

SPARKLE 撼与科技 兽人系列游戏显卡 Intel Arc A750 ORC OC超频双槽双风扇 8GD6

SPARKLE 撼与科技 兽人系列游戏显卡 Intel Arc A750 ORC OC超频双槽双风扇 8GD6

暂无报价

SPARKLE 撼与科技 Arc A380 ELF 6G D6双槽单风扇显卡

SPARKLE 撼与科技 Arc A380 ELF 6G D6双槽单风扇显卡

779元起

SPARKLE 撼与科技A580 ORC 8G D6 OC超频双槽双风扇

SPARKLE 撼与科技A580 ORC 8G D6 OC超频双槽双风扇

1249元起

SPARKLE撼与科技 妖精系列游戏显卡 Intel Arc A380 GENIE 双槽双风扇 6GD6

SPARKLE撼与科技 妖精系列游戏显卡 Intel Arc A380 GENIE 双槽双风扇 6GD6

799元起

GALAXY 影驰 GeForce RTX 4080 SUPER 星曜 OC 显卡 16GB

GALAXY 影驰 GeForce RTX 4080 SUPER 星曜 OC 显卡 16GB

9299元起

XFX 讯景 AMD RADEON RX 6750 GRE 海外版 显卡 12GB

XFX 讯景 AMD RADEON RX 6750 GRE 海外版 显卡 12GB

2149元起

GALAXY 影驰 GeForce RTX 4070 20周年纪念版 显卡 12GB

GALAXY 影驰 GeForce RTX 4070 20周年纪念版 显卡 12GB

5599元起

SAPPHIRE 蓝宝石 AMD RADEON RX 7900 XT 20G 极地版 显卡 20GB

SAPPHIRE 蓝宝石 AMD RADEON RX 7900 XT 20G 极地版 显卡 20GB

5099元起

GIGABYTE 技嘉 雪鹰 GeForce RTX 4070 Super AERO OC 12G 显卡

GIGABYTE 技嘉 雪鹰 GeForce RTX 4070 Super AERO OC 12G 显卡

5289元起

GALAXY 影驰 GeForce RTX 4070 SUPER 星曜OC 显卡 12GB

GALAXY 影驰 GeForce RTX 4070 SUPER 星曜OC 显卡 12GB

4599元起

XFX 讯景 RX 6650XT 8GB 战狼版 台式机办公游戏独立显卡

XFX 讯景 RX 6650XT 8GB 战狼版 台式机办公游戏独立显卡

1599元起

GALAXY 影驰 GeForce RTX 4070TI SUPER 星曜 OC 显卡 16GB

GALAXY 影驰 GeForce RTX 4070TI SUPER 星曜 OC 显卡 16GB

6999元起

ZOTAC 索泰 GeForce RTX 4080 SUPER OC 月白 显卡 16GB

ZOTAC 索泰 GeForce RTX 4080 SUPER OC 月白 显卡 16GB

8229元起

GUNNIR 蓝戟 intel Arc A580 Index 8G 显卡

GUNNIR 蓝戟 intel Arc A580 Index 8G 显卡

1259元起

XFX 讯景 AMD RADEON RX 7800 XT 海外版Pro 16GB 显卡

XFX 讯景 AMD RADEON RX 7800 XT 海外版Pro 16GB 显卡

3049元起

文中相关商品

京东 SPARKLE 撼与科技 Arc A380 ELF 6G D6双槽单风扇显卡
0评论

当前文章无评论,是时候发表评论了
提示信息

取消
确认
评论举报

相关好价推荐
查看更多好价

相关文章推荐

更多精彩文章
更多精彩文章
天猫超级红包
距结束::
每天领现金,最高24888元
红包按钮
最新文章 热门文章
3
扫一下,分享更方便,购买更轻松