为Kubernetes和日志服务配置Log4JAppender

本文介绍在不需要修改应用代码的前提下,通过配置一个YAML文件,将阿里云容器服务Kubernetes集群中产生的日志输出到阿里云日志服务。此外,通过在Kubernetes集群上部署一个示例API程序,来进行演示。

前提条件

  • 您已经开通容器服务,并且创建了Kubernetes集群。

    本示例中,创建的Kubernetes集群位于华东1(杭州)。

  • 启用AccessKey或RAM,确保有足够的访问权限。本例中使用AccessKey。

背景信息

Log4j是Apache的一个开放源代码项目。Log4j由三个重要组件构成:日志信息的优先级、日志信息的输出目的地、日志信息的输出格式。通过配置Log4jAppender,您可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等。

操作步骤

  1. 在阿里云日志服务上配置Log4jAppender。

    1. 创建一个日志服务Project。

      本示例创建一个名为k8s-log4j、与Kubernetes集群位于同一地域(华东 1)的Project。具体操作,请参见创建Project

      说明

      在配置时,一般会使用与Kubernetes集群位于同一地域的日志服务Project。因为当Kubernetes集群和日志服务Project位于同一地域时,日志数据会通过内网进行传输,从而避免了因地域不一致而导致的数据传输外网带宽费用和耗时,从而实现实时采集、快速检索的最佳实践。

      创建project

    2. 为k8s-log4j的Project创建一个Logstore。

      本示例创建名为k8s-logstore的日志库。具体操作,请参见创建Logstore配置日志库信息

    3. 在k8s-logstore创建完成后,页面会提示您创建数据接入向导。

      创建数据接入向导

    4. 选择自定义代码下的log4jAppender,根据页面引导进行配置。

      本示例使用了默认配置,您可根据日志数据的具体使用场景,进行相应的配置。自定义数据

  2. 在Kubernetes集群中配置log4j。

    本示例使用demo-deploymentdemo-Service示例YAML文件进行演示。

    1. 连接到您的Kubernetes集群。

    2. 获取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。

    3. 在命令行中执行以下命令,创建deployment。

      kubectl create -f demo-deployment.yaml
    4. 获取demo-Service.yaml文件,并运行以下命令创建service。

      您不需要修改demo-Service.yaml中的配置。

      kubectl create -f demo-service.yaml
  3. 测试生成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
  4. 在阿里云日志服务中查看日志。

    1. Project列表中,单击目标Project,进入对应的Project详情页面。

    2. 在对应的日志库k8s-logstore右侧的图标图标,选择查询分析,查看Kubernetes集群输出的日志,如下所示。

      查询分析