如何在 Debian 12 上安装 TIG Stack(Telegraf、InfluxDB 和 Grafana)如何在 Debian 12 上安装 TIG Stack(Telegraf、InfluxDB 和 Grafana)如何在 Debian 12 上安装 TIG Stack(Telegraf、InfluxDB 和 Grafana)如何在 Debian 12 上安装 TIG Stack(Telegraf、InfluxDB 和 Grafana)
  • 业务
  • 目标
  • 支持
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容

如何在 Debian 12 上安装 TIG Stack(Telegraf、InfluxDB 和 Grafana)

发表 admin at 2025年2月28日
类别
  • 未分类
标签

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://:8086/ 来执行此设置。执行初始设置后,您可以使用上面创建的凭据登录 URL。

您应该会看到以下仪表板。

初始设置过程会创建一个默认令牌,该令牌对数据库中的所有组织具有完全的读写访问权限。出于安全目的,您需要一个新令牌,该令牌仅连接到我们想要连接的组织和存储桶。

要创建新令牌,请单击左侧边栏中的以下图标,然后单击 API 令牌 链接继续。

您将进入 API 令牌页面。在这里,您将看到我们在初始配置时创建的默认令牌。

单击生成 API 令牌按钮并选择自定义 API 令牌选项以启动新的叠加弹出窗口。为令牌命名 (telegraf),展开资源部分,然后选择我们在读取和写入部分下创建的默认存储桶。

单击生成完成令牌创建。单击复制到剪贴板按钮复制令牌。该按钮在某些情况下可能不起作用,因此请确保在关闭弹出窗口之前进行确认。

现在保存它,因为我们稍后会需要它。

这样就完成了InfluxDB的安装和配置。接下来,我们需要安装 Telegraf。

第 4 步 - 安装 Telegraf

Telegraf 和 InfluxDB 共享相同的存储库。这意味着您可以直接安装 Telegraf。

$ sudo apt install telegraf

Telegraf 的服务在安装过程中自动启用并启动。

Telegraf 是一个插件驱动的代理,有 4 种类型的插件:

  1. 输入插件收集指标。
  2. 处理器插件转换、装饰和过滤指标。
  3. 聚合器插件创建和聚合指标。
  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://:3000,下面的 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() 等。

    查询(A) 括号中的字母定义要从指标选项卡执行的查询。

    IS BELOW 14 定义阈值类型和阈值。您可以单击IS BELOW来选择不同的阈值类型。

您可以通过单击第一个条件下方的 + 按钮在其下方添加第二个条件。目前,您只能在多个条件之间使用 AND 和 OR 运算符。

接下来,我们将设置评估行为。单击新建文件夹按钮创建一个文件夹来存储您的规则。单击新评估组按钮创建一个俱乐部规则组,该规则将在相同的时间间隔后进行评估。创建组时设置时间间隔为5m。

完成后,页面应如下所示。将执行错误或超时时的警报状态设置为警报。

规则

  • 名称 - 输入警报的描述性名称
  • 文件夹 - 创建或选择一个预先存在的文件夹来存储您的通知规则。
  • 组 - 输入警报组的名称。在相同的时间间隔后评估单个组中的警报。
  • 待处理 - 指定 Grafana 评估警报的频率。它也称为评估区间。您可以在这里设置任何您想要的值。

无数据和错误处理

您可以使用以下条件配置 Grafana 如何处理不返回数据或仅返回空值的查询:

  1. 无数据 - 将规则状态设置为NoData
  2. 警报 - 将规则状态设置为警报
  3. 确定 - 将警报规则状态设置为确定,因为即使一切正常,您也会收到警报。

您可以告诉 Grafana 如何处理执行或超时错误。

  1. 警报 - 将规则状态设置为警报
  2. 确定 - 将警报规则状态设置为确定,因为即使一切正常,您也会收到警报。
  3. 错误 - 将警报规则状态设置为“错误”以指示存在问题。

完成后,单击按钮预览警报以查看一切是否正常。单击右上角的保存规则并退出按钮即可完成添加警报。您现在应该开始收到电子邮件提醒。以下是一封此类电子邮件的示例。

第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 的教程到此结束。如果您有任何疑问,请在下面的评论中发表。

©2015-2025 Norria support@norria.com