采集Java应用的Log4j日志至SLS

通过在工作负载YAML中配置Log4j Appender,您可以将集群Java应用的日志直接写入阿里云SLS Project,实现无侵入式的日志采集。

Log4jApache维护的开源日志框架,专为 Java 应用程序设计。Log4j的核心组件包括Appenders(输出目标)、 Layouts(输出格式)、Filters(过滤器)等。通过配置Appenders,您可以指定日志传输的目的地,例如控制台、文件等。

前提条件

  • 创建ACK托管集群

  • 创建AccessKey,供后续在应用中集成Log4j Appender使用。

    为保证账号安全,建议您使用RAM用户(而非阿里云账号)并创建对应的AccessKey。

步骤一:在SLS中配置Log4j Appender

本步骤指引您创建SLS ProjectLogstore。配置Logstore的数据源为Log4j Appender后,您可以将Java 应用的日志直接发送至 SLS。

推荐创建的SLS Project与集群处于同一地域。两者处于同一地域时,日志数据可通过内网传输,避免因跨地域传输产生的外网带宽费用和网络延迟。

关于SLS Project的计费说明,请参见计费概述
  1. 创建一个SLS Project。

    下方仅介绍核心配置项。其余配置项保持默认即可。具体操作,请参见管理Project

    • 所属地域:推荐与ACK集群位于同一地域。本示例为华东1(杭州)。

    • Project名称:本示例为k8s-log4j。

  2. Project中创建一个Logstore。

    本示例Logstore名称k8s-logstore,其余配置项保持默认即可。具体操作,请参见创建Logstore

  3. k8s-logstore创建完成后,按照页面提示,进行数据接入。

    创建数据接入向导

  4. 搜索并定位Log4j的接入卡片,按照页面提示完成接入。

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

步骤二:在应用中集成Log4j

本步骤通过部署一个 Spring Boot 示例应用,演示如何将 Log4j Appender 插件集成到 Java 应用中。集成后,容器启动时将通过 JAVA_OPTS 环境变量传递 SLS 配置,Log4j 会自动读取参数并实时将日志发送至SLS。

  1. 获取demo-deployment.yaml文件,并配置环境变量JAVA_OPTS

    获取地址,请参见demo-deployment

    展开查看示例文件

    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            #  设置环境变量 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

    JAVA_OPTS配置说明:

    • -Dproject:SLS Project名称。本示例为k8s-log4j。

    • -Dlogstore:SLS Logstore名称。本示例为k8s-logstore。

    • -Dendpoint:SLS的服务入口。请根据Project所属地域配置服务入口,可参见服务入口进行查询。本示例为cn-hangzhou.log.aliyuncs.com。

    • -Daccess_key_id:替换为AccessKey ID。

    • -Daccess_key:替换为AccessKey Secret。

  2. 创建Deployment。

    kubectl create -f demo-deployment.yaml
  3. 获取demo-Service.yaml文件,保持默认配置即可。

    获取地址,请参见demo-Service

    展开查看示例文件

    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: log4j-appender
      name: log4j-appender-demo-spring-boot-svc
      namespace: default
    spec:
      ports:
      - port: 8080
        protocol: TCP
        targetPort: 8080
      selector:
        app: log4j-appender
      type: LoadBalancer
  4. 部署demo-Service.yaml,创建Service。

    kubectl create -f demo-service.yaml

步骤三:测试日志采集功能

DeploymentService部署成功后,您可以查看Service的外部访问IP,即EXTERNAL-IP,访问服务并生成日志,验证日志是否能成功写入 SLS。

  1. 查看ServiceEXTERNAL-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
  2. 运行login命令,测试集群日志是否成功生成。

    替换K8s_SERVICE_IPEXTERNAL-IP

    curl http://${K8S_SERVICE_IP}:8080/login?name=bruce
    可在GitHub log4j-appender-demo中查看完整的API集合。

步骤四:在SLS控制台查看日志

您可登录SLS控制台查询并分析日志。

  1. 登录日志服务控制台

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

  3. 单击Logstore右侧的图标图标,选择查询分析,查看集群输出的日志。

    查询分析

相关文档