Skip to content

Commit f1fcf26

Browse files
bric3devflow.devflow-routing-intake
andauthored
Crashtracking siginfo missed some information (#10907)
fix: siginfo now handle other informations chore: rework regex Co-authored-by: devflow.devflow-routing-intake <devflow.devflow-routing-intake@kubernetes.us1.ddbuild.io>
1 parent b8015c2 commit f1fcf26

File tree

7 files changed

+43
-11
lines changed

7 files changed

+43
-11
lines changed

dd-java-agent/agent-crashtracking/src/main/java/datadog/crashtracking/CrashUploader.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -544,6 +544,16 @@ private RequestBody makeErrorTrackingRequestBody(@Nonnull CrashLog payload, bool
544544
writer.name("si_signo_human_readable").value(payload.sigInfo.name);
545545
writer.name("si_signo").value(payload.sigInfo.number);
546546
}
547+
if (payload.sigInfo.action != null) {
548+
writer.name("si_code").value(payload.sigInfo.code);
549+
writer.name("si_code_human_readable").value(payload.sigInfo.action);
550+
}
551+
if (payload.sigInfo.pid != null) {
552+
writer.name("si_pid").value(payload.sigInfo.pid);
553+
}
554+
if (payload.sigInfo.uid != null) {
555+
writer.name("si_uid").value(payload.sigInfo.uid);
556+
}
547557
writer.endObject();
548558
}
549559

