ubuntu

Java日志Ubuntu中如何审计

小樊
37
2025-12-25 16:52:43
栏目: 编程语言

Ubuntu下Java日志审计实操指南

一 审计目标与总体架构

二 应用侧日志规范与输出

<configuration>
  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>logs/app.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>logs/app-%d{yyyy-MM-dd}.gz</fileNamePattern>
      <maxHistory>30</maxHistory>
    </rollingPolicy>
    <encoder>
      <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}:%line -
        traceId=%X{traceId} userId=%X{userId} ip=%X{ip} action=%X{action}
        status=%X{status} dur=%X{duration}ms - %msg%n
      </pattern>
    </encoder>
  </appender>
  <root level="INFO">
    <appender-ref ref="FILE"/>
  </root>
</configuration>
MDC.put("traceId", UUID.randomUUID().toString());
MDC.put("userId", getCurrentUserId());
MDC.put("ip", getClientIp());
MDC.put("action", "createOrder");
try {
  // biz
  MDC.put("status", "SUCCESS");
} catch (Exception e) {
  MDC.put("status", "FAIL");
  log.error("order create failed, orderId={}", orderId, e);
} finally {
  MDC.clear();
}

三 Ubuntu系统侧采集与轮转

/var/log/myapp/*.log {
  daily
  rotate 30
  compress
  missingok
  notifempty
  copytruncate
  dateext
}

四 集中审计分析与告警

input { beats { port => 5044 } }
filter {
  grok { match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} \[%{DATA:thread}\] %{LOGLEVEL:level} %{DATA:logger}:%{NUMBER:line} - traceId=%{DATA:traceId} userId=%{DATA:userId} ip=%{IP:ip} action=%{DATA:action} status=%{DATA:status} dur=%{NUMBER:duration}ms - %{GREEDYDATA:msg}" } }
  date { match => [ "timestamp", "yyyy-MM-dd HH:mm:ss.SSS" ] target => "@timestamp" }
  geoip { source => "ip" }
}
output { elasticsearch { hosts => ["http://localhost:9200"] index => "java-audit-%{+YYYY.MM.dd}" } }

0
看了该问题的人还看了