本文介绍如何通过阿里云日志服务Splunk Add-on将日志服务上的日志投递到Splunk。
架构
- 通过Splunk Data Input创建日志服务消费组,并从日志服务进行实时日志消费。
- 将采集到的日志通过Splunk私有协议(Private Protocol)或者HTTP Event Collector(HEC)投递到Splunk indexer。

机制

- 一个Data Input相当于一个消费者,对日志进行消费。
- 一个消费组由多个消费者构成,同一个消费组下面的消费者共同消费一个Logstore中的数据,消费者之间不会重复消费数据。
- 一个Logstore下面会有多个Shard。
- 每个Shard只会分配到一个消费者。
- 一个消费者可以同时拥有多个Shard。
- 所创建的消费者名字是由消费组名、host名、进程名、event协议类型组合而成,保证同一消费组内的消费者不重名。
更多关于消费组的信息,请参见通过消费组消费日志数据。
准备工作
- 获取日志服务的AccessKey。
您可以通过阿里云RAM获取日志服务Project的AccessKey。更多信息,请参见访问密钥和配置访问密钥。
您可以通过权限助手配置RAM权限。更多信息,请参见配置权限助手。常用的RAM配置如下:说明 <Project name>为您的日志服务Project名称,<Logstore name>为您的日志服务Logstore名称,请根据实际情况替换,名字替换支持通配符*。{ "Version": "1", "Statement": [ { "Action": [ "log:ListShards", "log:GetCursorOrData", "log:GetConsumerGroupCheckPoint", "log:UpdateConsumerGroup", "log:ConsumerGroupHeartBeat", "log:ConsumerGroupUpdateCheckPoint", "log:ListConsumerGroup", "log:CreateConsumerGroup" ], "Resource": [ "acs:log:*:*:project/<Project name>/logstore/<Logstore name>", "acs:log:*:*:project/<Project name>/logstore/<Logstore name>/*" ], "Effect": "Allow" } ] }
- 检查Splunk版本及运行环境。
- 确保使用最新的Add-on版本。
- 操作系统:Linux、Mac OS、Windows。
- Splunk版本:Splunk heavy forwarder 8.0及以上版本、Splunk indexer 7.0及以上版本。
- 配置Splunk HTTP Event Collector。更多信息,请参见Configure HTTP Event Collector on Splunk Enterprise。
如果需要使用HEC来发送event,请确保HEC配置成功。如果选择Splunk私有协议,则可以跳过该步骤。说明 目前创建Event Collector token时,不支持开启indexer acknowledgment功能。
安装Add-on
- 方法一
- 单击
图标。
- 在应用页面,单击浏览更多应用。
- 搜索Alibaba Cloud Log Service Add-on for Splunk,单击安装。
- 安装完成后,根据页面提示重启 Splunk服务。
- 单击
- 方法二
- 单击
图标。
- 在应用页面,单击从文件安装应用。
- 选择目标.tgz文件,单击上载。
您可以App Search Results上下载目标.tgz文件。
- 单击安装。
- 安装完成后,根据页面提示重启 Splunk服务。
- 单击
配置Add-on
当Splunk运行在非阿里云ECS上时,您可以使用阿里云访问密钥AccessKey ID和AccessKey Secret来访问日志服务。具体操作如下:
开始工作
- 查询数据
首先确保创建的Data Input是启动状态。然后您可以在Splunk web UI首页单击Search & Reporting,进入App: Search & Reporting页面,查询采集到的审计日志。
- 内部日志
- 使用
index="_internal" | search "SLS info"
查询日志服务相关的信息。 - 使用
index="_internal" | search "error"
查询运行时的错误信息。
- 使用
性能与安全
- 性能规格
日志服务Splunk Add-on性能及数据传输的吞吐量受到如下因素的影响:
- 服务入口:可以使用公网、经典网络、VPC网络或者全球加速服务入口。一般情况下,建议采用经典网络或VPC网络的服务入口。更多信息,请参见服务入口。
- 带宽:包括日志服务与Splunk heavy forwarder间的带宽、Splunk heavy forwarder与indexer之间的带宽。
- Splunk indexer处理能力:indexer的数据接收能力。
- Shard数量:对于单个日志服务Logstore,配置的Shard数越多,数据传输能力越强。您需要根据原始日志的生成速率确认Shard数量。更多信息,请参见管理Shard。
- Splunk Data Input的配置数量:同一个Logstore,配置越多的Data Input(相同的消费组),吞吐量越大。
说明 消费者的并发受到日志服务Logstore Shard数量的影响。
- Splunk heavy forwarder占用的CPU core数和内存:一般情况下一个Splunk Data Input需要消耗1~2G内存,占用1个CPU core。
当上述条件满足的情况下,一个Splunk Data Input可以提供1M/s~2M/s的日志消费能力。实际使用时,您需要根据原始日志的生成速率确认Shard数量。
例如,一个Logstore有10M/s的日志生产能力,需要至少拆分出10个split,并且在Add-on中配置10个Data Input。如果是单机部署,需要具备10个空闲CPU core及12G的内存。
- 高可用性
消费组将检测点(check-point)保存在服务器端,当一个消费者停止,另外一个消费者将自动接管并从断点继续消费。可以在不同机器上创建Splunk Data Input,这样在一台机器停止或者损坏的情况下,其他机器上的Splunk Data Input创建的消费者可以自动接管并从断点进行消费。理论上,为了备用,也可以在不同机器上启动大于Shard数量的Splunk Data Input。
- 使用HTTPS
- 日志服务
如果服务入口(endpoint)配置为https://前缀,例如https://cn-beijing.log.aliyuncs.com,程序与日志服务的连接将自动使用HTTPS加密。
服务器证书*.aliyuncs.com是GlobalSign签发,默认大多数Linux、Windows的机器会自动信任此证书。如果某些特殊情况,机器不信任此证书,请参见Install a trusted root CA or self-signed certificate。
- Splunk
为了使用HTTPS的HEC能力,需要在Splunk HEC全局配置界面上打开SSL功能。更多信息,请参见Configure HTTP Event Collector on Splunk Enterprise。
- 日志服务
- AccessKey存储保护
日志服务的AccessKey和Splunk的HEC token等关键信息,都保存在Splunk保密存储中,不用担心泄漏风险。
常见问题
- 配置错误
- 当创建或修改Data Input时,会有基本配置信息检查,配置参数说明请参见表 1。
- 日志服务配置错误,例如创建消费组失败。
- 命令:
index="_internal" | search "error"
- 异常日志:
aliyun.log.consumer.exceptions.ClientWorkerException: error occour when create consumer group, errorCode: LogStoreNotExist, errorMessage: logstore xxxx does not exist
- ConsumerGroupQuotaExceed错误
在日志服务中,一个Logstore最多配置20个消费组。请在日志服务控制台查看消费组信息,如果空闲数量不足,建议删除不需要的消费组。如果超过20个消费组,系统会报ConsumerGroupQuotaExceed错误。
- 命令:
- 权限错误
- 无权限访问阿里云日志服务
- 命令:
index="_internal" | search "error"
- 异常日志:
aliyun.log.consumer.exceptions.ClientWorkerException: error occour when create consumer group, errorCode: SignatureNotMatch, errorMessage: signature J70VwxYH0+W/AciA4BdkuWxK6W8= not match
- 命令:
- ECS RAM鉴权失败
- 命令:
index="_internal" | search "error"
- 异常日志:
ECS RAM Role detected in user config, but failed to get ECS RAM credentials. Please check if ECS instance and RAM role 'ECS-Role' are configured appropriately.
其中,ECS-Role为您创建的RAM角色,将根据实际情况显示。
- 可能原因:
- 确认Data Input中的SLS AccessKey参数是否已配置为具备RAM角色的全局账号。
- 确认全局账号是否正确配置了RAM角色,账号必须为ECS_RAM_ROLE,密码为RAM角色名称。
- 确认ECS实例是否已绑定RAM角色。
- 确认RAM角色的可信实体类型是否为阿里云服务,受信服务是否为云服务器。
- 确认绑定RAM角色的ECS实例是否为运行Splunk的机器。
- 命令:
- 无权限访问HEC
- 命令:
index="_internal" | search "error"
- 异常日志:
ERROR HttpInputDataHandler - Failed processing http input, token name=n/a, channel=n/a, source_IP=127.0.0.1, reply=4, events_processed=0, http_input_body_size=369 WARNING pid=48412 tid=ThreadPoolExecutor-0_1 file=base_modinput.py:log_warning:302 | SLS info: Failed to write [{"event": "{\"__topic__\": \"topic_test0\", \"__source__\": \"127.0.0.1\", \"__tag__:__client_ip__\": \"10.10.10.10\", \"__tag__:__receive_time__\": \"1584945639\", \"content\": \"goroutine id [0, 1584945637]\", \"content2\": \"num[9], time[2020-03-23 14:40:37|1584945637]\"}", "index": "main", "source": "sls log", "sourcetype": "http of hec", "time": "1584945637"}] remote Splunk server (http://127.0.0.1:8088/services/collector) using hec. Exception: 403 Client Error: Forbidden for url: http://127.0.0.1:8088/services/collector, times: 3
- 可能原因
- HEC没有配置或启动。
- Data Input中的HEC基本信息配置错误。例如:如果使用HTTPS,需要开启SSL配置。
- 检查Event Collector token的indexer acknowledgment功能是否为关闭状态。
- 命令:
- 无权限访问阿里云日志服务
- 消费时延
建议参见性能规格,采用扩充Shard数或者创建具有相同消费组的Data Input的方式解决消费时延问题。
- 网络抖动
- 命令:
index="_internal" | search "SLS info: Failed to write"
- 异常日志:
WARNING pid=58837 tid=ThreadPoolExecutor-0_0 file=base_modinput.py:log_warning:302 | SLS info: Failed to write [{"event": "{\"__topic__\": \"topic_test0\", \"__source__\": \"127.0.0.1\", \"__tag__:__client_ip__\": \"10.10.10.10\", \"__tag__:__receive_time__\": \"1584951417\", \"content2\": \"num[999], time[2020-03-23 16:16:57|1584951417]\", \"content\": \"goroutine id [0, 1584951315]\"}", "index": "main", "source": "sls log", "sourcetype": "http of hec", "time": "1584951417"}] remote Splunk server (http://127.0.0.1:8088/services/collector) using hec. Exception: ('Connection aborted.', ConnectionResetError(54, 'Connection reset by peer')), times: 3
正常情况下,event会自动重传。但是如果问题持续存在,请联系网络管理员排查网络状况。
- 命令:
- 修改消费起始时间
说明 Data Input的消费起始时间参数,只有消费组首次创建时有效。非首次创建日志都是从上次的保存点开始消费。
- 在Splunk Web UI的输入页面,禁用目标Data Input。
- 登录日志服务控制台,在所消费的目标Logstore下的数据消费栏中,删除对应的消费组。
- 在Splunk Web UI的输入页面,单击目标Data Input右侧的 ,修改SLS cursor start time参数,并重新启动Data Input。