前言
- 发布这篇贴就2级啦,整点东西做个到此一游纪念。
- 经过半年的使用,我觉得 InfluxDB + Telegraf 还是很不错的,可监控的东西繁多,包括不限于自己的服务器,可玩性非常高。
- 过程还是很繁琐的,非常适合想换换口味的折腾佬。
- 使用这一套组合至少需要 1C1G。
- Telegraf 挺内存占用的(60MB左右),大概是 nezha-agent 的5倍,不建议在256M内存的小鸡上安装。
- 部署环境:Debian 12.7 | 1C1G | 系统盘8G + 数据盘22G
目录
- 前置知识
- 部署前的准备
- 部署 InfluxDB
- 部署 Grafana
- 部署 Telegraf
- 可视化数据
- 完成
1.前置知识
返回目录
简要拓扑

telegraf 和 nezha-agent 的内存占用对比,酌情食用

2.部署前的准备
返回目录
2.1 DNS 解析
需要准备两个子域名 influxdb.example.com 常规解析,数据流入用,grafana.example.com 可以常规解析访问,也可以套CDN。将这两个域名解析到同一台服务器。
2.2 安装必要的包
apt-get update && apt-get install sudo vim curl wget gpg
2.3 安装NTP服务和设置时区
apt-get install systemd-timesyncd
设置时区
timedatectl set-timezone Asia/Shanghai
2.4 格式化磁盘与挂载磁盘
单磁盘忽略 2.4
使用 lsblk -pf 查看可用的磁盘,可以看到这里有两块磁盘 xvda 和 xvdb,xvdb 就是我的数据盘,现在它还是个空盘,挂载不了,接下来需要将它格式化
$ lsblk -pf
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
/dev/xvda
└─/dev/xvda1 ext4 1.0 fec9800c-8a7b-48b8-a846-c96b4aaf5d39 6.6G 9% /
/dev/xvdb
格式化为 ext4
$ mkfs.ext4 /dev/xvdb
mke2fs 1.47.0 (5-Feb-2023)
Creating filesystem with 5767168 4k blocks and 1441792 inodes
Filesystem UUID: ed475f81-cac7-4c8b-8e7f-108e6dcf0a68
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
再次使用 lsblk -pf 查看,看到磁盘的文件系统和UUID等信息,就算完成了
$ lsblk -pf
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
/dev/xvda
└─/dev/xvda1 ext4 1.0 fec9800c-8a7b-48b8-a846-c96b4aaf5d39 6.6G 9% /
/dev/xvdb ext4 1.0 ed5bbcfa-b442-46cf-8512-8aa742252ac7
在 /mnt 下创建挂载点 data
mkdir /mnt/data
创建永久挂载,如果直接使用 mount 挂载磁盘,系统在重启之后会失效
cp /etc/fstab /etc/fstab.backup && echo "UUID=数据盘的UUID 刚才创建的挂载点 ext4 defaults 0 0" >> /etc/fstab
重新加载配置
systemctl daemon-reload
挂载 /etc/fstab 中定义的所有磁盘
mount -a
查看是否挂载成功。如下,最后一列显示路径就是挂载成功了
$ lsblk -pf
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
/dev/xvda
└─/dev/xvda1 ext4 1.0 fec9800c-8a7b-48b8-a846-c96b4aaf5d39 6.6G 9% /
/dev/xvdb ext4 1.0 ed475f81-cac7-4c8b-8e7f-108e6dcf0a68 20.4G 0% /mnt/data
一切弄好了,可以选择删掉备份
rm /etc/fstab.backup
2.5 申请证书
下载 acme.sh
curl https://get.acme.sh | sh -s email=my@example.com
创建 alias
alias acme.sh=~/.acme.sh/acme.sh
启用自动更新
acme.sh --upgrade --auto-upgrade
导入 DNS API,怎么使用 DNS API?https://github.com/acmesh-official/acme.sh/wiki/dnsapi
# 操作前备份 ~/.bashrc 及写入 CF_Token 到 ~/.bashrc
cp ~/.bashrc ~/.bashrc.backup && cat >> ~/.bashrc << EOF
# Cloudflare DNS API Token
export CF_Token="<你的CF_Token>"
EOF
加载环境变量
source ~/.bashrc
检查是否生效
echo $CF_Token
删除 ~/.bashrc 的备份
rm ~/.bashrc.backup
正式申请证书
# 申请通配符证书
acme.sh --issue --dns dns_cf -d '*.example.com'
# 或者
# 申请子域名证书
acme.sh --issue --dns dns_cf -d 'influxdb.example.com' -d 'grafana.example.com'
3.部署 InfluxDB
返回目录
3.1 添加官方的 APT 源
RedHat系请查阅官网:https://www.influxdata.com/downloads
# Ubuntu and Debian
wget -q https://repos.influxdata.com/influxdata-archive_compat.key
echo '393e8779c89ac8d958f81f942f9ad7fb82a25e133faddaf92e15b16e6ac9ce4c influxdata-archive_compat.key' | sha256sum -c && cat influxdata-archive_compat.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg > /dev/null
echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main' | sudo tee /etc/apt/sources.list.d/influxdata.list
3.2 安装
apt-get update && apt-get install influxdb2
删除 key 文件
rm influxdata-archive_compat.key
3.3 创建目录及更改目录所属用户
单磁盘忽略 3.3
创建专门存放 InfluxDB 的数据的目录 /mnt/data/influxdb
mkdir /mnt/data/influxdb
更改 /mnt/data/influxdb 的所属用户
chown influxdb /mnt/data/influxdb && chgrp influxdb /mnt/data/influxdb && chmod 750 /mnt/data/influxdb
3.4 安装证书和私钥
先创建一个脚本
mkdir /etc/influxdb/tls && vim /etc/influxdb/tls/set-permissions-and-restart.sh
输入以下内容
#!/bin/bash
# 设置证书、私钥的用户
chown influxdb /etc/influxdb/tls/key.pem /etc/influxdb/tls/fullchain.pem
# 设置证书、私钥的权限为 400
chmod 400 /etc/influxdb/tls/key.pem /etc/influxdb/tls/fullchain.pem
# 检查并重启 influxdb.service
if systemctl list-units | grep influxdb.service; then
systemctl restart influxdb.service
fi
acme 安装证书和私钥
acme.sh --install-cert -d 'influxdb.example.com' \
--key-file /etc/influxdb/tls/key.pem \
--fullchain-file /etc/influxdb/tls/fullchain.pem \
--reloadcmd "bash /etc/influxdb/tls/set-permissions-and-restart.sh"
3.5 编辑配置文件
vim /etc/influxdb/config.toml
输入以下内容,详细的配置说明请查阅官网:https://docs.influxdata.com/influxdb/v2/reference/config-options
bolt-path = "/mnt/data/influxdb/influxd.bolt" # 单磁盘忽略
engine-path = "/mnt/data/influxdb/engine" # 单磁盘忽略
sqlite-path = "/mnt/data/influxdb/influxd.sqlite" # 单磁盘忽略
tls-cert = "/etc/influxdb/tls/fullchain.pem"
tls-key = "/etc/influxdb/tls/key.pem"
tls-min-version = "1.3"
3.6 设置环境变量
检查 $XDG_RUNTIME_DIR/bus 是否存在
echo $XDG_RUNTIME_DIR/bus
如果存在,可以将 DBUS_SESSION_BUS_ADDRESS=$XDG_RUNTIME_DIR/bus 写入到 /etc/default/influxdb2
echo -e "DBUS_SESSION_BUS_ADDRESS=\$XDG_RUNTIME_DIR/bus" >> /etc/default/influxdb2
如果不存在,就将 $XDG_RUNTIME_DIR/bus 改为 /dev/null 写入到 /etc/default/influxdb2
echo "DBUS_SESSION_BUS_ADDRESS=/dev/null" >> /etc/default/influxdb2
3.7 启动
systemctl start influxdb
3.8 访问
浏览器 >> https://influxdb.example.com:8086

