如何在 Debian 12 上安装 TIG Stack(Telegraf、InfluxDB 和 Grafana)
TIG(Telegraf、InfluxDB 和 Grafana)堆栈是开源工具平台的缩写,旨在使系统指标的收集、存储、绘图和警报变得更加容易。您可以从一处监控和可视化内存、磁盘空间、登录用户、系统负载、交换使用情况、正常运行时间、运行进程等指标。堆栈中使用的工具如下:
- Telegraf - 是一个开源指标收集代理,用于从数据库、系统和物联网传感器收集和发送数据和事件。它支持各种输出插件,例如 InfluxDB、Graphite、Kafka 等,可以将收集到的数据发送到这些插件。
- InfluxDB - 是一个用Go语言编写的开源时序数据库。它针对快速、高可用性存储进行了优化,适用于涉及大量时间戳数据的任何情况,包括指标、事件和实时分析。
- Grafana - 是一个开源数据可视化和监控套件。它支持各种输入插件,例如 Graphite、ElasticSearch、InfluxDB 等。它提供了漂亮的仪表板和指标分析,使您可以可视化和监控任何类型的系统指标和性能数据。
在本教程中,您将学习如何在单个 Debian 12 服务器上安装和配置 TIG Stack。
先决条件
运行 Debian 12 且至少具有 1 GB RAM 的服务器。
具有 root 权限的非 sudo 用户。
简单的防火墙(UFW)已启用并正在运行。
完全合格的域名 (FQDN),例如指向您的服务器的 grafana.example.com
。
具有 Amazon SES 或 Mailgun 等电子邮件服务的 SMTP 账户,用于获取服务警报的电子邮件通知。
确保一切都已更新。
$ sudo apt update && sudo apt upgrade
本教程和 Craft CMS 的运行需要一些必要的软件包。其中一些已经在您的服务器上。
$ sudo apt install curl wget nano software-properties-common dirmngr apt-transport-https ca-certificates lsb-release debian-archive-keyring gnupg2 ufw unzip -y
第 1 步 - 配置防火墙
在安装任何软件包之前,第一步是配置防火墙以打开 InfluxDB 和 Grafana 的端口。
检查防火墙的状态。
$ sudo ufw status
您应该看到类似以下内容。
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
为 InfluxDB 打开端口 8086,为 Grafana 服务器打开端口 3000。
$ sudo ufw allow 8086
$ sudo ufw allow 3000
允许 HTTP 和 HTTPs 端口。
$ sudo ufw allow http
$ sudo ufw allow https
再次检查状态以确认。
$ sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
8086 ALLOW Anywhere
3000 ALLOW Anywhere
80/tcp ALLOW Anywhere
443 ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
8086 (v6) ALLOW Anywhere (v6)
3000 (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443 (v6) ALLOW Anywhere (v6)
第 2 步 - 安装 InfluxDB
我们将使用 InfluxDB 的官方存储库来安装它。
下载 InfluxDB GPG 密钥。
$ wget -q https://repos.influxdata.com/influxdata-archive_compat.key
将 GPG 密钥导入服务器。
$ 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
influxdata-archive_compat.key: OK
导入 InfluxDB 存储库。
$ 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
更新系统的存储库列表。
$ sudo apt update
您可以选择安装 InfluxDB 1.8.x 或 2.0.x。不过,最好使用最新版本。安装 InfluxDB。
$ sudo apt install influxdb2
启动 InfluxDB 服务。
$ sudo systemctl start influxdb
检查服务的状态。
$ sudo systemctl status influxdb
? influxdb.service - InfluxDB is an open-source, distributed, time series database
Loaded: loaded (/lib/systemd/system/influxdb.service; enabled; preset: enabled)
Active: active (running) since Tue 2024-01-02 02:39:41 UTC; 1s ago
Docs: https://docs.influxdata.com/influxdb/
Process: 5584 ExecStart=/usr/lib/influxdb/scripts/influxd-systemd-start.sh (code=exited, status=0/SUCCESS)
Main PID: 5585 (influxd)
Tasks: 8 (limit: 2299)
Memory: 53.1M
CPU: 735ms
CGroup: /system.slice/influxdb.service
??5585 /usr/bin/influxd
........
第 3 步 - 创建 InfluxDB 数据库和用户凭证
要存储来自 Telegraf 的数据,您需要设置 Influx 数据库和用户。
InfluxDB 附带了一个名为 influx 的命令行工具,用于与 InfluxDB 服务器交互。将 influx
视为 mysql
命令行工具。
运行以下命令来执行 Influx 的初始配置。
$ influx setup
> Welcome to InfluxDB 2.0!
? Please type your primary username navjot
? Please type your password ***************
? Please type your password again ***************
? Please type your primary organization name howtoforge
? Please type your primary bucket name tigstack
? Please type your retention period in hours, or 0 for infinite 360
? Setup with these parameters?
Username: navjot
Organization: howtoforge
Bucket: tigstack
Retention Period: 360h0m0s
Yes
User Organization Bucket
navjot howtoforge tigstack
您需要设置初始用户名、密码、组织名称、用于存储数据的主存储桶名称以及该数据的保留期(以小时为单位)。您的详细信息存储在 /home/username/.influxdbv2/configs
文件中。
您还可以通过在浏览器中启动 URL http://
来执行此设置。执行初始设置后,您可以使用上面创建的凭据登录 URL。
您应该会看到以下仪表板。
初始设置过程会创建一个默认令牌,该令牌对数据库中的所有组织具有完全的读写访问权限。出于安全目的,您需要一个新令牌,该令牌仅连接到我们想要连接的组织和存储桶。
要创建新令牌,请单击左侧边栏中的以下图标,然后单击 API 令牌 链接继续。
您将进入 API 令牌页面。在这里,您将看到我们在初始配置时创建的默认令牌。
单击生成 API 令牌按钮并选择自定义 API 令牌选项以启动新的叠加弹出窗口。为令牌命名 (telegraf
),展开资源部分,然后选择我们在读取和写入部分下创建的默认存储桶。
单击生成完成令牌创建。单击复制到剪贴板按钮复制令牌。该按钮在某些情况下可能不起作用,因此请确保在关闭弹出窗口之前进行确认。
现在保存它,因为我们稍后会需要它。
这样就完成了InfluxDB的安装和配置。接下来,我们需要安装 Telegraf。
第 4 步 - 安装 Telegraf
Telegraf 和 InfluxDB 共享相同的存储库。这意味着您可以直接安装 Telegraf。
$ sudo apt install telegraf
Telegraf 的服务在安装过程中自动启用并启动。
Telegraf 是一个插件驱动的代理,有 4 种类型的插件:
- 输入插件收集指标。
- 处理器插件转换、装饰和过滤指标。
- 聚合器插件创建和聚合指标。
- 输出插件定义发送指标的目的地,包括 InfluxDB。
Telegraf 将所有这些插件的配置存储在文件 /etc/telegraf/telegraf.conf
中。第一步是通过启用 influxdb_v2
输出插件将 Telegraf 连接到 InfluxDB。打开文件 /etc/telegraf/telegraf.conf
进行编辑。
$ sudo nano /etc/telegraf/telegraf.conf
找到行 [[outputs.influxdb_v2]]
并通过删除其前面的 # 来取消注释。按照以下方式编辑掉下面的代码。
# # Configuration for sending metrics to InfluxDB 2.0
[[outputs.influxdb_v2]]
# ## The URLs of the InfluxDB cluster nodes.
# ##
# ## Multiple URLs can be specified for a single cluster, only ONE of the
# ## urls will be written to each interval.
# ## ex: urls = ["https://us-west-2-1.aws.cloud2.influxdata.com"]
urls = ["http://127.0.0.1:8086"]
#
# ## Token for authentication.
token = "$INFLUX_TOKEN"
#
# ## Organization is the name of the organization you wish to write to.
organization = "howtoforge"
#
# ## Destination bucket to write into.
bucket = "tigstack"
将之前保存的 InfluxDB 令牌值粘贴到上面代码中的 $INFLUX_TOKEN
变量的位置。
搜索 INPUT PLUGINS
行,您将看到默认启用的以下输入插件。
# Read metrics about cpu usage
[[inputs.cpu]]
## Whether to report per-cpu stats or not
percpu = true
## Whether to report total system cpu stats or not
totalcpu = true
## If true, collect raw CPU time metrics
collect_cpu_time = false
## If true, compute and report the sum of all non-idle CPU states
report_active = false
## If true and the info is available then add core_id and physical_id tags
core_tags = false
# Read metrics about disk usage by mount point
[[inputs.disk]]
## By default stats will be gathered for all mount points.
## Set mount_points will restrict the stats to only the specified mount points.
# mount_points = ["/"]
## Ignore mount points by filesystem type.
ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"]
## Ignore mount points by mount options.
## The 'mount' command reports options of all mounts in parathesis.
## Bind mounts can be ignored with the special 'bind' option.
# ignore_mount_opts = []
# Read metrics about disk IO by device
[[inputs.diskio]]
....
....
# Get kernel statistics from /proc/stat
[[inputs.kernel]]
# no configuration
# Read metrics about memory usage
[[inputs.mem]]
# no configuration
# Get the number of processes and group them by status
[[inputs.processes]]
# no configuration
# Read metrics about swap memory usage
[[inputs.swap]]
# no configuration
# Read metrics about system load & uptime
[[inputs.system]]
# no configuration
您可以根据需要配置其他输入插件,包括 Apache Server、Docker 容器、Elasticsearch、iptables 防火墙、Kubernetes、Memcached、MongoDB、MySQL、Nginx、PHP-fpm、Postfix、RabbitMQ、Redis、Varnish、Wireguard、PostgreSQL 等。
完成后,按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
应用更改后,重新启动 Telegraf 服务。
$ sudo systemctl restart telegraf
第 5 步 - 验证 Telegraf 统计信息是否存储在 InfluxDB 中
在继续之前,您需要验证 Telegraf 统计信息是否已正确收集并输入到 InfluxDB 中。在浏览器中打开 InfluxDB UI,单击左侧边栏中的第二个图标,然后选择 Buckets 菜单。
单击tigstack,您应该会看到以下页面。
单击存储桶名称,然后单击 _measurement
过滤器中的值之一,并在出现其他值时继续单击它们。完成后,点击提交按钮。您应该在顶部看到一个图表。您可能需要等待一段时间才能显示数据。我们将时间间隔从过去 1 小时改为过去 5m,以生成大面积的图表。
这应该确认数据正在正确传递。
第 6 步 - 安装 Grafana
我们将使用官方 Grafana 存储库来安装它。导入 Grafana GPG 密钥。
$ sudo mkdir -p /etc/apt/keyrings/
$ wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null
将存储库添加到您的系统。
$ echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
如果您想安装 Grafana beta,请添加以下存储库。
$ echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com beta main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
更新系统存储库列表。
$ sudo apt update
安装 Grafana。
$ sudo apt install grafana
启动并启用 Grafana 服务。
$ sudo systemctl enable grafana-server --now
检查服务状态。
$ sudo systemctl status grafana-server
? grafana-server.service - Grafana instance
Loaded: loaded (/lib/systemd/system/grafana-server.service; enabled; preset: enabled)
Active: active (running) since Tue 2024-01-02 03:48:01 UTC; 3s ago
Docs: http://docs.grafana.org
Main PID: 8769 (grafana)
Tasks: 7 (limit: 2299)
Memory: 42.6M
CPU: 1.804s
CGroup: /system.slice/grafana-server.service
??8769 /usr/share/grafana/bin/grafana server --config=/etc/grafana/grafana.ini --pidfile=/run/grafana/grafana-server.pid --packaging=deb cfg:default.paths.logs=/var/log/grafana cfg:default.paths...
.......
第 7 步 - 设置 Grafana 数据源
在浏览器中启动 URL http://
,下面的 Grafana 登录页面将会迎接您。
使用默认用户名 admin
和密码 admin
登录。接下来,您需要设置一个新的默认密码。
您将看到以下 Grafana 主页。单击添加您的第一个数据源按钮。
单击InfluxDB按钮。
在下一页上,从下拉菜单中选择 Flux 作为查询语言。您可以使用InfluxQL作为查询语言,但配置比较复杂,因为它默认仅支持InfluxDB v1.x。 Flux 支持 InfluxDB v2.x 并且更易于设置和配置。
输入以下值。
URL: http://localhost:8086
基本身份验证详细信息 用户: navjot 密码: <yourinfluxdbpassword>
InfluxDB详细信息 组织: howtoforge 令牌: <influxdbtoken>
默认存储桶: tigstack
单击保存并测试按钮,您应该会看到一条确认消息,验证设置是否成功。
第 8 步 - 设置 Grafana 仪表板
下一步是设置 Grafana 仪表板。单击主页左侧的汉堡菜单,然后单击仪表板以打开“仪表板创建”屏幕。
单击创建仪表板按钮继续。
在下一页上,单击添加可视化按钮启动叠加层,然后单击influxdb-1
将其选择为数据源。
您将进入以下编辑面板页面。
将以下代码粘贴到查询编辑器中。
from(bucket: "NAMEOFYOUBUCKET")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "cpu")
|> filter(fn: (r) => r["_field"] == "usage_idle")
|> filter(fn: (r) => r["cpu"] == "cpu-total")
|> filter(fn: (r) => r["host"] == "NAMEOFYOURHOST")
|> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
|> map(fn: (r) => ({ r with _value: r._value * -1.0 + 100.0 }))
|> toFloat()
|> yield(name: "mean")
使用我们上面使用的存储桶名称。您可以从文件 /etc/hostname
中检索主机的名称。
上面的代码将计算 CPU 使用率并为其生成图表。给面板起一个标题。
单击查询检查器按钮,然后单击刷新按钮以验证查询是否成功运行。单击十字图标关闭检查器。
您还可以使用轴部分右侧的标签字段来命名轴。
单击应用按钮保存面板。完成后,点击保存仪表板按钮。
为仪表板命名,然后单击保存完成。
它将打开仪表板,然后单击添加可视化按钮来创建另一个面板。
通过创建另一个 RAM 使用面板来重复该过程。
from(bucket: "NAMEOFYOUBUCKET")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "mem")
|> filter(fn: (r) => r["_field"] == "used_percent")
|> filter(fn: (r) => r["host"] == "NAMEOFYOURHOST")
|> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
|> yield(name: "mean")
使用以下代码显示 HDD 使用情况。
from(bucket: "NAMEOFYOURBUCKET")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "disk")
|> filter(fn: (r) => r["_field"] == "used")
|> filter(fn: (r) => r["path"] == "/")
|> filter(fn: (r) => r["host"] == "NAMEOFYOURHOST")
|> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
|> map(fn: (r) => ({ r with _value: r._value / 1000000.0 }))
|> toFloat()
|> yield(name: "mean")
您可以创建无限数量的面板。
上面的代码是基于Flux脚本语言的。幸运的是,您不需要学习编写查询的语言。您可以从 InfluxDB URL 生成查询。尽管学习该语言有助于优化查询。
您需要返回 InfluxDB 仪表板并打开探索页面才能获取查询。
单击存储桶名称,然后单击 _measurement
过滤器中的值之一,并在出现其他值时继续单击它们。完成后,单击脚本编辑器按钮,您应该看到以下页面。图表也应该更新。
复制显示的查询,您现在可以在 Grafana 仪表板中使用它来构建图表。
第 9 步 - 配置警报和通知
设置监视器的主要用途是当值超过某个阈值时及时收到警报。
第一步是设置您想要接收警报的目的地。您可以通过电子邮件、Slack、Kafka、Google Hangouts Chat、Microsoft Teams、Telegram 等接收通知。
我们将为我们的教程启用电子邮件通知。要设置电子邮件通知,我们需要首先配置 SMTP 服务。打开用于配置 SMTP 的 /etc/grafana/grafana.ini
文件。
$ sudo nano /etc/grafana/grafana.ini
在其中找到以下行 [smtp]
。取消注释以下行并输入自定义 SMTP 服务器的值。
[smtp]
enabled = true
host = email-smtp.us-west-2.amazonaws.com:587
user = YOURUSERNAME
# If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;"""
password = YOURUSERPASSWORD
;cert_file =
;key_file =
;skip_verify = false
from_address = [email
from_name = HowtoForge Grafana
# EHLO identity in SMTP dialog (defaults to instance_name)
;ehlo_identity = dashboard.example.com
# SMTP startTLS policy (defaults to 'OpportunisticStartTLS')
;startTLS_policy = NoStartTLS
按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
重新启动 Grafana 服务器以应用设置。
$ sudo systemctl restart grafana-server
打开 Grafana 页面,单击“警报”图标,然后单击联系人。
Grafana 会自动创建并设置默认电子邮件联系点,必须使用正确的电子邮件地址配置该联系点。单击 grafana-default-email
联系点上的编辑按钮。
输入详细信息以设置电子邮件通知渠道。
如果您想发送其他消息,请点击可选电子邮件设置链接并输入消息。
点击测试打开弹出窗口,然后点击发送测试通知按钮查看电子邮件设置是否有效。完成后点击保存联系点。
您应该会收到以下电子邮件来确认设置。
现在我们已经设置了通知渠道,我们需要设置有关何时接收这些电子邮件的警报。要设置警报,您需要返回仪表板面板。
返回仪表板屏幕。单击我们刚刚创建的仪表板,您将获得带有不同面板的主页。要编辑面板,单击面板名称,将弹出一个下拉菜单。单击编辑链接继续。
单击警报面板,然后单击新警报规则按钮设置新警报。我们正在为 CPU 使用率面板创建警报。
您现在可以配置 Grafana 发送警报的条件。单击选项链接下拉菜单,然后选择默认时间范围(现在-6小时到现在),将时间范围更改为过去 15 分钟,这意味着它将检查从 15几分钟前到现在。
默认情况下,选定的警报类型是 Grafana 管理的警报。默认选择两个表达式。按它们旁边的垃圾按钮即可删除它们。选择添加表达式下拉列表,然后选择经典条件作为表达式类型。
单击设置为警报条件以选择用于发送警报的所选表达式。这样做将更改表达式框,如下所示。
状况
Grafana 使用以下格式的查询来确定何时启动警报。
avg() OF query(A) IS ABOVE 0.8
- avg() 控制如何将每个系列的值减少到与阈值相当的值。您可以单击函数名称来选择不同的函数,例如 avg()、min()、max()、sum()、count() 等。
您可以通过单击第一个条件下方的 + 按钮在其下方添加第二个条件。目前,您只能在多个条件之间使用 AND 和 OR 运算符。
接下来,我们将设置评估行为。单击新建文件夹按钮创建一个文件夹来存储您的规则。单击新评估组按钮创建一个俱乐部规则组,该规则将在相同的时间间隔后进行评估。创建组时设置时间间隔为5m。
完成后,页面应如下所示。将执行错误或超时时的警报状态设置为警报。
规则
- 名称 - 输入警报的描述性名称
- 文件夹 - 创建或选择一个预先存在的文件夹来存储您的通知规则。
- 组 - 输入警报组的名称。在相同的时间间隔后评估单个组中的警报。
- 待处理 - 指定 Grafana 评估警报的频率。它也称为评估区间。您可以在这里设置任何您想要的值。
无数据和错误处理
您可以使用以下条件配置 Grafana 如何处理不返回数据或仅返回空值的查询:
- 无数据 - 将规则状态设置为
NoData
- 警报 - 将规则状态设置为
警报
- 确定 - 将警报规则状态设置为
确定
,因为即使一切正常,您也会收到警报。
您可以告诉 Grafana 如何处理执行或超时错误。
- 警报 - 将规则状态设置为
警报
- 确定 - 将警报规则状态设置为
确定
,因为即使一切正常,您也会收到警报。 - 错误 - 将警报规则状态设置为“错误”以指示存在问题。
完成后,单击按钮预览警报以查看一切是否正常。单击右上角的保存规则并退出按钮即可完成添加警报。您现在应该开始收到电子邮件提醒。以下是一封此类电子邮件的示例。
第10步-安装Nginx
Debian 12 附带旧版本的 Nginx。您需要下载官方 Nginx 存储库来安装最新版本。
导入 Nginx 的签名密钥。
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
添加 Nginx 主线版本的存储库。
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/mainline/debian `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
更新系统存储库。
$ sudo apt update
安装 Nginx。
$ sudo apt install nginx
验证安装。在 Debian 系统上,以下命令仅适用于 sudo
。
$ sudo nginx -v
nginx version: nginx/1.25.3
启动 Nginx 服务器。
$ sudo systemctl start nginx
检查服务状态。
$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled)
Active: active (running) since Tue 2024-01-02 09:21:10 UTC; 5s ago
Docs: https://nginx.org/en/docs/
Process: 12964 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
Main PID: 12965 (nginx)
Tasks: 3 (limit: 2299)
Memory: 2.9M
CPU: 86ms
CGroup: /system.slice/nginx.service
??12965 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
??12966 "nginx: worker process"
??12967 "nginx: worker process"
Jan 02 09:21:10 grafana systemd[1]: Starting nginx.service - nginx - high performance web server...
Jan 02 09:21:10 grafana systemd[1]: Started nginx.service - nginx - high performance web server.
第 11 步 - 安装 SSL
我们需要安装 Certbot 来生成 SSL 证书。您可以使用 Debian 的存储库安装 Certbot,也可以使用 Snapd 工具获取最新版本。我们将使用 Snapd 版本。
Debian 12 并未安装 Snapd。安装 Snapd 软件包。
$ sudo apt install snapd
运行以下命令以确保您的 Snapd 版本是最新的。
$ sudo snap install core && sudo snap refresh core
安装证书机器人。
$ sudo snap install --classic certbot
使用以下命令确保可以通过创建到 /usr/bin
目录的符号链接来运行 Certbot 命令。
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
验证 Certbot 是否正常运行。
$ certbot --version
certbot 2.8.0
运行以下命令生成 SSL 证书。
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email -d grafana.example.com
上述命令会将证书下载到服务器上的 /etc/letsencrypt/live/grafana.example.com
目录中。
生成 Diffie-Hellman 组证书。
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
检查 Certbot 续订调度程序服务。
$ systemctl list-timers
您会发现 snap.certbot.renew.service
是计划运行的服务之一。
NEXT LEFT LAST PASSED UNIT ACTIVATES
-----------------------------------------------------------------------------------------------------------------------------------------
Tue 2024-01-02 15:24:52 UTC 6h left Mon 2024-01-01 15:24:52 UTC 17h ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
Tue 2024-01-02 20:05:29 UTC 10h left Tue 2024-01-02 09:02:47 UTC 21min ago apt-daily.timer apt-daily.service
Tue 2024-01-02 20:35:00 UTC 11h left - - snap.certbot.renew.timer snap.certbot.renew.service
对该过程进行一次演练,以检查 SSL 续订是否正常工作。
$ sudo certbot renew --dry-run
如果没有看到任何错误,则一切都已准备就绪。您的证书将自动更新。
第 12 步 - 为 Grafana 和 InfluxDB 配置 Nginx
打开文件 /etc/nginx/nginx.conf
进行编辑。
$ sudo nano /etc/nginx/nginx.conf
在 include /etc/nginx/conf.d/*.conf;
行之前添加以下行。
server_names_hash_bucket_size 64;
按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
创建并打开文件 /etc/nginx/conf.d/grafana.conf
进行编辑。
$ sudo nano /etc/nginx/conf.d/grafana.conf
将以下代码粘贴到其中。将 grafana.example.com
替换为您的域名。
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 443 ssl reuseport;
listen [::]:443 ssl reuseport;
http2 on;
server_name grafana.example.com;
access_log /var/log/nginx/grafana.access.log;
error_log /var/log/nginx/grafana.error.log;
ssl_certificate /etc/letsencrypt/live/grafana.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/grafana.example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/grafana.example.com/chain.pem;
ssl_session_timeout 5m;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
ssl_stapling on;
ssl_stapling_verify on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
resolver 1.1.1.1 1.0.0.1 [2606:4700:4700::1111] [2606:4700:4700::1001] valid=60s;
resolver_timeout 2s;
location / {
proxy_set_header Host $http_host;
proxy_pass http://localhost:3000;
}
location /api/live {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $http_host;
proxy_pass http://localhost:3000;
}
location /influxdb/ {
access_log /var/log/nginx/influx.access.log;
error_log /var/log/nginx/influx.error.log;
rewrite ^/influxdb$ /influxdb/ permanent;
rewrite ^/influxdb/(.*)$ /$1 break;
proxy_cookie_path ~*^/api /influxdb/api;
proxy_connect_timeout 600s;
proxy_http_version 1.1;
proxy_pass http://localhost:8086;
proxy_read_timeout 600s;
proxy_send_timeout 600s;
proxy_set_header Authorization $http_authorization;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Real-IP $remote_addr;
sub_filter '<base href="/">' '<base href="/influxdb/">';
sub_filter 'src="/' 'src="/influxdb/';
sub_filter 'href="/' 'href="/influxdb/';
sub_filter 'data-basepath="' 'data-basepath="/influxdb/';
sub_filter 'n.p="/"' 'n.p="/influxdb/"';
sub_filter 'o.p="/"' 'o.p="/influxdb/"';
sub_filter '/api/' '/influxdb/api/';
sub_filter 'api/v2/query' 'influxdb/api/v2/query';
sub_filter '/health`' '/influxdb/health`';
sub_filter_types text/css text/javascript application/javascript application/json;
sub_filter_once off;
}
}
# enforce HTTPS
server {
listen 80;
listen [::]:80;
server_name grafana.example.com;
return 301 https://$host$request_uri;
}
按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
验证您的 Nginx 配置。
$ sudo nginx -t
重新启动 Nginx 服务器。
$ sudo systemctl restart nginx
配置 Telegraf 以使用 HTTPS
打开文件 /etc/telegraf/telegraf.conf
进行编辑。
$ sudo nano /etc/telegraf/telegraf.conf
搜索[[outputs.influxdb_v2]]
部分并将URL的值更改为https://grafana.nspeaks.com/influxdb
,以便InfluxDB之间的数据并且 Telegraf 是安全的。
urls = ["https://grafana.example.com/influxdb"]
按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
重新启动 Telegraf 服务。
$ sudo systemctl restart telegraf
为 Grafana 配置 HTTPS
接下来,我们需要配置 Grafana 以进行 HTTPS 访问。打开 /etc/grafana/grafana.ini
文件进行编辑。
$ sudo nano /etc/grafana/grafana.ini
找到 [server]
部分并更改 domain
变量和 root_url
,如下所示。
# The public facing domain name used to access grafana from a browser
;domain = localhost
domain = grafana.example.com
# Redirect to correct domain if host header does not match domain
# Prevents DNS rebinding attacks
;enforce_domain = true
# The full public facing url you use in browser, used for redirects and emails
# If you use reverse proxy and sub path specify full url (with sub path)
;root_url = %(protocol)s://%(domain)s:%(http_port)s/
root_url = %(protocol)s://%(domain)s
按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
重新启动 Grafana 服务器。
$ sudo systemctl restart grafana-server
关闭 InfluxDB 和 Grafana 的防火墙端口
您还应该关闭 InfluxDB 和 Grafana 端口。
$ sudo ufw delete allow 8086
$ sudo ufw delete allow 3000
Grafana 应可通过 https://grafana.example.com
访问,InfluxDB UI 和 API 均应可通过 URL https://grafana.example.com/influxdb
访问>。
结论
关于在 Debian 12 服务器上安装和配置 TIG Stack 的教程到此结束。如果您有任何疑问,请在下面的评论中发表。