dd-java-agent/agent-crashtracking/src/main/java/datadog/crashtracking/dto/SigInfo.java

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,27 @@ public class SigInfo {
1919
@Json(name = "si_addr")
2020
public final String address;
2121

22-
public SigInfo(Integer number, String name, Integer code, String action, String address) {
22+
@Json(name = "si_pid")
23+
public final Integer pid;
24+
25+
@Json(name = "si_uid")
26+
public final Integer uid;
27+
28+
public SigInfo(
29+
Integer number,
30+
String name,
31+
Integer code,
32+
String action,
33+
String address,
34+
Integer pid,
35+
Integer uid) {
2336
this.number = number;
2437
this.name = name;
2538
this.address = address;
2639
this.code = code;
2740
this.action = action;
41+
this.pid = pid;
42+
this.uid = uid;
2843
}
2944

3045
@Override
@@ -35,11 +50,13 @@ public boolean equals(Object o) {
3550
&& Objects.equals(name, sigInfo.name)
3651
&& Objects.equals(address, sigInfo.address)
3752
&& Objects.equals(code, sigInfo.code)
38-
&& Objects.equals(action, sigInfo.action);
53+
&& Objects.equals(action, sigInfo.action)
54+
&& Objects.equals(pid, sigInfo.pid)
55+
&& Objects.equals(uid, sigInfo.uid);
3956
}
4057

4158
@Override
4259
public int hashCode() {
43-
return Objects.hash(number, name, address, code, action);
60+
return Objects.hash(number, name, address, code, action, pid, uid);
4461
}
4562
}

dd-java-agent/agent-crashtracking/src/main/java/datadog/crashtracking/parsers/HotspotCrashLogParser.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,12 @@ public HotspotCrashLogParser() {
6060
private static final Pattern SPACE_SPLITTER = Pattern.compile("\\s+");
6161
private static final Pattern NEWLINE_SPLITTER = Pattern.compile("\n");
6262
private static final Pattern SIGNAL_PARSER = Pattern.compile("\\s*(\\w+) \\((\\w+)\\).*");
63+
// Groups: 1=si_signo, 2=signal name, 3=si_code, 4=si_code name,
64+
// 5=si_addr (null for SI_USER), 6=si_pid (null for si_addr), 7=si_uid (null for si_addr)
6365
private static final Pattern SIGINFO_PARSER =
6466
Pattern.compile(
65-
"siginfo:\\s+si_signo:\\s+(\\d+)\\s+\\((\\w+)\\),\\s+si_code:\\s+(\\d+)\\s+\\(([^)]+)\\),\\s+si_addr:\\s+(0x[0-9a-fA-F]+)");
67+
"siginfo:\\s+si_signo:\\s+(\\d+)\\s+\\((\\w+)\\),\\s+si_code:\\s+(\\d+)\\s+\\(([^)]+)\\),\\s+"
68+
+ "(?:si_addr:\\s+(0x[0-9a-fA-F]+)|si_pid:\\s+(\\d+),\\s+si_uid:\\s+(\\d+))");
6669
private static final Pattern DYNAMIC_LIBS_PATH_PARSER =
6770
Pattern.compile("^(?:0x)?[0-9a-fA-F]+(?:-[0-9a-fA-F]+)?\\s+(?:[^\\s/\\[]+\\s+)*(.*)$");
6871

@@ -275,16 +278,18 @@ public CrashLog parse(String uuid, String crashLog) {
275278
break;
276279
case STACKTRACE:
277280
if (line.startsWith("siginfo:")) {
278-
// siginfo: si_signo: 11 (SIGSEGV), si_code: 1 (SEGV_MAPERR), si_addr:
279-
// 0x0000000000000070
281+
// siginfo: si_signo: 11 (SIGSEGV), si_code: 1 (SEGV_MAPERR), si_addr: 0x70
282+
// siginfo: si_signo: 11 (SIGSEGV), si_code: 0 (SI_USER), si_pid: 554848, si_uid: 1000
280283
final Matcher siginfoMatcher = SIGINFO_PARSER.matcher(line);
281284
if (siginfoMatcher.matches()) {
282285
Integer number = safelyParseInt(siginfoMatcher.group(1));
283286
String name = siginfoMatcher.group(2);
284287
Integer siCode = safelyParseInt(siginfoMatcher.group(3));
285288
String sigAction = siginfoMatcher.group(4);
286289
String address = siginfoMatcher.group(5);
287-
sigInfo = new SigInfo(number, name, siCode, sigAction, address);
290+
Integer siPid = safelyParseInt(siginfoMatcher.group(6));
291+
Integer siUid = safelyParseInt(siginfoMatcher.group(7));
292+
sigInfo = new SigInfo(number, name, siCode, sigAction, address, siPid, siUid);
288293
}
289294
} else if (line.contains("P R O C E S S")) {
290295
state = State.SEEK_DYNAMIC_LIBRARIES;

dd-java-agent/agent-crashtracking/src/main/java/datadog/crashtracking/parsers/J9JavacoreParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ private SigInfo buildSigInfo(String eventType, String eventCode) {
330330
signalNumber = parseEventCode(eventCode);
331331
}
332332

333-
return new SigInfo(signalNumber, signalName, null, null, null);
333+
return new SigInfo(signalNumber, signalName, null, null, null, null, null);
334334
}
335335

336336
private int parseEventCode(String eventCode) {
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"timestamp":"2024-09-20T13:19:06Z","ddsource":"crashtracker","error":{"is_crash":true,"type":"UNKNOWN","message":"Process terminated by signal UNKNOWN","source_type":"Crashtracking","stack":{"format":"CrashTrackerV1","frames":[{"function":"__pthread_clockjoin_ex+0x255","path":"libpthread.so.0","relative_address":"0x9cd5"}]}}}
1+
{"timestamp":"2024-09-20T13:19:06Z","ddsource":"crashtracker","error":{"is_crash":true,"type":"SIGSEGV","message":"Process terminated by signal SIGSEGV","source_type":"Crashtracking","stack":{"format":"CrashTrackerV1","frames":[{"function":"__pthread_clockjoin_ex+0x255","path":"libpthread.so.0","relative_address":"0x9cd5"}]}},"sig_info":{"si_signo_human_readable":"SIGSEGV","si_signo":11,"si_code":0,"si_code_human_readable":"SI_USER","si_pid":554848,"si_uid":1000}}

dd-java-agent/agent-crashtracking/src/test/resources/golden/errortracking/sample-crash-for-telemetry.txt

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"data_schema_version":"1.0","error":{"is_crash":true,"kind":"UNKNOWN","message":"Process terminated by signal UNKNOWN","source_type":"Crashtracking","stack":{"format":"CrashTrackerV1","frames":[{"function":"__pthread_clockjoin_ex+0x255","path":"libpthread.so.0","relative_address":"0x9cd5"}]}},"incomplete":false,"metadata":{"family":"java","library_name":"dd-trace-java","library_version":"1.60.0-SNAPSHOT~cffe9c6085"},"os_info":{"architecture":"aarch64","bitness":"64","os_type":"Mac OS X","version":{"Semantic":[15,7,1]}},"proc_info":{"pid":576034},"timestamp":"2024-09-20T13:19:06Z","uuid":"a4194cd6-8cb3-45fd-9bd9-3af83e0a3ad3","version_id":0}
1+
{"data_schema_version":"1.0","error":{"is_crash":true,"kind":"SIGSEGV","message":"Process terminated by signal SIGSEGV","source_type":"Crashtracking","stack":{"format":"CrashTrackerV1","frames":[{"function":"__pthread_clockjoin_ex+0x255","path":"libpthread.so.0","relative_address":"0x9cd5"}]}},"incomplete":false,"metadata":{"family":"java","library_name":"dd-trace-java","library_version":"1.60.0-SNAPSHOT~cffe9c6085"},"os_info":{"architecture":"aarch64","bitness":"64","os_type":"Mac OS X","version":{"Semantic":[15,7,1]}},"proc_info":{"pid":576034},"sig_info":{"si_code":0,"si_code_human_readable":"SI_USER","si_pid":554848,"si_signo":11,"si_signo_human_readable":"SIGSEGV","si_uid":1000},"timestamp":"2024-09-20T13:19:06Z","uuid":"a4194cd6-8cb3-45fd-9bd9-3af83e0a3ad3","version_id":0}

0 commit comments

Comments
 (0)