1. 简介
本文以一个数据中心的服务器监控为例,详细介绍通过开源的轻量级的工具 Telegraf ,轻松采集系统 CPU、内存、磁盘、网络等系统监控指标,将数据写入 TDengine TSDB 时序数据库,然后通过 TDengine IDMP,利用 AI 自动生成可视化面板和实时分析,帮助您几分钟就构建一套稳定、高效的服务器监控解决方案。
在这个方案中,TDengine TSDB + TDengine IDMP 的组合能够为您带来四大好处:
- 轻松完成数据导入:TDengine IDMP 与 TDengine TSDB 无缝集成,当监控数据写入 TSDB 后,能够快速导入 IDMP 并以树形结构的方式展现被监控的物理机和虚拟机,IT 资产一目了然。
- 无问智推,数据自己说话:不用在 TDengine 侧做任何配置,不用脚本,不用提问,IDMP 会基于采集的数据,自动判断为 IT 监测场景,自动为您推荐面板和实时预警,服务器的运行状态尽在掌控之中。
- 智能问数,随问随答:不用 SQL,不用任何脚本语言,你只要用自然语言说出感兴趣的数据分析或监测面板,IDMP 将会自动帮您创建,把数据可视化与分析的使用门槛降为 0;
- 如果添加新的被监测的服务器,只要配置好 Telegraf, 在 TDengine 侧不用做任何设置和操作,服务器就被自动的加入到监测的对象中,最大程度节省人力。
2. 前提条件
- TDengine 云服务实例,如果您没有可用的 TDengine 云服务实例,可以免费注册
- 一个被监控的服务器,假设其具如下物理信息:
- 所在位置:IDC01
- 机架号:RACK02
- 机架上的槽位号:SLOT03
- IP 地址:192.168.1.123
3. 配置指南
3.1 创建 IDMP 云服务实例
- 使用您的账号,登录 TDengine Cloud,在弹出的 TDengine 实例选择框中,选择“IDMP(工业数据管理平台)”。
- 在实例配置页面,分别配置 IDMP 实例和 TSDB 实例的信息和计费方案:
- IDMP(工业数据管理平台):
- 实例名称:telegraf-idmp
- 计费方案:IDMP-入门版
- TSDB(时序数据库)
- 实例名称:telegraf-tsdb
- 计费方案:入门版
- IDMP(工业数据管理平台):
- 等待 IDMP 实例启动后,选择加载一个场景的示例数据,即可进入 IDMP 云服务的主页面。
说明:TDengine IDMP 服务默认使用 TDengine TSDB 作为其数据源,在 IDMP 云服务实例创建过程中,会自动创建到上述 TSDB 的连接。
3.2 在 TSDB 云服务实例创建 DB
- 进入 IDMP 云服务实例的主页面后,点击右上角下拉菜单中的【管理后台】。
- 在管理后台页面点击【云资源管理】,进入云资源管理页面。
- 在实例列表中,请记录访问 TDengine TSDB 实例的 Gateway URL 和令牌 (token),以备稍后配置 Telegraf 时使用。
- 在实例列表中找到
telegraf-tsdb
实例,点击【TSDB 云服务】,进入 TSDB 云服务页面。 - 在左侧点击【数据浏览器】,在数据浏览器页面点击【创建数据库】。
- 设置数据库名称为 telegraf,完成 DB 创建。
3.3 在被监控服务器上安装 Telegraf
在被监控的服务其上,通过以下命令,即可安装 Telegraf:
curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add -
echo "deb https://repos.influxdata.com/ubuntu $(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/influxdb.list
sudo apt-get update
sudo apt-get install telegraf
3.4 配置 Telegraf
执行以下命令,生成 Telegraf 的配置文件:
cat << EOF | sudo tee /etc/telegraf/telegraf.conf
[global_tags]
location = "IDC01"
rack_num = "RACK02"
slot_num = "SLOT03"
ip_address = "192_168_1_123"
servers = "IDC01.RACK02"
[agent]
# 所有输入的默认数据收集间隔
interval = "10s"
# Telegraf将指标发送到大多数metric_batch_size指标的批量输出
metric_batch_size = 1000
# Telegraf将缓存metric_buffer_limit每个输出的指标,并在成功写入时刷新此缓冲区。这应该是倍数 metric_batch_size不能少于2倍metric_batch_size
metric_buffer_limit = 10000
# 集合抖动用于随机抖动集合。插件在收集之前将在抖动内随机休眠一段时间。可以用来避免许多插件同时查询sysfs之类的东西,这会对系统产生可测量的影响。
collection_jitter = "0s"
# 所有输出的默认数据刷新间隔。您不应将此设置为以下间隔。最大值flush_interval为flush_interval+flush_jitter
flush_interval = "10s"
# 将刷新间隔抖动一个随机量。主要是为了避免运行大量Telegraf实例的用户出现大量写入峰值。
flush_jitter = "0s"
[[inputs.cpu]]
name_override = "server_cpu"
percpu = false
totalcpu = true
[inputs.cpu.tags]
metric_tag = "SLOT03_cpu"
[[inputs.mem]]
name_override = "server_memory"
fieldpass = ["used_percent", "available", "total", "used", "cached", "free"]
[inputs.mem.tags]
metric_tag = "SLOT03_memory"
[[inputs.disk]]
name_override = "server_disk"
fieldpass = ["used_percent", "available", "total", "used", "cached", "free"]
[inputs.disk.tags]
metric_tag = "SLOT03_disk"
[[inputs.nstat]]
name_override = "server_network"
fieldpass = ["TcpInSegs", "TcpOutSegs", "TcpRetransSegs", "UdpInDatagrams", "UdpOutDatagrams"]
[inputs.nstat.tags]
metric_tag = "SLOT03_network"
[[inputs.processes]]
name_override = "server_processes"
fieldpass = ["total", "running", "sleeping", "stopped", "zombies"]
[inputs.processes.tags]
metric_tag = "SLOT03_processes"
[[inputs.system]]
name_override = "server_system"
fieldpass = ["load1", "load5", "load15", "uptime", "n_cpus", "n_users"]
[inputs.system.tags]
metric_tag = "SLOT03_system"
[[outputs.http]]
url = "https://<gateway-url>/influxdb/v1/write?db=telegraf&token=<gateway-token>&table_name_key=metric_tag"
method = "POST"
timeout = "5s"
data_format = "influx"
[outputs.http.headers]
Content-Type = "application/x-www-form-urlencoded"
EOF
说明:
- 在 global_tags 小节,配置了服务器的基本信息,其中 path 标签用来标识元素的路径,例如这里设置的
IDC01.RACK02
,导入 TDengine IDMP 后,在元素浏览器中,将以树形结构展开为IDC01 -> RACK02
。 - 在 agent 小节,配置了 Telegraf 的采集频率等信息。
- 在输入插件小节,开启了对 CPU, 内存,磁盘等的监控,每个指标均配置了 metric_tag 标签,其应具有唯一性,这里选用了 slot number + metric name 的形式,结合 global_tags 小节的 path, 即可唯一确定某个服务器的一个监控指标;
- 在输出插件小节,配置将监控指标通过 taosadapter 写入 TDengine TSDB
- 每种类型的输入指标,在写入 TSDB 时,都会写入一个超级表 (stable)
- url 中的 db 为在 3.2 小节创建的 DB 的 telegraf
- url 中的 <gateway-url> 和 <gateway-token> 为访问 TDengine TSDB 实例时所需的 Gateway 信息,请替换为 3.2 小节记录的 TDengine TSDB 实例 Gateway 的 URL 和 Token
- 参数
table_name_key=metric_tag
将把 metric_tag 作为子表名,写入 TSDB 时将不再包含这个标签
3.5 启动 Telegraf
完成配置后,使用以下命令启动 Telegraf:
sudo systemctl start telegraf
使用以下命令,查看 Telegraf 服务状态:
sudo systemctl status telegraf
如果服务的状态为 active (running)
, 则说明 Telegraf 服务已启动成功。
如果期望监控多个物理机或虚拟机,仅需重复以上步骤即可。
3.6 在 IDMP 中加载 Metrics 数据
通过以下步骤,将 TDengine TSDB 的数据加载至 TDengine IDMP 以创建面板和分析:
- 登录 IDMP 实例,在管理后台找到 telegraf-tsdb 连接。
- 在 telegraf-tsdb 连接页面上方的导航栏中,选择【数据导入】。
- 在数据导入配置页面,选择 telegraf 数据库。
- 检查所有超级表的 Tags 配置项,选择 path 列做为每个超级表的 Tree。
- 点击【完成】,等待数据导入任务完成。
3.7 查看元素信息
导入至 TDengine IDMP 的服务器监控指标,会以树形结构的方式展示,可以根据其物理信息一层层展开,便于查看:
- 看到导入完成的提示后,点击主菜单【元素浏览器】,跳转至元素浏览器页面。
- 在左侧资源浏览器中,IDMP 会自动根据服务器的物理信息,以树形结构的方式展示服务器的监控指标。在这里,依次展开 path -> IDC01 -> RACK02 -> SLOT03_cpu,通过上方路径导航菜单选择【属性】,查看 TDengine TSDB 中存储的 SLOT03 物理机 CPU 资源指标。
3.8 体验 AI 生成面板
- 在左侧资源浏览器中,点击 path -> IDC01 -> RACK02 -> SLOT03_cpu 元素,跳转至该元素的 AI 推荐面板页面。
- 等待 AI 生成面板推荐后,您可根据需求进行选择,例如:“过去一小时 CPU 空闲利用率(usage_idle)每分钟的变化趋势,折线图”,在您感兴趣的面板右上方的菜单中,点击【生成】按钮。
- 等待面板生成后,在面板右下角点击【保存】,即可在下方面板列表中查看 SLOT03_cpu 元素下对应的面板。
- 面板生成后,您还可以在该面板的详情页面中,查看 AI 创建面板时,使用的 SQL 语句:
SELECT _wstart,AVG(`usage_idle`) AS `usage_idle`
FROM `idmp`.`vt_SLOT03_cpu_573105`
WHERE _c0 >= now-1h and _c0 <= now INTERVAL(1m) SLIDING(1m)
3.9 体验 AI 分析
- 在左侧资源浏览器中,点击 path -> IDC01 -> RACK02 -> SLOT03_cpu 元素,通过上方路径导航菜单选择【分析】,跳转至该元素的 AI 推荐分析页面。
- 等待 AI 生成分析问题推荐后,您可以根据需求进行选择,例如:“physical_cpu:SLOT03_cpu 的实时 usage_system 超过 80%持续超过 10 分钟时,常规告警,计算平均 usage_system,事件窗口”,点击您感兴趣的问题链接,以进入分析编辑页面,点击页面最下方的【保存】。
- 退回到分析列表中,即可查看对应的分析。
4. 更多
除了使用云服务以外,TDengine 还支持以私有化部署。为了简化部署,我们提供了 Ansible, Docker/Dcoker Compose, Helm 等多种部署方式,详见:https://github.com/taosdata/tdengine-idmp-deployment
5. 配置 Telegraf 小技巧
- 与正常配置 Telegraf 不一样的是,需要把给监测的对象(服务器、虚拟机、应用等) 配置一个路径标签 (path),把资源的层次结构在标签里描述出来,中间用 “.” 进行分割,比如 “IDC01.RACK02.SLOT01″, 这样就可以对每一级的资源进行统计监测。而且还可以配置多个层次结构标签,便于从不同维度进行管理,比如”OS.Linux.Ubuntu”, 从 OS 维度进行统计监测。
- 在 Telegraf 的配置里,还需要配置好参数 metric_tag, 建议用一个有可读性并具有唯一性的名字,它是被监测对象的名字。
6. 小结
本文以 Step by Step 的方式,介绍了如何使用 Telegraf + TDengine TSDB + TDengine IDMP 快速搭建一个 IT 监控系统。以往需要几个小时、甚至几天,并进行繁琐的配置、调试才能搭建起来的系统,使用 TDengine IDMP 后,仅需要几分钟即可搞定。日后,如果有新的物理机、虚拟机需要被纳入到监控系统中,只需在被监控系统部署 Telegraf 即可。
搭建整个监测系统的工作全部在 Telegraf 的配置上了,无需编写复杂的 SQL 语句,无需脚本和其他配置,无需学习 Grafana, 无需了解多少 IT 运维知识,即可轻松掌握 IT 系统的运行状态,成为 IT 系统监测专家。