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

2024-05-10 21:35:12 5点赞 17收藏 5评论

大家好,这里是爱小憩的小爱。本篇将详细介绍如何在最新发布的 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 监测栈

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

展开 收起
5评论

  • 精彩
  • 最新
  • 大佬,用apt升级了之后。还能手动安装升级包吗?听说下个版本docker又回来了。

    校验提示文案

    提交
    啊?下个版本是? 25?,还是24.05??,还是想用docker,但是一直没下定决心,现在这个预置的应用管理,不适合我的所有docker应用..

    校验提示文案

    提交
    下个版本24.10自带docker,但还是beta版本,我也在等

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 我监测在独立的服务器,导入没有数据,不知道改哪里数据可以过来

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
17
扫一下,分享更方便,购买更轻松