本文介绍在不需要修改应用代码的前提下,通过配置一个YAML文件,将阿里云容器服务Kubernetes集群中产生的日志输出到阿里云日志服务。此外,通过在Kubernetes集群上部署一个示例API程序,来进行演示。
前提条件
您已经开通容器服务,并且创建了Kubernetes集群。
本示例中,创建的Kubernetes集群位于华东1(杭州)。
启用AccessKey或RAM,确保有足够的访问权限。本例中使用AccessKey。
背景信息
Log4j是Apache的一个开放源代码项目。Log4j由三个重要组件构成:日志信息的优先级、日志信息的输出目的地、日志信息的输出格式。通过配置Log4jAppender,您可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等。
操作步骤
在阿里云日志服务上配置Log4jAppender。
创建一个日志服务Project。
本示例创建一个名为k8s-log4j、与Kubernetes集群位于同一地域(华东 1)的Project。具体操作,请参见创建Project。
说明在配置时,一般会使用与Kubernetes集群位于同一地域的日志服务Project。因为当Kubernetes集群和日志服务Project位于同一地域时,日志数据会通过内网进行传输,从而避免了因地域不一致而导致的数据传输外网带宽费用和耗时,从而实现实时采集、快速检索的最佳实践。
为k8s-log4j的Project创建一个Logstore。
本示例创建名为k8s-logstore的日志库。具体操作,请参见创建Logstore。
在k8s-logstore创建完成后,页面会提示您创建数据接入向导。
选择自定义代码下的log4jAppender,根据页面引导进行配置。
本示例使用了默认配置,您可根据日志数据的具体使用场景,进行相应的配置。
在Kubernetes集群中配置log4j。
本示例使用demo-deployment和demo-Service示例YAML文件进行演示。
连接到您的Kubernetes集群。
获取demo-deployment.yaml文件并配置环境变量
JAVA_OPTS
。demo-deployment.yaml文件的示例编排如下。
apiVersion: apps/v1 kind: Deployment metadata: name: log4j-appender-demo-spring-boot labels: app: log4j-appender spec: replicas: 1 selector: matchLabels: app: log4j-appender template: metadata: labels: app: log4j-appender spec: containers: - name: log4j-appender-demo-spring-boot image: registry.cn-hangzhou.aliyuncs.com/jaegertracing/log4j-appender-demo-spring-boot:0.0.2 env: - name: JAVA_OPTS ##注意 value: "-Dproject={your_project} -Dlogstore={your_logstore} -Dendpoint={your_endpoint} -Daccess_key_id={your_access_key_id} -Daccess_key={your_access_key_secret}" ports: - containerPort: 8080
说明其中:
-Dproject
:您所使用的阿里云日志服务Project的名称。本示例中为k8s-log4j。-Dlogstore
:您所使用的阿里云日志服务Logstore的名称。本示例中为k8s-logstore。-Dendpoint
:日志服务的服务入口,用户需要根据日志Project所属的地域,配置自己的服务入口,参见服务入口进行查询。本示例中为cn-hangzhou.log.aliyuncs.com。-Daccess_key_id
:您的AccessKey ID。-Daccess_key
:您的AccessKey Secret。
在命令行中执行以下命令,创建deployment。
kubectl create -f demo-deployment.yaml
获取demo-Service.yaml文件,并运行以下命令创建service。
您不需要修改demo-Service.yaml中的配置。
kubectl create -f demo-service.yaml
测试生成Kubernetes集群日志。
您可以使用
kubectl get
命令查看资源对象部署状况,等待deployment和service部署成功后,执行kubectl get svc
查看service的外部访问IP,即EXTERNAL-IP。命令如下:
kubectl get svc
结果如下:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE log4j-appender-demo-spring-boot-svc LoadBalancer 172.21.XX.XX 120.55.XXX.XXX 8080:30398/TCP 1h
在本示例中,通过运行
login
命令来测试生成Kubernetes集群日志。其中K8S_SERVICE_IP
即为EXTERNAL-IP
。说明您可以在GitHub log4j-appender-demo中查看完整的API集合。
curl http://${K8S_SERVICE_IP}:8080/login?name=bruce
在阿里云日志服务中查看日志。
在Project列表中,单击目标Project,进入对应的Project详情页面。
在对应的日志库k8s-logstore右侧的图标,选择查询分析,查看Kubernetes集群输出的日志,如下所示。