日志服务-一站式配置采集Apache访问日志

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 日志服务推出了数据接入向导(Wizard)功能以来,不断优化接入向导的功能,支持各种数据的采集、存储、分析、离线投递, 降低用户使用日志服务门槛。本文介绍数据接入向导一站式配置采集Apache日志与设置索引,同时还可以通过默认仪表盘与查询分析语句实时分析网站访问情况。

日志服务推出了数据接入向导(Wizard)功能以来,不断优化接入向导的功能,支持各种数据的采集、存储、分析、离线投递, 降低用户使用日志服务门槛。本文介绍数据接入向导一站式配置采集Apache日志与设置索引,同时还可以通过默认仪表盘与查询分析语句实时分析网站访问情况。

一、Apache日志配置文件

首先我们来分析Apache访问日志的配置文件,寻找到配置所需要的字段。

1、配置文件路径:

在Linux系统下配置文件路径为: /etc/httpd/conf/httpd.conf
在Windows下为apache安装目录下的conf文件, 如:D:\Apache\Software\Apache2.2\conf\httpd.conf

2、日志配置说明:

    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
    <IfModule logio_module>
      # You need to enable mod_logio.c to use %I and %O
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>
    ...
    CustomLog "logs/access_log" combined

先查看LogFormat的配置,这个命令用于定义访问日志的纪录格式,格式为: LogFormat "记录格式说明串" 格式昵称。
(如果要使用%I和%O字段,需要开启mod_logio模块。)

查看Customlog的配置,这个命令用来配置日志记录的存放地址和打印格式,格式为:CustomLog 访问日志文件名 格式昵称。

以上配置为例,日志文件存放的路径为"logs/access_log",纪录格式昵称是combined, 参考LogFormat里combined的配置。

3、作用:用户复制配置内容到相关配置,对生成的日志可以精准匹配到需要的字段。

二、Apache日志格式及字段提取

apache日志配置文件中默认定义里两种打印格式,分别为common通用日志和combined组合日志

common通用日志格式

common记录格式说明串:

LogFormat "%h %l %u %t \"%r\" %>s %b" common

common格式打印示例:

42.120.75.148 - - [06/Aug/2018:09:37:21 +0800] "GET /list HTTP/1.1" 200 274

common日志正则:

([0-9.]+)\s([\w.-]+)\s([\w.-]+)\s(\[[^\[\]]+\])\s"((?:[^"]|\")+)\s((?:[^"]|\")+)\s((?:[^"]|\")+)"\s(\d{3})\s(\d+|-)\s

提取字段:

remote_addr、remote_ident、remote_user、time_local、request_method、request_uri、request_protocol、status、response_size_bytes

combined组合日志格式

combined记录格式说明串:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

combined格式打印示例:

42.120.75.148 - - [06/Aug/2018:09:37:21 +0800] "GET /list HTTP/1.1" 200 274 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36"

combined日志正则:

([0-9.]+)\s([\w.-]+)\s([\w.-]+)\s(\[[^\[\]]+\])\s"((?:[^"]|\")+)\s((?:[^"]|\")+)\s((?:[^"]|\")+)"\s(\d{3})\s(\d+|-)\s"((?:[^"]|\")+)"\s"((?:[^"]|\")+)"

提取字段:

remote_addr、remote_ident、remote_user、time_local、request_method、request_uri、request_protocol、status、response_size_bytes、http_referer、http_user_agent

自定义格式

用户也可以选择自定义配置自己的打印格式,这里定义格式昵称为customized,实际操作中格式昵称可自定义命名。

参考配置如下:

    LogFormat "%f %H %k %m %p %q %R %T %U %I %O" customized
    ...
    CustomLog "logs/access_log" customized

格式打印示例:

/var/www/html/name1.php HTTP/1.1 2 GET 80 ?query=1 application/x-httpd-php 0 /name1.php 438 243

customized日志正则:

((?:[^"]|\")+)\s((?:[^"]|\")+)\s(\d+|-)\s(\w+)\s(\d+)\s((?:[^"]|\")+)?\s((?:[^"]|\")+)\s(\d+)\s((?:[^"]|\")+)\s(\d+)\s(\d+)

提取字段:

filename、request_protocol、keep_alive、request_method、remote_port、request_query、response_handler、request_time_sec、request_uri_supple、bytes_received、bytes_sent

三、Apache访问日志推荐配置及配置步骤