3.9 初始化
初始化信息随意填写,但要记住后续登录都需要。点击 CONTINUE

把生成的 Token 保存下来,后续不再显示。点击 CONFIGURE LATER

进入之后,需要创建一个新的 Bucket,用于存放采集到的监控数据,与 Initial Bucket 的数据分离。路径:
Load Data > Bukets > CREATE BUCKET

Name 我就命名为 Telegraf 吧,然后选择数据保留的时间,可以选择从不删除和选择预设时间、自定义时间

4.部署 Grafana
返回目录
4.1 安装
官方下载地址:https://grafana.com/grafana/download?edition=oss
apt-get update && apt-get install libfontconfig1 musl
wget https://dl.grafana.com/oss/release/grafana_11.2.0_amd64.deb
dpkg -i grafana_11.2.0_amd64.deb
删除包
rm grafana_11.2.0_amd64.deb
设置自启动
systemctl enable grafana-server
4.2 安装证书
先创建证书更新脚本
mkdir /etc/grafana/tls && vim /etc/grafana/tls/set-permissions-and-restart.sh
输入以下内容
#!/bin/bash
# 设置证书、私钥的用户
chown grafana /etc/grafana/tls/key.pem /etc/grafana/tls/fullchain.pem
# 设置证书、私钥的权限为 400
chmod 400 /etc/grafana/tls/key.pem /etc/grafana/tls/fullchain.pem
# 检查并重启 grafana-server.service
if systemctl list-units | grep grafana-server.service; then
systemctl restart grafana-server.service
fi
执行 acme.sh
acme.sh --install-cert -d 'grafana.example.com' \
--key-file /etc/grafana/tls/key.pem \
--fullchain-file /etc/grafana/tls/fullchain.pem \
--reloadcmd "bash /etc/grafana/tls/set-permissions-and-restart.sh"
4.3 配置 HTTPS
vim /etc/grafana/grafana.ini
修改以下内容
[server]
protocol = h2
min_tls_version = "TLS1.3"
http_addr = 0.0.0.0
http_port = 3000
domain = grafana.example.com
enforce_domain = false
root_url = https://grafana.example.com:3000
cert_file = /etc/grafana/tls/fullchain.pem
cert_key = /etc/grafana/tls/key.pem
4.4 启动
systemctl start grafana-server
4.5 访问
浏览器 >> https://grafana.example.com:3000,默认账号密码均是 admin

