35
35
import org .apache .logging .log4j .Logger ;
36
36
37
37
import java .io .IOException ;
38
- import java .time .ZoneId ;
39
- import java .time .format .DateTimeFormatter ;
40
38
import java .util .concurrent .BlockingQueue ;
41
39
import java .util .concurrent .TimeUnit ;
42
40
@@ -48,9 +46,6 @@ public class AuditLoader extends Plugin implements AuditPlugin {
48
46
49
47
public static final String AUDIT_LOG_TABLE = "audit_log" ;
50
48
51
- private static final DateTimeFormatter DATETIME_FORMAT = DateTimeFormatter .ofPattern ("yyyy-MM-dd HH:mm:ss.SSS" )
52
- .withZone (ZoneId .systemDefault ());
53
-
54
49
private StringBuilder auditLogBuffer = new StringBuilder ();
55
50
private int auditLogNum = 0 ;
56
51
private long lastLoadTimeAuditLog = 0 ;
@@ -90,7 +85,7 @@ public void init(PluginInfo info, PluginContext ctx) throws PluginException {
90
85
// GlobalVariable.audit_plugin_max_batch_bytes.
91
86
this .auditEventQueue = Queues .newLinkedBlockingDeque (100000 );
92
87
this .streamLoader = new AuditStreamLoader ();
93
- this .loadThread = new Thread (new LoadWorker (this . streamLoader ), "audit loader thread" );
88
+ this .loadThread = new Thread (new LoadWorker (), "audit loader thread" );
94
89
this .loadThread .start ();
95
90
96
91
isInit = true ;
@@ -143,6 +138,7 @@ private void assembleAudit(AuditEvent event) {
143
138
}
144
139
145
140
private void fillLogBuffer (AuditEvent event , StringBuilder logBuffer ) {
141
+ // should be same order as InternalSchema.AUDIT_SCHEMA
146
142
logBuffer .append (event .queryId ).append ("\t " );
147
143
logBuffer .append (TimeUtils .longToTimeStringWithms (event .timestamp )).append ("\t " );
148
144
logBuffer .append (event .clientIp ).append ("\t " );
@@ -156,15 +152,21 @@ private void fillLogBuffer(AuditEvent event, StringBuilder logBuffer) {
156
152
logBuffer .append (event .scanBytes ).append ("\t " );
157
153
logBuffer .append (event .scanRows ).append ("\t " );
158
154
logBuffer .append (event .returnRows ).append ("\t " );
155
+ logBuffer .append (event .shuffleSendRows ).append ("\t " );
156
+ logBuffer .append (event .shuffleSendBytes ).append ("\t " );
157
+ logBuffer .append (event .scanBytesFromLocalStorage ).append ("\t " );
158
+ logBuffer .append (event .scanBytesFromRemoteStorage ).append ("\t " );
159
159
logBuffer .append (event .stmtId ).append ("\t " );
160
160
logBuffer .append (event .stmtType ).append ("\t " );
161
161
logBuffer .append (event .isQuery ? 1 : 0 ).append ("\t " );
162
+ logBuffer .append (event .isNereids ? 1 : 0 ).append ("\t " );
162
163
logBuffer .append (event .feIp ).append ("\t " );
163
164
logBuffer .append (event .cpuTimeMs ).append ("\t " );
164
165
logBuffer .append (event .sqlHash ).append ("\t " );
165
166
logBuffer .append (event .sqlDigest ).append ("\t " );
166
167
logBuffer .append (event .peakMemoryBytes ).append ("\t " );
167
168
logBuffer .append (event .workloadGroup ).append ("\t " );
169
+ logBuffer .append (event .cloudClusterName ).append ("\t " );
168
170
// already trim the query in org.apache.doris.qe.AuditLogHelper#logAuditLog
169
171
String stmt = event .stmt ;
170
172
if (LOG .isDebugEnabled ()) {
@@ -173,10 +175,12 @@ private void fillLogBuffer(AuditEvent event, StringBuilder logBuffer) {
173
175
logBuffer .append (stmt ).append ("\n " );
174
176
}
175
177
176
- private void loadIfNecessary (AuditStreamLoader loader ) {
178
+ // public for external call.
179
+ // synchronized to avoid concurrent load.
180
+ public synchronized void loadIfNecessary (boolean force ) {
177
181
long currentTime = System .currentTimeMillis ();
178
182
179
- if (auditLogBuffer .length () >= GlobalVariable .auditPluginMaxBatchBytes
183
+ if (force || auditLogBuffer .length () >= GlobalVariable .auditPluginMaxBatchBytes
180
184
|| currentTime - lastLoadTimeAuditLog >= GlobalVariable .auditPluginMaxBatchInternalSec * 1000 ) {
181
185
// begin to load
182
186
try {
@@ -189,7 +193,7 @@ private void loadIfNecessary(AuditStreamLoader loader) {
189
193
discardLogNum += auditLogNum ;
190
194
return ;
191
195
}
192
- AuditStreamLoader .LoadResponse response = loader .loadBatch (auditLogBuffer , token );
196
+ AuditStreamLoader .LoadResponse response = streamLoader .loadBatch (auditLogBuffer , token );
193
197
if (LOG .isDebugEnabled ()) {
194
198
LOG .debug ("audit loader response: {}" , response );
195
199
}
@@ -215,10 +219,8 @@ private void resetBatch(long currentTime) {
215
219
}
216
220
217
221
private class LoadWorker implements Runnable {
218
- private AuditStreamLoader loader ;
219
222
220
- public LoadWorker (AuditStreamLoader loader ) {
221
- this .loader = loader ;
223
+ public LoadWorker () {
222
224
}
223
225
224
226
public void run () {
@@ -228,7 +230,7 @@ public void run() {
228
230
if (event != null ) {
229
231
assembleAudit (event );
230
232
// process all audit logs
231
- loadIfNecessary (loader );
233
+ loadIfNecessary (false );
232
234
}
233
235
} catch (InterruptedException ie ) {
234
236
if (LOG .isDebugEnabled ()) {
@@ -241,3 +243,4 @@ public void run() {
241
243
}
242
244
}
243
245
}
246
+
0 commit comments