Serverless应用引擎SAE(Serverless App Engine)支持将应用实例的标准输出(stdout),以及将应用实例指定路径的日志采集到消息队列Kafka版中。在此基础上,您可以结合自身的业务场景,将Kafka的数据投递到例如Elasticsearch等其他持久化库中,便于集中管理和分析日志。本文介绍在SAE控制台设置日志收集到Kafka的使用场景、操作步骤与采集格式说明。
前提条件
- SAE
确保应用中每个实例至少预留0.25 Core CPU和250 MB内存的可用资源。
- Kafka
- 开通Kafka并创建Topic。SAE支持Kafka 2.x及以上版本的实例。
- 如果Kafka的实例通过内网采集,无公网访问能力,则Kafka集群需要和SAE的实例在同一个VPC内。
- 配置Kafka白名单:
- 如果VPC一致,但vSwitch不一致,需要在Kafka实例页面将SAE的vSwitch添加至白名单。
- 如果需要设置为VPC内可访问,设置为0.0.0.0/0即可。
背景信息
操作步骤
在创建应用过程中配置文件日志收集
在部署应用过程中配置文件日志收集
警告 重新部署应用后,该应用将会被重启。为避免对业务产生不可预估的影响,请在业务低峰期执行部署操作。
更新应用配置的路径因实例数的不同而不同。本文以实例数大于等于1为例,介绍如何配置目标功能。当实例数等于0时的操作路径,请参见更新应用。
格式说明
当您成功配置日志采集到Kafka后,得到的采集数据格式如下。
{
"file":"/home/admin/apache-tomcat-8.5.42/logs/localhost.2022-03-01.log",
"host":"test-kafka-9527eec8-b2c1-4f03-9178-5dac0fe16d07-*****",
"message":"01-Mar-2022 15:09:36.016 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log No Spring WebApplicationInitializer types detected on classpath",
"topic":"test2"
}
参数说明如下。
file
:采集的文件路径。host
:采集的实例名称。message
:采集的具体日志内容。topic
:发送的Kafka Topic。
多行采集说明
- 目前Java应用出现的异常情况表现为日志会被自动合并到一行。Java异常日志示例如下:
java.lang.RuntimeException: testLog at cn.niutong.controller.TestController.heathc(TestController.java:141) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at ...
- 检测到换行符
\n
的情况下,日志会被重新写到新的一条里面。建议您在业务程序中,将日志包装成一个JSON字符串,作为一行统一对外输出。
如果您有更多需求,例如想要实现多行合并,请加入钉群(钉群号:32874633),联系产品技术专家进行咨询。
常见问题
- SAE日志采集到Kafka是否支持通配符?
支持。您可以通过设置星号(*)来表示某个文件夹下的所有文件,例如
/tmp/logs/*.log
。 - 采集不到日志是什么原因导致的?
可能跟网络有关。您可以按照以下步骤进行排查:
- 登录SAE的Webshell,使用telnet命令确认Kafka实例地址、查看网络是否正常连接。关于Webshell的具体信息,请参见使用Webshell诊断应用。
- 确认网络状态。
- 网络不同:确认SAE应用和Kafka实例是否在同一个VPC内,以及是否设置了白名单。
- 网络正常:加入钉群(钉群号:32874633),联系产品技术专家进行咨询。