4.6 Grafana 连接 InfluxDB
4.6.1
回到 InfluxDB WebUI 创建允许 Grafana 读取数据的 Token。路径:
InfluxDB > Load Data > API Tokens > GENERATE API TOKEN > Custom API Token

在 Telegraf 的权限栏里勾上 Read。点击 GENERATE

把生成的 Token 保存下来,后续不再显示。(不小心没保存也不要紧,可以凭在初始化时生成的 Token 在命令行里查看)

4.6.2
回到 Grafana WebUI 添加数据源。路径:
Grafana > Home > Connection > Data Sources > Add data source > InfluxDB
Query language
- InfluxQL
HTTP
- url: https://localhost:8086
Auth
- Skip TLS Verify 开启
Custom HTTP Headers
- Header: Authorization | Value:
Token+空格+<Token>示例:Token zA61yxXG_SoS-VeWYTXBi27Dg8RDcCiMKne2kyafXU7jRAFgNzreFVKhazrxTl7W00_CJjG-cKbEzcdqkmKz1w==InfluxDB Details**
- Database: Telegraf
- HTTP Method: GET

5.部署 Telegraf
返回目录
5.0 安装必要的包
Telegraf 与 InfluxDB 部署在同一台服务器上不需要此步骤,前面已经安装过了
apt-get update && apt-get install sudo wget gpg
5.1 添加 InfluxData 官方的 APT 源
Telegraf 与 InfluxDB 部署在同一台服务器上不需要此步骤,前面已经添加过了
RedHat系请查阅官网:https://www.influxdata.com/downloads
# Ubuntu and Debian
wget -q https://repos.influxdata.com/influxdata-archive_compat.key
echo '393e8779c89ac8d958f81f942f9ad7fb82a25e133faddaf92e15b16e6ac9ce4c influxdata-archive_compat.key' | sha256sum -c && cat influxdata-archive_compat.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg > /dev/null
echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main' | sudo tee /etc/apt/sources.list.d/influxdata.list
5.2 安装
apt-get update && apt-get install telegraf
5.3 设置 Telegraf 环境变量
检查 $XDG_RUNTIME_DIR/bus 是否存在
$ echo $XDG_RUNTIME_DIR/bus
/run/user/0/bus
如果存在,可以将 DBUS_SESSION_BUS_ADDRESS=$XDG_RUNTIME_DIR/bus 写入到 /etc/default/telegraf
echo -e "DBUS_SESSION_BUS_ADDRESS=\$XDG_RUNTIME_DIR/bus" >> /etc/default/telegraf
如果不存在,就将 $XDG_RUNTIME_DIR/bus 改为 /dev/null 写入到 /etc/default/telegraf
echo "DBUS_SESSION_BUS_ADDRESS=/dev/null" >> /etc/default/telegraf
5.4 创建配置文件
Telegraf 加载配置的方式有两种,一是本地配置文件,二是远程配置文件,其中二选一
5.4.1 本地配置文件
在 /etc/telegraf/telegraf.conf 下直接编辑就行。
5.4.2 远程配置文件
因为第一次部署还没有配置文件,需要要先创建。后续部署到其他服务器无需重复此步骤
回到 InfluxDB WebUI 创建远程配置文件。路径:
InfluxDB > Load Data > Telegraf > CREATE CONFIGURATION

