头图

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 平台的全量日志页面,在“日志库”部分点击+,添加新的日志库:

在弹出的配置页面中,按照以下步骤进行配置:

  1. “日志库名”填写nginx_access_log
  2. 在“匹配规则”中配置能够匹配到NGINX日志的规则,例如通过source=/var/log/nginx/access.log进行匹配
  3. “日志格式配置”中选择“结构化日志”,并在文本框中输入以下内容:
{
  "@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
}
  1. 最后点击“保存”。

第四步 导入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


云观秋毫
20 声望0 粉丝

Kindling - OriginX 故障根因推理引擎,基于 eBPF 的自动化 Tracing 分析