前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用OpenTelemetry检测Apache Http服务器

使用OpenTelemetry检测Apache Http服务器

作者头像
CNCF
发布2022-06-10 14:28:44
1.1K0
发布2022-06-10 14:28:44
举报
文章被收录于专栏:CNCFCNCF

作者:Debajit Das

如果你正在使用 Apache Web 服务器,并且迫切需要一些可观测性工具来监控你的 Web 服务器,那么OpenTelemetry Apache 模块[1]是你的合适选择:它能够追踪对服务器的传入请求,并且它将捕获这种传入请求中涉及的许多模块(包括 mod_proxy)的响应时间。这样你就可以得到每个模块的时间消耗。本文展示了 Apache OpenTelemetry 模块的监控功能,以及使用该模块的快速指南。

OpenTelemetry 模块入门

构建模块

开始使用 apache httpd 的 OpenTelemetry 模块非常简单,你需要的只是一个 docker 引擎和 git。从 github 下载源代码,然后在 CentOS7 上构建 docker 镜像:

代码语言:javascript
复制
git clone https://github.com/open-telemetry/opentelemetry-cpp-contrib
cd  instrumentation/otel-webserver-module
docker-compose --profile centos7 build

上面的命令下载所有需要的依赖项,为 Apache 构建 OpenTelemetry 模块,并将其安装在 docker 镜像上。

注意:以上命令可能需要大约 1 小时才能完成。

构建完成后,通过键入以下命令运行 docker 镜像:

代码语言:javascript
复制
docker-compose –profile centos7 up -d

上述命令启动名为 webserver_centos7 的 docker 容器中的 centos7 镜像,以及 OpenTelemetry 收集器和 Zipkin 后端。

Apache OpenTelemetry 模块将给配置并安装在所需位置,Apache 服务器将使用 Apache OpenTelemetry 模块启动。

在后端查看跨度

正如docker-compose.yml[2]中提到的,webserver_centos7 监听端口是 9004,zipkin 监听端口是 9411,OpenTelemetry 收集器监听端口是 4317。要向 Apache 服务器发送请求,你可以从终端使用 curl:

代码语言:javascript
复制
curl localhost:9004/

或者,你可以在任何浏览器中键入 localhost:9004/。Centos 上 Apache Http Server 的默认登录页面显示“Testing 123…”如下所示:

现在,在 zipkin 后端可以看到追踪和跨度。要查看它们,请在浏览器中键入 localhost;9411,然后单击 Run Query 按钮。下面是来自 Zipkin UI 的截图,显示了 Apache 服务器发出的跨度。

这显示了已经触发到 Apache WebServer 的查询或端点的列表,例如/noindex/css。

要查看详细信息,请单击任何显示按钮。下面是来自 Zipkin UI 的截图,显示了跨度层次结构。

上面显示,作为这个请求的一部分,mod_proxy、mod_proxy_balancer 和 mod_dav 参与了请求处理和每个模块中的时间消耗。

模块级细节如何能带来好处?

为了展示模块级细节的好处,我们将在 php 脚本中引入一个人工延迟,并看看这个延迟是如何显示在 zipkin 后端的。需要完成以下步骤。

  • 登录容器并安装 php 模块。
代码语言:javascript
复制
docker exec -it webserver_centos7 /bin/bash
yum install php -y
  • 在/etc/httpd/conf/httpd.conf 中添加 AddType application/x-httpd-php.html,如下所述:
  • 在/var/www/html 目录下创建一个名为 index.html 的文件,并添加以下文本。
代码语言:javascript
复制
<!DOCTYPE html>
<html>
  <head>
    <title>PHP Test Page</title>
  </head>

  <body>
    <?php
      echo date('h:i:s') . "<br>";
      echo "Introduce delay of 1 seconds" . "<br>";
      sleep(1);
      echo date('h:i:s');
    ?>
  </body>
</html>
  • 重启 apache
代码语言:javascript
复制
httpd -k restart
  • 现在,在浏览器中键入 localhost:9004/index.html。你应该会看到类似下面的内容:
  • 现在,在 zipkin 后端可以看到追踪和跨度。要查看它们,请在浏览器上键入 localhost:9411,然后单击“Run Query”按钮。要查看详细信息,请单击/index.html 对应的“SHOW”按钮。
  • 我们可以看到,mod_php5.c_handler 消耗了大约 1 秒的时间,这是请求的总时间消耗的一部分。

