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: trueinputs:- Type: file_logLogPath: /var/log/nginx/FilePattern: "*.log"ContainerFile: trueprocessors:- Type: processor_wait_for_signalDisableSignalSampler: trueContentsRename:"__tag__:_container_id_": "_container_id_""__tag__:__path__": "_source_"flushers:- Type: flusher_httpRemoteURL: 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
https://github.com/CloudDetail/apo