利用 OCI Service Connector Hub 实现应用日志采集

摘要:

本文主要描述了如何利用OCI Service Connector Hub服务,实现应用部署在OCI上的应用系统的日志采集和数据处理、数据存储到对象存储或ADW中,从而实现应用日志采集和数据分析功能。

1 日志数据采集与分析

从数据采集角度来说,日志采集是重要的数据获取方式。所谓日志采集,就是收集应用系统或用户行为数据的操作。我们可以在前端进行埋点,在后端进行脚本收集、统计,来分析应用的运行情况,访问情况,以及使用瓶颈等。

日志就是日记的意思,它记录了用户访问应用系统的全过程:哪些人在什么时间,通过什么渠道(比如搜索引擎、网址输入)来过,都执行了哪些操作;系统是否产生了错误;甚至包括用户的 IP、HTTP 请求的时间,用户代理等。这些日志数据可以被写在一个日志文件中,也可以分成不同的日志文件,比如访问日志、错误日志等。

日志采集可以分两种形式。

  1. 通过 Web 服务器采集,例如 httpd、Nginx、Tomcat 都自带日志记录功能,这些服务一般都以日志文件的方式,将数据写入到具体访问日志、错误日志等文件中。采集软件通过对这些日志文件的访问读取,从而完成日志文件数据的采集工作。
  2. 自定义采集用户行为,即通常说的进行应用日志埋点。例如用 JavaScript 代码监听用户的行为、AJAX 异步请求后台记录日志等,将数据记录下来。有通过文件记录的,也有通过与后天的通讯,将数据发生到后台的日志服务进行存储记录的。

本文描述的是如何将应用程序写的日志文件数据,通过数据集成方式,将应用产生的各类应用日志文件统一采集到后台的数据存储和分析平台,完成对日志数据的分析。

2 OCI日志数据采集方案和实现

日志数据的采集方式多种多样,很多互联网企业都有利用不同的海量数据采集工具,多用于系统日志采集,如 Elastic的Logstash,Filebeat、Hadoop 的 Chukwa、Cloudera 的 Flume、Facebook 的 Scribe 等,这些工具均采用分布式架构,能够满足每秒数百 MB 的日志数据采集和传输需求。

在Oracle Cloud 云环境中,Oracle 提供了多种方式,一整套日志数据的采集方案和产品服务,方便云上用户能够利用这些服务,通过配置的方式就直接可以完成全流程的数据采集和数据存储分析的需求。

OCI 云上数据日志采集方案:
在这里插入图片描述

方案一: 通过配置使用Cloud Agent和Service Connector hub,将数据直接采集存储到对象存储中,对象存储进行海量数据存储,使用ADW进行数据分析。
方案二: 通过配置使用Cloud Agent和Service Connector hub,使用Service Connector hub调用Oracle Function Service,直接对数据进行解析处理后,将数据写入到ADW中,使用ADW进行数据分析。

2.1 OCI Cloud VM Agent介绍

Oracle Cloud Agent 是一个轻量级进程,用于管理在计算实例上运行的插件。插件收集性能指标、安装操作系统更新并执行其他实例管理任务。要在实例上使用插件,必须在实例上安装 Oracle Cloud Agent 软件,必须启用插件,并且插件必须正在运行。
在这里插入图片描述

2.2 OCI Service Connector Hub 服务介绍

OCI Service Connector Hub 服务连接器中心是一个云消息总线平台,它提供了一个单一透明访问服务,用于描述,执行和监视Oracle Cloud Infrastructure中服务之间的数据移动。

OCI Service Connector Hub服务连接器在Oracle Cloud Infrastructure中协调服务之间的数据移动。 使用服务连接器采集或移动数据。服务连接器指定源服务,该源服务包含要采集或移动的数据,要在该数据上运行的处理任务,以及在任务完成后用于存储数据的目标对象。

通过Service Connector可以完成下面的一些功能,本文描述的日志采集和分析方案,也是使用了其中的采集日志到对象存储的方案。
在这里插入图片描述

3 使用Service Connector Hub开启日志采集

在使用Service Connector Hub开启日志采集之前,应用软件已经部署在了不同的OCI VM上不同目录下,应用记录了web访问日志。本次需要采集Nginx的访问日志数据。

3.1 申请对象存储Bucket和开通ADW

提前准备好对象存储,本次对象存储名称为dataflow-logs.
提前申请开通ADW服务,并设置好ADW能够访问对象存储dataflow-logs。能够使用对象存储作为外部存储对象,完成数据加载和访问。这里不在对这个过程进行描述,详细信息请参考:

3.2 开启日志采集Agent

1、 在OCI中定义动态组
OCI 中,根据动态组进行日志对象访问和权限进行管理,便于业务进行管理不同的采集对象。可以将不同的VM实例或Compartment实例作为动态组的授权管理范围。
在这里插入图片描述