当 HTTP 请求流经单个模块时,请求中涉及的任何模块都可能出现执行延迟或错误。为了确定请求处理中任何延迟或错误的根本原因,模块方面的信息(例如各个模块的响应时间)将增强 Apache web 服务器的可调性。

在目标系统中安装 OpenTelemetry 模块

要使用 apache OpenTelemetry 模块,请使用以下步骤提取软件包并安装在安装了 apache 的目标系统上。

  • 为了克隆源代码,执行以下命令
代码语言:javascript
复制
git clone https://github.com/open-telemetry/opentelemetry-cpp-contrib
cd  opentelemetry-cpp-contrib/instrumentation/otel-webserver-module
  • 使用 build 命令在 docker 镜像中生成包
代码语言:javascript
复制
docker-compose --profile centos7 build

以上可能需要大约一个小时来构建。这将基于 Centos 7 镜像构建为 apache_centos7

  • 一旦构建完成,就该提取镜像了。我们需要启动容器,这可以通过下面的命令来完成
代码语言:javascript
复制
docker run -idt --name <container_name> apache_centos7 /bin/bash

上面的命令将运行容器,并且可以使用 docker ps 命令进行验证。

  • 容器中生成的包可以在/otel-webserver-module/build 目录中找到。同样可以提取到主机系统:
代码语言:javascript
复制
docker cp <container_name>:/otel-webserver-module/build/opentelemetry-webserver-sdk-x64-linux.tgz <target-directory>

注意:上面的包可以在任何 x86-64 指令集和高于 2.17 版本 glibc 的 linux 发行版上运行。在写这篇博客的时候,还没有提供对其他架构的支持。

  • 将上面的包和opentelemetry_module.conf[3]一起传输到目标系统。
  • 将 opentelemetry-webserver-sdk-x64-linux.tgz 包解压缩到/opt 目录。
代码语言:javascript
复制
tar -xvf opentelemetry-webserver-sdk-x64-linux.tgz -C /opt
  • 现在,通过执行以下命令来安装该模块
代码语言:javascript
复制
cd /opt/opentelemetry-webserver-sdk
./install.sh
  • 在 Centos 环境,apache 配置一般位于/etc/httpd/conf/中。因此,将 opentelemetry_module.conf 复制到/etc/httpd/conf。
  • 编辑/etc/httpd/conf/httpd.conf,并在文件末尾添加 Include conf/opentelemetry_module.conf,如下所述:
  • 现在让我们看看 opentelemetry_module.conf 及其内容:
    • 下面的 LoadFile 是软件包附带的依赖库。
    • 以下配置适用于 OpenTelemetry 模块(在 Apache 2.2 的情况下,需要使用 libmod_apache_otel22.so,而不是 libmod_apache_otel.so)。
    • 要启用 openTelemetry 模块,应启用以下指令,否则该模块将被禁用。
    • 由于该模块使用收集器并以 oltp 格式发送数据,因此以下指令是必需的(ApacheModuleOtelExporterEndpoint 应该指向收集器的端点)。
    • ServiceNamespace、ServiceName 和 ServiceInstanceId 应由以下指令提供。
    • 对于本指南来说,所有其他指令都是可选的,可以保持不变
  • 要验证 Apache OpenTelemetry 模块是否在 Apache Web 服务器中正确启用,请键入 httpd -M 并查找 otel_apache_module (shared)
  • 现在,重新启动 apache,opentelemetry 模块已经启动。

参考资料

[1]

OpenTelemetry Apache 模块: https://github.com/open-telemetry/opentelemetry-cpp-contrib/tree/main/instrumentation/otel-webserver-module

[2]

docker-compose.yml: https://github.com/open-telemetry/opentelemetry-cpp-contrib/blob/main/instrumentation/otel-webserver-module/docker-compose.yml

[3]

opentelemetry_module.conf: https://github.com/open-telemetry/opentelemetry-cpp-contrib/blob/main/instrumentation/otel-webserver-module/opentelemetry_module.conf


CNCF (Cloud Native Computing Foundation)成立于2015年12月,隶属于Linux Foundation,是非营利性组织。

CNCF(云原生计算基金会)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-06-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CNCF 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • OpenTelemetry 模块入门
    • 构建模块
      • 在后端查看跨度
      • 模块级细节如何能带来好处?
      • 在目标系统中安装 OpenTelemetry 模块
        • 参考资料
        相关产品与服务
        容器镜像服务
        容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档