作者:Debajit Das
如果你正在使用 Apache Web 服务器,并且迫切需要一些可观测性工具来监控你的 Web 服务器,那么OpenTelemetry Apache 模块[1]是你的合适选择:它能够追踪对服务器的传入请求,并且它将捕获这种传入请求中涉及的许多模块(包括 mod_proxy)的响应时间。这样你就可以得到每个模块的时间消耗。本文展示了 Apache OpenTelemetry 模块的监控功能,以及使用该模块的快速指南。
开始使用 apache httpd 的 OpenTelemetry 模块非常简单,你需要的只是一个 docker 引擎和 git。从 github 下载源代码,然后在 CentOS7 上构建 docker 镜像:
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 镜像:
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:
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 后端的。需要完成以下步骤。
docker exec -it webserver_centos7 /bin/bash
yum install php -y
<!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>
httpd -k restart
当 HTTP 请求流经单个模块时,请求中涉及的任何模块都可能出现执行延迟或错误。为了确定请求处理中任何延迟或错误的根本原因,模块方面的信息(例如各个模块的响应时间)将增强 Apache web 服务器的可调性。
要使用 apache OpenTelemetry 模块,请使用以下步骤提取软件包并安装在安装了 apache 的目标系统上。
git clone https://github.com/open-telemetry/opentelemetry-cpp-contrib
cd opentelemetry-cpp-contrib/instrumentation/otel-webserver-module
docker-compose --profile centos7 build
以上可能需要大约一个小时来构建。这将基于 Centos 7 镜像构建为 apache_centos7
docker run -idt --name <container_name> apache_centos7 /bin/bash
上面的命令将运行容器,并且可以使用 docker ps 命令进行验证。
docker cp <container_name>:/otel-webserver-module/build/opentelemetry-webserver-sdk-x64-linux.tgz <target-directory>
注意:上面的包可以在任何 x86-64 指令集和高于 2.17 版本 glibc 的 linux 发行版上运行。在写这篇博客的时候,还没有提供对其他架构的支持。
tar -xvf opentelemetry-webserver-sdk-x64-linux.tgz -C /opt
cd /opt/opentelemetry-webserver-sdk
./install.sh
[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(云原生计算基金会)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。