Prometheus: 从 Linux 检索指标

如何使用 Node Exporter 在 Prometheus 中检索 Linux 服务器指标

👋 欢迎来到 Stackhero 文档!

Stackhero 提供即用型 Prometheus 云 解决方案,具有多种优势,包括:

  • 包含 Alert Manager,可发送警报到 SlackMattermostPagerDuty 等。
  • 专用电子邮件服务器发送无限制电子邮件警报
  • Blackbox 用于探测 HTTPICMPTCP 等。
  • 使用在线配置文件编辑器进行简单配置
  • 只需点击即可轻松更新
  • 专用私有 VM提供的最佳性能和强大安全性

节省时间简化生活:只需5 分钟即可试用 Stackhero 的 Prometheus 云托管 解决方案!

Node Exporter 是可以安装在 *NIX 内核(Linux、OpenBSD、FreeBSD 或 Darwin)上的软件,用于向 Prometheus 暴露系统指标。它是监控服务器性能和基础设施健康状况的重要组件。

在 Prometheus 术语中,Node Exporter 作为一个导出器,并在您的 Prometheus 配置中添加为目标。Prometheus 通过 HTTP 定期连接到 Node Exporter 的 TCP 端口 9100 以检索指标。

总之,Node Exporter 允许您监控基于 Linux 的系统。 对于 Windows 系统,您可以使用 Windows Exporter

Stackhero for Prometheus 的大图Stackhero for Prometheus 的大图

您可以从其 GitHub 发布页面 下载 Node Exporter。它作为一个直接在您的系统上运行的二进制文件分发。由于它设计为持续运行,建议您配置它以便在服务器启动时自动启动。

默认情况下,Node Exporter 在没有身份验证或加密的情况下向世界开放端口 9100。强烈建议您添加身份验证和 TLS 加密(见下文),并设置防火墙以限制对端口 9100 的访问,以便只有您的 Prometheus 服务器或其他授权 IP 地址可以连接。

您可以在 Ubuntu 上按照以下步骤操作:

# 前往 https://github.com/prometheus/node_exporter/releases 获取最新版本号。
node_exporter_version="1.2.0"
node_exporter_release="linux-amd64"

# 下载并安装 node_exporter
cd /tmp
wget https://github.com/prometheus/node_exporter/releases/download/v${node_exporter_version}/node_exporter-${node_exporter_version}.${node_exporter_release}.tar.gz
tar xvfa node_exporter-${node_exporter_version}.${node_exporter_release}.tar.gz
sudo mv node_exporter-${node_exporter_version}.${node_exporter_release}/node_exporter /usr/local/bin/
rm -rf node_exporter-${node_exporter_version}.${node_exporter_release} node_exporter-${node_exporter_version}.${node_exporter_release}.tar.gz

# 创建用户 "node_exporter"
sudo useradd -rs /bin/false node_exporter

# 创建 systemd 服务以在启动时自动启动 node_exporter
sudo bash -c 'cat << EOF > /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
After=network.target