应用场景

  个人站长选用apache作为服务器搭建网站,需要通过分析apache访问日志来获取PV、UV、IP区域分布、流量流入流出、错误请求等,以评估网站访问情况。

日志格式

为了更好得满足分析场景,推荐使用以下自定义配置:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D %f %k %p %q %R %T %I %O" customized

各个字段含义如下:

序号 字段 字段名 备注
1 %h remote_addr 客户端地址
2 %l remote_ident 客户端日志名称(来自identd)
3 %u remote_user 客户端用户名字
4 %t time_local 服务器时间
5 %r request 请求内容,包括方法名、地址和http协议
6 %>s status 返回的http状态码
7 %b response_size_bytes 返回的大小
8 %{Rererer}i http_referer 来源页
9 %{User-Agent}i http_user_agent 客户端信息
10 %D request_time_msec 请求时间,毫秒为单位
11 %f filename 请求的文件名(带路径)
12 %k keep_alive keep-alive请求数
13 %p remote_port 服务器端口号
14 %q request_query 查询字符串,如果不存在为空字符串
15 %R response_handler 服务器响应的处理程序
16 %T request_time_sec 请求时间,秒为单位
17 %I bytes_received 服务器接收得字节数,需要启用mod_logio模块
18 %O bytes_sent 服务器发送得字节数,需要启用mod_logio模块

配置步骤

步骤1 数据接入向导

apache访问日志采集到日志服务可以采用如下两种方式进入数据接入向导。

  • 新建项目,在项目创建后,根据页面提示点击数据接入向导。
    图1.数据接入向导

image

  • 对于已存在的Logstore,点击列表中数据接入向导图标进入。
    图2.Logstore列表

image

步骤2 选择数据类型

日志服务提供多种数据类型接入(云产品、自建软件、API、SDK等),分析apache访问日志请选择apache访问日志。

步骤3 数据源设置

  1. 按照实际情况填写配置名称和日志路径,选择格式昵称,并将对应的LogFormat信息填写到APACHE日志格式中。
    图3.配置数据源

image

日志服务会自动提取出相应的键名称。

注:在某些配置字段最终打印出来的日志信息内会存在空格,所以请用"来进行分隔,具体如:"%t", "%{Referer}i", "%{User-Agent}i"等。

图4.APACHE键

image

注意:其中%r会被提取称request_methodrequest_urirequest_protocol三个键

  1. 应用到机器组,如果您之前没有创建过机器组,请先根据页面提示创建机器组。

步骤4 查询分析和可视化

确保日志机器组心跳正常的情况下,可以点击右侧浏览按钮获取到采集上来的数据。

图5.预览
image

日志服务提供预设的数据键名称以便分析使用,可以选择实际数据键名称(根据预览数据生成)和默认数据键名称形成映射关系。点击展开可查看键值索引属性。

图6.键值索引属性
image

点击下一步,日志服务会为您设置好索引属性并创建apache-dashboard仪表盘以供分析使用。

步骤5 分析访问日志

开启索引后,默认生成apache仪表盘页面,可以快速看到日志服务为你提供的各个指标的分析情况,如图所示。

图7.仪表盘
image

  • PV/UV统计(pv_uv)

    统计最近的PV数和UV数。


图8.访问PV/UV统计
image

统计语句

    * | select date_format(date_trunc('hour', __time__), '%m-%d %H:%i')  as time,
            count(1) as pv,
            approx_distinct(remote_addr) as uv
            group by time
            order by time
            limit 1000
  • 访问前十地址(top_page)

    统计最近一天访问pv前十的地址。


图9.访问前十地址
image

统计语句

    * | select split_part(request_uri,'?',1) as path, 
            count(1) as pv  
            group by path
            order by pv desc limit 10
  • 请求方法占比(http_method_percentage)

    统计最近一天各种请求方法的占比。


图10.请求方法占比
image

统计语句

    * | select request_method,
            count(1) as pv 
            group by request_method
  • 请求状态占比(http_status_percentage)

    统计最近一天各种http状态码的占比。


图11.请求状态占比
image

统计语句

    status>0 | select status,
                count(1) as pv 
                group by status
  • 访问地域分析(ip_distribution)

    统计访问ip来源情况。


图12.访问地域分析
image

统计语句

    * | select ip_to_province(remote_addr) as address,
            count(1) as c
            group by address limit 100
  • 请求UA占比(http_user_agent_percentage)

    统计最近一天各种浏览器的占比。


