基于APO四步实现炫酷的NGINX请求分析看板
APO 充分利用 Vector + ClickHouse 实现的日志方案,做到了开箱即用、高效、低成本。利用 APO 的日志功能,不仅可以检索日志内容本身,还可以实现很多有意思的功能。本次为大家介绍使用 APO 的日志功能实现炫酷的 NGINX 请求分析看板,只需简单几步即可实现!
先上效果图:
- 请求与耗时分析总览
- 异常请求分析
- URI请求分析
- 请求日志明细
配置步骤
第一步 修改NGINX日志格式
打开 NGINX 配置文件(一般在/etc/nginx/nginx.conf路径下),按照下面的示例修改log_format部分,该部分要完全一样:
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '{"@timestamp":"$time_iso8601",'
'"client_ip":"$remote_addr",'
'"server_ip":"$server_addr",'
'"domain":"$server_name",'
'"request_method":"$request_method",'
'"path":"$uri",'
'"top_path":"$uri",'
'"query":"$args",'
'"request_length":$request_length,'
'"responsetime":$request_time,'
'"response_length":$body_bytes_sent,'
'"referer":"$http_referer",'
'"http_user_agent":"$http_user_agent",'
'"status":$status,'
'"upstreamhost":"$upstream_addr",'
'"upstreamtime":"$upstream_response_time"'
'}';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
修改完成后,重启NGINX或者执行命令nginx -s reload使配置生效。
第二步 采集NGINX日志
在安装 apo-one-agent 的 Kubernetes 集群中,编辑名为apo-ilogtail-user-config的ConfigMap,添加采集NGINX日志的配置,注意修改其中LogPath为 NGINX 日志的路径,下面是示例:
data:
pod_stdout_all.yaml: |
...
pod_stdout_file.yaml: |
...
# 以 下为新增配置内容
pod_log_file.yaml: |
enable: true
inputs:
- Type: file_log
LogPath: /var/log/nginx/
FilePattern: "*.log"
ContainerFile: true
processors:
- Type: processor_wait_for_signal
DisableSignalSampler: true
ContentsRename:
"__tag__:_container_id_": "_container_id_"
"__tag__:__path__": "_source_"
flushers:
- Type: flusher_http
RemoteURL: http://apo-vector-svc:4310
第三步 在 APO 平台上配置日志库
打开 APO 平台的全量日志页面,在“日志库”部分点击 +,添加新的日志库:
在弹出的配置页面中,按照以下步骤进行配置:
- “日志库名”填写
nginx_access_log
- 在“匹配规则”中配置能够匹配到NGINX日志的规则,例如通过
_source_=/var/log/nginx/access.log
进行匹配 - “日志格式配置”中选择“结构化日志”,并在文本框中输入以下内容:
{
"@timestamp": "2024-12-06T06:44:17+00:00",
"client_ip": "10.244.0.46",
"client_region": "",
"client_city": "",
"client_latitude": 0.1,
"client_longitude": 0.1,
"server_ip": "10.244.167.148",
"domain": "localhost",
"request_method": "GET",
"path": "/grafana/api/live/ws",
"top_path": "/grafana/api/live/ws",
"query": "-",
"request_length": 1259,
"responsetime": 0.010,
"response_length": 10,
"referer": "-",
"http_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
"status": 403,
"upstreamhost": "10.96.2.121:80",
"upstreamtime": 0.009
}
- 最后点击“保存”。
第四步 导入NGINX看板并查看数据
打开 APO 平台的“中间件大盘”,在右侧点击“新建”->“导入 ”:
在导入页面,输入仪表板ID“22037”,点击加载:
然后在页面中选择数据源为“ClickHouse”(如果没有该数据源需要手动配置),点击“Import”即可导入成功。在该看板的“项目”筛选框中手动输入
apo.logs_nginx_access_log
(与配置日志库时的日志库名称保持一致):
到这里就完成了所有步骤,尽情享受炫酷的NGINX请求分析看板吧!
鸣谢
文中使用的 Nginx 日志分析看板由 StarsL 设计并发布在 Grafana 中,感谢大佬的分享。文中给出的方案简化了配置流程,因此看板中部分数据可能存在缺失,您可以检查看板中的查询条件,根据需求调整 NGINX 日志格式解锁完整看板。
APO介绍:
国内开源首个 OpenTelemetry 结合 eBPF 的向导式可观测性产品
apo.kindlingx.com