Bucket 选择 Telegraf ,模板随便选一个。点击 CONTINUE CONFIGURING

Configuration Name 我就命名为 Example 吧,然后删掉模板的全部内容,填入自己的配置,点击 SAVE AND TEST。
详细的配置说明请查阅官方 Github 文档:https://github.com/influxdata/telegraf/blob/release-1.32/docs/CONFIGURATION.md

把生成的 Configuration API Token 和 Configuration URL 都复制下来,保存

再次编辑配置,把 [global_tags] 以上 InfluxDB 自动添加的,多余的内容删除,只保留自己的添加的。点击 SAVE CHANGES

5.5 加载配置
5.5.1 本地配置加载的方式
cat >> /etc/profile.d/telegraf.sh << EOF
# Telegraf environment
export HOST_INFO="这里填服务器的信息,随意填写,知道是哪一台服务器就行,比如:xxCloud_HK-1C1G"
export INFLUX_TOKEN="<Configuration API Token>"
EOF
# 加载环境变量
source /etc/profile
# 检查是否生效
echo -e "$HOST_INFO\n$INFLUX_TOKEN"
启动
systemctl start telegraf
5.5.2 远程配置加载的方式
设置 Telegraf 环境变量
cat >> /etc/default/telegraf << EOF
HOST_INFO="这里填服务器的信息,随意填写,知道是哪一台服务器就行,比如:xxCloud_HK-1C1G"
TELEGRAF_OPTS="-config <Configuration URL>"
INFLUX_TOKEN="<Configuration API Token>"
EOF
另外,使用远程配置文件需要清空 /etc/telegraf/telegraf.conf 里的内容或修改 /lib/systemd/system/telegraf.service
echo "" > /etc/telegraf/telegraf.conf
# 或者
vim /lib/systemd/system/telegraf.service # 将 ExecStart 参数修改成以下
ExecStart=/usr/bin/telegraf $TELEGRAF_OPTS
重新加载
systemctl daemon-reload
启动
systemctl start telegraf
6.可视化数据
返回目录
路径:Grafana > Dashboards > New > New dashboard > Add visualization > Select data source

7.完成
返回目录