图13.请求UA占比
image

统计语句

    * | select  case when http_user_agent like '%Chrome%' then 'Chrome' 
            when http_user_agent like '%Firefox%' then 'Firefox' 
            when http_user_agent like '%Safari%' then 'Safari'
            else 'unKnown' end as http_user_agent,count(1) as pv
            group by  http_user_agent
            order by pv desc
            limit 10
  • 出入流量统计(net_in_net_out)

    统计流量的流入和流出情况。


图14.出入流量统计
image

统计语句

    * | select date_format(date_trunc('hour', __time__), '%m-%d %H:%i') as time, 
            sum(bytes_sent) as net_out, 
            sum(bytes_received) as net_in 
            group by time 
            order by time 
            limit 10000
  • 前十访问来源(top_10_referer)

    统计最近一天访问前十的来源信息。


图15.前十访问来源
image

统计语句

    * | select  http_referer,
            count(1) as pv
            group by http_referer
            order by pv desc limit 10
  • 请求时间前十地址(top_10_latency_request_uri)

    统计最近一天请求延时前十的地址。


图16.请求时间前十地址
image

统计语句

    * | select split_part(request_uri,'?',1) as path, 
            request_time_sec as time 
            group by split_part(request_uri,'?',1) 
            order by time desc limit 10

扩展阅读

日志服务-15分钟搞定NGINX访问日志分析

结语

特别感谢Tinsson戴挺远对Apache数据接入向导的开发贡献!如果您对我们的产品有什么意见和建议,欢迎加入钉钉群和我们交流!


image
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
11天前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
116 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
1月前
|
网络协议 Linux Windows
Rsyslog配置不同端口收集不同设备日志
Rsyslog配置不同端口收集不同设备日志
|
1月前
|
存储 数据采集 分布式计算
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
44 1
|
1月前
|
开发工具 git
git显示开发日志+WinSW——将.exe文件注册为服务的一个工具+图床PicGo+kubeconfig 多个集群配置 如何切换
git显示开发日志+WinSW——将.exe文件注册为服务的一个工具+图床PicGo+kubeconfig 多个集群配置 如何切换
38 1
|
3月前
|
存储 消息中间件 Java
Apache Flink 实践问题之原生TM UI日志问题如何解决
Apache Flink 实践问题之原生TM UI日志问题如何解决
45 1
|
28天前
|
SQL Java API
Apache Flink 2.0-preview released
Apache Flink 社区正积极筹备 Flink 2.0 的发布,这是自 Flink 1.0 发布以来的首个重大更新。Flink 2.0 将引入多项激动人心的功能和改进,包括存算分离状态管理、物化表、批作业自适应执行等,同时也包含了一些不兼容的变更。目前提供的预览版旨在让用户提前尝试新功能并收集反馈,但不建议在生产环境中使用。
575 13
Apache Flink 2.0-preview released
|
1月前
|
存储 缓存 算法
分布式锁服务深度解析:以Apache Flink的Checkpointing机制为例
【10月更文挑战第7天】在分布式系统中,多个进程或节点可能需要同时访问和操作共享资源。为了确保数据的一致性和系统的稳定性,我们需要一种机制来协调这些进程或节点的访问,避免并发冲突和竞态条件。分布式锁服务正是为此而生的一种解决方案。它通过在网络环境中实现锁机制,确保同一时间只有一个进程或节点能够访问和操作共享资源。
63 3
|
2月前
|
SQL 消息中间件 关系型数据库
Apache Doris Flink Connector 24.0.0 版本正式发布
该版本新增了对 Flink 1.20 的支持,并支持通过 Arrow Flight SQL 高速读取 Doris 中数据。
|
3月前
|
消息中间件 监控 数据挖掘
基于RabbitMQ与Apache Flink构建实时分析系统
【8月更文第28天】本文将介绍如何利用RabbitMQ作为数据源,结合Apache Flink进行实时数据分析。我们将构建一个简单的实时分析系统,该系统能够接收来自不同来源的数据,对数据进行实时处理,并将结果输出到另一个队列或存储系统中。
217 2
|
3月前
|
消息中间件 分布式计算 Hadoop
Apache Flink 实践问题之Flume与Hadoop之间的物理墙问题如何解决
Apache Flink 实践问题之Flume与Hadoop之间的物理墙问题如何解决
51 3

相关产品

  • 日志服务
  • 推荐镜像

    更多