日志服务的数据采集支持多种采集方式与数据来源。本文将为您介绍不同场景下的采集方式。
数据采集方式
数据采集作为使用日志服务功能的第一步,帮助您将需要处理的日志或数据传输并保存到日志服务中。您需要根据具体的使用场景选择合适的数据采集方式,以便后续使用日志服务的其他功能。
数据采集方式主要分为Logtail采集,云产品日志接入,数据导入,其他采集方式以及SDK方式。
Logtail采集:Logtail是日志服务提供的日志采集Agent,用于采集阿里云ECS、自建IDC或其他云厂商等服务器上的日志。Logtail基于日志文件,无侵入式采集日志。您无需修改应用程序代码,且采集日志不会影响您的应用程序运行。
云产品日志接入:日志服务支持采集弹性计算、存储服务、安全、数据库等多种阿里云云产品的日志数据,包括云产品的操作信息、运行状况、业务动态等信息。
数据导入:日志服务支持导入已有数据,包括其他应用数据与历史文件数据。
其他采集方式:日志服务支持使用第三方采集工具、通过协议传输日志等方式上传日志。
SDK:日志服务支持直接使用SDK在代码中进行定制化开发,相比其他方式灵活性更高。
日志服务数据采集的总体概览如下图:
Logtail采集
Logtail采集根据不同的采集数据源,主要分为以下使用方式:
采集文本日志/标准输出日志
主机场景
如果您希望采集在ECS或者自有主机上的日志内容,根据ECS或自有主机情况,当ECS与日志服务的Project属于同一个账号且在同一地域,您可以参考主机文本日志采集(自动安装)。否则请参考主机文本日志采集(手动安装)。
Kubernetes
如果您希望采集K8s集群上的文本日志内容,您可以根据采集方式参考通过DaemonSet方式采集Kubernetes容器文本日志或通过Sidecar方式采集Kubernetes容器文本日志。
如果您希望采集K8s集群容器标准输出内容,您可以参考通过DaemonSet方式采集Kubernetes容器标准输出。
容器
如果您希望采集业务容器中的文本日志内容,您可以参考采集Docker容器文本日志。
如果您希望采集业务容器中标准输出内容,您可以参考采集Docker容器的标准输出。
HTTP:如果您的数据源为HTTP数据,您可以参考采集HTTP数据。
Beats和Logstash:如果您的数据源为Beats和Logstash数据,您可以参考采集Beats和Logstash数据源。
Systemd Journal:如果您的数据源为Systemd Journal日志,您可以参考采集Systemd Journal日志。
SysLog:如果您的数据源为SysLog数据,您可以参考采集Linux系统Syslog。
SQL:如果您的数据源为SQL查询结果,根据SQL类型,您可以参考采集PostgreSQL查询结果,采集SQL Server查询结果,采集MySQL查询结果。
SNMP:如果您的数据源为SNMP协议机器信息,您可以参考采集SNMP协议机器信息。
脚本执行日志:如果您的数据源为脚本执行日志,您可以参考采集脚本执行日志。
更多详细了解请参考Logtail采集。
云产品日志接入
如果您需要将其他云产品中的日志进行采集供后续分析。您可以参考云产品日志概述来选择不同产品的采集方式。
数据导入
如果您希望将已有的其他数据导入到日志服务进行分析,日志服务也支持以下数据导入的功能。
您可以将OSS Bucket中的日志文件,通过数据导入方式导入到日志服务。具体请参考导入OSS数据。
您可以将自建MySQL数据库或RDS MySQL数据库中的数据导入到日志服务。具体请参考导入MySQL数据。
您可以将Elasticsearch数据导入到日志服务。具体请参考导入Elasticsearch数据。
您可以通过数据导入的方式将Amazon S3的日志文件导入到日志服务。具体请参考导入Amazon S3文件。
您可以将Kafka数据导入到日志服务,您可以参考导入Kafka数据。
Logtail只采集增量日志。如果您需要采集历史日志,可以参考导入历史日志文件。
其他采集方式
如果以上方式都不符合您的使用场景,您也可以通过WebTracking、Kafka协议、Syslog协议、Loggie实时上传日志到日志服务。
SysLog协议
您可以使用Syslog-ng采集日志并通过Syslog协议上传到日志服务,具体可以参考使用Syslog协议上传日志。
Kafka协议
您可以使用Beats系列软件、Collectd、Fluentd、Logstash、Telegraf、Vector等采集工具采集日志,并通过Kafka协议上传到日志服务,具体可以参考示例Kafka协议。
网页/JS
如果您需要收集和分析用户在浏览器、小程序上的信息,请参考JS/Web Tracking。日志服务也支持使用Web Tracking采集Unity3D日志,请参考采集Unity3D日志。
SDK
您可以根据语言使用对应SDK或方式来上传日志,SDK定制化上传日志方式的灵活性较其他方式更高。
Java
使用Java语言的SDK可以参考Java SDK概述。
Python
使用Python语言的SDK可以参考Python SDK概述。或者通过Logtail采集Python日志,请参考采集Python日志。
Go
使用Go语言的SDK可以参考Go SDK概述。或者希望通过基于Golang的Loggie进行采集,请参考使用Loggie上传日志。
PHP
使用PHP语言的SDK可以参考PHP SDK概述。或者希望通过Logtail采集WordPress日志,请参考采集WordPress日志。
.Net
使用.Net 语言的SDK可以参考.NET SDK概述。
Node.js
使用Node.js语言的SDK可以参考Node.js SDK概述。或者通过Logtail采集Node.js日志,请参考采集Node.js日志。
C++
使用C++语言的SDK可以参考C++ SDK概述。
C
使用C语言的SDK可以参考C SDK概述。
iOS、Android
使用iOS、Android语言的SDK可以参考iOS SDK概述或Android SDK概述。
LogBack Appender
GitHub源码请参考LogBack。
Log4J Appender
更多详细了解请参考SDK采集。日志服务除自研的SDK外,还支持公共的阿里云SDK,关于阿里云SDK的使用方式,请参见阿里云SDK。
最佳实践场景
在您了解完数据采集的方式后,为您推荐几种在真实使用场景下的数据采集实践教程。
某公司的网站应用部署在地域A,日志服务的Project部署在地域B,现计划通过Logtail采集配置将部署在地域A的ECS实例中的日志数据发送到地域B的Project中。此时存在跨地域采集的情况,需要参考通过Logtail跨地域采集日志。
越来越多设备开始逐步走进日常生活,例如智能路由器、各种电视棒、天猫精灵、扫地机器人等,让我们体验到智能领域的便利。传统软件领域的嵌入式开发模式在IoT设备领域的应用遇到了很多挑战,IoT设备数目多、分布广,难以调试且硬件受限,如何处理IoT设备日志可以参考采集-IoT/嵌入式日志。
推广网页时,多少用户做了点击?发送传单时,如何确保对方已读?移动App运营活动页面,如何分析用户访问情况?对这类个性化的采集与统计需求,如何能以快捷的手段满足这类用户行为采集可以参考采集-通过WebTracking采集日志。
更多详细了解请参考最佳实践。
常见问题
专线方式接入应如何选择网络?
请选择阿里云内网(经典网络或专有网络VPC)。
如何选择网络类型和接入点(Endpoint)?
不同网络类型的使用场景,请参见选择网络。接入点(Endpoint)的列表,请参见服务接入点。开启传输加速域名的步骤,请参见管理传输加速。
采集公网数据时能否采集公网IP地址?
您可以在Logstore属性中开通记录外网IP功能。更多信息,请参见创建Logstore。
将地域A上的ECS日志采集到地域B下日志服务Project中,应如何选择网络?
在地域A上的ECS中安装地域B公网的版本Logtail,进行公网传输。其他情况下的网络选择,请参见选择网络。
如何快速判断目标域名能否连接?
执行以下命令,如果有返回信息则表示可以联通。其中
$myproject
为Project名,cn-hangzhou.log.aliyuncs.com
为访问接入点。curl $myproject.cn-hangzhou.log.aliyuncs.com
更多问题可查看数据采集常见问题。