使用Datadog来监控Nginx的指标、日志和追踪的方法

这是一个问题。在容器环境中最常用的技术是什么?答案是。。。

目前最常使用的容器是nginx。

根据Datadog的调查,据说在Docker容器中最常使用的技术是nginx。

image.png
image.png

成为全球Web服务器市场份额第一的nginx以其高速和简洁的特点而受到广泛欢迎,无论是在云端、本地、服务器还是容器中都被广泛应用。因此,我们经常有机会从各个角度观察nginx的运行状况。今天,我们将着眼于使用Datadog对nginx进行全面观测的目标。

度量

image.png
$ curl localhost/nginx_status
Active connections: 1 
server accepts handled requests
 93370 93370 74159 
Reading: 0 Writing: 1 Waiting: 0

下面第二行的三个数字分别是接受的连接数(accepts)、处理的连接数(handled)和请求数(requests)。Datadog的代理通过nginx集成,默认每15秒访问这个URL获取数据,并将其发送到Datadog,以此生成上述图形进行可视化。

此外,NGINX Plus的付费版本通过API提供性能数据,因此可以获得更多样化的指标。Datadog也支持NGINX Plus的API,而免费版nginx只能获取7个指标,NGINX Plus则可以获取130多个指标。

日志

下一个是日志。尽管Nginx的日志格式可以自由设置,但在很多情况下,大家可能多使用了在文件中写明的combined格式。实际上,Nginx还具有包含处理时间的变量$request_time,因此在Datadog中推荐将其包含在日志中。具体的设置如文档所述,在下面的位置$body_bytes_sent之后添加$request_time即可。

http {
    #推奨ログフォーマット
    log_format nginx '\$remote_addr - \$remote_user [\$time_local] '
                  '"\$request" \$status \$body_bytes_sent \$request_time '
                  '"\$http_referer" "\$http_user_agent"';

    access_log /var/log/nginx/access.log;
}
image.png

另外,在将追踪和日志关联起来的场景中,我认为可能会出现需要在日志中添加trace_id的情况。在这种情况下,您也可以通过nginx的设置来配置自定义日志格式,并参考OpenTracing示例中的log_format部分,将Trace ID包含在日志中。在这种情况下,您还需要在Datadog一侧自定义处理规则。

追踪

我认为nginx最初主要用于提供静态内容的Web服务器,但近年来越来越多地被用作提供动态内容的服务器前端进行配置,并作为反向代理。它也被广泛用作应用服务器的反向代理,以及负载平衡器来分发请求至多个应用服务器。

在应用程序性能监控(APM)中,可以生成应用程序追踪,收集请求数量、延迟、错误等信息,并可视化应用程序的性能和健全性。在分布式环境中,如微服务,可以通过分布式跟踪来可视化服务之间的调用关系,因此可以一目了然地知道在整个服务变慢时是哪个部分变慢了。

image.png

在这个示例中,nginx被用作反向代理,后面运行着node.js应用程序和mysql数据库。nginx集成了opentracing,生成跟踪数据并发送到Datadog代理,最终传递到Datadog平台。

这些内容已整理在以下的代码库中。如果您有Docker环境,可以轻松地使用docker-compose进行快速尝试,请务必查看设置和操作。

 

以下是所使用的OpenTracing相關資訊連結。

    • Open tracing module

https://github.com/opentracing-contrib/nginx-opentracing

Datadog Open tracing plug-in

https://github.com/DataDog/dd-opentracing-cpp
https://github.com/DataDog/dd-opentracing-cpp/tree/master/examples/nginx-tracing

image.png

以上是关于使用Datadog来全面监控Nginx的情况。
祝您使用Datadog愉快!

bannerAds