Apache Web Server (httpd)

本文档介绍了如何配置 Google Kubernetes Engine 部署,以便使用 Google Cloud Managed Service for Prometheus 从 Apache Web 服务器 (httpd) 收集指标。本页面介绍如何完成以下任务:

  • 为 Apache Web 服务器设置导出器以报告指标。
  • 为 Managed Service for Prometheus 配置 PodMonitoring 资源以收集导出的指标。
  • 在 Cloud Monitoring 中访问信息中心以查看指标。

以下说明仅在您将代管式收集功能与 Managed Service for Prometheus 搭配使用时适用。 如果您使用的是自行部署的收集功能,请参阅 Apache HTTP 导出器的源代码库以了解安装信息。

这些说明仅作为示例提供,应该适用于大多数 Kubernetes 环境。如果您因为限制性安全或组织政策而无法安装应用或导出器,则我们建议您查阅开源文档以获取支持。

如需了解 Apache Web 服务器,请参阅 Apache HTTP

前提条件

如需使用 Managed Service for Prometheus 和代管式收集从 Apache Web 服务器收集指标,您的部署必须满足以下要求:

  • 您的集群必须运行 Google Kubernetes Engine 1.21.4-gke.300 或更高版本。
  • 您必须运行 Managed Service for Prometheus,并启用代管式收集功能。如需了解详情,请参阅代管式收集功能使用入门

  • 如需使用 Cloud Monitoring 中提供的信息中心进行 Apache Web 服务器集成,您必须使用 httpd_exporter 1.0.0 版或更高版本。

    如需详细了解可用的信息中心,请参阅查看信息中心

安装 Apache Web 服务器导出器

我们建议您将 Apache Web 服务器导出器 httpd_exporter 作为边车安装到 Apache Web 服务器工作负载。如需了解如何使用 Sidecar,请参阅具有多容器 pod 的 Kubernetes 上的扩展应用

如需将 httpd_exporter 作为边车安装到 Apache Web 服务器,请修改 Apache Web 服务器配置,如以下示例所示:

# Copyright 2023 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
apiVersion: v1
kind: ConfigMap
metadata:
  name: httpd
data:
  httpd.conf: |
    ...
+   <Location "/server-status">
+       SetHandler server-status
+   </Location>
+   LoadModule status_module modules/mod_status.so
    ...
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: httpd
spec:
  replicas: 1
  selector:
    matchLabels:
+     app.kubernetes.io/name: httpd
  template:
    metadata:
      labels:
+       app.kubernetes.io/name: httpd
    spec:
      containers:
      - name: httpd
        image: httpd:2.4
        ports:
        - containerPort: 80
          name: httpd
+       volumeMounts:
+       - mountPath: /usr/local/apache2/conf/httpd.conf
+         subPath: httpd.conf
+         name: httpd
+     - name: httpd-exporter
+       image: lusotycoon/apache-exporter:v1.0.0
+       ports:
+       - containerPort: 9117
+         name: prometheus
+       command: ["/bin/apache_exporter"]
+       args: ["--scrape_uri=http://localhost/server-status?auto", "--web.listen-address=:9117", "--telemetry.endpoint=/metrics"]
+     volumes:
+     - name: httpd
+       configMap:
+         name: httpd
+         items:
+         - key: httpd.conf
+           path: httpd.conf

您必须将开头为 + 符号的所有行添加到您的配置中。

这些说明假定您已安装正常运行的 Apache 网络服务器,并且想要对其进行修改以包含导出器。Apache HTTP 服务器可以配置为在 /server-status 上提供指标,方法是使用新的 Location 指令修改配置并加载 status_module

如需从本地文件应用配置更改,请运行以下命令:

kubectl apply -n NAMESPACE_NAME -f FILE_NAME

您还可以使用 Terraform 管理您的配置。

定义 PodMonitoring 资源

对于目标发现,Managed Service for Prometheus Operator 需要与同一命名空间中的 Apache Web 服务器导出器对应的 PodMonitoring 资源。

您可以使用以下 PodMonitoring 配置:

# Copyright 2023 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
apiVersion: monitoring.googleapis.com/v1
kind: PodMonitoring
metadata:
  name: httpd
  labels:
    app.kubernetes.io/name: httpd
    app.kubernetes.io/part-of: google-cloud-managed-prometheus
spec:
  endpoints:
  - port: prometheus
    scheme: http
    interval: 30s
    path: /metrics
  selector:
    matchLabels:
      app.kubernetes.io/name: httpd

确保标签选择器和端口与安装 Apache Web 服务器导出器中使用的选择器和端口匹配。

如需从本地文件应用配置更改,请运行以下命令:

kubectl apply -n NAMESPACE_NAME -f FILE_NAME

您还可以使用 Terraform 管理您的配置。

验证配置

您可以使用 Metrics Explorer 来验证您是否正确配置了 Apache Web 服务器导出器。Cloud Monitoring 可能需要一两分钟时间来注入您的指标。

要验证指标是否已注入,请执行以下操作:

  1. 在 Google Cloud 控制台中,转到 Metrics Explorer 页面:

    进入 Metrics Explorer

    如果您使用搜索栏查找此页面,请选择子标题为监控的结果。

  2. 在查询构建器窗格的工具栏中,选择名为  MQL MQL 的按钮。
  3. 验证已在PromQL切换开关中选择 PromQL。语言切换开关位于同一工具栏中,用于设置查询的格式。
  4. 输入并运行以下查询:
    up{job="httpd", cluster="CLUSTER_NAME", namespace="NAMESPACE_NAME"}

查看信息中心

Cloud Monitoring 集成包括 Apache Prometheus 概览信息中心。当您配置集成时,系统会自动安装信息中心。您还可以在不安装集成的情况下查看信息中心的静态预览。

如需查看已安装的信息中心,请执行以下操作:

  1. 在 Google Cloud 控制台中,转到 信息中心页面:

    前往信息中心

    如果您使用搜索栏查找此页面,请选择子标题为监控的结果。

  2. 选择信息中心列表标签页。
  3. 选择集成类别。
  4. 点击信息中心的名称,例如 Apache Prometheus 概览

如需查看信息中心的静态预览,请执行以下操作:

  1. 在 Google Cloud 控制台中,转到 集成页面:

    前往集成

    如果您使用搜索栏查找此页面,请选择子标题为监控的结果。

  2. 点击 Kubernetes Engine 部署平台过滤条件。
  3. 找到 Apache Web 服务器 (httpd) 集成,然后点击查看详情
  4. 选择信息中心标签页。

问题排查

如需了解如何排查指标注入问题,请参阅排查注入端问题中的从导出器收集的问题