2、定义访问Policy
1)允许组访问serviceconnectors服务;
Allow group cp_bigdata_team to manage serviceconnectors in compartment bigdata_compartment
2)允许动态组访问log-content服务;
allow dynamic-group nginx_app to use log-content in compartment bigdata_compartment
3)允许日志次采集用户访问对象存储 dataflow-logs。
allow any-user to manage objects in compartment id ocid1.compartment.oc1…aaaaxxxxxxxxxpuq where all {request.principal.type=‘serviceconnector’, target.bucket.name=‘dataflow-logs’, request.principal.compartment.id='ocid1.compartment.oc1…aaaaxxxxxxxxxpuq’}

2、开启Oracle Cloud agent 日志监控
对指定的应用部署环境,需要进行日志采集环境的OCI VM开启Oracle Cloud agent 定制日志监控,如下图。
在这里插入图片描述

4、创建日志组
在OCI管理页面中,创建日志组,通过组定义逻辑上对日志进行分开管理,便于对不同的日志类型进行分组管理。此次,我们定义为nginx访问日志组。
在这里插入图片描述

5、创建日志
创建需要采集的日志,定义日志名称,通过日志关联到日志组。
在这里插入图片描述

6、创建日志 Agent 配置
根据日志,配置agent访问对象路径等信息。关联动态组,锁定访问对象,并配置访问路径。此次配置需要采集VM中的Nginx日志目录和文件。
1)创建对象名称
在这里插入图片描述

2)配置访问对象和路径
![在这里插入图片描述](https://img-blog.csdnimg.cn/1df2124121684341aa615940e6b972f8.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAcmFtb2J6aGVuZw==,size_20,color_FFFFFF,t_70,g_se,x_16)

3)配置文件读取解析方式。本次选择APACHE2进行日志数据读取并解析。

在这里插入图片描述

3.3 开通并配置Service Connector

完成之前的日志,日志组和Agent 配置后,选择Service Connector,创建一个Service Connector服务。
1)点击创建Service Connector
在这里插入图片描述

2)根据提示,选择对应的输入为logging服务,输出为对象存储,并指定相应的名称。
在这里插入图片描述

3)配置日志组和日志对象
在这里插入图片描述

4)定义日志采集周期和批次数据大小,日志采集会使用该周期持续不断地进行日志数据的采集。
在这里插入图片描述

3.4 启动日志采集并检查日志数据

启动Connector service服务,开始开启日志采集。
在这里插入图片描述

通过日志Search,选择需要检索的日志对象:cp_bigdata_compartent/ngnix_access_log_group/ngnix_access_log. 查询采集到的日志。
在这里插入图片描述

查看日志数据列表
在这里插入图片描述

在对象存储中查询采集到的日志文件。Service connector进行日志处理时,执行情况如下:

  1. 在对象存储中,会产生一个以connector的 OID为目录的文件夹,采集到的日志数据以文件的方式存储在这个文件夹下。
  2. 会根据采集数据情况,生产很多的数据文件,数据文件的产生可以根据大小和时间进行选择。数据大小以MB为单位,时间选择介于 60000 和 420000(毫秒)之间。
  3. 使用connector,将数据存储到对象存储的时候,数据文件名称的格式是: 20210924T065441Z_20210924T065441Z.0.log.gz
  4. 文件内容为json格式。
    在这里插入图片描述

使用apach2解析日志并存储成Json文件格式,单条数据示例如下:
在这里插入图片描述

4 使用ADW查询分析日志数据

使用ADW web SQL developer,进行数据库操作,配置ADW访问到对象存储。具体参考https://oracledbwr.com/loading-your-data-into-autonomous-data-warehouse/

  1. 创建ADW对对象存储访问的密钥
    在这里插入图片描述

  2. 创建外部Json格式表,数据对象存储在对象存储中。
    在这里插入图片描述

  3. 根据日志数据内容,使用SQL 分析日志数据。

SELECT JSON_VALUE(json_document,'$.id') as id,
JSON_VALUE(json_document,'$.time') as login_time,
JSON_VALUE(json_document,'$.data.host') as Client_ip,
JSON_VALUE(json_document,'$.data.path') as Access_path,
JSON_VALUE(json_document,'$.data.method') as Access_method,
JSON_VALUE(json_document,'$.data.code') as Response_code
JSON_VALUE(json_document,'$.data.agent') as Access_agent
FROM ACCESS_LOG_EXT_JSON 
where JSON_VALUE(json_document,'$.time') between '2021-09-26T22:55:35.000Z' and '2021-09-26T22:56:35.000Z' ;

  1. 首先获取访问频率最高的10个IP地址
SELECT COUNT(*),JSON_VALUE(json_document,'$.data.host') as 	client_ip,
FROM ACCESS_LOG_EXT_JSON GROUP BY client_ip ORDER BY COUNT(*) 
DESC LIMIT 10;

获得数据后画成表格如下:在这里插入图片描述

  1. 获取访问频率最高的前10个User-Agent
select COUNT(*),JSON_VALUE(json_document,'$.data.agent') as 
Access_agent FROM ACCESS_LOG_EXT_JSON GROUP BY access_agent 
ORDER BY COUNT(*) DESC LIMIT 10;
	
	1465|Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
	770|Mozilla/5.0 (Ubuntu; X11; Linux x86_64; rv:8.0) Gecko/20100101 Firefox/8.0
	503|Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36; 360Spider
	479|Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)
	302|Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0
	290|Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0
	286|Mozilla/5.0 (Linux; U; Android 5.0.2; zh-CN; Redmi Note 3 Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 OPR/11.2.3.102637 Mobile Safari/537.36
	279|Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
	257|Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)

  1. HTTP请求的返回码也是一个值得关注的信息:
SELECT JSON_VALUE(json_document,'$.data.code') as response_code, 
COUNT(*) FROM ACCESS_LOG_EXT_JSON GROUP BY 
response_code ORDER BY COUNT(*) DESC;

	结果如下:
	200|6676
	301|3271
	400|2487
	502|1270
	404|1147
	304|435
	206|15
	499|10
	403|8
	504|6
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值