[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter --web.config=/etc/prometheus_node_exporter/configuration.yml

[Install]
WantedBy=multi-user.target
EOF'

# 创建配置目录和文件
sudo mkdir -p /etc/prometheus_node_exporter/
sudo touch /etc/prometheus_node_exporter/configuration.yml
sudo chmod 700 /etc/prometheus_node_exporter
sudo chmod 600 /etc/prometheus_node_exporter/*
sudo chown -R node_exporter:node_exporter /etc/prometheus_node_exporter

sudo systemctl daemon-reload
sudo systemctl enable node_exporter

# 启动 node_exporter 守护进程并检查其状态
sudo systemctl start node_exporter
sudo systemctl status node_exporter

此时,node_exporter 二进制文件应该在您的服务器上运行。要确认它是否正常工作,您可以连接到它并检查它是否返回指标:

curl http://localhost:9100/metrics

Node Exporter 向公共网络开放端口 9100。这意味着任何人都可以连接并检索您的服务器指标! 至少,您应该添加身份验证和 TLS 加密(见下文),并强烈建议设置防火墙以阻止来自非 Prometheus 服务器的 IP 的端口 9100 请求。

在 Debian 上安装 Node Exporter 的过程与上述 Ubuntu 方法相同。只需按照相同的说明进行操作。

Node Exporter 的安装步骤取决于您使用的系统。虽然没有提供每个平台的详细文档,但基本步骤包括下载与您的系统匹配的二进制文件并配置它以在启动时启动。

默认情况下,Node Exporter 不执行身份验证,这意味着任何人都可以检索暴露的指标。为了保护访问,您可以为用户添加基本身份验证。

使用以下命令生成密码:

password=`openssl rand -base64 32`
passwordHashed=`echo ${password} | htpasswd -inBC 10 "" | tr -d ':'`
echo "为 Prometheus 服务器保留的明文密码:${password}"

如果您没有 htpasswd 二进制文件,可以使用 apt-get install --no-install-recommends apache2-utils 在 Debian/Ubuntu 上安装它。

请妥善保管明文密码,因为在配置 Prometheus 时需要用到它。

将以下行附加到配置文件中,以添加一个名为 "prometheus" 的用户,并使用生成的密码哈希:

sudo cat << EOF >> /etc/prometheus_node_exporter/configuration.yml
basic_auth_users:
  prometheus: ${passwordHashed}

EOF

# 重启 Node Exporter
sudo systemctl restart node_exporter

最后,验证身份验证是否正常工作:

  • 运行 curl http://localhost:9100/metrics 应返回 "Unauthorized"。
  • 运行 curl -u prometheus:${password} http://localhost:9100/metrics 应返回指标列表。

默认情况下,Node Exporter 不加密通信。这意味着包括之前定义的密码在内的凭据是以明文传输的。为了保护通信,您可以按如下方式启用 TLS 加密。

运行以下命令以创建 TLS 证书和密钥:

# 创建 TLS 证书
cd /tmp
sudo openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 \
  -keyout /etc/prometheus_node_exporter/tlsCertificate.key \
  -out /etc/prometheus_node_exporter/tlsCertificate.crt \
  -subj "/CN=`hostname`" \
  -addext "subjectAltName = DNS:`hostname`"
sudo chmod 600 /etc/prometheus_node_exporter/*
sudo chown -R node_exporter:node_exporter /etc/prometheus_node_exporter

将以下行附加到配置文件中以添加 TLS 设置,然后重启 Node Exporter:

sudo cat << 'EOF' >> /etc/prometheus_node_exporter/configuration.yml
tls_server_config:
  cert_file: /etc/prometheus_node_exporter/tlsCertificate.crt
  key_file: /etc/prometheus_node_exporter/tlsCertificate.key

EOF

# 重启 Prometheus Node Exporter
sudo systemctl restart node_exporter

您可以通过以下命令通过 HTTPS 连接来验证 TLS 是否处于活动状态:

curl -k -u prometheus:${password} https://localhost:9100/metrics

请注意,此方法不使用 CA 证书,因此您需要将 "-k" 选项传递给 cURL 以绕过证书验证。

安装并保护 Node Exporter 后,配置您的 Prometheus 服务器以定期抓取指标。

在 Stackhero 上,选择您的 Prometheus 服务并转到 "Prometheus configuration" URL。然后将以下内容添加到您的 scrape_configs 部分:

scrape_configs:

  - job_name: "My servers pool"
    static_configs:
      - targets: [ "<yourLinuxServerDomain>:9100" ]
    basic_auth:
      username: "prometheus"
      password: "<password>"
    scheme: https
    tls_config:
      insecure_skip_verify: true
    # 重标记 "instance" 以删除 ":9100" 部分
    relabel_configs:
      - source_labels: [__address__]
        target_label: instance
        regex: '([^:]+)(:[0-9]+)?'
        replacement: '${1}'

保存文件并检查 Prometheus 日志以确认它已成功重新加载(您可以通过选择您的 Prometheus 服务并单击 "Logs" 选项卡从 Stackhero 仪表板查看日志)。

最后,通过访问 Stackhero 仪表板上的 Prometheus UI 并导航到 Status > Targets,验证 Prometheus 是否正在抓取指标。您的 Linux 服务器应在目标列表中显示为 UP。

目标 "myLinuxServer" 是 UP目标 "myLinuxServer" 是 UP

要查看从 Node Exporter 检索的指标,请通过 Stackhero 仪表板使用 "Prometheus UI" URL 或直接访问 https://<prometheusDomain>/ 登录到 Prometheus。

在 "Expression" 字段中,输入 node_memory_MemTotal_bytes 并按回车键。如果一切配置正确,您将看到服务器的总 RAM 以字节显示。

此服务器的总 RAM 为 4068794368 字节,即 3.78GB此服务器的总 RAM 为 4068794368 字节,即 3.78GB

Grafana 可以轻松生成基于 Prometheus 数据的仪表板。有关配置 Grafana 以显示 Prometheus 数据的详细说明,请参阅 Grafana 的文档

基于 Prometheus Node Exporter 数据生成的 Grafana 仪表板示例基于 Prometheus Node Exporter 数据生成的 Grafana 仪表板示例