前言

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

目录

  1. 前置知识
  2. 部署前的准备
  3. 部署 InfluxDB
  4. 部署 Grafana
  5. 部署 Telegraf
  6. 可视化数据
  7. 完成

1.前置知识

返回目录

简要拓扑

Topological

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

Telegraf_VS_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 查看可用的磁盘,可以看到这里有两块磁盘 xvdaxvdbxvdb 就是我的数据盘,现在它还是个空盘,挂载不了,接下来需要将它格式化

$ 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

Visit-InfluxDB

3.9 初始化

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

Initialization_Step-1

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

Initialization_Step-2

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

Load Data > Bukets > CREATE BUCKET

Create-Buket_Step-1

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

Create-Buket_Step-2

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

Visit-Grafana

4.6 Grafana 连接 InfluxDB

4.6.1

回到 InfluxDB WebUI 创建允许 Grafana 读取数据的 Token。路径:

InfluxDB > Load Data > API Tokens > GENERATE API TOKEN > Custom API Token

Generate-API-Token_Step-1

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

Generate-API-Token_Step-2

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

Generate-API-Token_Step-3

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

Add-Data-Source

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

Create-Remote-Configuration_Step-1

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

Create-Remote-Configuration_Step-2

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

Create-Remote-Configuration_Step-3

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

Create-Remote-Configuration_Step-4

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

Create-Remote-Configuration_Step-5

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

Data-Visualization

7.完成

返回目录

Example_1

Example_2

Example_Special