From ab6f5298c4af3d13a309d41feb5175645e9927be Mon Sep 17 00:00:00 2001 From: Siwei He Date: Sun, 15 Dec 2024 21:55:24 -0500 Subject: [PATCH] docs: Add project report in README.md; Move project proposal to `docs`. (#16) Co-authored-by: LinZhihao-723 --- README.md | 171 +++++++++++++++++++++++------- docs/proposal.md | 145 +++++++++++++++++++++++++ docs/src/overall-arch-diagram.png | Bin 0 -> 193639 bytes proposal.md | 145 +++++++++++++++++++++++++ 4 files changed, 424 insertions(+), 37 deletions(-) create mode 100644 docs/proposal.md create mode 100755 docs/src/overall-arch-diagram.png create mode 100644 proposal.md diff --git a/README.md b/README.md index 282ead1..f8bd46a 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,28 @@ # log-surgeon: A performant log parsing library Project Link: [Homepage][home-page] +Video Demo Link: [Video Demo][video-demo] + +--- + ## Team Members -- Student 1: Siwei (Louis) He, 1004220960 -- Student 2: Zhihao Lin, 1005071299 +- Student 1: Siwei (Louis) He, 1004220960, siwei.he@mail.utoronto.ca +- Student 2: Zhihao Lin, 1005071299, zh.lin@mail.utoronto.ca + +--- ## Introduction `log-surgeon` is a library for high-performance parsing of unstructured text logs implemented using Rust. +--- ## Motivation Today's large technology companies generate logs the magnitude of petabytes per day as a critical source for runtime failure diagnostics and data analytics. In a real-world production environment, -logs can be split into two categories: unstructured logs and structured logs, where unstructured logs -usually consist of a timestamp and a raw text message (i.e.,[Hadoop logs][hadoop-logs]), and +logs can be split into two categories: unstructured logs and structured logs, where unstructured +logs usually consist of a timestamp and a raw text message (i.e.,[Hadoop logs][hadoop-logs]), and structured logs are normally JSON records (i.e., [mongoDB logs][mongodb-logs]). [CLP][github-clp], is a distributed system designed to compress, search, and analyze large-scale log data. It provides solutions for both unstructured and structured logs, as discussed in its @@ -76,7 +83,9 @@ Our project, [log-surgeon-rust][home-page], is designed to improve CLP's parsing safe and high-performant regular expression engine specialized for unstructured logs, allowing users to extract named variables from raw text log messages efficiently according to user-defined schema. -## Objective and Key Features +--- + +## Objective The objective of this project is to fill the gap explained in the motivation above in the current Rust ecosystem. We shall deliver a high-performance and memory-safe log parsing library using Rust. The project should consist of the core regex engine, the parser, and the user-oriented log parsing @@ -87,49 +96,136 @@ User-defined schemas will be described in regular expressions, and the underlyin the schema regular expressions into abstract syntax trees (AST), convert ASTs into non-deterministic finite automata ([NFA][wiki-nfa]), and merge all NFAs into one large deterministic finite automata ([DFA][wiki-dfa]). This single-DFA design will ensure the execution time is bounded by the length of -the input stream. If time allows, we will even implement [tagged DFA][wiki-tagged-dfa] to make -the schema more powerful. +the input stream. -The parser has two components: -- The schema parser, which is an implementation of [LALR parser][wiki-lalr], parses user-input -schema into regex AST. -- The log parser, which operates similarly to a simple compiler, uses a lexer to process the input -text and emits tokens, and makes decisions based on emitted tokens using the core regex engine. +The actual log parser should operate similarly to a simple compiler: it uses a lexer to process the +input character stream and emits tokens according to the user-defined schema, and makes decisions +based on emitted tokens to construct parsed log events. The log parsing interface will provide user programmatic APIs to: -- Specify inputs (variable schemas) to configure the regex engine -- Feed input stream to the log parser using the configured regex engine +- Specify inputs (variable schemas) to configure the log parser +- Feed input log stream to the log parser - Retrieve outputs (parsed log events structured according to the user schema) from the parser -[Zhihao Lin][github-zhihao] will be working on the parser implementation. +--- + +## Features +As a log parsing library, log-surgeon provides the following features that differ from general text +parsers: +- **Advanced Log Parsing Capabilities:** + - Extracts variable values such as log levels and user-defined variables, regardless of their + position within log events. + - Utilizes regular expressions tailored to each variable type rather than for entire log events. + - Supports parsing of multi-line log events, delimited by timestamps. + +- **Customizable Stream Support:** + - Enables integration with user-defined stream types through the `log_surgeon::lexer::LexerStream` + trait. + +- **Flexible Parsing APIs:** + - A **low-level API** for streaming lexer-generated tokens. + - A **high-level API** that structures tokens into parsed log events for easier consumption. + +As the library prioritizes log parsing, the regex engine is not part of the default API. To access +regex-specific functionality, enable the `regex-engine` feature in the Cargo configuration. This +feature provides APIs for: +- Converting [regex_syntax::ast::Ast][regex-syntax-ast-Ast] into an NFA. +- Merging multiple NFAs into a single DFA. +- Simulating a DFA with character streams or strings. + +--- + +## Architecture Overview +![log-surgeon-arch-overview](docs/src/overall-arch-diagram.png) + +--- + +## User's Guide +log-surgeon is a Rust library for high-performance parsing of unstructured text logs. It is being +shipped as a Rust crate and can be included in your Rust project by adding the following line to +your `Cargo.toml` file: +```toml +[dependencies] +log-surgeon = { git = "https://github.com/Toplogic-Inc/log-surgeon-rust", branch = "main" } +``` + +Example usage of the library can be found in the examples directory of the repository. You can use +the following code to confirm that you successfully included the library and check the version of +the library: +```rust +extern crate log_surgeon; + +fn main() { + println!("You are using log-surgeon version: {}", log_surgeon::version()); +} +``` + +## Reproducibility Guide +There are several regression tests in the `tests` directory of the repository as well as in the +individual components of the project. You can run the tests to ensure that the library is working +as expected. The tests include testing the AST to NFA conversion, the NFA to DFA conversion, the +DFA simulation on the input stream, and the correct passing of unstructured logs given input file +and log searching schema. + +To run the tests, you can use the following command: +```shell +cargo test +``` + +There are also example usage of the library in the `examples` directory of the repository. You can +run the examples to see how the library can be used or be reproduced in a real-world scenario. Assume +you are in the root directory of the repository, you can run the following command to change your +directory to the examples directory and run the example: +```shell +cd examples +cargo run +``` +The example uses the repository relative path to include the dependency. If you want to include the +library in your project, you can follow the user's guide above where you should specify the git URL +to obtain the latest version of the library. + +--- + +## Contributions by each team member +1. **[Louis][github-siwei]** +- Implemented the draft version of the AST-to-NFA conversion. +- Implemented the conversion from one or more NFAs to a single DFA. +- Implemented the simulation of the DFA on the input stream. + + +2. **[Zhihao][github-zhihao]** +- Implemented the final version of AST-to-NFA conversion. +- Implemented the schema parser. +- Implemented the lexer. +- Implemented the log parser. + +Both members contributed to the overall architecture, unit testing, integration testing, and library +finalization. Both members reviewed the other's implementation through GitHub's Pull Request. -[Siwei (Louis) He][github-siwei] will be working on the core regex engine implementation. +--- -Both will be working on the log parsing interface. +## Lessons learned and concluding remarks +This project provided us with an excellent opportunity to learn about the Rust programming language. +We gained hands-on experience with Rust's borrowing system, which helped us write safe and reliable +code. -One will review the other's implementation through GitHub's Pull Request for the purpose of the -correctness and efficiency. +While we successfully completed the project, we identified areas for improvement. First, we could +have invested more time in the research and design phase. A clearer consensus on the AST-to-NFA +conversion design could have reduced the time spent on iterations during implementation. -## Tentative Plan and Status -1. **Louis** +Second, due to time constraints, we couldn’t fully optimize the library’s performance. While the +core functionality is implemented, there’s significant room for improvement. We have many ideas for +optimization but lacked the time to execute them. -| Time | Tentative Schedule | Status | -|-----------------------|---------------------------------------------|-------------| -| Oct. 18th ~ Oct. 25th | Complete AST common structs for the project | Done | -| Oct. 25th ~ Nov. 8th | Complete NFA structs and research | On track | -| Nov. 1st ~ Nov. 8th | Implement AST to NFA translation | Not started | -| Nov. 8th ~ Nov. 15th | Implement AST to NFA translation | Not started | -| Nov. 15th ~ Nov. 22nd | Complete DFA structs and research | Not started | -| Nov. 22nd ~ Nov. 29th | Implement NFA to DFA translation | Not started | -| Nov. 29th ~ Dec. 6th | Stages integration and final reporting | Not started | +Overall, the project is a great learning experience. We have learned a lot about Rust, how to ship a +Rust crate, and how everything works behind the regular expression processing. We are proud filling +the gap in the Rust ecosystem where there is no high-performance unstructured log parsing library. -2. **Zhihao** +The future work: +- Improve DFA simulation performance. +- Implement [tagged-DFA][wiki-tagged-dfa] to support more powerful variable extraction. +- Optimize the lexer to emit tokens based on buffer views, reducing internal string copying. -| Time | Tentative Schedule | Status | -|-----------------------|-------------------------------------------------------------|-------------| -| Nov. 1st ~ Nov. 15th | Implement LALR parser for schema parsing and AST generation | Not started | -| Nov. 15th ~ Nov. 29nd | Implement lexer for input stream processing | Not started | -| Nov. 29nd ~ Dec. 6th | Formalize log parsing APIs | Not started | [clp-paper]: https://www.usenix.org/system/files/osdi21-rodrigues.pdf [clp-s-paper]: https://www.usenix.org/system/files/osdi24-wang-rui.pdf @@ -139,7 +235,8 @@ correctness and efficiency. [hadoop-logs]: https://zenodo.org/records/7114847 [home-page]: https://github.com/Toplogic-Inc/log-surgeon-rust [mongodb-logs]: https://zenodo.org/records/11075361 +[regex-syntax-ast-Ast]: https://docs.rs/regex-syntax/latest/regex_syntax/ast/enum.Ast.html [wiki-dfa]: https://en.wikipedia.org/wiki/Deterministic_finite_automaton -[wiki-lalr]: https://en.wikipedia.org/wiki/LALR_parser [wiki-nfa]: https://en.wikipedia.org/wiki/Nondeterministic_finite_automaton [wiki-tagged-dfa]: https://en.wikipedia.org/wiki/Tagged_Deterministic_Finite_Automaton +[video-demo]: TODO \ No newline at end of file diff --git a/docs/proposal.md b/docs/proposal.md new file mode 100644 index 0000000..282ead1 --- /dev/null +++ b/docs/proposal.md @@ -0,0 +1,145 @@ +# log-surgeon: A performant log parsing library +Project Link: [Homepage][home-page] + +## Team Members +- Student 1: Siwei (Louis) He, 1004220960 +- Student 2: Zhihao Lin, 1005071299 + +## Introduction + +`log-surgeon` is a library for high-performance parsing of unstructured text +logs implemented using Rust. + + +## Motivation +Today's large technology companies generate logs the magnitude of petabytes per day as a critical +source for runtime failure diagnostics and data analytics. In a real-world production environment, +logs can be split into two categories: unstructured logs and structured logs, where unstructured logs +usually consist of a timestamp and a raw text message (i.e.,[Hadoop logs][hadoop-logs]), and +structured logs are normally JSON records (i.e., [mongoDB logs][mongodb-logs]). [CLP][github-clp], +is a distributed system designed to compress, search, and analyze large-scale log data. It provides +solutions for both unstructured and structured logs, as discussed in its +[2021's OSDI paper][clp-paper] and [2024's OSDI paper][clp-s-paper]. + +CLP has been deployed in many large-scale production software systems in thousands of cloud servers +and commercial electric vehicles. Throughout the deployment experiences, an interesting issue has +been found. Consider the following log event: +```text +2022-10-10 12:30:02 1563 1827 I AppControl: Removed item: AppOpItem(Op code=1, UID=1000) +``` +This is an unstructured log event collected from the Android system on a mobile device. It can be +manually structured in the following way: +```JSON +{ + "timestamp": "2022-10-10 12:30:02", + "PID": 1563, + "TID": 1827, + "priority": "I", + "tag": "AppControl", + "record": { + "action": "Removed item", + "op_code": 1, + "UID": 1000 + } +} +``` +Intuitively, the structured version makes it easier to query relevant data fields. For example, if +an application wants to query `UID=1000`, it can take advantage of the tree-style key-value pair +structure that JSON format provides. Otherwise, it might need a complicated regular expression to +extract the number from the raw-text log message. Unfortunately, it is impossible to deprecate +unstructured logging infrastructures in any real-world software systems for the following reasons: +- Unstructured logs are more run-time-efficient: it does not introduce overhead of structuring data. +- Legacy issues: real-world software systems use countless software components; some + may not be compatible with structured logging infrastructure. + +Hence, the high-level motivation of our project has been formed: how to improve the analyzability of +unstructured logs to make it as usable as structured logs? The scope of this problem is vast, +and we will focus on one aspect: log parsing. CLP has introduced an innovative way of handling +unstructured logs. The basic idea behind is to find the static text and variables in a raw text log +message, where the static text is like a format string. For instance, the above log event can be +interpreted as the following: +```Python +print( + f"{timestamp}, {pid}, {tid}, {priority}, {tag}: Removed item: AppOpItem(Op code={op}, UID={uid})" +) +``` +`timestamp`, `pid`, `tid`, `priority`, `tag`, `op`, and `uid` are all variables. This provides +some simple data structuring, however, it has a few limitations: +- CLP's heuristic parser cannot parse logs based on user-defined schema. For example, + `"Removed item"` above may be a variable, but CLP's heuristic parser cannot handle that. +- CLP's heuristic parser cannot parse complicated substrings, i.e., a substring described by the + regular expression `capture:((?a)*)|(((?c)|(?d)){0,10})`. +- The parsed variables are unnamed. For example, users cannot name the 7th variable to be `"uid"` in + the above example. + +Our project, [log-surgeon-rust][home-page], is designed to improve CLP's parsing features. It is a +safe and high-performant regular expression engine specialized for unstructured logs, allowing users +to extract named variables from raw text log messages efficiently according to user-defined schema. + +## Objective and Key Features +The objective of this project is to fill the gap explained in the motivation above in the current +Rust ecosystem. We shall deliver a high-performance and memory-safe log parsing library using Rust. +The project should consist of the core regex engine, the parser, and the user-oriented log parsing +interface. + +The core regex engine is designed for high-performance schema matching and variable extraction. +User-defined schemas will be described in regular expressions, and the underlying engine will parse +the schema regular expressions into abstract syntax trees (AST), convert ASTs into non-deterministic +finite automata ([NFA][wiki-nfa]), and merge all NFAs into one large deterministic finite automata +([DFA][wiki-dfa]). This single-DFA design will ensure the execution time is bounded by the length of +the input stream. If time allows, we will even implement [tagged DFA][wiki-tagged-dfa] to make +the schema more powerful. + +The parser has two components: +- The schema parser, which is an implementation of [LALR parser][wiki-lalr], parses user-input +schema into regex AST. +- The log parser, which operates similarly to a simple compiler, uses a lexer to process the input +text and emits tokens, and makes decisions based on emitted tokens using the core regex engine. + +The log parsing interface will provide user programmatic APIs to: +- Specify inputs (variable schemas) to configure the regex engine +- Feed input stream to the log parser using the configured regex engine +- Retrieve outputs (parsed log events structured according to the user schema) from the parser + +[Zhihao Lin][github-zhihao] will be working on the parser implementation. + +[Siwei (Louis) He][github-siwei] will be working on the core regex engine implementation. + +Both will be working on the log parsing interface. + +One will review the other's implementation through GitHub's Pull Request for the purpose of the +correctness and efficiency. + +## Tentative Plan and Status +1. **Louis** + +| Time | Tentative Schedule | Status | +|-----------------------|---------------------------------------------|-------------| +| Oct. 18th ~ Oct. 25th | Complete AST common structs for the project | Done | +| Oct. 25th ~ Nov. 8th | Complete NFA structs and research | On track | +| Nov. 1st ~ Nov. 8th | Implement AST to NFA translation | Not started | +| Nov. 8th ~ Nov. 15th | Implement AST to NFA translation | Not started | +| Nov. 15th ~ Nov. 22nd | Complete DFA structs and research | Not started | +| Nov. 22nd ~ Nov. 29th | Implement NFA to DFA translation | Not started | +| Nov. 29th ~ Dec. 6th | Stages integration and final reporting | Not started | + +2. **Zhihao** + +| Time | Tentative Schedule | Status | +|-----------------------|-------------------------------------------------------------|-------------| +| Nov. 1st ~ Nov. 15th | Implement LALR parser for schema parsing and AST generation | Not started | +| Nov. 15th ~ Nov. 29nd | Implement lexer for input stream processing | Not started | +| Nov. 29nd ~ Dec. 6th | Formalize log parsing APIs | Not started | + +[clp-paper]: https://www.usenix.org/system/files/osdi21-rodrigues.pdf +[clp-s-paper]: https://www.usenix.org/system/files/osdi24-wang-rui.pdf +[github-clp]: https://github.com/y-scope/clp +[github-siwei]: https://github.com/Louis-He +[github-zhihao]: https://github.com/LinZhihao-723 +[hadoop-logs]: https://zenodo.org/records/7114847 +[home-page]: https://github.com/Toplogic-Inc/log-surgeon-rust +[mongodb-logs]: https://zenodo.org/records/11075361 +[wiki-dfa]: https://en.wikipedia.org/wiki/Deterministic_finite_automaton +[wiki-lalr]: https://en.wikipedia.org/wiki/LALR_parser +[wiki-nfa]: https://en.wikipedia.org/wiki/Nondeterministic_finite_automaton +[wiki-tagged-dfa]: https://en.wikipedia.org/wiki/Tagged_Deterministic_Finite_Automaton diff --git a/docs/src/overall-arch-diagram.png b/docs/src/overall-arch-diagram.png new file mode 100755 index 0000000000000000000000000000000000000000..d7b445af205585acc72b127ef2b3328c1d889c37 GIT binary patch literal 193639 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 pJEH!MCjLHCbY{SVI5A@~3Q literal 0 HcmV?d00001 diff --git a/proposal.md b/proposal.md new file mode 100644 index 0000000..282ead1 --- /dev/null +++ b/proposal.md @@ -0,0 +1,145 @@ +# log-surgeon: A performant log parsing library +Project Link: [Homepage][home-page] + +## Team Members +- Student 1: Siwei (Louis) He, 1004220960 +- Student 2: Zhihao Lin, 1005071299 + +## Introduction + +`log-surgeon` is a library for high-performance parsing of unstructured text +logs implemented using Rust. + + +## Motivation +Today's large technology companies generate logs the magnitude of petabytes per day as a critical +source for runtime failure diagnostics and data analytics. In a real-world production environment, +logs can be split into two categories: unstructured logs and structured logs, where unstructured logs +usually consist of a timestamp and a raw text message (i.e.,[Hadoop logs][hadoop-logs]), and +structured logs are normally JSON records (i.e., [mongoDB logs][mongodb-logs]). [CLP][github-clp], +is a distributed system designed to compress, search, and analyze large-scale log data. It provides +solutions for both unstructured and structured logs, as discussed in its +[2021's OSDI paper][clp-paper] and [2024's OSDI paper][clp-s-paper]. + +CLP has been deployed in many large-scale production software systems in thousands of cloud servers +and commercial electric vehicles. Throughout the deployment experiences, an interesting issue has +been found. Consider the following log event: +```text +2022-10-10 12:30:02 1563 1827 I AppControl: Removed item: AppOpItem(Op code=1, UID=1000) +``` +This is an unstructured log event collected from the Android system on a mobile device. It can be +manually structured in the following way: +```JSON +{ + "timestamp": "2022-10-10 12:30:02", + "PID": 1563, + "TID": 1827, + "priority": "I", + "tag": "AppControl", + "record": { + "action": "Removed item", + "op_code": 1, + "UID": 1000 + } +} +``` +Intuitively, the structured version makes it easier to query relevant data fields. For example, if +an application wants to query `UID=1000`, it can take advantage of the tree-style key-value pair +structure that JSON format provides. Otherwise, it might need a complicated regular expression to +extract the number from the raw-text log message. Unfortunately, it is impossible to deprecate +unstructured logging infrastructures in any real-world software systems for the following reasons: +- Unstructured logs are more run-time-efficient: it does not introduce overhead of structuring data. +- Legacy issues: real-world software systems use countless software components; some + may not be compatible with structured logging infrastructure. + +Hence, the high-level motivation of our project has been formed: how to improve the analyzability of +unstructured logs to make it as usable as structured logs? The scope of this problem is vast, +and we will focus on one aspect: log parsing. CLP has introduced an innovative way of handling +unstructured logs. The basic idea behind is to find the static text and variables in a raw text log +message, where the static text is like a format string. For instance, the above log event can be +interpreted as the following: +```Python +print( + f"{timestamp}, {pid}, {tid}, {priority}, {tag}: Removed item: AppOpItem(Op code={op}, UID={uid})" +) +``` +`timestamp`, `pid`, `tid`, `priority`, `tag`, `op`, and `uid` are all variables. This provides +some simple data structuring, however, it has a few limitations: +- CLP's heuristic parser cannot parse logs based on user-defined schema. For example, + `"Removed item"` above may be a variable, but CLP's heuristic parser cannot handle that. +- CLP's heuristic parser cannot parse complicated substrings, i.e., a substring described by the + regular expression `capture:((?a)*)|(((?c)|(?d)){0,10})`. +- The parsed variables are unnamed. For example, users cannot name the 7th variable to be `"uid"` in + the above example. + +Our project, [log-surgeon-rust][home-page], is designed to improve CLP's parsing features. It is a +safe and high-performant regular expression engine specialized for unstructured logs, allowing users +to extract named variables from raw text log messages efficiently according to user-defined schema. + +## Objective and Key Features +The objective of this project is to fill the gap explained in the motivation above in the current +Rust ecosystem. We shall deliver a high-performance and memory-safe log parsing library using Rust. +The project should consist of the core regex engine, the parser, and the user-oriented log parsing +interface. + +The core regex engine is designed for high-performance schema matching and variable extraction. +User-defined schemas will be described in regular expressions, and the underlying engine will parse +the schema regular expressions into abstract syntax trees (AST), convert ASTs into non-deterministic +finite automata ([NFA][wiki-nfa]), and merge all NFAs into one large deterministic finite automata +([DFA][wiki-dfa]). This single-DFA design will ensure the execution time is bounded by the length of +the input stream. If time allows, we will even implement [tagged DFA][wiki-tagged-dfa] to make +the schema more powerful. + +The parser has two components: +- The schema parser, which is an implementation of [LALR parser][wiki-lalr], parses user-input +schema into regex AST. +- The log parser, which operates similarly to a simple compiler, uses a lexer to process the input +text and emits tokens, and makes decisions based on emitted tokens using the core regex engine. + +The log parsing interface will provide user programmatic APIs to: +- Specify inputs (variable schemas) to configure the regex engine +- Feed input stream to the log parser using the configured regex engine +- Retrieve outputs (parsed log events structured according to the user schema) from the parser + +[Zhihao Lin][github-zhihao] will be working on the parser implementation. + +[Siwei (Louis) He][github-siwei] will be working on the core regex engine implementation. + +Both will be working on the log parsing interface. + +One will review the other's implementation through GitHub's Pull Request for the purpose of the +correctness and efficiency. + +## Tentative Plan and Status +1. **Louis** + +| Time | Tentative Schedule | Status | +|-----------------------|---------------------------------------------|-------------| +| Oct. 18th ~ Oct. 25th | Complete AST common structs for the project | Done | +| Oct. 25th ~ Nov. 8th | Complete NFA structs and research | On track | +| Nov. 1st ~ Nov. 8th | Implement AST to NFA translation | Not started | +| Nov. 8th ~ Nov. 15th | Implement AST to NFA translation | Not started | +| Nov. 15th ~ Nov. 22nd | Complete DFA structs and research | Not started | +| Nov. 22nd ~ Nov. 29th | Implement NFA to DFA translation | Not started | +| Nov. 29th ~ Dec. 6th | Stages integration and final reporting | Not started | + +2. **Zhihao** + +| Time | Tentative Schedule | Status | +|-----------------------|-------------------------------------------------------------|-------------| +| Nov. 1st ~ Nov. 15th | Implement LALR parser for schema parsing and AST generation | Not started | +| Nov. 15th ~ Nov. 29nd | Implement lexer for input stream processing | Not started | +| Nov. 29nd ~ Dec. 6th | Formalize log parsing APIs | Not started | + +[clp-paper]: https://www.usenix.org/system/files/osdi21-rodrigues.pdf +[clp-s-paper]: https://www.usenix.org/system/files/osdi24-wang-rui.pdf +[github-clp]: https://github.com/y-scope/clp +[github-siwei]: https://github.com/Louis-He +[github-zhihao]: https://github.com/LinZhihao-723 +[hadoop-logs]: https://zenodo.org/records/7114847 +[home-page]: https://github.com/Toplogic-Inc/log-surgeon-rust +[mongodb-logs]: https://zenodo.org/records/11075361 +[wiki-dfa]: https://en.wikipedia.org/wiki/Deterministic_finite_automaton +[wiki-lalr]: https://en.wikipedia.org/wiki/LALR_parser +[wiki-nfa]: https://en.wikipedia.org/wiki/Nondeterministic_finite_automaton +[wiki-tagged-dfa]: https://en.wikipedia.org/wiki/Tagged_Deterministic_Finite_Automaton